Tool Planning: Cross-platform world interface (DLL)

critcodedtuna

Terrarian
This week I've started a new project that may make designing worlds much easier. Consider if you will: A pluggable core for world editors. Start with a single DLL, and use your favorite language and framework to build an editor or other useful application around it without needing to reinvent the wheel. Use on Windows, Linux, or OS X (see below). Interact with everything stored in the world file in a consistent manner.

Currently planned functions:
  • General: query supported version
  • World (file): load, save, new (empty), dispose, status
  • Tile: get all info for tile, get specific property, update property, compare tiles, clear tile
  • World (properties): get properties, get specific property, set property
  • NPC: add NPC, remove NPC, get info, set position, set home, rename NPC, get NPC count
  • Sign: get sign count, add sign, get sign contents, update sign contents, move sign, erase sign
  • Chest: get chest count, add chest, remove chest, copy inventory, update inventory item, delete inventory item, move chest
  • WorldGen: No planned actions, but considering future support for potentially useful stuff (trees, giant trees, ore generation, etc.) without blowing up the project scope
  • TargetDummy: Data is stored in the world, and should be interfaced. Functionality TBD.
  • Tally: Data is stored in the world, and should be interfaced. Functionality TBD.
The goal is to be light weight and capable, not all-encompassing. No tile or wall data is included, so those will need to be provided on the application side. An upside to this is that this could make it possible to build mod-friendly world editors as well. Likewise I don't have any initial plans for sprite support, so those will also be out of scope.

Current plans are that this will require .NET (Windows) or Mono (Linux and OS X) since it's in C#. There's a small chance this will also require XNA or Monogame since there are some data objects in play from those libraries.

As it stands now things are very rough, not even remotely usable (and doesn't even compile while I resolve references and pull out unnecessary code). I'd be interested in getting some feedback about possible vital features I might have missed, and if anyone would be interested in doing some proof of concept projects showing the capabilities. The above function list is just an initial draft from my notes, and is likely to change as I work on this. Source and binaries will be available once it's sufficiently functional and properly cleaned up, commented, and documented.
 
Last edited:
Back
Top Bottom