- Support for GL renderer backend. (#219)
- Initial support for Web Assembly (WASM). (#219)
- Initial support for network play in WASM. (#209)
- Transport protocol for network play is switched to web sockets. (#209)
- Support to join session based network games. (#198)
- Rudimentary session joining UI. (#200)
- Session server generates session codes for session hosters. (#201)
- Rudimentary session hosting UI. (#202)
- Rudimentary session lobby UI. (#204)
- Send network input between session devices. (#199)
- Will application is able to host / join new sessions without being restarted. (#206)
- Application startup parameters are read from
will.toml
. (#207)
- Assets are sorted based on their asset slug. (#205)
- Menu items are navigated with both up/left and down/right controller input. (#207)
- Relative paths to textures now load on Windows. (#205)
- Character selection UI displays a grid of available characters. (#190)
- Map selection UI displays a grid of available characters. (#176)
- Control buttons are displayed on UIs. (#191)
- Support
tint
andscale
inSpriteFrame
s. (#185) - UI for control settings displays input configuration buttons. (#178)
- Use
AssetWorld
to store item components. (#186) - Multiple entities spawned per asset via
ItemId
. (#186) - Support for sending events via
input_reactions
. (#180) - Support for reacting to device button input in addition to control input. (#180)
- Character selection UI defined through configuration. (#177)
- Character selection UI displays highlighted character. (#177)
- Breaking:
transitions
renamed toinput_reactions
. (#180) - Breaking:
requirements
renamed torequirement
. (#180)
ObjectEntityAugmenter
replaced by byItemComponent::augment
. (#186)
- Delete entities that are spawned out of bounds. (#184)
- Tests for asset part loading systems. (#172)
- Each state may specify background images. (#175)
- Game mode selection menu items may be rendered with sprites. (#175)
- Controller configuration takes in player names. (#179)
- Display player name that won when game ends. (#179)
- Moved all module tests into
workspace_tests
crate. (#171) - Don't build unnecessary doctest binaries. (#174)
- Default
Wait
value for all sequences is now2
ticks (previously0
). (#175) - Map layers now need to be given names. (#175)
GamePlayBundle
systems are moved to the main dispatcher. (#175)- Added delay after game ends before reading input for returning to menu. (#179)
- Support arbitrary sequence names. (#155)
- Support acceleration in configuration. (#125, #160)
- Use events to detect and reposition
MapBounded
entities. (#142) - Delete out of bounds entities. (#142)
- During game play, camera is readjusted when window is resized. (#161)
- Camera moves to focus on tracked entities. (#162)
- Camera is offset to direction tracked entities are facing. (#162)
- Support playing sound from object configuration. (#163)
Hit
interactions inflictAcceleration
on hit objects. (#165)- Support spawning any object type, on any object sequence. (#158)
- Breaking: Configuration files now use YAML instead of TOML. (#154)
- Breaking: Position and velocity configuration use named axes. (#165)
- Rewrote asset loading and internal asset representation. (#167)
- Switching map selection actually switches the map. (#166)
- Going back from map selection does not return to main menu. (#166)
- Default control input transitions for each sequence. (#115)
- Default control input transitions for characters. (#115)
fallback
control transitions. (#149)input_dir_x
control transition requirement. (#149)input_dir_z
control transition requirement. (#149)charge_limit
specifies the max charge points a character may store. (#148)charge_delay
specifies the delay between charge increments while holdingAttack
. (#148)charge_use_mode
specifies the method to subtract charge points. (#148)charge_retention_mode
specifies how charge points are retained or reset. (#148)
- Sequence component updates are done in parallel. (#147)
- Control input axis events are done on input events instead of state delta detection. (#113)
spawn_play
flakey test segmentation fault. (#145)
- Load energy assets. (#126)
- Spawn energy assets when a frame begins. (#126)
- Independent
Team
s. (#140) - Sequence
next
value can be one of"none"
,"repeat"
,"delete"
, or a sequence ID. (#140)
- Render using Vulkan. (#131, #136)
- Split
FrameComponentUpdateSystem
so individual updates can run in parallel. (#111) FrameFreezeClock
s now tick when a sequence is ended. (#140)
- Game mode selection UI events no longer enter an event channel loop. (#134)
- Removed dependency cycles in crates. (#135)
- Missing system dependency for
CharacterControlTransitions
. (#139)
- Objects have a 3 tick delay upon
Hit
interactions. (#103) hit_limit
determines the number of objects that the hitter can hit. (#103)repeat_delay
specifies number of ticks that must pass before an object can behit
by the same hitter. (#103)- Control input
transitions
can be specified per frame. (#96) - Added
--frame_rate
argument to control application frame rate. (#117) - Added
stand_attack_1
sequence. (#117) - Added
jump_attack
sequence. (#117) - Added
dash_attack
sequence. (#117) - Added
dazed
sequence. (#118) StunPoints
status attribute onCharacters
. (#118)- Characters switch to different sequences depending on their accumulated
StunPoints
. (#118) - Players can now return to game mode selection from the character selection UI. (#110)
- Players can now return to character mode selection from the map selection UI. (#120)
- Play a sound when a character hits another. (#124)
- Play sounds in game mode selection UI. (#127)
- Play sounds in character selection UI. (#127)
- Play sounds in map selection UI. (#127)
Attack
andJump
no longer have hardcoded hold transitions. (#96)- Breaking:
hp_damage
is specified as part ofhit
interaction kind. (#103) - Breaking:
sp_damage
is specified as part ofhit
interaction kind. (#103) - Breaking:
physical
interaction kind is renamed tohit
. (#103) - Breaking:
Interaction
kind determines fields applicable to the interaction. (#103) - Breaking:
stand_attack
is renamed tostand_attack_0
. (#117) - Default
hit_repeat
delay is increased from 3 ticks to to 10 ticks. (#117) - Improved clarity of character selection UI. (#110)
- Improved clarity of map selection UI. (#120)
- Use control input for game mode selection UI. (#122)
jump
anddash
sequence velocities and gravity have been approximately halved. (#128)- Freeze character position when
FrameFreezeClock
is ongoing. (#128)
Walk
sequence stays on first frame when an action button is held. (#114)- Character sprites now correctly render at their entity position. (#129)
- Added
dodge
sequence. (#102) - Added
dash_forward
anddash_back
sequences. (#102) - Added basic health bars to characters. (#104)
#[numeric_newtype]
proc macro attribute to derive numeric traits. (#98)stdio_command state_barrier <state_id>
blocks stdin until the given state is running. (#105)
- Use logic clock based system to update object components each tick. (#92)
- Use logic clock based system to update map components each tick. (#99)
- Breaking: In objects and maps, sprites are now specified using
sprite = { sheet = 0, index = 0 }
. (#92) - Stdin command input now needs a comment line to indicate "no input this frame". (#105)
- Map layers are now positioned correctly. (#99)
- Game does not go past loading when asset loading has error. (#101)
- Characters and objects are now instantiated using prefabs. (#56)
KeyboardEscapeIntercept
is now tested properly without simulating input. (#15)- Load game objects and maps asynchronously. (#94)
- Object animations are updated in a dedicated system. (#81)
- Components are now more granular. (#83)
- Components are augmented onto existing entities instead of added when built. (#56)
- Naive collision detection and effects. (#69)
- Flinch and foward falling sequences. (#70)
- Game win condition when there is one player remaining. (#71)
- Mirrored collision detection. (#82)
- Map selection UI that allows users to select maps. (#66)
- Character selection controllable via stdin. (#67)
- Map selection controllable via stdin. (#67)
- Game mode selection controllable via stdin. (#67)
- Configuration types for hit (
interactions
) and hurt (body
) boxes. (#68)
- Use
AssetSlug
(namespace/name) to reference assets. (#57) - Updated Amethyst to make use of sprite batching and custom events. (#63)
- Allow maps without layers. (#72)
- Implemented maps with bounds and layers. (#47, #48)
- Updated sprites configuration to take in
u32
instead off32
for sprite dimensions. (#47) - Prevent characters from moving outside map margins. (#48)
- Use
typename
to deriveSystem
names. (#52) - Implemented rudimentary character selection menu. (#51)
- Sprite offsets are optional when declaring sprite sheets. (#47)
- Sprites are rendered using a dedicated sprite pass. (#55)
stop_run
sequence has been renamed torun_stop
. (#49)- Use state specific dispatcher for
GamePlayState
. (#50)
- Map layers with different sprite dimensions are now rendered with the right layout data. (#55)
- Characters switch to the
jump_descend
sequence when airborne duringwalk
,run
, andrun_stop
. (#49)
- Implemented jump.
- Implemented double tap to run.
- Mirror sprites when entity is facing left.
- Created test harness to make it easier to test logic.
- Read controller configuration.
- Update character sequence based on input.
- Loads object sprites and animations.
- Creates an entity per object.
- Loads fonts and displays a simple menu.
- Published on itch.io