Tsunagari Tile Engine

From Tsunagari Tile Engine
Jump to: navigation, search

Tsunagari is a tiling game engine inspired by the cult classic game Yume Nikki. It is intended as an open source alternative to the popular proprietary RPGMaker game development suite that the original and most fangames were/are written on. The initial focus is support for all of the features of Yume Nikki, and beyond that it strives to become a fully-featured 2D game development suite. Tsunagari is written in C++, using the Gosu framework.

Tsunagari is a PariahSoft project. It is released under the MIT/Expat License.

Current Stage: Alpha

April2013

Contents

Features

Tsunagari will be a comprehensive game design suite for singleplayer 2D games. The engine will support several styles, such as roguelikes, and old console-style RPGs. Multiplayer support is planned for the second stable release. Tsunagari allows Python scripting for the event system, and for additional custom functionality. As a suite, Tsunagari aims to allow as much game variation as possible without direct modifications to the engine source code. Game design will require manual file editing during the Alpha and Beta phases, but a game editor suite will be shipped with the first major release.

Current features include:

  • Yume Nikki-like and roguelike movement modes.
  • Music and sound effects handling.
  • Tile and sprite animations.
  • Intelligent viewport tracking.
  • Support for infinite graphical and walkable layers.
  • Resource caching for nonexistent load times.
  • Command line options for fine-tuning.
  • Subpixel rendering.
  • Looping areas support.
  • NPCs.
  • Event scripting interface in Python.

Documentation

Tsunagari includes a Sphinx-based user's manual. You can build this from the current source. In addition, a frequently updated version of the user's manual is available online.

This documentation is incomplete and actively under construction.

Building

Tsunagari is regularly built on both Windows and Linux OSes. Mac OS X and other Unix-based OSes are theoretically supported, but have not been tested.

To build Tsunagari from source, please see Building.

Development Roadmap

These are development goals which must be reached for each planned release. Struck text shows implemented features. Underlined text shows partially implemented features. These goals are subject to change.

With the completion of Alpha Preview Release 5, Tsunagari will be capable of making a fully featured Yume Nikki fangame.

Alpha Preview Release 1 "Madotsuki"

  • A window is created.
  • XML parsing.
  • Keyboard input.
  • Persistent keyboard input support.
  • Client, sprite, world descriptors parsed.
  • TMX maps (area descriptors) parsed.
  • Tileset loading.
  • Tiles are drawn to the window.
  • Compressed game world packages.
  • A full map is drawn to the window.
  • The player can walk across the map.
  • Yume Nikki style centered player movement.
  • Roguelike movement option.
  • "nowalk" flag implemented.
  • Doors implemented.
  • Movement between areas.

Alpha Preview Release 2 "Shirotsuki"

  • Main and intro music.
  • Sound effects.
  • Sprite animations.
  • Tile animations.
  • Yume Nikki style smooth player movement.
  • Entity descriptor.
  • Command line options.
  • INI format for client.conf
  • Resource caching.

Alpha Preview Release 3 "Kurotsuki"

  • Resource cache expiry.
  • Subpixel rendering.
  • Looping areas.
  • Inter-area persistent music support.
  • Multiple tileset support.
  • Multiple tile layer support.
  • Entity-to-tile alignment for odd-sized entities.
  • Entity movement speed measured in tiles per second.
  • Arbitrary sized Tiled objects.
  • Speed up image loading.
  • Switch from libzip to PhysicsFS.
  • Decompress music on the fly.
  • Don't allow entities to violate map bounds.
  • Fix tileset transparency bug.

Alpha Preview Release 4 "Akatsuki"

Revision 1

  • Layered movement.
  • Viewport stops at map edges.
  • Allow animations with non-adjacent members.
  • Disallow diagonal movement in tile movement mode.
  • Improve keyboard input handling for better movement processing.
  • Support for virtual resolutions.
  • Remove stutter at tile edges when walking in a line.

Revision 2

  • Event scripting with Python.
    • Cache scripts.
    • Scripts can modify any properties of a tile.
    • Whitelist allowed external modules for security.
    • Python file handling function blacklist needs variable argument count handling.
    • Allow importing scripts inside a world package.
    • Rewrite tileset parsing to allow grabbing tile types by position in tileset.
    • Areas have onLoad and onUpdate scripts.
    • Worlds have onLoad and onAreaLoad scripts.
    • Entities have onTileEnter and onTileLeave scripts.
    • Tiles have onUse, onEnter, and onLeave scripts.
    • Sound playing.
    • Implement the Timer.
    • Python-accessible base data archive for python event scripting extension modules.
    • Triggers can take function names in addition to file names.
    • vectors of scripts => scripts
    • entity.on_delete and entity.delete()
  • Non-player entities.
  • Fix segfault when NPC exits map.
  • Mapbounds are always unwalkable by NPCs unless "mapbounds" exempt set.
  • Better handling of map boundaries.
  • Enforce unwalkability of tiles.
  • Exits are unwalkable to NPCs unless entity.exempt.exit set.
  • Entities collisions.
  • Use button.
  • Overlays.
  • Allow tile animation members out of order.
  • Area variable to modify area colors.
  • Black space around area borders is above player.
  • Allow lazy exit options: "exit:{up|down|left|right}".
  • Allow wide exit option: "areas/somearea.tmx,4{+},3{+},0".
  • Convert World and Resourcer to singletons.
  • New world.conf XML structure with section blocks.
  • Roguelike movement options in world.conf.
  • Better layermod with lazy options.
  • Move client.ini handling out of main.cpp.
  • Call init.py by archive.
  • on_tick() and on_turn()
    • on_turn is called for everything when in TURN. on_tick is called for Area and Overlay in all modes. on_tick is called for Characters in TILE or NOTILE.
  • Turn-based NPC movement in TURN mode.
  • Allow init.py to be optional.
  • Fix Windows / Visual C++ support. (again)

Revision 3

  • Errors create alert dialogs on Windows.
    • The game is automatically paused when a dialog appears.
  • Console log timestamps.
  • Python scripting "print" replaced with "log()"
  • Escape key pauses the game.
    • Disable tick() and turn() calls.
    • Pause Timer class.
    • Pause Timeout class.
    • Disable unrelated input.
    • Semi-transparent black color overlay.
    • Stop music.
    • Text-image overlay.
    • Shift-escape closes engine.
    • Input state tracking across pauses.
  • Initial player phase in world.conf.
  • Option to halt execution on python errors.
  • Engine will use built-in defaults if client.ini and command line options missing.

Revision 4

  • Bug: Segfault when some required phases missing from player descriptor.
  • Update NBCL project to handle "stray arguments" and replace CommandLineOptions with NBCL.
  • Add "stance" phase for entity descriptors which catches all undefined phases.
  • Music preserved across areas by default.
  • Change the way intro_music and main_music map properties are handled to allow more control.
  • Support ranged parsing of sprite and tile sheet animation members.
  • Option to halt execution on all errors.
  • Ability to limit the number of times a tile or sprite animation will cycle.
  • Support sub-rectangles of images.
    • Support automatic z-offset incrementing for tall entities. (Fix hat-stomping.)
  • Load DTDs from inside base data zip.
  • Fully comply with Creative Commons license for third party content.

Revision 5

  • Implement the Action Queue. (note)
  • Support Tiled TSX tileset files.
  • Settable sound effect and music volumes in client.ini.
  • Properly handle entity obscuration on 1:left 2:down.
  • Critical: Python: Importing a module more than once destroys the module.
  • Event scripting namespaces.
  • Support PyModule.
  • new_area() python constructor.
  • new_player() python constructor.
  • new_tileset() python constructor.
  • Make "area", "coords", and "player" optional in world.conf init section.
  • Areas should not take author strings.
  • Finish event scripting API. (note)
  • Process all "FIXME", "XXX", and "TODO" notes in engine source.

Alpha Preview Release 4-5 Interim (Gosu -> SDL Transition)

Note: This is a major engine restructuring, but not a release. It does not add any features, or make any changes visible to the end user.

  • Check for depreciated header dependencies.
  • Remove Doxygen code comments and unify comment styles.
  • Dissolve resourcer's resource handling functions into their relevant classes.
  • Use the interface-implementation model to separate Tsunagari from its dependencies.
  • Switch from Boost.Program_options to Boost.PropertyTree for INI parsing (for consistency).
  • Switch backend from Gosu to SDL.
    • Audio : LibOgg + LibVorbis + OpenAL
    • Image : LibPNG + LibJPEG
  • Confirm that Tsunagari's dependency tree is devoid of copyleft-tainted dependencies.

Alpha Preview Release 5 "Kikiyama"

Revision 1

  • Basic user interface with Guichan.
    • Bind Guichan to Gosu's raw OpenGL context.
    • GUI control in either Python or XML.
  • Integrate error dialogs with the UI.
  • Menu system.
  • Event scripting keyboard input handling.
    • Keybind handling.
    • Keyboard input event handling.
    • Custom keybinds and input events.
  • NPC Interaction.
  • Dialogue.
  • UTF-8 multi-locale support.
  • Support for "immutables" in base data zip.
  • Properly unwind the stack on halt using exceptions.
  • Get rid of Log domains and dump call stack instead.
  • Don't include debug error messages option in non-debug builds.
  • Advanced cache control in client.ini.

Revision 2

  • Ability to edit client.ini through the UI.
  • Garbage collect script-referenced objects.
    • Paul: Okay, one possible idea would be to build a smart pointer that we marshall all Python objects through. We ref count it, and that keeps track of whether all Python objects are deleted. I *don't* want to delete things that Python is still accessing.
  • Areas are deleted when they expire in the cache.
    • Ability to delete areas. (preserved state deletion and dropped state deletion)
    • Ability to cache an area's state (indefinitely).
  • Define a folder in client.ini that event scripts are allowed write access to. (save folder)
  • Ability to save and load variables on disk with event scripting.
  • Game saves.
    • Ability to save and load the state of the engine on disk.
  • Per-world user configuration file.
  • Items.
  • Inventory.

Revision 3

  • Built-in graphical transitions and effects.
  • Viewport scripting.
    • Position control.
    • Width and height control.
    • Zoom control.
  • Monsters.
  • Combat.
  • Pathfinding. (Investigate A* algorithm.)
  • In-game python developer console integrated with the UI.
  • Updated developer tutorials.
  • Final alpha bugcheck and unit tests.

1.X.X Release Candidates (Beta)

  • Comprehensive engine unit testing.
  • Full code inspection, clean-up and optimization.
  • Extensive commenting and inline documentation.

Stable Release 1.0.X "Tsunagari Complete"

  • Lobby program for browsing and downloading third-party game worlds, using WebKit.
  • Extensive bugchecking, feature review, and community feedback completed.
  • Official Tsunagari Tile Engine Developer's Manual.
  • Translate the documentation and editor tools to multiple languages.
  • Everything works.

Stable Release 1.1.X

  • Zelda-like movement option.
    • Precision clipping, collisions, and hitboxes.
  • Projectiles.
  • Set Player to arbitrary entity.

Stable Release 1.2.X

  • Platformer-type movement option.
    • Simple physics programming in scripting.
    • Gravity.

Stable Release 1.3.X

  • Click-based movement option. (RTS)
  • Event scripting mouse input handling.
    • Mouse bind handling.
    • Mouse input event handling.
    • Custom mouse bindings and input events.
  • Define mouse bindings in client.ini.

Stable Release 1.4.X

  • GLSL shader support.

Stable Release 2.X.X "Tsunagari Complete - True Ending Edition"

  • Massive engine code refactorization and modularization.
  • Server/client engine redesign.
  • Seamless local server/client for singleplayer.
  • Multiplayer game world support.
  • Public and private player chat.
  • Gamemaster functions.
  • Permissions control.
  • Player action authentication and cheat prevention.
  • Server-side data occlusion.
  • SSL support.
  • Automatic server-mediated game world data updating.
  • Automatic Engine patcher/updater program.
  • Client-side data caching.
  • Server threading and configurable thread-count.
  • Server administration console.

Editor Suite

  • Customized Tiled Map Editor.
  • Custom Area descriptor.
  • Descriptor management program.
  • Python common event library.

Web Client

  • Stable Release 2.0 finished.
  • WebSocket support.
  • HTML5+Javascript thin client.

Misc. TODO

  • TMX Zlib data support.
  • Tiled modifications.
    • Custom area format plugin.
    • Remove unnecessary features.
  • Stable project files / build system for Visual C++.
  • Verify copyright dates.
  • User's Manual

Known Bugs

  • Bug (Windows): Screen doesn't always darken when pausing for error alert dialog.

Downloads

Download links for official Tsunagari releases will be posted here when they become available. As always, the most recent development code can be downloaded from the GIT repository.

Alpha Preview Release 4 "Akatsuki" Revision 4

Old Releases

Alpha Preview Release 1 "Madotsuki" Revision 4

Alpha Preview Release 1 "Madotsuki" Revision 5

Alpha Preview Release 1 "Madotsuki" Revision 6

Alpha Preview Release 2 "Shirotsuki" Revision 1

Alpha Preview Release 3 "Kurotsuki" Revision 1

Alpha Preview Release 4 "Akatsuki" Revision 1

Alpha Preview Release 4 "Akatsuki" Revision 2

Alpha Preview Release 4 "Akatsuki" Revision 3

External Links

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox