Game building tools (master ticket) #2316
Labels
ags3
related to ags3 (version with full backward compatibility)
ags 4
related to the ags4 development
context: game building
related to compiling the game from input assets
context: project
related to the project and its organization
what: tools
Milestone
This is a master ticket for tasks related to decoupling game compilation from the Editor. The final goal is to have a minimal set of standalone tools enough for compiling a game data package from the game project sources.
The previous ticket on this topic: #872, it contains a discussion and records first steps in this direction.
The general consensus was to write standalone command-line programs in C++, as that's something that may be compiled and run almost everywhere without big dependencies, and may reuse parts of the existing engine's code.
There have been a number of tools created since (see Tools dir in our repo), pretty much enough for compiling the game scripts, but not covering all required tasks for creating game data. Several tools more have to be done, and some of the existing ones may need adjustments.
Please note that this ticket is dedicated to writing tools, not replacing a build process in the Editor. That should be a separate task. In theory, replacement may be done in steps too, so long as that is convenient; but that's a topic for another discussion.
All the sub-tasks for this goal are assigned to a "Minimal standalone tool set" milestone.
There's also a github "project" created, as an experiment for tracking the related tasks:
https://github.com/adventuregamestudio/ags/projects/1
A wiki page I wrote, with a table of all the build steps, input and output data, which may help understanding the building process:
https://github.com/adventuregamestudio/ags/wiki/AGS-Game-Build-process-(3.5.*)
Above explains ags3 workflow, ags4 may have certain changes, primarily due to change in room format.
Following are lists of required tasks, separated into categories.
Priority tools (required for both ags3 and ags4)
These are must have for building a game from a source.
Note that such tool is also required if making a 32-bit game build in a 64-bit editor, or vice-versa, because plugins cannot be loaded by editor program of different bitness.
Secondary tools
These are tools that may be skipped when just building the game from "full" project state, but they are still required in order to get the project into this "full" state.
Note that for this tool we need a image loading library in C++, as source files may come in various formats (BMP and PNG at minimum, but ideally everything that AGS Editor supported).
Tools specific for ags4
Also note that since 3.6.0 we do not have to package compiled room scripts inside the room.crm, and may place them as separate assets insides (roomN.o). I suggest to use this option, as that will simplify the room compiling tool.
Above lists may be amended if more tasks are required.
Auxiliary tasks
There's an issue of extra dependencies of game structs declared in Common dir. These structs, and their serialization functions presumably should be reused by the tools in order to avoid code duplication. But there's a number of things these structs are connected to, which ideally should not be linked in tools.
First of all, this is Bitmap class, that is used for drawing, and which brings a large part of Allegro graphics library. There are two ways of dealing with this (that I see):
Then, some classes, such as GUIs, have methods that are meant for runtime: drawing and update. These will be useless in tools, and again bring more dependencies.
Possibly, we could have structs containing only GUI and GUI control's serialized fields, as suggested in this draft on engine refactor:
https://github.com/adventuregamestudio/ags/wiki/AGS-4-Draft:-major-engine-refactor#game-data-classes
For related problems see also: #1833, #1834, #2058.
The text was updated successfully, but these errors were encountered: