⚙ Swift Mazes - News
- prefabs can now include other prefabs, and also inhibit other prefabs,
this makes it possible to have a much more modular prefab set
- prefabs can now specify their size in blocks (default:
"1 1 1")
- accelerate and decelerate times for movers can now be seperate for
open and close movements, allowing more complex movements.
- the triggering action can now happen at the start, end or not at all
of close or open actions.
- Split [Events] into [Actions] and [Events], added per-location events
- Add a manual with partly autogenerated sections from default configs,
and entity definitions including spawnargs
- blocks overlapping from locations (the
"connector blocks") and from alias
levels are now merged, so double prefabs at connections do not lead to
double worldspawn brushes nor entities.
- The location fitting code now can deal complex location layouts like
circles (A → B → C → A), and disconnected sets (world A → B and C → D).
- The connection map is used to add visportals on strategic locations like
bends or T-shaped crossings or just plain crossings.
- a .darkradiant file is generated matching the .map file, with each location
being it its own layer
- The inventory section takes now item alias names like "All = Compass"
- The objective text(s) for finding secret rooms are now more varied and get
updated when secret rooms are discovered
- Teleporters now work. They teleport to a fixed block position, but can add
a fixed and a random angle offset (so they f.i. turn the player around by
85° clockwise, then add further 0..10 degrees)
- ambient_light_dynamic and ambient_light_dynamic_cap settings make it
possible to override these values per location
- show the name of the location when the player crosses a boundary
- Move the I18N code to a module
- Support for v1.08 was removed, Swift now requires at least TDM 2.00. This
leads to less code and more performance during map start.
- Triggers and traps are now directly linked by scripting code, reducing the
count of entity per trap or teleport by one
- Make the center point an integer, to avoid centering the map on 0.5 units
- I18N support: [Strings LANGUAGE] sections are now parsed, the strings
are then written into strings/fm/english.lang etc. files.
"resets" to links (used to reset counting sequences, f.i.)
"on press" to links, so plates can make things happen as soon as you
step on them
- the base routines know now to display HUD messages
- there is now a general event manager, that loops through defined areas
for events and checks them against the current player position and
difficulty level, and triggers them when appropriate. This can display
messages, play sounds, count secret areas and so on.
- Secret areas can now be set per difficulty level (only on easy, f.i.).
They also create different objectives per difficulty level and depending
on how many secrets there are.
- player start points can now be set per difficulty level, and you can
have more than one, at map start one of the points on the current
difficulty and chance is choosen at random.
- Multiple links with the same source=>target symbol are possible
- Ignored symbols in alias levels still advance the column, so the maps line
"delayed by 0.8 seconds" (non-integer delays) work now properly
- [Inventory] section can specify different amounts of items in different
difficulty levels, these are added at map start
- Teture alignment is finally preserved when moving brushfaces
- Added a second, very small demo map (smdemo) with the nec.
prefabs to generate it from SVN.
- Secret areas are supported
- Locations and levels can now have a description and comment
- Locations can have
"ignore" (and are then ignored)
- Levels can have an individual offset
- Levels can be declared as
"alias level" for another level,
and thus get their offset automatically set so that all the
level content appears in the same space as the aliased level
- add support for random calls: every entity can specify a script
function and a chance this function is called after spawn. This
allows for a generic way to
"adjust" entities after spawn, f.i.
rotating them randomly, even w/o support from the SDK.
- Links can have an optional
"delayed by X seconds", which makes
the triggered action delayed by so many seconds.
"once" on links now only disables this action after triggering it,
the entity itself stays operatable unless all links from this entity
"once" set. Also buttons now correctly pop back before disabling
themselves, allowing their actions to be triggered exactly once.
- Added more puzzles and in a more logical way, plus a new floor
grate (which is see-through) and randomly rotates itself by 90°
- Connections between entities (button <=> door etc.) are now
generated via spawnarg directly in the map file, instead of
set via scripting from main()
- Some periodic script functions are only called when the
- The assets (scripts etc.) and code (.pm and .pl files) have been
separated from each other.
Bugfixes and tweaks:
- support ] and [ as map symbols via %5d and %5b
- the functionality of the random_remove spawnarg is emulated under v1.08
- Prefabs can now have overlays. This is a directory per location, which
overrides prefabs, so each location can look different while using the
- Each prefab can have a percentage associated with it, every time it would
be included this will be used to skip the prefab sometime. Every
regenerated map is then different.
- The parser now supports #include
"filename", so text can be re-used
- Each location can have an offset (in units) to shift it around. This allows
"break" the level flow and generate
"half a floor up" areas etc.
- Entire locations (or only specific prefabs in them) can now be reskinned,
where the replacement texture is selectively switched only on worldspawn,
or func_statics/patches. (Skinning of entities will be done via spawnargs
- default config values get set properly, and colors and 3D vectors are more
strictly checked (reject invalid colors like
"2 2 2")
- base_map defaults to ""
- Per-location fog works now, correctly fading from location to location
- player_start is moved correctly if the location it is in was moved
- Tweak the player lantern light, using an even softer fall-off
- the ambient_world light is now relocated to the block closest to the
center and the size adjusted so it covers the whole map
- the entire map is now recentered around the map_offset value from the config
- levers/doors/buttons now respect the
"once" keyword on links. Currently
a lever only works
"once" if any of the links is marked as once. This
should be changed so that the lever only gets
"stuck" if all links are
once, otherwise it is operating always, but ignores every
after the first toggle.
- support other spawnargs that refer to entities (rewrite their targetname):
frob_peer, frob_master, used_by, target_on_unlock, entity1, bind etc.
- Implement debug prints (remove prints depending on debug level)
- make doors/levers/buttons more object oriented
- optimize (round) face equations of func_statics, too
- Support the virtual prefab
"air" - it creates accessible space but includes
no prefab on its own. Currently not used, but can be used later fo large
rooms spanning multiple floor level with the inner blocks being considered
part of the level space.
- Support prefab offsets, so prefabs can be exported w/o moving them to 0,0,0
- Fix connects if we have more than two locations
- Support one location having more than one connection to other locations.
- add a description for each config (global, per location) and use it
to check the values and set default values
- fade the player light and player light radius from location to location
- add a fog light to the player, and fade the fog color and density from
location to location
- shorten script code unless debug is set
- Only include script files that are actually used, tracking dependencies
- put the script includes into script/tdm_custom_scripts.script instead
of the main map script, that makes savegames work
- add the abilty to have different locations, including location_separator
by parsing multiple locations and then glueing them together for the
final map. This also solves the problem of running out of symbols for
links - link symbols are now only valid inside one location.
- Fix moving of vertices of patches
- Fix mission not loading due to startingmap containing "\n"
- Add a stub for adding xdata and enter some dummy text into it
to make the briefing work
- Support adding spawnargs to all entities in one prefab
- Fix target replacement spawnargs not getting quoted
- Make the pressure plate work (weight is not yet considered)
- Add prefab-prefixes
"h" (easy, medium, hard) to
support different difficulty levels
"_center" support for
- Add support for operate/close/open to sync levers and plates
- Add a new player lantern with a better light fall-off
- fix link parsing to actually work
- fix target spawnargs in prefabs to point to the new, unique name
that we generate for any entity (to enforce unique names in a map)
This makes links between entities in one prefab work.
- implement some links (
by adding script snippets to construct links between targets
of different prefabs (use a symbol map to find the newly renamed
- fix parsing of symbol map (avoid
". " to redefine
" ", also catch
redefines of symbols as errors)
- make end-of-level objective work w/o requiring a prefab
- make links from one entity to multiple others work
- add script objects for levers and doors (allowing operating only
once, and different speeds for opening/closing a door)
- fix moving brush planes (so we can create a self-sealing level)
- fix splitting entities into worldspawn, and entity itself
- fix generation of func_statics, triggers etc (need
- generate startingmap.txt
- make dmapping more robust: remove .proc, write currentfm.txt, and check
afterwards that .proc exists
- generate website diary from DIARY via template
- add the ability to package custom asset files
- add a small ambient light local to the player
(custom light texture, custom light falloff, small script to bind
it to the player, cfg settings
- ambient_light can be set in the project config
- stub support for teleports (WIP)
- leaks during dmap are detected and abort the packaging process
- add support for map script (skipped if there is no script code)
- Added Games::Swift::Map, which builds the map from the prefabs and entities,
this includes now in addition to the player_start location_settings,
ambient_world, difficulty_settings (WIP) and objectives support (WIP).
- added support for patches in prefabs (partial, needs merging with worldspawn entity)
- support outerwall definitions (placed next to wall)
- support prefabs names with direction in them
- parse %20 in charset definitions
2012-08-13 0.01 Initial release
- rewrote proof-of-concept as object-oriented interface
- support for projects
- support for arbitrary symbol map
- multilevel parsing
- prefabs with models or entities (no patches or brushes yet)
- auto-dmap with autocommands.cfg (via TDM)
- successfully package a PK4 from the generated map