Commit Graph

98 Commits

Author SHA1 Message Date
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
Steven Wroblewski fc801bdbd7 feat(sprint-17): hand slots, outfit items, and GameState v2
- HoldableItem: drag-and-drop base class, snaps to nearest free hand slot
- OutfitItem: extends HoldableItem, applies to character on drop, tap-to-undress
- Character: hand slot API (attach/detach/is_free), outfit layer API, tap detection
- GameState v2: outfit and held items persisted per character in save data
- 147 tests passing
2026-05-09 00:19:27 +02:00
Steven Wroblewski c1df40361a feat(items): add OutfitItem, tap-to-undress, and outfit refs on Character
- Add OutfitItem (extends HoldableItem): applies outfit on drop within 80px
  of character body, falls back to hand slot attach if no character in range
- Add apply_outfit_item / remove_outfit / _handle_outfit_tap to Character
- Track item node refs in _outfit_item_refs for restoring visibility
- Fix animation state: reset to idle before tap handling in _on_drag_released
- Extract _ITEM_DROP_OFFSET constant (replaces magic Vector2(0,60))
- Add 5 tests in test_outfit_item.gd, 14 new tests in test_character_v2.gd
2026-05-09 00:19:15 +02:00
Steven Wroblewski 07c3b996d7 feat(save): extend GameState to v2 — outfit and held items persisted per character
- Add held_left/held_right fields to CharacterData
- Add get/set_character_outfit and get/set_character_held_item to GameState
- get_save_data now returns version:2 with character_outfits and character_held_items
- apply_save_data resets both dicts when keys absent (empty-dict reset safe)
- 11 new tests in test_game_state.gd — 147/147 passing
2026-05-09 00:12:33 +02:00
Steven Wroblewski 09033b9401 fix(test): use get_node_or_null in detach position test per project convention 2026-05-09 00:09:53 +02:00
Steven Wroblewski ca1d20781e feat(items): add HoldableItem with hand slot detection, fix detach_item position
- Character registers in "characters" group on _ready for group scanning
- detach_item saves/restores global_position after reparenting
- New HoldableItem base class: scans "characters" group on drag_released,
  attaches to nearest free hand within 60px radius, detaches on pickup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 00:03:25 +02:00
Steven Wroblewski 628f97fff5 docs: add Sprint 17 implementation plan (Hand-Slots + Outfits, 147 tests) 2026-05-09 00:00:36 +02:00
Steven Wroblewski 835651a9cc feat(snap-points): merge Sprint 16 — 25 SnapPoints across 12 rooms, 115 tests 2026-05-08 22:42:54 +02:00
Steven Wroblewski 0d3788246a feat(snap-points): add SnapPoints to all 2.OG and Garten rooms (Ultrasound, DeliveryRoom, Nursery, GardenParty)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 22:40:45 +02:00
Steven Wroblewski 8cae50bc11 feat(snap-points): add SnapPoints to all 1.OG rooms (XRay, Pharmacy, Lab, PatientRoom) 2026-05-08 22:32:57 +02:00
Steven Wroblewski 7848b7a979 feat(snap-points): add SnapPoints to all EG rooms (Reception, GiftShop, Restaurant, EmergencyRoom) 2026-05-08 22:30:12 +02:00
Steven Wroblewski cb4e4951fe docs: add Sprint 16 implementation plan (Snap-Point System, 25 snap points across 12 rooms) 2026-05-08 22:27:56 +02:00
Steven Wroblewski 48b9e8f8f3 feat(sprint-15): merge Character v2 — SnapPoint, SnapReceiver, AnimState, OutfitLayers, HandSlots 2026-05-08 22:15:41 +02:00
Steven Wroblewski ce697edd2b chore: update Godot import cache 2026-05-08 22:15:38 +02:00
Steven Wroblewski 2f5e9d99a6 feat(snap-receiver): implement snap detection, position snapping, and pose animation trigger
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 22:12:18 +02:00
Steven Wroblewski 60fba44316 feat(character): add hand slot API (attach/detach/get_held_item/is_hand_free) 2026-05-08 22:09:56 +02:00
Steven Wroblewski 1a9d916293 feat(character): add outfit layer API (set/clear/get_outfit per layer 1-3) 2026-05-08 22:07:53 +02:00
Steven Wroblewski 9be67c8dfe feat(character): add animation state API (set/get_animation_state) 2026-05-08 22:02:59 +02:00
Steven Wroblewski 15ac8666f8 feat(character-data): add outfit array field for three outfit layer slots 2026-05-08 22:01:18 +02:00
Steven Wroblewski 2c576ad419 feat(character): add AnimatedSprite2D, OutfitLayers, HandSlots, SnapReceiver to Character scene
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 21:59:30 +02:00
Steven Wroblewski 80cecf732d feat(snap-receiver): add SnapReceiver stub (full implementation in sprint-15 task 8) 2026-05-08 21:57:47 +02:00
Steven Wroblewski cc5f205a7e feat(snap-point): add SnapPoint node with pose, baby_only filter, and occupant tracking
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 21:56:50 +02:00
Steven Wroblewski 33a1c0aaf9 chore: add agent definitions for gdscript-implementer, spec-reviewer, quality-reviewer 2026-05-07 22:22:11 +02:00
Steven Wroblewski 65e17caaf9 docs: add comprehensive Game Design Document (GDD) covering all systems and sprints 15-22 2026-05-07 21:58:34 +02:00
Steven Wroblewski 325dc97645 chore(tooling): merge GUT v9.6.0 TDD setup — 42 unit tests for GameState, RoomNavigator, GiftBox 2026-04-17 23:05:24 +02:00
Steven Wroblewski 100fcef593 feat(home): merge Sprint 14 — Zuhause & Garten area with HomeButton, GiftBox, TeaPot, GardenParty 2026-04-17 23:05:15 +02:00
Steven Wroblewski a89238b08e docs(claude): update testing conventions to reflect GUT TDD workflow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 22:49:57 +02:00
Steven Wroblewski d905f837e8 feat(gift-box): add GiftBox scene and FSM implementation 2026-04-17 22:45:44 +02:00
Steven Wroblewski 1e445263a7 test(gift-box): add unit tests for CLOSED/OPENING/OPEN state machine 2026-04-17 22:45:26 +02:00
Steven Wroblewski 4d74f19490 fix(room-navigator): sync implementation with Sprint 14 canonical version 2026-04-17 22:43:26 +02:00
Steven Wroblewski 286498804d test(room-navigator): add missing is_at_home and go_to_hospital tests
Adds 7 new test cases covering home/hospital navigation state:
- is_at_home() initial state and transitions
- go_to_home() with idempotence check
- go_to_hospital() state restoration and guards
- is_at_home flag cleanup on room navigation

Implements corresponding methods in RoomNavigator:
- is_at_home(): Returns home state
- go_to_home(): Navigates to home (0,0) and saves hospital position
- go_to_hospital(): Returns to previously saved hospital location
- _go_to_room_internal(): Helper to avoid flag interference

All 34 tests passing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 22:41:59 +02:00
Steven Wroblewski 297b57a3c1 test(room-navigator): add unit tests for floor/room state and camera navigation 2026-04-17 22:39:09 +02:00
Steven Wroblewski e3a93d3c52 test(game-state): add unit tests for character positions, object states, and save round-trip 2026-04-17 22:36:53 +02:00
Steven Wroblewski 978c8a5c80 chore(tooling): add GUT test infrastructure and smoke test
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 22:35:08 +02:00
Steven Wroblewski c8fb2d959f chore(tooling): install GUT v9.6.0 test framework
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 22:33:12 +02:00
Steven Wroblewski 257ff18a8b docs: add GUT TDD setup plan 2026-04-17 22:22:48 +02:00
Steven Wroblewski d0ea95ea47 feat(main): integrate Home/GardenParty below Floor0 with bidirectional navigation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 21:25:48 +02:00
Steven Wroblewski 0247c30d45 feat(garden): add GardenParty scene with table, gifts, teapot, balloons, and return button 2026-04-17 21:24:17 +02:00
Steven Wroblewski a4620a7f14 feat(teapot): add TeaPot with tap-to-pour tilt animation 2026-04-17 21:23:03 +02:00
Steven Wroblewski da3c934e5d feat(gift-box): add GiftBox with tap-to-open lid animation and gift reveal 2026-04-17 21:21:39 +02:00