137 Commits

Author SHA1 Message Date
Steven Wroblewski 6e9432fa82 chore(ci): replace wget with curl in Godot download step
Cozypaw Hospital/pipeline/head This commit looks good
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 13:11:54 +02:00
Steven Wroblewski fb4434a537 chore(ci): add Jenkins pipeline with headless GUT test runner
Cozypaw Hospital/pipeline/head There was a failure building this commit
Downloads Godot 4.6.2 on first run, caches in /tmp, runs all 231 unit
tests headless on every push via Gitea webhook.

Also updates development-plan.md: mark sprints 0-22 complete, document
scope extensions, remove iOS references.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 13:09:26 +02:00
Steven Wroblewski cda31fcac9 assets(audio): add floor music tracks (floor 0-3) 2026-05-11 21:05:03 +02:00
Steven Wroblewski c697b996d8 fix(sprint-14): use preload pattern in test_balloon.gd to fix class_name parse error 2026-05-11 21:04:57 +02:00
Steven Wroblewski ec473dc4e3 feat(sprint-14): update GardenParty scene with cake, balloons, and chair snap points 2026-05-11 20:17:20 +02:00
Steven Wroblewski 2cb265c922 feat(sprint-14): add Cake cut/reset state machine 2026-05-11 20:15:44 +02:00
Steven Wroblewski 666648c154 feat(sprint-14): add Balloon pop/respawn state machine 2026-05-11 20:13:39 +02:00
Steven Wroblewski 6a5a18ca42 fix(sprint-14): guarantee _start_close_lid tween callback when lid and gift are null 2026-05-11 20:11:21 +02:00
Steven Wroblewski 14a50364f3 feat(sprint-14): add GiftBox RESETTING auto-reset state 2026-05-11 20:05:21 +02:00
Steven Wroblewski adefc59bea docs(sprint-14): add garden party implementation plan
4 tasks: GiftBox RESETTING state, Balloon, Cake, GardenParty scene update.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:31:34 +02:00
Steven Wroblewski 8f0569766c docs(sprint-14): add garden party spec
GiftBox auto-reset, Balloon pop/respawn, Cake cut/reset, chair snap points.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:26:14 +02:00
Steven Wroblewski 52ebb78862 chore(audio): add download script, audio credits, and sprint 21/22 docs
- docs/download_audio.py: freesound batch downloader with all 22 confirmed IDs
  (API key removed — fill in locally from freesound.org)
- docs/credits-audio.md: generated CC-BY attribution table
- docs/superpowers/plans+specs: sprint 15, 21, 22 implementation plan/spec docs
- .claude/settings.json: enable experimental agent teams env var

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:57:27 +02:00
Steven Wroblewski ad9a406775 assets(audio): replace all placeholder SFX and music with real CC0 audio
All 22 placeholder 0-byte OGG files replaced with freesound.org previews
(128 kbps HQ OGG). All tracks are CC0. Includes Godot import sidecar files
(.ogg.import) for 11 files that had none previously.

Sprints 19, 21, 22 audio coverage complete.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:57:21 +02:00
Steven Wroblewski faed0951d3 chore: add confirmed freesound IDs for all sprint-21 and sprint-22 SFX 2026-05-11 11:42:32 +02:00
Steven Wroblewski 162ebd158f chore: add freesound batch download script 2026-05-11 11:20:33 +02:00
Steven Wroblewski fefa947783 feat(sprint-22): character SFX + UltrasoundMachine ambient heartbeat 2026-05-10 21:53:57 +02:00
Steven Wroblewski b7757a5548 fix(sfx): duplicate OGG stream before setting loop to avoid shared resource mutation 2026-05-10 21:53:51 +02:00
Steven Wroblewski 80274b0294 feat(sfx): add looping ambient heartbeat to UltrasoundMachine 2026-05-10 21:50:52 +02:00
Steven Wroblewski 18c982f770 feat(sfx): wire character pickup/tap/place SFX to AudioManager 2026-05-10 21:49:40 +02:00
Steven Wroblewski aefd8349f6 feat(sfx): add character SFX keys to AudioManager._SFX_MAP 2026-05-10 21:48:38 +02:00
Steven Wroblewski 24fad7baf7 assets(sfx): add sprint-22 character and ambient SFX placeholders 2026-05-10 21:47:14 +02:00
Steven Wroblewski 1ef6a4ee9e feat(sprint-21): interactive object SFX — 7 new play_sfx wiring calls + AudioManager keys 2026-05-10 21:15:25 +02:00
Steven Wroblewski 9e1058ab6c feat(sfx): wire interactive object SFX to AudioManager.play_sfx 2026-05-10 21:13:04 +02:00
Steven Wroblewski 21628c21fd feat(sfx): add interactive object SFX keys to AudioManager._SFX_MAP 2026-05-10 21:11:34 +02:00
Steven Wroblewski c68fb668d8 assets(sfx): add sprint-21 interactive object SFX placeholders 2026-05-10 21:10:16 +02:00
Steven Wroblewski 8f5d7ed592 feat(sprint-20): RoomNavigator-GameState-AudioManager integration 2026-05-10 20:55:34 +02:00
Steven Wroblewski 48c7e96b38 feat(nav): restore camera to saved room on game load 2026-05-10 20:55:14 +02:00
Steven Wroblewski 3189703d24 feat(nav): wire RoomNavigator to GameState.set_current_room and add room name lookup 2026-05-10 20:54:53 +02:00
Steven Wroblewski c2edaf2761 feat(nav): add GameState.set_current_room and AudioManager.DEFAULT_MUSIC_VOLUME 2026-05-10 20:53:25 +02:00
Steven Wroblewski 43a7e6bde4 docs: add Sprint 20 navigation integration spec and plan 2026-05-10 20:50:13 +02:00
Steven Wroblewski 1d65bf21dc feat(sprint-19): AudioManager, floor music cross-fade, and SFX system 2026-05-10 20:19:55 +02:00
Steven Wroblewski 2e0cd18b6e feat(audio): wire SFX into HoldableItem and OutfitItem 2026-05-10 20:19:40 +02:00
Steven Wroblewski a220b641ca feat(audio): add tap handler and SFX to RoomChest
Adds _get_press_position helper and _unhandled_input tap detection to
RoomChest, wires AudioManager.play_sfx calls for chest_tap and
item_spawn events. Guards AudioManager audio load calls with Dummy
driver check so headless unit tests stay green.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 20:18:16 +02:00
Steven Wroblewski bad2fbe65f feat(audio): add AudioManager with floor music cross-fade and SFX
Replaces placeholder AudioManager with full implementation: floor-based
music routing via _derive_floor_from_room, cross-fade tween between
AudioStreamPlayers, SFX event-key dispatch, and room-change guard to
prevent redundant load attempts. 11 new tests (207 total, 206 passing).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 20:14:10 +02:00
Steven Wroblewski 4c60655e83 assets: add audio placeholder files and freesound recommendations for Sprint 19
Adds 11 empty .ogg placeholders (4 music tracks, 7 SFX) so the AudioManager
can reference them without errors during development. Includes docs/audio-assets-sprint19.md
with curated freesound.org download recommendations (CC0/CC-BY) for each file.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 20:09:47 +02:00
Steven Wroblewski 2c0c8b3c42 docs: add Sprint 19 AudioManager implementation plan 2026-05-10 00:48:42 +02:00
Steven Wroblewski 5107790746 docs: add Sprint 19 AudioManager design spec 2026-05-10 00:39:40 +02:00
Steven Wroblewski df6df900c6 feat(sprint-18): room chests and item spawning system
- ChestItemData resource (ItemType enum, outfit_layer, spawn_offset)
- RoomChestConfig: static config for all 14 chests across 12 rooms
- RoomChest Node2D: tap-to-spawn with tween, receive-item return
- HoldableItem: chest-return priority (_try_return_to_chest, 80px radius)
- OutfitItem: chest-return before outfit-apply
- GameState v3: chest states persisted and restored on load
- All 12 rooms populated with placeholder item IDs
- 196 tests passing
2026-05-09 01:26:45 +02:00
Steven Wroblewski cd3ce7bf6e feat(rooms): add RoomChest nodes to Floor 2 and Home rooms
Add UltrasoundCart, DeliveryCabinet, NurseryShelf, GardenTable, GardenStorage
chest nodes to their respective scenes. All 10 new tests pass (196 total).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 01:24:18 +02:00
Steven Wroblewski 9aded82dbb feat(rooms): add RoomChest nodes to Floor 1 rooms
XRayCabinet (3 items), PharmacyMedicine + PharmacyTools (2 each),
LabBench (3 items), PatientCabinet (3 items). 10 new tests, all passing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 01:20:36 +02:00
Steven Wroblewski a877d8f5fe feat(rooms): add RoomChest nodes to Floor 0 rooms
ReceptionDesk, GiftShopShelf, RestaurantCounter, EmergencyCabinet added
to their respective tscn files. Fixes spawn_items deferred call to avoid
add_child race during _ready tree setup.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 01:16:15 +02:00
Steven Wroblewski 87db92955a fix(items): safe cast in _try_return_to_chest, typed chest state param, object_states reset
- Replace unsafe direct cast in HoldableItem._try_return_to_chest() with guarded as-cast
- Type set_chest_state() parameter as Array[String] to match RoomChest._get_spawned_ids()
- Add else-branch in apply_save_data() to reset _object_states when key absent
- Rename test_save_data_has_version_two to test_save_data_has_version_three
2026-05-09 01:12:29 +02:00
Steven Wroblewski 96ec053331 feat(items): add chest-return priority to HoldableItem and GameState v3 chest states
- HoldableItem._try_return_to_chest() snaps item back if within CHEST_RETURN_RADIUS (80px)
- _on_drag_released checks chest return before hand-slot fallback
- OutfitItem._on_drag_released checks chest return before outfit/hand-slot logic
- GameState: _chest_states dict + get/set/clear_chest_state methods
- GameState.get_save_data() bumped to version 3, includes chest_states
- GameState.apply_save_data() restores chest_states from save data
2026-05-09 01:09:47 +02:00
Steven Wroblewski 4f1766834a refactor(items): strengthen RoomChest types, guard receive_item, expose get_spawned_item 2026-05-09 01:07:16 +02:00
Steven Wroblewski b9c73b80ea feat(items): add RoomChest with spawn and receive logic
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 01:04:34 +02:00
Steven Wroblewski 4e4743f14f refactor(items): use ItemType enum and offset constants in ChestItemData/RoomChestConfig
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 01:01:50 +02:00
Steven Wroblewski b97b110876 feat(items): add ChestItemData resource and RoomChestConfig static config
TDD: 4 tests written first (FAIL), then implemented — all 151 tests pass.
2026-05-09 00:58:32 +02:00
Steven Wroblewski 9786cf5895 docs: add Sprint 18 Room Chests implementation plan 2026-05-09 00:54:19 +02:00
Steven Wroblewski 8aa9673154 docs: clarify item position persistence in Sprint 18 spec 2026-05-09 00:43:38 +02:00
Steven Wroblewski 2e0b961520 docs: add Sprint 18 Room Chests design spec 2026-05-09 00:43:23 +02:00