summaryrefslogtreecommitdiff
path: root/src/game.c
AgeCommit message (Collapse)Author
2022-12-27game: conslidate adult<->virus collision handlingVito Caputo
This was unnecessary copy-n-pasta
2022-12-27game: pickup babies when hit due to TV attractionVito Caputo
This case was ignored previously Also made the baby's position update immediate upon pickup rather than potentially delayed until adult moved again...
2022-12-27game: simplify search handlers to always skip inactive nodesVito Caputo
Initially there were few entity types that would linger in the ix2 while inactive. That slowly changed over time, and now it's just silly to have so many piecemeal checks if the node is active. This commit just moves the node active test before the entity type switch and removes the type-specific ones. Other trivial cleanups are sprinkled in there, but there should be no functional difference.
2022-12-13plasma-node,game: wire up and implement maga plasmaVito Caputo
This is a bit janky on the integration side, may cleanup later. When game_t.is_maga is true, plasma-node now goes nationalist with red white and blue stripes.
2022-12-13game: move maga mode flag from adult_t to game_tVito Caputo
Preparatory commit for exposing maga mode to plasma-node for switching to a nationalistic color palette
2022-12-12plasma-node: link infects_rate_smoothed to plasmaVito Caputo
For now just scale the intensity of the plasma by the infections rate. When the infections rate sustain the maximum rate, the plasma eventually turns black. Will probably have to iterate a bit on this
2022-12-12game: maintain an infections rate to drive plasmaVito Caputo
Preparatory commit for tying plasma behavior to infections rate
2022-12-12game: flip the winning adult as a celebratory danceVito Caputo
Dan's idea...
2022-12-12sfx: introduce concept of voices and concurrency limitsVito Caputo
This is a first stab at reeling in the cacophony of noise that develops in the late stages of sars.
2022-12-10game: introduce MAGA powerup and MAGA mode for adultVito Caputo
The MAGA powerup appears only when the adult is captivated by the TV. It's technically not guaranteed to occur, but the propability is so high currently it's basically always going to appear when captivated. The current maga.ans is a MAGA hat, it comes up slowly but otherwise identically to the others like mask/tp etc. If you take the MAGA hat, the adult puts it on, discards any mask it's wearing, and the controls become inverted. Any subsequent mask pickups attempted simply discard the mask and continue maskless. Once in MAGA mode, there is no exiting MAGA mode until death.
2022-12-10game: shorten game over (loss) delayVito Caputo
The delay primarily serves to prevent accidental keypresses from the gameplay at death bleeding into the high score wait state, which would immediately leave the high score. But a full second delay on the losing game over is kind of long, esp. when you're agitated and just want to immediately restart. The delay is also overloaded a bit in the winning game over state, as it governs the TP explosion duration which occurs within this debouncing-like delay. So this commit diverges the two and leaves the winning delay at 1s, while turning the losing delay to .5s.
2022-12-10game: leave game over waits on WASD and arrow keys tooVito Caputo
I'd added SPACE and RETURN, but as those aren't used anywhere else in sars it's unintuitive to require those spuriously, and there's a good chance someone will reach for ESC first which will quit the game instead of restarting.
2022-12-08game: space or enter keys to leave game over wait statesVito Caputo
Until now _any_ keydown would leave the wait state and reset the game, making it challenging to do things like create screenshots of your score+playfield. With this commit only enter or space will leave these wait states and reset the game. Escape still immediately quits from every state.
2022-12-08sfx,game: introduce sfx_t.tv_talk[10] for talking headVito Caputo
There can be assets/talk/[0-9].wav now, one of which will be played along with adult-captivated.wav Intended to match the new talking head .ans
2022-12-08game: fixup GAME_MASK_SCALE to match .ans aspect ratioVito Caputo
The mask is rectangular, the quick-n-dirty scale I used was square.
2022-12-07game: tweak GAME_TV_SCALE aspect ratio to better match the ansVito Caputo
The original scale used here was just pulled from thin air in the blender weekend rush. The actual ansi doesn't have this aspect ratio making it a bit too stretched wide. This overall makes the tv slightly larger, which may affect the gameplay but hopefully not enough to matter.
2022-12-07game: ensure mask is above tpVito Caputo
Sometimes you randomly have mask invisibly coincide with tp, and the only indication is when you pick them up you get two "mine"s played simultaneously. Since the mask will always be more sparse and smaller than the tp at least layer it above the tp to help visibility, though it might need a shadow or outline in its .ans too.
2022-12-05sfx,game: introduce baby_hatted.wav sound effectVito Caputo
This plays whenever a baby dons a mask as a hat.
2022-12-05sfx,game: introduce adult_maskhit.wav sound effectVito Caputo
This plays whenever the adult gets hit by a virus while masked, without running out of masks.
2022-12-05sars,game: add --cheat flag intended for dev/testingVito Caputo
currently this just overrides teepee quantities to always be 128 128 is used instead of 256 so you can still exercise the teepee boost _without_ winning event, and it doesn't take long to collect two teepee boosts so iteration still isn't bad.
2022-12-05sfx,game: introduce adult_unmasked.wav sound effectVito Caputo
This plays whenever the adult runs out of masks
2022-12-05sfx,game: introduce adult_armsfull.wav sound effectVito Caputo
This plays whenever the adult attempts to pickup TP while holding a baby.
2022-12-05game: play winning.ogg in GAME_STATE_OVER_WINNINGVito Caputo
Play a celebratory song after winning
2022-12-05game: move game.ogg playback game_enter()->reset_game()Vito Caputo
Preparatory commit for GAME_STATE_OVER_WINNING music.
2022-12-03game: give adult some acceleration steps from standstillVito Caputo
When navigating tight situations the existing instantaneous 0-100 is difficult to control. By introducing a small bit of acceleration, one can pulse the controls to make small movements. Note this doesn't introduce a deceleration curve, movement still stops immediately upon release of the controls. It's not anything like a physics simulation, it's just a few frames worth of ramping up to 100% movement speed for the adult, plain linear ramp for now. Now it feels like pixel-accurate collision detection might be worth adding...
2022-12-02game: differentiate corpse virusesVito Caputo
tv-attracted babies that contact non-corpse viruses should reset the virus, but they never reset viruses until now. This commit introduces a corpse flag to the virus entity and sets it on infection-produced viruses. Now the tv-attracted baby<->virus infection resets the virus when the virus isn't a corpse, instead of letting the animated virus continue on unimpeded. The corpses should be allowed to propagate infections to eachother while accumulating, hence why it can't be an indiscriminate reset of the virus.
2022-12-02game: tweak teepee probabilities a bit againVito Caputo
Now that respawns can get immediately infected, things get crazy as they should - so make it a bit easier to hoard all the teepee. I'm pretty sure you can just hide off-screen at the top and collect teepee and masks without ever touching a baby and just dodging animated viruses as a way to cheat and "win". But that's kind of allegorical for the pandemic, isn't it? Ignore the needs of others while hoarding teepee and masks FTW!
2022-12-02game: move probabilities to named definesVito Caputo
Nothing functionally changed, just naming some magic numbers and putting them somewhere more organized.
2022-12-02game: remove redundant reset_virus() callVito Caputo
This looks like a harmless copy paste bug in 55b7b49, but it's pointless to do twice.
2022-12-02assets: fix mask.ans to include SAUCE metadataVito Caputo
Dunno why PabloDraw omitted the SAUCE info when creating this originally, but it was producing an 80 column rendering of the mask which is more like 43 columns. This resulted in the collision box/aabb being far larger than the actual mask as rendered. Now with the fixed rendering the mask's scale factor needed some tweaking as well to preserve the same visual size more or less.
2022-12-02game: respawn babies on a timer, and detect immediate infectionsVito Caputo
Previously respawned babies could respawn on a virus without becoming infected, and this actually had a calming effect on the late stage of the game which is the opposite of what should be happening as the field fills up with viruses. What would happen is eventually most of the active set of babies would be sitting on viruses and isolated by viruses so they wouldn't likely be resuced, but they also weren't becoming infected despite being on viruses. With this change, baby respawning is handled strictly by a timer, currently every .5s. In that timer handler the number of babies off from the GAME_NUM_BABIES (10 presently) are attempted to be respawned. Any of those which are immediately respawned onto viruses are immediately infected. Then the same thing is revisted on the next timer expiration. So it doesn't try very hard to maintain GAME_NUM_BABIES as alive at all times - this actually becomes impossible when the field is too crowded to even find spots to respawn without infection. Instead, what will happen, is in the end game you just have constant babies respawning and dying every .5s. The gameplay is dramatically different now, and it's potentially too difficult now to actually manage to hoard 256 rolls of TP before dying. I haven't managed it in my testing so far... so the probabilities may need to be revisited again. However, the end game /feels/ much more _right_ after this change. You end up with just tons of viruses and death, and if you've managed to hoard a bunch of toilet paper, it's a grim satirical scene of zero living babies, viruses everywhere, but a happy pile of TP icons. I can only imagine how ridiculous it looks if you manage to actually win and get the animated celebratory wall of TP over the sea of death. Now the dead babies turned viruses just need their own unique sprite showing actual infected corpses instead of the same virus sprite. So it's actually visibly a sea of infected bodies...
2022-11-29game: fix flashers list corruptionVito Caputo
(entity_t.flashes_remaining == 0) was being misused to indicate an entity wasn't on any of the flashers lists. At some point during the feature's development that was actually true, but as the code evolved that was no longer the case and entities would sit in the flashers_off list with flashes_remaining at 0 before flipping back on for a cycle at which point they'd be found with 0 flashes_remaining and dropped from any flashers lists. This is a problem because flash_entity() would come along and use the flashes_remaining == 0 state to see if the entity needed to get on a flashers list before resetting the flashes_remaining count. Furthermore, when adult->holding gets cleared (baby drop off) the flashes_remaining gets zeroed to ensure the reset baby doesn't start out with residual flashing at its new location. This just created more opportunities where the flashes_remaining is zero while still on a list, since the holding reset was just expediting the list removal - not actually doing it. This commit simply introduces a discrete flag for flashing vs. not flashing to indicate flashers_{on,off} list membership, independent of the flashes_remaining count. Fixes infinite loop / apparent freeze bug reported by Tara and Phil during some play testing. Thanks guys!
2022-11-29libplay: bump libplay version for play_run_slice()Vito Caputo
Emscripten integration will want this function. A few mechanical changes required to catch up with upstream libplay API changes as well.
2022-11-27game: flash some entitiesVito Caputo
- flash masked adult when hit by virus - flash held baby and teepee when teepee pickup blocked by held baby (and block teepee pickup when holding a baby)
2022-11-27game: rudimentary support for flashing entitiesVito Caputo
This just adds a basic flashing entity mechanism, but doesn't make anything actually flash yet. The intention is to make the adult flash briefly when hit by a virus while masked, and to flash a held baby and teepee when attempting to pickup the teepee while holding the baby.
2022-11-26game: play adult_mine.wav on mask pickups tooVito Caputo
It might make sense to have a separate .wav for this, but since I don't currently have anything to put there just use the same wav.
2022-11-26game: fix teepee icons grid offset to centerVito Caputo
The icons grid was shifted left slightly...
2022-11-26game: normalize all movementsVito Caputo
Until now keyboard movements could "cheat" by moving faster on the diagonals. Instead put all the movements through the same normalizing introduced by the touch handling.
2022-11-24game: tweak teepee powerup probabilitiesVito Caputo
lower likelihoods of the >1 quantities to make it a bit more difficult
2022-11-24game: make winning a proper state w/animationsVito Caputo
This makes hoarding 256 rolls explode the rolls then infinitely scroll+rotate them while showing the high score and waiting for keypress.
2022-11-22game: silence clang warning about implicit float conversionVito Caputo
just adding an explicit cast
2022-11-21game: fix error string typo s/unale/unable/Vito Caputo
2022-11-10game: stub ou ta win condition on >256 TP rollsVito Caputo
For now this just does the same thing as dying, I need to either animate something interesting or add a .ans to show something celebratory like the monkey sitting on a mountain of TP.
2022-11-10game: add bonus nodes to teepee entitiesVito Caputo
This shows the teeepee quantity alongside the TP sprite, with a little fade+wiggle animation when the TP is collected.
2022-11-09game: add a variety of teepee powerup quantitiesVito Caputo
In the interests of making it realistically possible to completely fill the 256 spots of teepee icons as a winning condition, there's now mega packs of rolls. There will need to be some visible indication of qty added, either numerically or with different graphics. I'm leaning towards just adding numeric quantity values like +3 or +36 over the roll which floats away when you take it.
2022-11-08game: introduce toilet paper hoarding mechanicVito Caputo
for now toilet paper is simply picked up by the adult and accumulates as a pointless icon starting at the top left corner, potentially filling the entire screen with enough hoarding; obstructing the player's view of what's going on. There's no points added for hoarding, it's completely pointless and counterproductive.
2022-11-08game: minor mask tweaksVito Caputo
- make mask protection additive rather than absolute, so you can accumulate mask hit points - raise the mask stage_t.layer 3->4 so it's less obscured
2022-10-18game: introduce a mask powerupVito Caputo
baby vs. mask: baby steals and wears mask as useless hat, adult vs. mask: adult wears mask for 3 hits of virus protection virus vs. masked adult: decrements mask hit points virus vs. hatted baby: same as virus vs. unmasked baby TODO: - visible indication of how many remaining hits mask has - maybe blink mask when one hit remains - sfx for adult mask wearing and loss, baby mask stealing? - sfx for virus vs. mask?
2022-10-17sfx: add adult-captivated.wav sfx for adult meets tvVito Caputo
also s/frozen/captivated/ for consistency with sfx
2022-10-17game: infect TV-attracted babies vs. static infectionsVito Caputo
Existing code wouldn't notice when a TV-attracted baby collided with an existing inanimate infection (previously infected baby) This commit adds a nested search in tv_search for the affected baby case, to detect such collisions. Note this required bumping the max nested search for the ix2 from 1 to 2, comment updated to reflect that.
© All Rights Reserved