Coder Social home page Coder Social logo

yknytt's Introduction

YKnytt

image

An open source implementation of Knytt Stories in C# using Godot Engine

Download YKnytt v0.6.4 beta for Android

Download YKnytt v0.6.4 beta for Windows

Download YKnytt v0.6.4 beta for Linux

Web version: play YKnytt v0.6.1 on itch.io

Screenshots

image

image

image

image

image

Reporting a broken level

If you find a bug in a level, just press "complain" on a level info screen. Your latest save will be sent to the server. There is no need to report it in issues, unless it requires some explanation. Results may appear here.

Building

Requires Godot 3.6.beta4.mono and .NET Framework 4.8 Developer Pack for Windows (or mono-devel for Linux)

Export settings

To properly export, knytt/worlds/* must be included in the export filters

To build a proper Android APK, activate the "Internet" permission.

Playing

You can download additional levels from the built-in level downloader (if our server is running).

Or you can place packed (.knytt.bin) or unpacked levels in worlds directory.

That directory must be next to the binary file (or in the project root).

yknytt's People

Contributors

akien-mga avatar up-left avatar youkaicountry avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

yknytt's Issues

Advanced physics generation

Since Knytt Stories has per-pixel collisions, this should be simulated with the Godot physics engine.
A pixel wrapping algorithm may work well, so try implementing one, or invoking Godot's built-in algorithm:

godotengine/godot#31323

Discover asset overrides

Finish implementing asset override discovery in GKnyttWorld. Currently tilesets are implemented, so finish:

  • Ambiance
  • Gradients
  • Music

Objects & custom objects are a different beast altogether, and will require some research and new infrastructure.

Create game scene

There should be a new scene which contains a KnyttWorld, as well as the camera and other game logic scenes

Implement save slot buttons

If there is a save present, show two more buttons; "Load Game" and "Erase". Erase shows a red confirm button.

"Load" Loads that save and starts the game.
"Confirm" erases and closes the buttons.

"Start New Game" Loads the "Default Save" and starts the story scene.

Add mode to DataStore

Remove the "view" boolean from world.
Potential modes:

  • Debug Mode
  • Edit Mode
  • Play Mode
  • View Mode

Implement Story scene

This shows the story boards before starting a new game, and after finishing a game.

Adjust resolution

Adjust the game resolution and camera to center it on the current area

Move constants

Constants are sort of all over the place in a weird way. Move them all somewhere (probably in the backend)

Ambiance tracks crossfade

Right now it's all set up properly for music, but ambiance need to crossfade when changing, over roughly .75 seconds.

Object bundle cache

Add a cache for object bundles. This one should be 64 or perhaps even 128 large.

Area paging policy

There should be some logic for what areas to have paged in. This logic should also be replaceable, since playing, editing, and viewing might want to show different things.

Area transition

There should be transition code to change the current area.
This should handle loading the area if needed, moving the camera, changing ambiance, etc.

Tile 0 should be empty

It should not be created no matter what is there on the sprite sheet.
Causes problems in certain games, including A Strange Dream; see (1005, 998)

Area pausing

Areas should be able to become inactive (ie objects are all paused)

Add multiscene handling

Areas should be spawned in the Godot scene according to their world position.
GKnyttWorld should track loaded scenes (in a dictionary keyed by position?)

Area sub node

Areas should be spawned in a sub-node or the world, rather than as a direct child.

Refactor world / area

Clean up the World / Area references:

  • Replace all KnyttWorld references with KnyttWorld
  • Replace all KnyttArea to KnyttArea
  • Change names of all KnyttWorld to KWorld
  • Change names of all GDKnyttWorld to GDWorld
  • Change names of all KnyttArea to KArea
  • Change names of all GDKnyttArea to GDArea

Basic physics generation

Simple rect shaped collision polygons should be generated for each non-empty tile in a tileset.
Only layer 3 should have collisions enabled, however.

Asset Caching

Use YKnyttLib caching for:

  • TileSets
  • Ambiance
  • Music
  • Gradients

Create a test world

Create a Knytt Stories world to research and exercise various features of the engine

Repeated sections in ini causes exception

Fubaka - The Column is an example of this. Figure out how Knytt handles it, and either modify the ini library or preprocess the input.

It looks like the ini parser being used does potentially have some configuration settings to handle this.
In IniParserConfiguration.cs:

IniParserConfiguration(IniParserConfiguration ori)
{
    AllowKeysWithoutSection = ori.AllowKeysWithoutSection;
    DuplicatePropertiesBehaviour = ori.DuplicatePropertiesBehaviour;
    ConcatenateDuplicatePropertiesString = ori.ConcatenateDuplicatePropertiesString;
    AllowDuplicateSections = ori.AllowDuplicateSections;
    ThrowExceptionsOnError = ori.ThrowExceptionsOnError;
    SkipInvalidLines = ori.SkipInvalidLines;
    TrimSections = ori.TrimSections;
    TrimProperties = ori.TrimProperties;
}

Implement multi world directory

Should be able to look in multiple directories for worlds. Perhaps an internal directory, "user://Worlds", and "./Worlds".

Area reset

Area should be able to reset itself. This would nuke the object layers and rebuild them.

Accept game from command-line

The user should be able to pass in a world directory path via command-line, rather than hard coding in the default game.

Scene Active

Set a scene active when moved into. Reset and spawn objects.
Pause all objects from areas moved out of.

Implement async area loading

Have areas load asynchronously when paged in.
There area directly being moved to should load in serial, but all others should load in different threads.

Map view mode

Map view mode should allow the user to scroll around in different ways. Full zooming / panning would eventually be ideal.
For now simply accepting up, down, left, right and jumping to that area would be sufficient.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.