Compare commits

..

510 Commits

Author SHA1 Message Date
34c125e6bb no message 2026-02-15 01:14:09 -08:00
66905c9b53 Overhaul 2026-02-15 01:06:46 -08:00
Pal
a1f4a29eb3 Mask of Zeal, Mask Placeholder, Health Item Placeholder, VT pickup animation added. Temp Environment added to Final Floor. 2026-02-15 00:57:19 -08:00
a6ea1b1873 laptop 2026-02-14 19:26:33 -08:00
Pal
47ceb2f613 Remove E, fix UI, Altar scale better 2026-02-14 16:49:16 -08:00
bf6b0d50c3 Additional in progress changes 2026-02-13 23:39:49 -08:00
c7603a163f Revert "update"
This reverts commit fe0241ac88.
2026-02-13 16:33:44 -08:00
a20c80d922 Remaining changes 2026-02-13 16:33:30 -08:00
e14007b7f4 Merge branch 'main' into item_changes 2026-02-13 16:24:40 -08:00
b17c134c9a Add debug info folder that got filtered by git 2026-02-13 16:12:34 -08:00
fe0241ac88 update 2026-02-13 16:11:38 -08:00
0ab6ef1343 In progress item changes 2026-02-13 15:59:10 -08:00
Pal
638946d23a UI Mockup Ver.2 With Correct Transparencies 2026-02-13 15:48:04 -08:00
Pal
b56668dcbe 3D Render Icons Wave 1 Added 2026-02-13 14:44:03 -08:00
d6faf8642a Fix up debug info overlay 2026-02-13 10:14:42 -08:00
68b1455c53 Fix restorative 2026-02-12 23:28:51 -08:00
9615e1e251 Audio fade 2026-02-12 22:42:18 -08:00
c755485855 Add sample Stele to overworld 2026-02-12 21:39:10 -08:00
d503413140 Fix up effect items
Fix up minimap
Add some debug info
2026-02-12 20:49:09 -08:00
Pal
ac31c3ae65 Deleted a bunch of unused files.
Added environment to A2 exit, deleted environment from other A2 rooms.
2026-02-12 20:43:52 -08:00
Pal
549040c339 Gaps Fixed, Overworld Visual Fixes, Some lighting and additions to block rooms, may have accidentally moved a folder but cant find which. 2026-02-12 20:17:13 -08:00
c246d8d654 Fix crit calculation and bonus attack/def/luck 2026-02-12 02:58:30 -08:00
b475df6f68 Implement most jewels 2026-02-12 02:36:25 -08:00
230b47061d Add item spawn menu
Fix game over bug
Start adding more implementation for jewels
2026-02-11 15:25:20 -08:00
8ce38c3c13 Redesign and reimplement inventory menu
Add jewels but no implementation yet (needed redesign of inventory menu to function correctly)
2026-02-11 04:08:42 -08:00
5451f0b31f Persuader 2026-02-10 18:42:46 -08:00
92b4e8662f Add projectiles 2026-02-10 18:03:53 -08:00
2f377d2d7a Add curse element, increase throw speed/damage of Ciello 2026-02-10 15:37:12 -08:00
363ee1cd33 Turn more HQs on 2026-02-10 15:02:55 -08:00
97198afe18 Fix dropped/thrown item behavior 2026-02-10 14:57:41 -08:00
Pal
fdc4a6f2c1 Small Map Fixes 2026-02-10 01:55:56 -08:00
Pal
843a100218 Small Changes 2026-02-10 01:21:47 -08:00
Pal
8001556f37 Item Icons Wave 2 2026-02-10 00:49:15 -08:00
90d054a3c6 Clean up events, add weapon tag for weaker on swing 2026-02-09 23:50:15 -08:00
aba325ff2b Implement plasma sword instakill 2026-02-09 23:01:52 -08:00
bfaa324e6a Fix references and start more weapon tag implementation 2026-02-09 22:16:49 -08:00
f08c69fa10 Add weapons 2026-02-09 21:37:40 -08:00
9d6aa6d88d Update item icons 2026-02-09 21:05:45 -08:00
654e368a65 Fix exported project not loading issue 2026-02-09 20:24:48 -08:00
ce727b523a Change import settings for textures 2026-02-09 18:52:31 -08:00
Pal
6a474576f0 wave 1 of item icons
(cherry picked from commit 6355ffb26d)
2026-02-09 17:20:39 -08:00
8dd194a202 Fix level up, fix gallery room height, fix enemy heights, fix gospel of dimension spawn height, put minimap on right visual layer for some floors, add script to floor scene file 2026-02-06 03:24:34 -08:00
70a33d68cf Add navigation regions to all floors
Actually fix the annoying LookAt bug for real this time I hope
2026-02-06 00:00:22 -08:00
da8c4209d7 Fix annoying issue with LookAt
Add jump scare
2026-02-05 20:10:41 -08:00
c6fbc9f553 Rework dimmable audio stream 2026-02-05 14:45:28 -08:00
36b851254e Add collisions to A2 corridors
Start implementation of fading ambient audio in/out on level load
2026-02-05 14:17:45 -08:00
147f04d2ff Modify palm of heaven, remove random box item in altar 2026-02-05 10:52:13 -08:00
8ea881edb3 Item holy and all element implementation, still need to work out some of the math for it
Fix bonus defense for weapons
2026-02-05 10:48:24 -08:00
8a99771491 Add more boxes, implement weapon that gets stronger on lower HP 2026-02-04 23:51:07 -08:00
d45bc67722 Partially implementation of box items 2026-02-04 22:30:10 -08:00
13ebe54474 Fix some control issues 2026-02-04 02:34:23 -08:00
b9a1888bfc Add implementation for box item 2026-02-04 02:11:00 -08:00
5ae556cb4b Fix some broken stuff (player spawn, disabled input after loading next floor) 2026-02-04 02:04:04 -08:00
52dc8fb9e4 Box item implementation 2026-02-04 01:49:17 -08:00
affa5e1f79 Player step SFX pitch change 2026-02-03 22:15:02 -08:00
Pal
35a625f636 merge 2026-02-03 21:06:28 -08:00
Pal
d5de5f7379 player anim changes 2026-02-03 21:05:20 -08:00
3e6e21977e Fix Altar scaling 2026-02-03 20:52:14 -08:00
Pal
4a2d131276 Boss floor changes minor 2026-02-03 19:54:05 -08:00
Pal
d9c2ba7ed1 Added Memorial Steles, boss A floor visual polish, re-enabled overworld distance scenery 2026-02-03 04:18:25 -08:00
051ffbbcb1 Fix bug with Boss A (hit box didn't get scaled correctly)
Fix reset of death animation
2026-02-03 02:24:54 -08:00
9747d7d2c5 Revert boss floor environment lighting change 2026-02-03 02:04:21 -08:00
34dce8c5a2 Loading screen fixes, transition screen UI fixes 2026-02-03 01:47:42 -08:00
51010c4f7d Fix overworld collisions 2026-02-03 00:34:19 -08:00
fd96eb2dc9 Fix minimap height
Rework boss code to separate boss A concerns from demon wall
2026-02-02 23:24:48 -08:00
51c8f26e50 Minor fixes for NPC dialogue stuff
Add collisions for overworld
2026-02-02 22:39:33 -08:00
4c90eb6f07 Fix additional collisions 2026-02-02 21:59:48 -08:00
30f0a078a9 Boss A fixes 2026-02-02 20:01:54 -08:00
6e4a4d605c Partially fix boss room A, only one guy moves though 2026-02-02 00:27:11 -08:00
Pal
836b9eb26d idk merghhe 2026-02-01 16:48:25 -08:00
Pal
cb2df83079 idk 2026-02-01 16:48:02 -08:00
0282ef68f3 Collisions again 2026-02-01 16:00:44 -08:00
Pal
1678d79bbd Added E symbol to Exit floors 2026-02-01 14:02:52 -08:00
Pal
20d2890b37 Pit A, Dismantled, Puer texture fixes 2026-02-01 13:46:14 -08:00
Pal
e85c8d51f1 1A fix 2026-02-01 05:07:13 -08:00
Pal
3e178257aa merger 2026-02-01 05:03:10 -08:00
Pal
25b6d53ec4 Minimap added to all floors, all minimaps added and refined.
Less overlap neccessary for revealer cubes
2026-02-01 05:02:15 -08:00
a9ed8fda10 Add minimap shadows 2026-01-31 18:31:50 -08:00
Pal
4801d7d9b3 Special Collision Maps Added 2026-01-31 14:15:43 -08:00
Pal
f08817a586 Merging 2026-01-30 20:35:10 -08:00
Pal
4b23c2ca6f Floor Maps and room updates 2026-01-30 20:34:07 -08:00
39b2bc631d Collisions for floor set B 2026-01-29 01:12:44 -08:00
f346f0f529 Fix up Set A room collisions more and organize node structure 2026-01-28 00:53:35 -08:00
4ffe04fcff Exploding wall implementation 2026-01-26 02:15:03 -08:00
2ef838f270 Forgot a bit 2026-01-26 01:43:40 -08:00
e63a94210c Looking into room collisions we need; set up plastique behavior 2026-01-25 19:40:59 -08:00
865934399d Boss fixes, various changes 2026-01-25 19:01:34 -08:00
2622ed4423 Fix maze floor 2026-01-25 16:56:05 -08:00
79dd6eb33a Fix player height 2026-01-25 16:06:20 -08:00
Pal
bba0bb5ecd Minimap Reveal system tscns added, floor adjustments, collisions added for mazefloor 2026-01-25 02:19:11 -08:00
Pal
d6b20ce4c2 Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2026-01-24 18:55:38 -08:00
Pal
60d8c55c7d Finished All Basic Floor layouts 2026-01-24 18:55:35 -08:00
d3a3c18d13 Fix doors 2026-01-24 15:13:27 -08:00
Pal
12993bced0 Floors 1ABC and 2ABC complete 2026-01-23 18:02:20 -08:00
Pal
8fd7a5133d A1 Floor Progress 2026-01-22 17:54:12 -08:00
Pal
97472f2a61 Deleted old unused Corridor tscns, B set (Floors 9-15) complete 2026-01-22 16:14:58 -08:00
5284a7c00d Some geometry fixes, fix spawn height for overworld 2026-01-22 01:08:25 -08:00
Pal
92b39c1ee9 Lighting for new rooms etc 2026-01-21 14:46:48 -08:00
faf3288061 Script types for block rooms 2026-01-21 01:59:12 -08:00
b715d6b459 Add collisions to block rooms 2026-01-21 01:25:28 -08:00
9897acffac Unlockable door implementation (currently opens with regular attack) 2026-01-21 00:50:21 -08:00
aa9e14c498 Make overworld doors be of unlockable type, add behavior later 2026-01-20 23:33:28 -08:00
945c5e14bb Licking all the room files 2026-01-20 22:01:22 -08:00
a1f67c3d71 Fix dying loop, add death counter, add die button to debug 2026-01-20 21:18:10 -08:00
Pal
670f8baabf Added/Fixed Rooms 2026-01-20 18:29:21 -08:00
Pal
6a62d3d943 Room fixes, started mapping floors 2026-01-17 00:00:37 -08:00
3fe45cb3e7 First floor set collisions 2026-01-15 01:37:57 -08:00
Pal
db218f26e7 Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2026-01-14 00:46:57 -08:00
Pal
eb4e901c8a Boss 1 death animation animations added, wall explosion animation added. 2026-01-14 00:46:15 -08:00
48a00933d9 Adjust sprite sizes to accomodate pixel melt 2026-01-13 23:12:49 -08:00
Pal
be8bbcac28 Corridor Assetts Implemented 2026-01-13 23:06:06 -08:00
c5cb586e4b Change item effect service to only affect regular enemy types for strong item effects 2026-01-13 21:38:12 -08:00
1e97eb9ede Elemental resistance calculation changes 2026-01-13 21:25:09 -08:00
Pal
0591dccc31 Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2026-01-12 22:06:57 -08:00
Pal
70f7642d0f Special room with bombable wall added + start on plastique explosoin 2026-01-12 22:06:43 -08:00
7e8826f143 Restore health fountain 2026-01-12 20:26:05 -08:00
Pal
f13afc9fdc Re-scaled environment models imported and implemented. 2026-01-12 19:39:34 -08:00
04543fcfac Add plastique item
Add Door object
Initial work for look up animation
2026-01-02 17:06:01 -08:00
5b9de11e5a Add Resume/Exit buttons to pause menu, handle logic for returning to main menu and starting a new game 2025-12-05 20:05:28 -08:00
678916be89 Enemy viewer revamp, loading screen improvement 2025-12-05 16:30:13 -08:00
Pal
f39bd8ecdb Added many player.tscn animated sprite2Ds 2025-12-04 20:21:24 -08:00
Pal
76f4adc5be gallery and options rendered images set to linear filterling 2025-12-04 01:18:03 -08:00
Pal
95227946d1 Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2025-12-03 23:54:32 -08:00
Pal
1ee3e97f85 Overworld Gate object added, visual assetts added, test animation added 2025-12-03 23:54:20 -08:00
6f90a0985a General UI Work 2025-12-03 23:21:29 -08:00
34742d568e Play test animation 2025-12-03 22:29:24 -08:00
Pal
3c369f79f7 Added shadows to enemies 2025-12-01 21:05:33 -08:00
Pal
fe45f0bcf2 Screen renders added, fonts added, altar model updated 2025-12-01 20:13:15 -08:00
edff41af22 Edit dialogue balloons 2025-12-01 01:01:33 -08:00
4ee4e02a51 Take damage/Screen shake 2025-11-30 22:35:26 -08:00
8f8cc217dc Death animation 2025-11-30 21:37:31 -08:00
c491ea5050 Gallery Menu initial implementation 2025-11-30 20:17:08 -08:00
Pal
725547d388 Late November Merge 2025-11-26 02:38:43 -08:00
Pal
539430d112 VFX Assetts Added 2025-11-26 02:37:45 -08:00
46402401b4 Add basic implementation for footsteps
Add disengage to eden pillar
Fix level up sound effect trigger
2025-11-26 02:33:03 -08:00
ed9e611fd9 Work SFX work
Fix up Eden Pillar behavior
2025-11-26 02:12:24 -08:00
db7a1df1f7 Started implementing SFX
Fixed Shield animation jumps and secondary attack
Fixed demon wall stone behavior
Made overworld ambient sounds unpausable
2025-11-25 03:04:07 -08:00
Pal
3e8c11d55d VFX assetts imported 2025-11-22 15:55:13 -08:00
613fc3bf60 Setup player screen FX 2025-11-19 00:05:20 -08:00
f69e219643 Add game tab to options menu, fix focus of GUI elements, add Delete option for save file 2025-11-18 20:28:43 -08:00
Pal
0afbf38bf9 Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2025-11-17 19:18:01 -08:00
Pal
23fdf7309d VFX Assetts Added 2025-11-17 19:17:52 -08:00
fcffdb3b35 Fix shadows 2025-11-16 20:07:44 -08:00
7210133330 Add projectiles to various enemies 2025-11-16 16:35:48 -08:00
Pal
e7bae342c9 SFX additions 2025-11-16 16:12:21 -08:00
Pal
c22fde3bb5 November Merge 2025-11-12 16:14:43 -08:00
Pal
7cb5b20293 weird things I cant undo 2025-11-12 16:14:14 -08:00
a5846e08dc Rewrite and simplify Inventory Menu, various fixes for item effects 2025-11-04 01:12:16 -08:00
7b7fc910bd Button remapping work 2025-11-03 02:48:05 -08:00
9fc875eda5 Add options menu persistence 2025-10-30 23:59:05 -07:00
Pal
dc3c458414 merge 2025-10-30 15:59:01 -07:00
Pal
ba38c6443c merging stuff 2025-10-30 15:58:19 -07:00
575a565a2c Fix spawn point for player, add flee behavior for gold sproingy 2025-10-29 11:03:07 -07:00
21d8c4770d Big fix patch for enemy behaviors 2025-10-29 00:35:15 -07:00
Pal
1a77695155 Merger 2025-10-27 20:10:58 -07:00
Pal
11cbb8c4e5 SFX batch 1 import and some implementation, minimap icons added 2025-10-27 20:08:17 -07:00
eed50bc04e Fix standard enemy logic 2025-10-27 19:41:03 -07:00
2d55ae9cc4 Add secondary attack options 2025-10-27 18:03:14 -07:00
0b909e4e7e Teleport skill added for Chinthe 2025-10-27 17:48:27 -07:00
7e6dca1c29 Rework game over logic and game initialization 2025-10-27 15:04:01 -07:00
720696aed0 Try to get Chinthe to stop jumping upon reaching player 2025-10-26 15:05:18 -07:00
286c221530 Improvements to save and loading
Improvements to Chinthe animation logic
Fix broken Godot Tool system and just use a more manual approach to setting map nodes
Remove ItemDatabase from individual room scenes
2025-10-24 01:33:18 -07:00
f5360adbf1 Basic projectile implementation (put sample version in FilthEaterModelView) 2025-10-23 18:50:05 -07:00
bc161a58b3 Additional refactoring and fixing of equipment data
Add attack data to enemy attacks (might need to rework a little bit for primary/secondary attacks)
2025-10-23 00:05:44 -07:00
f0c4e65783 Refactor stats 2025-10-22 16:24:07 -07:00
6ec45c4805 Refactor Player class to use components, also use components in Enemy class types and fiddle with boss structure 2025-10-22 02:41:08 -07:00
44fd8c82b0 Rework enemy behavior (still in progress but shouldn't crash) 2025-10-20 19:24:50 -07:00
Pal
20b659681a More enemy VFX added and attacks setup, old Shield of Heaven frames removed, player camera rotation fixed 2025-10-15 20:17:04 -07:00
Pal
2786c95c22 re-rendered all frames for chinthe, added teleport in animation as well as VFX for attack and teleport. rough draft of a setup for map glow. 2025-10-09 03:23:27 -07:00
Pal
b0f6aa176e Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2025-10-08 00:59:25 -07:00
e29bef51c5 Move player during load screens to prevent activating minimaps for current position 2025-10-07 23:33:02 -07:00
Pal
9ed5f8600c Area 2 all rooms preliminary lighting setup, a few with unapplied scale but maybe fine. 2025-10-07 21:38:27 -07:00
Pal
4c5281c852 Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2025-10-07 01:18:25 -07:00
Pal
8e030aabcd OW tweaks 2025-10-07 01:18:17 -07:00
d692d5c705 Disable VT timer by default 2025-10-07 01:02:04 -07:00
Pal
9bfb410f99 Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2025-10-07 00:30:31 -07:00
Pal
18cf7e062c Overworld Fixes 2025-10-07 00:30:11 -07:00
aa624f7784 Animation tree fixes 2025-10-06 23:49:42 -07:00
1545ec73b0 Add rescued items spawn to overworld 2025-10-06 22:22:07 -07:00
Pal
06608fe435 Overworld Update 2025-10-06 20:03:43 -07:00
0bf87c0dc2 Use Special Room script type to mark rooms that don't have monster/item/player spawns
Fix some minimap display issues
Fix michael animation state
2025-10-06 14:20:08 -07:00
Pal
57b61e86a4 Fixed lighting issues, unchecked Force Vertex Shading in Project Settings. More expensive, but looks much better. Fixed minimap unique names. 2025-10-06 04:25:21 -07:00
ec0f9ebff7 Simplify enemy animation logic 2025-10-06 02:13:05 -07:00
Pal
ad29e57fc9 Initial pass of lighting and particle systems for all area 1 rooms complete. 2025-10-04 03:52:04 -07:00
Pal
f2e22032df Started on individual room lighting and additional room fixes from un-applied transformations. 2025-10-03 19:09:16 -07:00
Pal
122d0e7794 made test floor, replaced sara frames, replaced shield frames, set many enemies to shaded and adjusted heights/sizes, added solid mesh doorways, added filth and ballos' vfx, 2025-10-03 04:43:45 -07:00
3bcb747473 Figured out the math for EXP per level 2025-10-01 01:46:27 -07:00
6ee1788337 Adjust HP totals for enemies 2025-09-30 19:32:49 -07:00
70fe9e953b Revert "Compress Red Ambassador and Shield of Heaven"
This reverts commit 1d36879fbb.
2025-09-30 19:26:30 -07:00
abf34d7d9e Small adjustment to map loading stuff 2025-09-30 18:20:55 -07:00
6f582fcca1 Add map loading logic and spawn rate control 2025-09-30 02:32:03 -07:00
70d1871985 Add B Corridor 2025-09-27 22:06:35 -07:00
0bac61a762 Cleanup 2025-09-27 00:22:06 -07:00
2ea96e5933 Arrange debug floor situation 2025-09-26 22:50:09 -07:00
2a3c80a7af Fix map paths 2025-09-26 19:45:48 -07:00
1d36879fbb Compress Red Ambassador and Shield of Heaven 2025-09-26 19:32:00 -07:00
0292888351 Compress Aqueos demon 2025-09-26 19:22:14 -07:00
Pal
4374bc54f5 Added all Corridor Area 1 Variations as .tscns 2025-09-26 18:31:29 -07:00
Pal
1b6a7713a8 Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2025-09-26 16:00:23 -07:00
Pal
5bb4aca510 cleanup of map/dungeon folder + water room fix 2025-09-26 16:00:17 -07:00
30363d3513 Compress Chariot 2025-09-26 15:33:47 -07:00
9f26b5fda7 Fix merge 2025-09-26 14:13:13 -07:00
9107b8c570 Rework loading maps to be asynchronous, change debug menu so that its not completely pausing the game 2025-09-26 14:06:50 -07:00
Pal
578cde65cc Mergepoint II 2025-09-26 04:08:37 -07:00
Pal
3aa1d66040 Dungeon Room Re-import and Old Models Deleted 2025-09-26 04:06:41 -07:00
7e9114bfd1 Speeeeeed up 2025-09-26 02:22:03 -07:00
928112188b Update enemy animations, make Loading screen a scene 2025-09-26 00:17:38 -07:00
5403aa42f9 Fix game state 2025-09-25 21:57:38 -07:00
Pal
be47f38963 DW Arm Animation Fixes + Minimap Player Icon Fix 2025-09-25 19:03:07 -07:00
Pal
84b95abfa1 Psychomerge 2025-09-25 17:41:08 -07:00
f75cd03744 Fix UID 2025-09-25 03:59:54 -07:00
78e08bec5c Support opening monster viewer screen from main menu 2025-09-25 03:55:20 -07:00
84f0f8338f Restructure loading of game 2025-09-25 02:50:55 -07:00
Pal
a7b959be87 Added minimap GridMapper and neccessary resources. 2025-09-25 01:59:15 -07:00
Pal
e7f5da5b1a Demon Wall Floor Models Replaced, Demon Wall centered in room. 2025-09-24 02:33:00 -07:00
7c2d61a36a Update enemy move/attack logic 2025-09-23 23:21:19 -07:00
Pal
e526fdd1c3 Demon Wall Animations Work 2025-09-23 19:31:55 -07:00
adedef6cc3 Added demon wall orb animation and added sprite sheets for various enemies. 2025-09-22 19:17:26 -07:00
53ac818776 Macbook Import Changes + Michael VFX 2025-09-21 19:33:03 -07:00
75e22e9837 Fix Demon Wall eye 2025-09-21 13:58:45 -07:00
Pal
32baff1fd6 successfully added demon wall flame spray, but still broken from previous model replacement. 2025-09-20 03:28:13 -07:00
Pal
c3d720d653 Started on Demon Wall flame particle system, imported current sprite based VFX 2025-09-19 16:37:46 -07:00
Pal
2f00eda29d Replaced Demon Wall Base Mode and subsequentually broke a bunch of stuff. 2025-09-19 03:04:56 -07:00
Pal
13cd16f9e0 Demon Wall Model Changes, Added pulsing to Pipes 2025-09-18 18:50:43 -07:00
Pal
94c6c212ca Added all NPC Idle animations, Overworld water changes, 2025-09-17 04:12:21 -07:00
Pal
faa9bcd66b Added assetts for NPC animations and assetts for updated rooms. 2025-09-16 06:01:38 -07:00
7cbb93822b Add Special Rooms class 2025-09-15 21:20:46 -07:00
4808b1dd63 Remove SimpleDungeons plugin 2025-09-15 20:50:19 -07:00
Pal
b501d22782 Positional audio fix and BossRoomA spawn fix 2025-09-14 22:35:11 -07:00
Pal
32ecc3752a started on alternate GOG room 2025-09-13 22:31:29 -07:00
Pal
a4d475c07b overworld tweaks, moved unused bgm oggs to refuse folder. Added ambient proximity sounds to Overworld, created neccessary Audio Buses, added ambient sound to Altar. 2025-09-13 02:15:21 -07:00
Pal
f7b14dee4f Overworld Touchups 2025-09-12 17:10:22 -07:00
Pal
28380d398c Overworld Work, NPC Shaded, Unused Files Placed in New Folder 2025-09-12 15:03:12 -07:00
Pal
b04956ea4d Void Room preliminary shaders added, boss1 materials added 2025-09-12 03:35:19 -07:00
a4205f1963 Font fixes 2025-09-11 22:10:42 -07:00
92e9351766 Fix up audio issue and resolve errors in godot log
Replace label style settings with new fonts, need to resolve stretching issue still
2025-09-11 21:15:56 -07:00
Pal
6e6d5e5edc Overworld Shadow Noise Fixed 2025-09-11 03:53:57 -07:00
Pal
4364c93c5c Special Area Environments Setup, Guidance Room is Bugged, 2025-09-11 03:34:46 -07:00
80d4838338 Fix skybox issue 2025-09-10 21:01:45 -07:00
Pal
9867734d0d B1,B2,Altar Sky Shaders, HorseHead/Ox Light Removal 2025-09-10 18:29:23 -07:00
Pal
908202d855 Boss Room 1 an 2 visual changes, Altar new skybox addittion. 2025-09-10 04:07:44 -07:00
Pal
65bcd4b5b7 Boss Floor 1 Update
-Updated Model (Ver. 3)
-Cloud Setup
-Skybox Setup
-Lighting/Environment
2025-09-09 06:10:14 -07:00
Pal
09abd588c2 -World Environment Mess Arounds
-Player Height Change
-Altar Sky Video Import Test
-Manually Changed Shading On for a few materials on Altar that weren't switched over
2025-09-09 03:33:10 -07:00
4f1251d402 Re-implement audio managers 2025-09-08 23:24:33 -07:00
d830a05d98 Add SFX 2025-09-06 14:46:49 -07:00
8368a55d7c Add SFX to node and code 2025-08-10 22:48:44 -07:00
f8a27d7ba6 Sync minimap floor data 2025-08-09 19:15:32 -07:00
953cba40c6 Add minimap to sidebar 2025-08-08 23:43:57 -07:00
bd6794dafd Add HP/VT bars 2025-08-08 23:16:51 -07:00
7c694149c2 Modify UI placement, fix debug menu 2025-08-07 23:25:58 -07:00
5725e7a6fb Add shading back 2025-08-06 22:31:30 -07:00
17265a3a26 Remove debug visuals 2025-06-29 23:24:25 -07:00
Pal
d8a49124b9 Merge branch 'main' of https://git.zenny.quest/zenayi/GameJamDungeon 2025-06-29 23:14:24 -07:00
Pal
34c6e5cbe8 Laser Scene Start 2025-06-29 23:12:11 -07:00
d3b67c1825 Re-import rooms and add missing NPCs 2025-06-29 23:11:24 -07:00
ee898bf1cd Make each special floor a dungeon floor (probably still won't work) 2025-06-29 22:27:46 -07:00
f12841f88f Add debug floors, fix boss battle A crashes (need to reimplement the fight anyway) 2025-06-29 22:11:49 -07:00
5d49842c04 Fix corridor B 2025-06-29 15:47:56 -07:00
6826fecd16 hnnngghh open door 2025-06-29 15:23:38 -07:00
54d9bcf52d Give item to npc 2025-06-28 18:12:04 -07:00
0880b74695 Add overworld 2025-06-28 17:18:54 -07:00
3efab7e233 Start moving UI elements around 2025-06-28 15:36:08 -07:00
bdc3bdf61d Move inventory screen to UI folder 2025-06-28 14:23:52 -07:00
cf03c75ada Add test shader for godrays, use rigidbodies to put all spawned items on the ground 2025-06-28 12:26:26 -07:00
f33616dda4 Fix menus between floors 2025-06-28 00:30:16 -07:00
39f791e2b4 Fix dialogue manager plugin, lower resolution 2025-06-27 18:53:08 -07:00
338e303fbb Fix all doors 2025-05-17 14:37:58 -07:00
97c082f87a Update godot version 2025-05-02 20:44:06 -07:00
7ab5e32c74 Minor fixes 2025-04-30 21:46:08 -07:00
68c91d8f13 Overhaul game state logic to support gameplay loop 2025-04-30 00:43:55 -07:00
78cdda97b9 Update Chariot attack animations 2025-04-17 00:43:07 -07:00
24b4227425 In progress gameplay loop changes 2025-04-15 00:33:59 -07:00
03caa13ceb Fix enemy scene setups 2025-04-14 22:00:44 -07:00
078bfb9e45 Various enemy debugging stuff 2025-04-10 02:10:49 -07:00
753ba60f0f Fix chinthe animations 2025-04-10 00:04:31 -07:00
a7381658f4 Add debug menu, add ability to load next floor or spawn item 2025-04-09 22:45:00 -07:00
40e7fd0ef2 Reset default launch point as main, fix up navigation path for Floor 01 2025-04-09 19:55:48 -07:00
3b7ef1b801 Add scene and class to all enemy types, update all floors with enemy spawn types and rates 2025-04-09 01:21:55 -07:00
e95188efc8 All enemy animations included 2025-04-04 01:29:08 -07:00
ac39a62e27 More enemy animations 2025-04-04 00:10:16 -07:00
ac55af0cb6 In progress work for enemy animations 2025-04-03 23:07:50 -07:00
d5108fbc1e Fix up animations for more enemies 2025-04-03 00:48:28 -07:00
63391ef82a Start work on fixing all other enemies animations 2025-04-02 01:50:53 -07:00
c923f549b9 More Chariot fixes 2025-04-02 01:16:17 -07:00
84c26dbf0a Chariot animation fixes 2025-04-01 23:51:59 -07:00
f6a2d28dde Fix overlapping walls issue, change pillar column collision shapes to cylinder to get stuck on them less 2025-04-01 20:54:30 -07:00
762444fe2c In progress work for Chariot 2025-04-01 02:20:27 -07:00
b8e23ac9c4 Minor fix 2025-03-31 20:07:18 -07:00
20dad3069a Fix export 2025-03-31 01:18:36 -07:00
ffc3177244 Start on Atonement weapon 2025-03-30 21:57:41 -07:00
2378030a0f Pick up thrown items 2025-03-27 00:37:16 -07:00
096786f97e Fix inventory behavior from previous commit 2025-03-27 00:08:18 -07:00
8a9a2313fe Close inventory on certain inventory actions 2025-03-27 00:00:29 -07:00
9d3621dd2c Mystery item implementation 2025-03-26 23:13:01 -07:00
114ff35630 Add new rooms, update NPCs 2025-03-25 22:25:20 -07:00
6bc258778f Rearrange floors 2025-03-25 00:25:37 -07:00
bc53b3c5f3 dunno 2025-03-25 00:23:59 -07:00
8d44c58fc8 Add placeholder visual for Arm 9 2025-03-25 00:22:48 -07:00
84c4d1b9ce Demon wall implementation (attack data, takes damage, dies, etc) but mostly placeholders 2025-03-25 00:09:33 -07:00
f69c6b94a1 Demon wall implementation time 2025-03-21 00:39:34 -07:00
8df8a85429 Start demon wall implementation 2025-03-20 02:51:41 -07:00
52e42ea38d Fix up Boss Type A 2025-03-19 23:52:41 -07:00
2834806351 Attempt to fix up boss shaders 2025-03-19 02:10:38 -07:00
f6c42747ca Fix sort bug, add to max hp on level up 2025-03-19 01:31:19 -07:00
79f57264ec Small fixes to sara animation, attempt to add back boss damage/death (didn't work) 2025-03-18 00:58:52 -07:00
13e2ef90c8 Revamp boss logic 2025-03-18 00:12:36 -07:00
f50eaa1847 Add Sara to floors 2025-03-17 20:46:10 -07:00
5e863dfd81 Add Sara 2025-03-17 20:34:59 -07:00
79bf3d598b Fix filth eater animations 2025-03-17 19:49:41 -07:00
4f30086e52 Fix up animations for ballos 2025-03-17 19:39:30 -07:00
07582d8202 Ballos fixes 2025-03-12 00:48:15 -07:00
22c9590442 Add more NPCs, update dialogue manager to 4.4 compatible version 2025-03-12 00:29:39 -07:00
76b94f7be3 Fix Enemy logic 2025-03-11 17:11:43 -07:00
29af9062b5 Implement Equip/Unequip SFX 2025-03-11 16:51:22 -07:00
294c52dc40 Clean up Game.cs 2025-03-11 16:25:48 -07:00
f060229b5e Add stackable items 2025-03-11 16:00:46 -07:00
192f2eb316 Reorganize SFX 2025-03-10 22:13:09 -07:00
ed12c1cf15 Cleanup previous refactor, fix floor count 2025-03-10 21:04:28 -07:00
a1c26ed7fb Refactor more stuff (Audio mostly) 2025-03-10 20:52:39 -07:00
23049b3231 Add wall hit sound and animation 2025-03-10 11:58:45 -07:00
d8c5bc8f78 Fix texture stuff 2025-03-09 12:24:30 -07:00
b93630756c Assign scripts 2025-03-08 13:59:52 -08:00
ae017dd679 Rename project 2025-03-08 13:49:46 -08:00
84570fe87d Slightly rework death screen 2025-03-07 23:08:08 -08:00
8a61104868 Refactor inventory menu logic 2025-03-07 20:42:56 -08:00
d30fa35546 Refactor minimap 2025-03-07 19:43:27 -08:00
fe3c539a62 Fix up item usage 2025-03-07 18:40:14 -08:00
93c04440d4 Start refactoring UI concerns away from game and into UI logic class 2025-03-07 16:48:45 -08:00
c3bfab5f53 Refactoring game logic 2025-03-07 12:05:20 -08:00
e7ef669c29 Clean up 2025-03-07 01:52:56 -08:00
65e4af8595 Move GameLogic to new project 2025-03-07 01:39:18 -08:00
b7bf4f3d10 Move Player logic to other project 2025-03-07 01:26:14 -08:00
1cb79f5b30 Move App logic to other projects 2025-03-07 01:08:35 -08:00
3b5ee84ce2 Move save logic out of Game 2025-03-07 00:32:19 -08:00
a09f6ec5a5 Move files and folders to new repo format to enable multi-project format 2025-03-06 22:07:25 -08:00
12cbb82ac9 Add cspell config file, remove unused models folder for weapon 2025-03-06 21:40:46 -08:00
e038901f2b Generate more floors 2025-03-06 12:10:43 -08:00
2bb3bc2259 Shorten opening animations 2025-03-05 19:16:16 -08:00
e050d20071 Loading works
Debug pickup
2025-03-05 19:11:31 -08:00
c6fb5c1702 Fix focus issue 2025-03-05 03:18:11 -08:00
42446b4ac4 Set up some loading logic and app/main menu logicblocks 2025-03-05 02:59:50 -08:00
3d3ebc11d1 Map save 2025-03-05 01:14:23 -08:00
819dd672aa Save and load map data 2025-03-05 00:40:39 -08:00
ec182e87f0 Restore Pause functionality 2025-03-04 23:59:40 -08:00
5b57939452 Minor drop/throw adjustment 2025-03-04 23:32:25 -08:00
e7a48a08ee Fix stuff including texture on pick up items and fix pickup 2025-03-04 23:27:17 -08:00
8cc6d85265 Implementation of saving inventory items (had to resturcture texture loading) 2025-03-04 22:21:18 -08:00
d35e81a9a8 Start restructure of game data to support save/load 2025-03-04 02:39:27 -08:00
a9cb43b79e Remove dead code 2025-03-04 00:43:27 -08:00
b733a30724 Fix thrown item position
Start adding more floors
Testing Item Rescue
2025-03-04 00:32:24 -08:00
2da4b8958d Implement Stat Raising items 2025-03-03 22:49:32 -08:00
c04be837bb Entropic seal implemented 2025-03-03 22:21:02 -08:00
14b7093e00 Implement Gospel of Escape 2025-03-03 22:03:16 -08:00
4baa492ab1 Implement Perspective 2025-03-03 21:41:22 -08:00
4363c4d2eb Implement Elemental Caster item 2025-03-03 21:33:19 -08:00
78068e1170 Implement Kyuuketsuki 2025-03-03 21:21:48 -08:00
d883b2b05f Implement Heaven's Rebellion 2025-03-03 21:14:09 -08:00
f153a53d8d Sine Morphization implementation 2025-03-03 21:04:44 -08:00
a41c443004 Update to Godot 4.4 2025-03-03 11:29:36 -08:00
b26654346b Put minimap back in place
Note: issue still exists where the last spot the player existed before the level finished loading is marked visibile on the minimap
2025-03-03 02:45:45 -08:00
3860155675 Kill half of enemies in room 2025-03-03 02:00:05 -08:00
990da695f2 Add Effect items, implement teleport enemies to current room 2025-03-03 01:48:56 -08:00
4ac70b1ca7 Player warp item implementation 2025-03-03 01:17:30 -08:00
05295f535a Teleport enemy to random room item 2025-03-02 11:55:19 -08:00
2439791d05 Chinthe animations 2025-02-28 03:10:16 -08:00
bcb3262743 Add NPCs 2025-02-28 00:44:30 -08:00
66661054bf Reorganize every room's node structure 2025-02-27 23:48:05 -08:00
d9cb9fb31e Cleanup, make the project compilable on windows using AoT, add room box to all rooms 2025-02-27 22:30:51 -08:00
f41c0ec025 Cleanup 2025-02-27 20:28:24 -08:00
9f3101b866 Add callbacks to eden pillar attack 2025-02-27 01:52:10 -08:00
2589ed98d2 Remove unused method 2025-02-27 01:44:22 -08:00
77aa58f88e Eden pillar rotation finally works i'm going to die now 2025-02-27 01:40:59 -08:00
cfa79f262f Fix fake error and also looking during attacks 2025-02-25 22:20:04 -08:00
221ade11e3 Split 2D and 3D enemy concepts 2025-02-25 22:02:02 -08:00
282a2eddb0 Change all enemy types to CharacterBody3D 2025-02-25 19:55:04 -08:00
0d7242c96d Minor fixes to navigation 2025-02-25 02:04:15 -08:00
22a930358c Rough collision avoidance implementation using pre-generated floors (just floor 01) 2025-02-24 21:48:40 -08:00
45f1f5df01 Minor collision fixes 2025-02-19 19:46:35 -08:00
669a489f64 Fix UIDs 2025-02-19 19:25:35 -08:00
5404f8e7b0 Split equipment status from Inventory, fix equip/unequip bonuses being reflected correctly in code and inventory menu 2025-02-19 16:04:40 -08:00
f71412d946 Update to latest Godot, fix Sproingy animation issues 2025-02-19 01:39:37 -08:00
44333e52c2 A lot of crazy stuff happened here..... 2025-02-18 23:22:17 -08:00
5ce65aa57a In progress refactoring of Boss class 2025-02-18 01:55:06 -08:00
368e774176 Start editing floor enemy dbs 2025-02-18 00:53:03 -08:00
05c05ef102 Fix script load 2025-02-18 00:45:40 -08:00
60ecb7d113 Add remaining rooms and add collision
Add floor list
2025-02-18 00:42:37 -08:00
ad3b26f451 Import more rooms, rename some to fit number system 2025-02-14 00:51:54 -08:00
08d6ad3573 Minor fixes, playing with volumetric fog again 2025-02-13 18:03:45 -08:00
19915d7d6e More rooms 2025-02-13 02:07:02 -08:00
17b55db196 Add more rooms 2025-02-13 01:47:17 -08:00
f0d38d8fe8 Add new rooms, set every material so far to unshaded.... 2025-02-13 00:50:31 -08:00
a1c66df038 Add more floors, light refactoring 2025-02-12 00:49:16 -08:00
9352e4c0fd Fix initial spawn, center thrown item a bit more 2025-02-11 02:53:45 -08:00
556f12de1e Various additions and fixes 2025-02-11 02:39:31 -08:00
3e42ee4914 Add Ballos 2025-02-11 00:22:14 -08:00
0038e78a2b Improve enemy behavior, add filth eater 2025-02-10 22:19:26 -08:00
1f9c05c0a7 Add hitboxes to other enemies, move enemy database to floor level, normalize strafing input to avoid extra speed gained by moving and strafing 2025-02-07 03:11:32 -08:00
b8e5794d48 Clean up 2025-02-07 02:47:44 -08:00
fe1a1e61ef Major Player refactor 2025-02-07 02:29:50 -08:00
0cdae88952 Fix attacks by player and enemy 2025-02-06 03:33:25 -08:00
4e6c545e81 Refactor Enemy 2025-02-06 01:58:36 -08:00
badc6d2375 Preserve current state before big refactor 2025-02-05 20:45:49 -08:00
4910ff7770 Change affinity 2025-01-19 12:59:24 -08:00
f3a51de28a Resolve UID warnings by copying newly updated UIDs into scene file import 2025-01-18 12:38:21 -08:00
9cb696ca86 Upgrade Godot to 4.4 beta-1, remove redundant plugin, resolve warning messages in godot editor by removing items with duplicate UIDs 2025-01-18 12:22:30 -08:00
334a4a0b34 Fix corridor collision 2024-12-21 17:34:03 -08:00
5d2b9ca247 Exp system implementation (not yet affecting stats) 2024-12-21 16:41:16 -08:00
5d9520bc59 New corridor scene, attempt to write script to remove columns (corner case exists) 2024-12-20 01:06:11 -08:00
bb0c8872f0 Add void room model 2024-12-19 20:45:45 -08:00
b42c2fcc21 Spawn rescued item at correct location and enable pickup 2024-12-19 20:02:00 -08:00
e525ede13d Working on item rescue 2024-12-19 15:42:40 -08:00
d135be4318 Placeholders completed for enemy viewer 2024-12-18 16:47:36 -08:00
09e340179d Swap models 2024-12-06 00:15:55 -08:00
8068f33302 Refactor enemy view model for data viewer project 2024-12-05 22:45:13 -08:00
270ded8ef7 In progress work for swapping models for data viewer 2024-12-04 21:45:12 -08:00
f0cfd39471 Improvements to data viewer, add placeholder text 2024-12-04 21:12:51 -08:00
7a6cea145d Started work on data viewer 2024-12-04 19:06:55 -08:00
8ddfe86750 Minor fixes, upgrade to 4.4.0-dev4 2024-11-20 20:36:58 -08:00
8d4177f8b1 Add knockback to secondary attack 2024-10-14 23:22:42 -07:00
df89a2e4d6 Add collisions 2024-10-14 22:04:38 -07:00
9bbceba973 Floor 0 stuff 2024-10-10 23:05:30 -07:00
6d29e41f3a Hit/Death animations for bosses 2024-10-10 22:11:10 -07:00
ed333f373b Add hit animations and death for bosses 2024-10-03 01:07:05 -07:00
e6584ec4dc Update horse face 2024-09-30 23:35:52 -07:00
167989be99 Boss logic update 2024-09-30 22:09:15 -07:00
dcb867e0bb In progress boss work 2024-09-26 00:32:47 -07:00
41c24c5ab3 Make player, enemy, and items spawn at consistent heights 2024-09-25 21:33:11 -07:00
7f1f1a8a14 Push 2024-09-23 22:37:10 -07:00
a4c18e7cf6 Add chariot, fix water room doors, add item picked up message 2024-09-23 18:33:46 -07:00
68c7b30e57 Fix rooms 2024-09-22 23:29:34 -07:00
59390c04bf Throwable item rework, increase health on timer timeout, add boss 1 model 2024-09-22 23:05:33 -07:00
f490a390aa Fix stuff 2024-09-22 15:40:43 -07:00
84ee313ce5 Throw item 2024-09-22 14:40:53 -07:00
490f0d17d2 Drop item 2024-09-22 14:00:52 -07:00
01477b9a0e Add back antechamber 2, fix collisions in inner balcony room 2024-09-19 01:56:37 -07:00
28136545b4 Re-import 2024-09-18 17:24:20 -07:00
0edaa65682 Clean up merge 2024-09-18 16:57:28 -07:00
7bd374161f Attempt to bring in other branch 2024-09-18 16:51:27 -07:00
d5c81d6587 Knockback tag implementation 2024-09-18 16:45:00 -07:00
884f283ead Basic throw works 2024-09-18 02:57:13 -07:00
b7a982d340 Demo reel build 2024-09-17 23:56:50 -07:00
27fa657f92 Almost shippable 2024-09-17 04:39:01 -07:00
9b8884d459 stoop kid is afraid to leave his stoop 2024-09-17 00:07:13 -07:00
60f7c92139 Minor text changes 2024-09-16 22:26:42 -07:00
993ec2bf1b Fix enemy attacks 2024-09-16 22:14:46 -07:00
dac4e26662 Fixed michael animations 2024-09-16 20:53:59 -07:00
354813e6e0 Animation fixes 2024-09-16 20:38:44 -07:00
d0c78e54a7 Implement boss room 2024-09-16 02:48:14 -07:00
55c521db3a Update items 2024-09-16 01:05:15 -07:00
660a5f5553 Slightly modify enemy LoS stuff 2024-09-16 00:02:38 -07:00
8143da44db Not perfect but enemies move/attack with animation 2024-09-15 23:56:05 -07:00
4a1fdd94f8 Hit shader 2024-09-15 17:12:18 -07:00
470b853916 Basic projectile implementation 2024-09-15 02:37:32 -07:00
b42b248c0b Fix sproingy too 2024-09-15 02:19:23 -07:00
7680ab8b45 it's michael, what's michael 2024-09-15 02:17:40 -07:00
096bcd6168 Disable audio by default 2024-09-14 16:09:01 -07:00
cd8806a9fe Implement BGM and SFX event system 2024-09-14 16:01:55 -07:00
0a71339bbe Clean up in player code area too 2024-09-14 10:37:04 -07:00
5f05494fe1 Cleanup pt 2 2024-09-14 10:35:23 -07:00
57b9d9b64a Clean up temporary dungeon room files 2024-09-14 10:32:06 -07:00
8ea532bcfa Change out floor prompt message 2024-09-13 17:07:47 -07:00
1d7d70e033 More inventory menu improvements 2024-09-13 16:43:10 -07:00
f0e75703f6 (Mostly) show status update when using an item. Need to fix up the equipping code here 2024-09-12 15:18:09 -07:00
875fa026df Dungeon player and teleport randomization 2024-09-12 12:41:52 -07:00
043d7f1ba8 Fix final remaining issues with inventory 2024-09-12 10:28:34 -07:00
af384d3ddb Finish refactoring other than making sure bonuses appear on player stat side 2024-09-12 04:26:29 -07:00
b4662a0c7b Massive refactor (inventory menu still a little broken but its Good Enough) 2024-09-12 02:24:14 -07:00
149c8d9571 Working pause menu 2024-09-11 15:55:47 -07:00
4d47a7586e Big refactor in place: Organize nodes in line with dependency injection expectations, use state machine flow more 2024-09-11 15:33:36 -07:00
6a4eb81529 More messing with dialogue box UI 2024-09-11 10:53:54 -07:00
0c9b1cd689 Fiddle with UI 2024-09-10 20:38:22 -07:00
7268cb445a Fix item usage 2024-09-10 20:03:21 -07:00
d854f159b4 Add more interactive effects to inventory menu 2024-09-10 19:40:19 -07:00
081bde1d9a Refactor inventory menu
Add user prompt and implement equip state
2024-09-10 12:29:44 -07:00
83e0566ae8 Start work on inventory user prompt 2024-09-10 01:42:32 -07:00
62a9f99b81 Implement even more inventory/UI stuff 2024-09-10 01:22:34 -07:00
911f75da14 More inventory fixes 2024-09-10 00:26:12 -07:00
086370987c More inventory fixes 2024-09-10 00:09:53 -07:00
b5798e7bc0 Fix up equipping inventory items, fill out the rest of the inventory labels 2024-09-09 23:05:44 -07:00
4986cca661 Strafing 2024-09-09 18:53:51 -07:00
f13b9cdd9f Fix more 2024-09-09 18:31:06 -07:00
f8f3c9842f Adjust dialog UI 2024-09-09 18:19:32 -07:00
edef839b87 Change .gitignore file 2024-09-09 17:34:51 -07:00
fc33b07dc7 Add ability to hit NPCs and see different dialogue, add interrupt feature for dialogue controller singleton 2024-09-09 17:20:54 -07:00
699b4b95cf Cancel dialogue when player walks away 2024-09-09 15:19:18 -07:00
6e97058905 Rat dialogue 2024-09-09 14:56:22 -07:00
3e0846223e Test sprite rotation, add overworld collisions 2024-09-09 14:01:42 -07:00
9cc88028dd Add weapon textures, refactor item spawning 2024-09-09 11:53:35 -07:00
e7804cd229 Add music tracks 2024-09-09 10:58:48 -07:00
09f9566a0d Add water shader to overworld 2024-09-09 10:58:24 -07:00
4a371021c1 ??? godot did this automatically. i think it might be good? 2024-09-09 10:58:09 -07:00
ca9ba8c81f Remove possibly AI background, use shader for BG instead. Remove placeholder Rare Sword, fix missing Avarice name 2024-09-09 10:43:50 -07:00
2ac4660d1b Fixed inventory screen 2024-09-09 04:21:00 -07:00
847ad13c4b Inventory pages 2024-09-09 02:53:44 -07:00
ad5213a940 Display items in inventory 2024-09-09 02:27:03 -07:00
8ac19797f0 Player ui stuff 2024-09-08 23:54:46 -07:00
07295da93c Dialogue system; ask user if they want to teleport to next floor 2024-09-08 23:04:27 -07:00
1dfc61f003 Fix labels 2024-09-08 15:42:08 -07:00
a47d1306b9 Item spawning 2024-09-08 14:19:30 -07:00
29a6d1072c idk 2024-09-08 02:00:18 -07:00
5240fd5f92 Add Accessory data 2024-09-07 20:18:17 -07:00
c6eaf19eb0 Weapon tags, change 2024-09-07 19:55:13 -07:00
c308fadb87 Add equippable items 2024-09-07 17:38:01 -07:00
f223102525 fixed da dialogue 2024-09-07 17:05:10 -07:00
872f246a23 Things are mostly fixed, but dialogue isn't disappearing 2024-09-07 16:34:31 -07:00
b470a9d2fe Update 2024-09-07 15:01:45 -07:00
fbaf698852 Teleport works, item pickup is broken 2024-09-07 14:00:40 -07:00
4c2731bc7b Trying teleport again 2024-09-07 05:42:51 -07:00
5d6b94ddf6 Ignore addons folder 2024-09-07 03:34:48 -07:00
3665150342 Make basic overworld and teleport to first dungeon floor 2024-09-07 03:31:42 -07:00
16794 changed files with 494528 additions and 20822 deletions

View File

@@ -1,4 +1,239 @@
[*.cs]
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true
# CS8632: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.
dotnet_diagnostic.CS8632.severity = silent
# C# files
[*.cs]
csharp_style_namespace_declarations = file_scoped:warning
#### Core EditorConfig Options ####
# Indentation and spacing
indent_size = 2
indent_style = space
tab_width = 4
# New line preferences
end_of_line = crlf
insert_final_newline = false
#### .NET Coding Conventions ####
# Organize usings
dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = false
file_header_template = unset
# this. and Me. preferences
dotnet_style_qualification_for_event = false
dotnet_style_qualification_for_field = false
dotnet_style_qualification_for_method = false
dotnet_style_qualification_for_property = false
# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true
dotnet_style_predefined_type_for_member_access = true
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_operators = never_if_unnecessary
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members
# Expression-level preferences
dotnet_style_coalesce_expression = true
dotnet_style_collection_initializer = true
dotnet_style_explicit_tuple_names = true
dotnet_style_namespace_match_folder = true
dotnet_style_null_propagation = true
dotnet_style_object_initializer = true
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_prefer_auto_properties = true
dotnet_style_prefer_collection_expression = when_types_loosely_match
dotnet_style_prefer_compound_assignment = true
dotnet_style_prefer_conditional_expression_over_assignment = true
dotnet_style_prefer_conditional_expression_over_return = true
dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed
dotnet_style_prefer_inferred_anonymous_type_member_names = true
dotnet_style_prefer_inferred_tuple_names = true
dotnet_style_prefer_is_null_check_over_reference_equality_method = true
dotnet_style_prefer_simplified_boolean_expressions = true
dotnet_style_prefer_simplified_interpolation = true
# Field preferences
dotnet_style_readonly_field = true
# Parameter preferences
dotnet_code_quality_unused_parameters = all
# Suppression preferences
dotnet_remove_unnecessary_suppression_exclusions = none
# New line preferences
dotnet_style_allow_multiple_blank_lines_experimental = false
dotnet_style_allow_statement_immediately_after_block_experimental = true
#### C# Coding Conventions ####
# var preferences
csharp_style_var_elsewhere = false
csharp_style_var_for_built_in_types = false
csharp_style_var_when_type_is_apparent = false
# Expression-bodied members
csharp_style_expression_bodied_accessors = when_on_single_line
csharp_style_expression_bodied_constructors = false
csharp_style_expression_bodied_indexers = when_on_single_line
csharp_style_expression_bodied_lambdas = when_on_single_line
csharp_style_expression_bodied_local_functions = when_on_single_line
csharp_style_expression_bodied_methods = when_on_single_line
csharp_style_expression_bodied_operators = when_on_single_line
csharp_style_expression_bodied_properties = when_on_single_line
# Pattern matching preferences
csharp_style_pattern_matching_over_as_with_null_check = true
csharp_style_pattern_matching_over_is_with_cast_check = true
csharp_style_prefer_extended_property_pattern = true
csharp_style_prefer_not_pattern = true
csharp_style_prefer_pattern_matching = true
csharp_style_prefer_switch_expression = true
# Null-checking preferences
csharp_style_conditional_delegate_call = true
# Modifier preferences
csharp_prefer_static_anonymous_function = true
csharp_prefer_static_local_function = true
csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async
csharp_style_prefer_readonly_struct = true
csharp_style_prefer_readonly_struct_member = true
# Code-block preferences
csharp_prefer_braces = true
csharp_prefer_simple_using_statement = true
csharp_style_namespace_declarations = block_scoped
csharp_style_prefer_method_group_conversion = true
csharp_style_prefer_primary_constructors = true
csharp_style_prefer_top_level_statements = true
# Expression-level preferences
csharp_prefer_simple_default_expression = true
csharp_style_deconstructed_variable_declaration = true
csharp_style_implicit_object_creation_when_type_is_apparent = true
csharp_style_inlined_variable_declaration = true
csharp_style_prefer_index_operator = true
csharp_style_prefer_local_over_anonymous_function = true
csharp_style_prefer_null_check_over_type_check = true
csharp_style_prefer_range_operator = true
csharp_style_prefer_tuple_swap = true
csharp_style_prefer_utf8_string_literals = true
csharp_style_throw_expression = true
csharp_style_unused_value_assignment_preference = discard_variable
csharp_style_unused_value_expression_statement_preference = discard_variable
# 'using' directive preferences
csharp_using_directive_placement = outside_namespace
# New line preferences
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true
csharp_style_allow_embedded_statements_on_same_line_experimental = false
#### C# Formatting Rules ####
# New line preferences
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = all
csharp_new_line_between_query_expression_clauses = true
# Indentation preferences
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_labels = one_less_than_current
csharp_indent_switch_labels = true
# Space preferences
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false
# Wrapping preferences
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = false
#### Naming styles ####
# Naming rules
dotnet_naming_rule.private_or_internal_field_should_be_private_field.severity = warning
dotnet_naming_rule.private_or_internal_field_should_be_private_field.symbols = private_or_internal_field
dotnet_naming_rule.private_or_internal_field_should_be_private_field.style = private_field
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
# Symbol specifications
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field
dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected
dotnet_naming_symbols.private_or_internal_field.required_modifiers =
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =
# Naming styles
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_naming_style.private_field.required_prefix = _
dotnet_naming_style.private_field.required_suffix =
dotnet_naming_style.private_field.word_separator =
dotnet_naming_style.private_field.capitalization = camel_case

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
ko_fi: rubonnek

723
.gitignore vendored
View File

@@ -1,7 +1,722 @@
# Godot 4+ specific ignores
.godot/
/android/
Build/
.vs
Output/
.deploy_to_steamos/
.deploy_to_steamos/
.godot/
# Rider
.idea/
# Visual Studio Code
.vscode/
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Rider
.idea/
# Visual Studio Code
.vscode/
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
/Zennysoft.Game.Ma/src/map/dungeon/models/Area 2/Puer/A2-Puer.glb.import
/Zennysoft.Game.Ma/src/audio/AMB/amb_beach.wav.import
/Zennysoft.Game.Ma/src/audio/AMB/amb_perlin.wav.import
/Zennysoft.Game.Ma/src/audio/AMB/amb_white_noise.wav.import
/Zennysoft.Game.Ma/src/audio/AMB/amb_wind_loop_altar.wav.import

View File

@@ -1,26 +0,0 @@
<Project Sdk="Godot.NET.Sdk/4.4.0-dev.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net8.0</TargetFramework>
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'ios' ">net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Chickensoft.AutoInject" Version="2.3.0" />
<PackageReference Include="Chickensoft.GodotNodeInterfaces" Version="2.2.22" />
<PackageReference Include="Chickensoft.Introspection.Generator" Version="1.5.0" />
<PackageReference Include="Chickensoft.LogicBlocks" Version="5.4.0" />
<PackageReference Include="Chickensoft.LogicBlocks.DiagramGenerator" Version="5.4.0" />
<PackageReference Include="Chickensoft.SaveFileBuilder" Version="1.1.0" />
<PackageReference Include="GodotSharp.SourceGenerators" Version="2.4.0" />
<PackageReference Include="SSH.NET" Version="2024.1.0" />
<PackageReference Include="System.IO.Abstractions" Version="21.0.29" />
<PackageReference Include="Zeroconf" Version="3.6.11" />
</ItemGroup>
<ItemGroup>
<Folder Include="src\map\dungeon\corridor\" />
</ItemGroup>
<ItemGroup>
<None Include=".editorconfig" />
</ItemGroup>
</Project>

View File

@@ -1,26 +0,0 @@
<Project Sdk="Godot.NET.Sdk/4.3.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net8.0</TargetFramework>
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'ios' ">net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Chickensoft.AutoInject" Version="2.3.0" />
<PackageReference Include="Chickensoft.GodotNodeInterfaces" Version="2.2.22" />
<PackageReference Include="Chickensoft.Introspection.Generator" Version="1.5.0" />
<PackageReference Include="Chickensoft.LogicBlocks" Version="5.4.0" />
<PackageReference Include="Chickensoft.LogicBlocks.DiagramGenerator" Version="5.4.0" />
<PackageReference Include="Chickensoft.SaveFileBuilder" Version="1.1.0" />
<PackageReference Include="GodotSharp.SourceGenerators" Version="2.4.0" />
<PackageReference Include="SSH.NET" Version="2024.1.0" />
<PackageReference Include="System.IO.Abstractions" Version="21.0.29" />
<PackageReference Include="Zeroconf" Version="3.6.11" />
</ItemGroup>
<ItemGroup>
<Folder Include="src\map\dungeon\corridor\" />
</ItemGroup>
<ItemGroup>
<None Include=".editorconfig" />
</ItemGroup>
</Project>

View File

@@ -1,19 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GameJamDungeon", "GameJamDungeon.csproj", "{B685AA99-B971-46A7-A708-00546BA0EF55}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
ExportDebug|Any CPU = ExportDebug|Any CPU
ExportRelease|Any CPU = ExportRelease|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B685AA99-B971-46A7-A708-00546BA0EF55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B685AA99-B971-46A7-A708-00546BA0EF55}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B685AA99-B971-46A7-A708-00546BA0EF55}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
{B685AA99-B971-46A7-A708-00546BA0EF55}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
{B685AA99-B971-46A7-A708-00546BA0EF55}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
{B685AA99-B971-46A7-A708-00546BA0EF55}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,26 @@
namespace Zennysoft.Game.Abstractions;
public interface IAppRepo : IDisposable
{
event Action? GameEntered;
event Action? GameExited;
event Action? SplashScreenSkipped;
event Action? MainMenuEntered;
event Action? DataViewerExited;
void SkipSplashScreen();
void OnMainMenuEntered();
void OnEnterGame();
void OnExitGame();
void OnGameOver();
void OnDataViewerExited();
}

View File

@@ -0,0 +1,13 @@
namespace Zennysoft.Game.Abstractions;
public interface IDimmableAudioStreamPlayer
{
/// <summary>Fade this dimmable audio stream track in.</summary>
public void FadeIn();
/// <summary>Fade this dimmable audio stream track out.</summary>
public void FadeOut();
public void Play(float fromPosition = 0);
public void Stop();
}

View File

@@ -0,0 +1,5 @@
namespace Zennysoft.Game.Abstractions.Entity;
public interface IBehavior
{
}

View File

@@ -0,0 +1,11 @@
namespace Zennysoft.Game.Abstractions.Entity
{
public interface IAction
{
public Task PerformAction();
}
public interface IAction<T>
{
public Task PerformAction(T arg);
}
}

View File

@@ -0,0 +1,6 @@
namespace Zennysoft.Game.Abstractions;
public interface IKillable
{
public abstract void Die();
}

View File

@@ -0,0 +1,6 @@
namespace Zennysoft.Game.Abstractions;
public interface IHealthPack
{
public int RestoreAmount { get; }
}

View File

@@ -0,0 +1,18 @@
using System.Text.Json.Serialization.Metadata;
namespace Zennysoft.Game.Abstractions;
public interface ISaveFileManager
{
public Task WriteToFile<T>(T gameData, params IJsonTypeInfoResolver?[] resolvers);
public Task WriteToFile<T>(T gameData, string filePath, params IJsonTypeInfoResolver?[] resolvers);
public Task<T?> ReadFromFile<T>(params IJsonTypeInfoResolver?[] resolvers);
public Task<T?> ReadFromFile<T>(string filePath, params IJsonTypeInfoResolver?[] resolvers);
public void DeleteSaveData(string filePath);
public void DeleteSaveData();
}

View File

@@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,50 @@
namespace Zennysoft.Game.Implementation;
using Chickensoft.GodotNodeInterfaces;
using Godot;
using Zennysoft.Game.Abstractions;
public partial class DimmableAudioStreamPlayer : AudioStreamPlayer, IDimmableAudioStreamPlayer
{
#region Constants
// -60 to -80 is considered inaudible for decibels.
public const float VOLUME_DB_INAUDIBLE = -80f;
public const double FADE_DURATION = 3d; // seconds
#endregion Constants
public ITween? FadeTween { get; set; }
public float InitialVolumeDb;
public override void _Ready()
{
InitialVolumeDb = VolumeDb;
VolumeDb = VOLUME_DB_INAUDIBLE;
}
public void FadeIn()
{
SetupFade(InitialVolumeDb, Tween.EaseType.Out);
Play();
}
public void FadeOut()
{
SetupFade(VOLUME_DB_INAUDIBLE, Tween.EaseType.In);
FadeTween!.TweenCallback(Callable.From(Stop));
}
public void SetupFade(float volumeDb, Tween.EaseType ease)
{
FadeTween?.Kill();
FadeTween = GodotInterfaces.Adapt<ITween>(CreateTween());
FadeTween.TweenProperty(
this,
"volume_db",
volumeDb,
FADE_DURATION
).SetTrans(Tween.TransitionType.Circ).SetEase(ease);
}
}

View File

@@ -0,0 +1,54 @@
namespace Zennysoft.Game.Implementation;
using Chickensoft.GodotNodeInterfaces;
using Godot;
using Zennysoft.Game.Abstractions;
public partial class DimmableAudioStreamPlayer3D : AudioStreamPlayer3D, IDimmableAudioStreamPlayer
{
#region Constants
// -60 to -80 is considered inaudible for decibels.
public const float VOLUME_DB_INAUDIBLE = -80f;
public const double FADE_DURATION = 3d; // seconds
#endregion Constants
public ITween? FadeTween { get; set; }
public float InitialVolumeDb;
public override void _Ready()
{
InitialVolumeDb = VolumeDb;
VolumeDb = VOLUME_DB_INAUDIBLE;
}
public void FadeIn()
{
SetupFade(InitialVolumeDb, Tween.EaseType.Out);
Play();
}
public void FadeOut()
{
SetupFade(VOLUME_DB_INAUDIBLE, Tween.EaseType.In);
FadeTween!.TweenCallback(Callable.From(Stop));
}
public void SetupFade(float volumeDb, Tween.EaseType ease)
{
FadeTween?.Kill();
FadeTween = GodotInterfaces.Adapt<ITween>(CreateTween());
FadeTween.TweenProperty(
this,
"volume_db",
volumeDb,
FADE_DURATION
).SetTrans(Tween.TransitionType.Circ).SetEase(ease);
}
public override void _EnterTree() => FadeIn();
public override void _ExitTree() => FadeOut();
}

View File

@@ -0,0 +1,10 @@
using Chickensoft.Collections;
namespace Zennysoft.Game.Implementation;
public interface IStackable
{
AutoProp<int> Count { get; }
void SetCount(int count);
}

View File

@@ -0,0 +1,81 @@
using Chickensoft.Collections;
using Chickensoft.Serialization.Godot;
using Chickensoft.Serialization;
using Godot;
using System.IO.Abstractions;
using System.Text.Json;
using System.Text.Json.Serialization.Metadata;
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Game.Implementation;
public class SaveFileManager : ISaveFileManager
{
private readonly IFileSystem _fileSystem;
private string _defaultSaveLocation;
public const string DEFAULT_SAVE_FILE_NAME = "game.json";
public SaveFileManager(IFileSystem fileSystem)
{
_fileSystem = fileSystem;
_defaultSaveLocation = _fileSystem.Path.Join(OS.GetUserDataDir(), DEFAULT_SAVE_FILE_NAME);
GodotSerialization.Setup();
Serializer.AddConverter(new Texture2DConverter());
}
public Task<T?> ReadFromFile<T>(params IJsonTypeInfoResolver?[] resolvers)
{
if (!_fileSystem.File.Exists(_defaultSaveLocation))
throw new FileNotFoundException();
return ReadFromFile<T>(_defaultSaveLocation, resolvers);
}
public async Task<T?> ReadFromFile<T>(string filePath, params IJsonTypeInfoResolver?[] resolvers)
{
if (!_fileSystem.File.Exists(filePath))
throw new FileNotFoundException();
var json = await _fileSystem.File.ReadAllTextAsync(filePath);
var resolver = new SerializableTypeResolver();
var upgradeDependencies = new Blackboard();
var jsonOptions = new JsonSerializerOptions
{
Converters = {
new SerializableTypeConverter(upgradeDependencies)
},
WriteIndented = true
};
jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]);
return JsonSerializer.Deserialize<T?>(json, jsonOptions);
}
public Task WriteToFile<T>(T gameData, params IJsonTypeInfoResolver?[] resolvers)
{
return WriteToFile(gameData, _defaultSaveLocation, resolvers);
}
public async Task WriteToFile<T>(T gameData, string filePath, params IJsonTypeInfoResolver?[] resolvers)
{
var resolver = new SerializableTypeResolver();
var upgradeDependencies = new Blackboard();
var jsonOptions = new JsonSerializerOptions
{
Converters = {
new SerializableTypeConverter(upgradeDependencies)
},
WriteIndented = true
};
jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]);
var json = JsonSerializer.Serialize(gameData, jsonOptions);
await _fileSystem.File.WriteAllTextAsync(filePath, json);
}
public void DeleteSaveData() => DeleteSaveData(_defaultSaveLocation);
public void DeleteSaveData(string filePath) => _fileSystem.File.Delete(filePath);
}

View File

@@ -0,0 +1,66 @@
using Godot;
using System.Text.Json.Serialization;
using System.Text.Json;
/// <summary>Basis JSON converter.</summary>
public class Texture2DConverter : JsonConverter<Texture2D>
{
/// <inheritdoc />
public override bool CanConvert(Type typeToConvert) =>
typeToConvert == typeof(Texture2D);
/// <inheritdoc />
public override Texture2D Read(
ref Utf8JsonReader reader,
Type typeToConvert,
JsonSerializerOptions options)
{
var texture2D = new Texture2D();
while (reader.Read())
{
if (reader.TokenType == JsonTokenType.EndObject)
{
return texture2D;
}
if (reader.TokenType != JsonTokenType.PropertyName)
{
continue;
}
var propertyName = reader.GetString();
reader.Read();
switch (propertyName)
{
case "resource_path":
var resourcePath = JsonSerializer.Deserialize<string>(ref reader, options);
texture2D = GD.Load<Texture2D>(resourcePath);
break;
default:
break;
}
}
throw new JsonException("Unexpected end when reading Texture2D.");
}
/// <inheritdoc />
public override void Write(
Utf8JsonWriter writer,
Texture2D value,
JsonSerializerOptions options
)
{
var resolver = options.TypeInfoResolver;
var resourcePathType = resolver!.GetTypeInfo(typeof(string), options)!;
writer.WriteStartObject();
writer.WritePropertyName("resource_path");
JsonSerializer.Serialize(writer, value.ResourcePath, resourcePathType);
writer.WriteEndObject();
}
}

View File

@@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Chickensoft.GodotNodeInterfaces" Version="2.4.0" />
<PackageReference Include="Chickensoft.Introspection" Version="2.2.0" />
<PackageReference Include="Chickensoft.Introspection.Generator" Version="2.2.0" />
<PackageReference Include="Chickensoft.Serialization.Godot" Version="0.7.6" />
<PackageReference Include="System.IO.Abstractions" Version="22.0.11" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Zennysoft.Game.Abstractions\Zennysoft.Game.Abstractions.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,70 @@
{
"files": [
"**/*.*"
],
"ignorePaths": [
"**/*.tscn",
"**/*.import",
"**/badges/**/*.*",
"**/coverage/**/*.*",
"**/.godot/**/*.*",
"**/obj/**/*.*",
"**/bin/**/*.*",
"**/nupkg/**/*.*"
],
"words": [
"assemblyfilters",
"automerge",
"branchcoverage",
"brandedoutcast",
"buildtransitive",
"camelcase",
"chickenpackage",
"Chickensoft",
"classfilters",
"contentfiles",
"CYGWIN",
"devbuild",
"endregion",
"Finalizer",
"Finalizers",
"globaltool",
"godotengine",
"godotpackage",
"issuecomment",
"justalemon",
"lcov",
"lihop",
"linecoverage",
"methodcoverage",
"missingall",
"msbuild",
"MSYS",
"nameof",
"Nerdbank",
"netstandard",
"NOLOGO",
"nupkg",
"Omnisharp",
"opencover",
"OPTOUT",
"paramref",
"pascalcase",
"Postinitialize",
"Predelete",
"renovatebot",
"reportgenerator",
"reporttypes",
"Shouldly",
"subfolders",
"targetargs",
"targetdir",
"tscn",
"typeof",
"typeparam",
"typeparamref",
"ulong",
"Unparented",
"Xunit"
]
}

View File

@@ -0,0 +1,49 @@
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Ma.Adapter;
public class AppRepo : IAppRepo
{
public event Action? SplashScreenSkipped;
public event Action? MainMenuEntered;
public event Action? GameEntered;
public event Action? GameExited;
public event Action? DataViewerExited;
private bool _disposedValue;
public void SkipSplashScreen() => SplashScreenSkipped?.Invoke();
public void OnMainMenuEntered() => MainMenuEntered?.Invoke();
public void OnEnterGame() => GameEntered?.Invoke();
public void OnExitGame() => GameExited?.Invoke();
public void OnGameOver() => GameExited?.Invoke();
public void OnDataViewerExited() => DataViewerExited?.Invoke();
protected void Dispose(bool disposing)
{
if (!_disposedValue)
{
if (disposing)
{
// Dispose managed objects.
SplashScreenSkipped = null;
MainMenuEntered = null;
GameEntered = null;
GameExited = null;
}
_disposedValue = true;
}
}
public void Dispose()
{
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
}

View File

@@ -0,0 +1,9 @@
namespace Zennysoft.Ma.Adapter;
public partial class AppLogic
{
public record Data
{
public bool ShouldLoadExistingGame { get; set; }
}
}

View File

@@ -0,0 +1,31 @@
namespace Zennysoft.Ma.Adapter;
public partial class AppLogic
{
public static class Input
{
public readonly record struct NewGame;
public readonly record struct LoadGame;
public readonly record struct LoadGameFinished;
public readonly record struct FadeInFinished;
public readonly record struct FadeOutFinished;
public readonly record struct QuitGame;
public readonly record struct GameOver;
public readonly record struct ShowLoadingScreen;
public readonly record struct SaveFileLoaded;
public readonly record struct EnemyViewerOpened;
public readonly record struct EnemyViewerExited;
public readonly record struct GalleryOpened;
}
}

View File

@@ -0,0 +1,43 @@
namespace Zennysoft.Ma.Adapter;
public partial class AppLogic
{
public static class Output
{
public readonly record struct Initialize;
public readonly record struct FadeToBlack;
public readonly record struct ShowSplashScreen;
public readonly record struct HideSplashScreen;
public readonly record struct RemoveExistingGame;
public readonly record struct PlayGame;
public readonly record struct ShowGame;
public readonly record struct HideGame;
public readonly record struct SetupGameScene;
public readonly record struct ShowLoadingScreen;
public readonly record struct ShowMainMenu;
public readonly record struct CloseGame;
public readonly record struct ExitGame;
public readonly record struct GameOver;
public readonly record struct StartLoadingSaveFile;
public readonly record struct EnemyViewerOpened;
public readonly record struct EnemyViewerExited;
public readonly record struct GalleryOpened;
}
}

View File

@@ -0,0 +1,10 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace Zennysoft.Ma.Adapter;
public partial class AppLogic
{
[Meta]
public abstract partial record State : StateLogic<State>;
}

View File

@@ -0,0 +1,13 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace Zennysoft.Ma.Adapter;
public interface IAppLogic : ILogicBlock<AppLogic.State>;
[Meta]
[LogicBlock(typeof(State), Diagram = true)]
public partial class AppLogic : LogicBlock<AppLogic.State>, IAppLogic
{
public override Transition GetInitialState() => To<State.Initialize>();
}

View File

@@ -0,0 +1,30 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Ma.Adapter;
public partial class AppLogic
{
public partial record State
{
[Meta]
public partial record EnemyViewer : State, IGet<Input.EnemyViewerExited>
{
public EnemyViewer()
{
this.OnEnter(() =>
{
Output(new Output.EnemyViewerOpened());
});
this.OnExit(() =>
{
Output(new Output.EnemyViewerExited());
});
}
public Transition On(in Input.EnemyViewerExited input) => To<MainMenu>();
}
}
}

View File

@@ -0,0 +1,37 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Ma.Adapter;
public partial class AppLogic
{
public partial record State
{
[Meta]
public partial record GameStarted : State, IGet<Input.QuitGame>
{
public GameStarted()
{
this.OnEnter(() =>
{
Output(new Output.SetupGameScene());
Output(new Output.ShowGame());
Get<IAppRepo>().OnEnterGame();
});
this.OnExit(() => Output(new Output.HideGame()));
OnAttach(() => Get<IAppRepo>().GameExited += OnGameExited);
OnDetach(() => Get<IAppRepo>().GameExited -= OnGameExited);
}
public Transition On(in Input.QuitGame input)
{
Output(new Output.CloseGame());
return To<MainMenu>();
}
public void OnGameExited() => Input(new Input.QuitGame());
}
}
}

View File

@@ -0,0 +1,21 @@
namespace Zennysoft.Ma.Adapter;
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
public partial class AppLogic
{
public partial record State
{
[Meta]
public partial record Initialize : State, IGet<Input.SaveFileLoaded>
{
public Initialize()
{
this.OnEnter(() => Output(new Output.Initialize()));
}
public Transition On(in Input.SaveFileLoaded input) => To<SplashScreen>();
}
}
}

View File

@@ -0,0 +1,24 @@
namespace Zennysoft.Ma.Adapter;
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
public partial class AppLogic
{
public partial record State
{
[Meta]
public partial record LeavingMenu : State, IGet<Input.FadeOutFinished>
{
public LeavingMenu()
{
this.OnEnter(() => Output(new Output.FadeToBlack()));
}
public Transition On(in Input.FadeOutFinished input) =>
Get<Data>().ShouldLoadExistingGame
? To<LoadingSaveFile>()
: To<GameStarted>();
}
}
}

View File

@@ -0,0 +1,21 @@
namespace Zennysoft.Ma.Adapter;
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
public partial class AppLogic
{
public partial record State
{
[Meta]
public partial record LoadingSaveFile : State, IGet<Input.SaveFileLoaded>
{
public LoadingSaveFile()
{
this.OnEnter(() => Output(new Output.StartLoadingSaveFile()));
}
public Transition On(in Input.SaveFileLoaded input) => To<MainMenu>();
}
}
}

View File

@@ -0,0 +1,27 @@
using Chickensoft.Introspection;
namespace Zennysoft.Ma.Adapter;
public partial class AppLogic
{
public partial record State
{
[Meta]
public partial record MainMenu : State, IGet<Input.NewGame>, IGet<Input.EnemyViewerOpened>, IGet<Input.QuitGame>
{
public MainMenu()
{
OnAttach(() => Output(new Output.ShowMainMenu()));
}
public Transition On(in Input.NewGame input) => To<GameStarted>();
public Transition On(in Input.EnemyViewerOpened input) => To<EnemyViewer>();
public Transition On(in Input.QuitGame input)
{
Output(new Output.ExitGame());
return ToSelf();
}
}
}
}

View File

@@ -0,0 +1,35 @@
namespace Zennysoft.Ma.Adapter;
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
using Zennysoft.Game.Abstractions;
public partial class AppLogic
{
public partial record State
{
[Meta]
public partial record SplashScreen : State, IGet<Input.FadeOutFinished>
{
public SplashScreen()
{
this.OnEnter(() => Output(new Output.ShowSplashScreen()));
OnAttach(
() =>
{
Get<IAppRepo>().SplashScreenSkipped += OnSplashScreenSkipped;
});
OnDetach(
() => Get<IAppRepo>().SplashScreenSkipped -= OnSplashScreenSkipped
);
}
public Transition On(in Input.FadeOutFinished input) => To<MainMenu>();
public void OnSplashScreenSkipped() =>
Output(new Output.HideSplashScreen());
}
}
}

View File

@@ -0,0 +1,7 @@
using Zennysoft.Game.Implementation;
namespace Zennysoft.Ma.Adapter;
public partial class BGMPlayer : DimmableAudioStreamPlayer
{
}

View File

@@ -0,0 +1,5 @@
namespace Zennysoft.Ma.Adapter;
public enum BackgroundMusic
{
}

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://d2jrktp06xsba"
path="res://.godot/imported/crossing-the-gate.mp3-f062dfcb3f59739ce7e55970f8091d25.mp3str"
[deps]
source_file="res://src/audio/music/crossing-the-gate.mp3"
dest_files=["res://.godot/imported/crossing-the-gate.mp3-f062dfcb3f59739ce7e55970f8091d25.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dfu0fksb6slhx"
path="res://.godot/imported/droney.mp3-a35fe85a5df08f09cd4cf965e60dc611.mp3str"
[deps]
source_file="res://src/audio/music/droney.mp3"
dest_files=["res://.godot/imported/droney.mp3-a35fe85a5df08f09cd4cf965e60dc611.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dn2e2hqujlia1"
path="res://.godot/imported/tar-winds.mp3-7ac6ab80e2c96dfbcd5e5c27c1154ff2.mp3str"
[deps]
source_file="res://src/audio/music/tar-winds.mp3"
dest_files=["res://.godot/imported/tar-winds.mp3-7ac6ab80e2c96dfbcd5e5c27c1154ff2.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://6002a12ecfo5"
path="res://.godot/imported/useless immune system.wav-90ff2c5c12784f54b1b15c7a7e4603b8.sample"
[deps]
source_file="res://src/audio/music/useless immune system.wav"
dest_files=["res://.godot/imported/useless immune system.wav-90ff2c5c12784f54b1b15c7a7e4603b8.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dci08kmwsu6k1"
path="res://.godot/imported/Cancel.ogg-90240069a266fcef76dd638dfd79efd5.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/Cancel.ogg"
dest_files=["res://.godot/imported/Cancel.ogg-90240069a266fcef76dd638dfd79efd5.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://nebh8kbv638p"
path="res://.godot/imported/Equip.ogg-217f5d9ca98d54921c4ec31e13fb9ba4.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/Equip.ogg"
dest_files=["res://.godot/imported/Equip.ogg-217f5d9ca98d54921c4ec31e13fb9ba4.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://myx4s8lmarc2"
path="res://.godot/imported/Heal.ogg-05b7ed0ad880ef31e2dd13ac2428a53c.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/Heal.ogg"
dest_files=["res://.godot/imported/Heal.ogg-05b7ed0ad880ef31e2dd13ac2428a53c.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://r1tryiit38i8"
path="res://.godot/imported/MenuBack.ogg-4d59ead9ffd1dde11bf2c91a5ade19a4.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/MenuBack.ogg"
dest_files=["res://.godot/imported/MenuBack.ogg-4d59ead9ffd1dde11bf2c91a5ade19a4.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dor0in0x2fg48"
path="res://.godot/imported/MoveThroughOptions.ogg-d2ab68a21096bd510cf966df8d088ca2.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/MoveThroughOptions.ogg"
dest_files=["res://.godot/imported/MoveThroughOptions.ogg-d2ab68a21096bd510cf966df8d088ca2.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dl300ljxjccju"
path="res://.godot/imported/PlayerAttack.ogg-b72a90c320c3a6f764de2be3f71a8058.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/PlayerAttack.ogg"
dest_files=["res://.godot/imported/PlayerAttack.ogg-b72a90c320c3a6f764de2be3f71a8058.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dvv6wd7rtbc7b"
path="res://.godot/imported/PlayerHitWall.ogg-429bd11f2f509307596bb8d8ac73a08d.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/PlayerHitWall.ogg"
dest_files=["res://.godot/imported/PlayerHitWall.ogg-429bd11f2f509307596bb8d8ac73a08d.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://d3sn7c614uj2n"
path="res://.godot/imported/Sort.ogg-c7758aed01332fd8ea77a27c6593a8bb.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/Sort.ogg"
dest_files=["res://.godot/imported/Sort.ogg-c7758aed01332fd8ea77a27c6593a8bb.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://bb1j3m60jns54"
path="res://.godot/imported/Unequip.ogg-b3c6ba8a77b0e6d2ec671cb12640c764.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/Unequip.ogg"
dest_files=["res://.godot/imported/Unequip.ogg-b3c6ba8a77b0e6d2ec671cb12640c764.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,32 @@
using Godot;
using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Ma.Adapter
{
public static class DamageCalculator
{
public static int CalculateDamage(AttackData damage, double defense, ElementalResistanceSet elementalResistanceSet)
{
var calculatedDamage = damage.BaseDamage;
if (!damage.IgnoreDefense)
calculatedDamage = CalculateDefenseResistance(calculatedDamage, defense);
if (!damage.IgnoreElementalResistance)
calculatedDamage = CalculateElementalResistance(calculatedDamage, elementalResistanceSet.ElementalResistance[damage.ElementType]);
return Mathf.Max(1, calculatedDamage);
}
private static int CalculateDefenseResistance(int incomingDamage, double defense)
{
var result = incomingDamage - (int)(incomingDamage * (defense / 100));
return result;
}
private static int CalculateElementalResistance(
int incomingDamage,
double elementalResistance)
{
var result = incomingDamage - (int)(incomingDamage * (elementalResistance / 100));
return result;
}
}
}

View File

@@ -0,0 +1,14 @@
namespace Zennysoft.Ma.Adapter;
public enum ElementType
{
None,
Aeolic,
Telluric,
Hydric,
Igneous,
Ferrum,
Holy,
Curse,
All
}

View File

@@ -0,0 +1,18 @@
using Chickensoft.Collections;
namespace Zennysoft.Ma.Adapter;
public interface IAttackComponent : IEntityComponent
{
public IAutoProp<int> CurrentAttack { get; }
public IAutoProp<int> MaximumAttack { get; }
public void Restore(int restoreAmount);
public void Reduce(int reduceAmount);
public void SetAttack(int attack);
public void RaiseMaximumAttack(int raiseAmount);
}

View File

@@ -0,0 +1,18 @@
using Chickensoft.Collections;
namespace Zennysoft.Ma.Adapter;
public interface IDefenseComponent : IEntityComponent
{
public IAutoProp<int> CurrentDefense { get; }
public IAutoProp<int> MaximumDefense { get; }
public void Restore(int restoreAmount);
public void Reduce(int reduceAmount);
public void SetDefense(int attack);
public void RaiseMaximumDefense(int raiseAmount);
}

View File

@@ -0,0 +1,6 @@
namespace Zennysoft.Ma.Adapter;
public interface IEntityComponent
{
public void Reset();
}

View File

@@ -0,0 +1,39 @@
using Chickensoft.Collections;
using Godot;
using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Ma.Adapter;
public interface IEquipmentComponent : IEntityComponent
{
public IAutoProp<IWeapon> EquippedWeapon { get; }
public IAutoProp<IArmor> EquippedArmor { get; }
public IAutoProp<IAccessory> EquippedAccessory { get; }
public IAutoProp<IEquipableItem> EquippedAmmo { get; }
public void Equip(IEquipableItem equipable);
public void Unequip(IEquipableItem equipable);
public bool IsItemEquipped(IEquipableItem item);
public void UpdateEquipment(IEquipableItem equipable);
public bool AugmentableEquipmentExists();
public int BonusAttack { get; }
public int BonusDefense { get; }
public int BonusHP { get; }
public int BonusVT { get; }
public int BonusLuck { get; }
public ElementalResistanceSet ElementalResistance { get; }
public event Action<IEquipableItem> EquipmentChanged;
}

View File

@@ -0,0 +1,24 @@
using Chickensoft.Collections;
namespace Zennysoft.Ma.Adapter;
public interface IExperiencePointsComponent : IEntityComponent
{
public IAutoProp<int> CurrentExp { get; }
public IAutoProp<int> ExpToNextLevel { get; }
public IAutoProp<double> ExpGainRate { get; }
public IAutoProp<int> Level { get; }
public void ModifyExpGainRate(double newRate);
public void Gain(int baseExpGain);
public void GainUnmodified(int flateRateExpGain);
public void LevelUp();
public event Action PlayerLevelUp;
}

View File

@@ -0,0 +1,25 @@
using Chickensoft.Collections;
namespace Zennysoft.Ma.Adapter;
public interface IHealthComponent : IEntityComponent
{
public IAutoProp<int> CurrentHP { get; }
public IAutoProp<int> MaximumHP { get; }
public event Action? HealthReachedZero;
public event Action? DamageTaken;
public bool AtFullHealth { get; }
public void Heal(int healAmount);
public void Damage(int damageAmount);
public void SetCurrentHealth(int health);
public void SetMaximumHealth(int health);
public void RaiseMaximumHP(int raiseAmount, bool restoreHP = false);
}

View File

@@ -0,0 +1,10 @@
using Chickensoft.Collections;
namespace Zennysoft.Ma.Adapter;
public interface ILuckComponent : IEntityComponent
{
public IAutoProp<int> Luck { get; }
public void IncreaseLuck(int value);
}

View File

@@ -0,0 +1,22 @@
using Chickensoft.Collections;
namespace Zennysoft.Ma.Adapter;
public interface IVTComponent : IEntityComponent
{
public IAutoProp<int> CurrentVT { get; }
public IAutoProp<int> MaximumVT { get; }
public bool AtFullVT { get; }
public void Restore(int restoreAmount);
public void Reduce(int reduceAmount);
public void SetVT(int vt);
public void RaiseMaximumVT(int raiseAmount, bool restoreVT = true);
public void SetMaximumVT(int vt);
}

View File

@@ -0,0 +1,3 @@
namespace Zennysoft.Ma.Adapter;
public record AttackData(int BaseDamage, ElementType ElementType, bool IgnoreDefense = false, bool IgnoreElementalResistance = false);

View File

@@ -0,0 +1 @@
uid://ci7va4hsq6hyt

View File

@@ -0,0 +1 @@
uid://87d8kluait8y

View File

@@ -0,0 +1,9 @@
[gd_scene load_steps=2 format=3 uid="uid://c7e5g8l6wuph"]
[ext_resource type="Script" uid="uid://87d8kluait8y" path="res://src/enemy/behaviors/PatrolBehavior.cs" id="1_lobva"]
[node name="NavigationAgent" type="NavigationAgent3D"]
avoidance_enabled = true
debug_enabled = true
script = ExtResource("1_lobva")
_patrolSpeed = 100.0

View File

@@ -0,0 +1,40 @@
using Chickensoft.Serialization;
namespace Zennysoft.Ma.Adapter.Entity
{
public record ElementalResistanceSet
{
[Save("elemental_resist_set")]
public Dictionary<ElementType, double> ElementalResistance { get; }
public static ElementalResistanceSet None => new ElementalResistanceSet(0, 0, 0, 0, 0, 0, 0);
public ElementalResistanceSet(double aeolicResistance, double hydricResistance, double igneousResistance, double ferrumResistance, double telluricResistance, double holyResistance, double curseResistance)
{
ElementalResistance = new Dictionary<ElementType, double>
{
{ ElementType.None, 0 },
{ ElementType.Aeolic, aeolicResistance },
{ ElementType.Hydric, hydricResistance },
{ ElementType.Igneous, igneousResistance },
{ ElementType.Ferrum, ferrumResistance },
{ ElementType.Telluric, telluricResistance },
{ ElementType.Holy, holyResistance },
{ ElementType.Curse, curseResistance },
{ ElementType.All, aeolicResistance + hydricResistance + igneousResistance + ferrumResistance + telluricResistance + holyResistance + curseResistance },
};
}
public static ElementalResistanceSet operator +(ElementalResistanceSet left, ElementalResistanceSet right)
{
return new ElementalResistanceSet(
left.ElementalResistance[ElementType.Aeolic] + right.ElementalResistance[ElementType.Aeolic],
left.ElementalResistance[ElementType.Hydric] + right.ElementalResistance[ElementType.Hydric],
left.ElementalResistance[ElementType.Igneous] + right.ElementalResistance[ElementType.Igneous],
left.ElementalResistance[ElementType.Ferrum] + right.ElementalResistance[ElementType.Ferrum],
left.ElementalResistance[ElementType.Telluric] + right.ElementalResistance[ElementType.Telluric],
left.ElementalResistance[ElementType.Holy] + right.ElementalResistance[ElementType.Holy],
left.ElementalResistance[ElementType.Curse] + right.ElementalResistance[ElementType.Curse]);
}
}
}

View File

@@ -0,0 +1,42 @@
using Chickensoft.GodotNodeInterfaces;
using Godot;
using System.Collections.Immutable;
using Zennysoft.Game.Ma;
namespace Zennysoft.Ma.Adapter.Entity
{
public interface IEnemy : ICharacterBody3D
{
public void Activate();
public void Idle();
public void Die();
public void PerformAction();
public void ReturnToDefaultState();
public void OnAbsorb();
public void OnMorph();
public IDungeonRoom GetCurrentRoom(ImmutableList<IDungeonRoom> dungeonRooms);
public void MoveEnemyToNewRoom(IDungeonRoom newRoom);
public IHealthComponent HealthComponent { get; }
public IAttackComponent AttackComponent { get; }
public IDefenseComponent DefenseComponent { get; }
public ElementalResistanceSet ElementalResistanceSet { get; }
public int InitialHP { get; }
public int InitialAttack { get; }
public int InitialDefense { get; }
}
}

View File

@@ -0,0 +1,9 @@
using Godot;
namespace Zennysoft.Ma.Adapter.Entity
{
public interface IKnockbackable
{
void Knockback(float impulse, Vector3 direction);
}
}

View File

@@ -0,0 +1,167 @@
using Zennysoft.Ma.Adapter;
public class Augment
{
public JewelTags AugmentTag;
public Augment(JewelTags tag, IAugmentType augment)
{
AugmentTag = tag;
AugmentType = augment;
}
public IAugmentType AugmentType { get; set; }
}
public class HPRecoverySpeedAugment : IAugmentType
{
private readonly IPlayer _player;
public HPRecoverySpeedAugment(IPlayer player)
{
_player = player;
}
public void Apply() => _player.HealthTimerHPRate += 2;
public void Remove() => _player.HealthTimerHPRate -= 2;
}
public class BasicAugment : IAugmentType
{
public void Apply()
{
// do nothing
}
public void Remove()
{
// do nothing
}
}
public class HastenVTAugment : IAugmentType
{
private readonly IPlayer _player;
public HastenVTAugment(IPlayer player)
{
_player = player;
}
public void Apply() => _player.ModifyHealthTimerSpeed(_player.HealthTimerSpeedModifier + 0.25f);
public void Remove() => _player.ModifyHealthTimerSpeed(_player.HealthTimerSpeedModifier - 0.25f);
}
public class SlowVTReductionAugment : IAugmentType
{
private readonly IPlayer _player;
public SlowVTReductionAugment(IPlayer player)
{
_player = player;
}
public void Apply() => _player.ModifyHealthTimerSpeed(_player.HealthTimerSpeedModifier - 0.25f);
public void Remove() => _player.ModifyHealthTimerSpeed(_player.HealthTimerSpeedModifier + 0.25f);
}
public class IncreaseEXPRateAugment : IAugmentType
{
private readonly IPlayer _player;
public IncreaseEXPRateAugment(IPlayer player)
{
_player = player;
}
public void Apply() => _player.ExperiencePointsComponent.ModifyExpGainRate(_player.ExperiencePointsComponent.ExpGainRate.Value + 0.25f);
public void Remove() => _player.ExperiencePointsComponent.ModifyExpGainRate(_player.ExperiencePointsComponent.ExpGainRate.Value - 0.25f);
}
public class LowerEXPRateAugment : IAugmentType
{
private readonly IPlayer _player;
public LowerEXPRateAugment(IPlayer player)
{
_player = player;
}
public void Apply() => _player.ExperiencePointsComponent.ModifyExpGainRate(_player.ExperiencePointsComponent.ExpGainRate.Value - 0.25f);
public void Remove() => _player.ExperiencePointsComponent.ModifyExpGainRate(_player.ExperiencePointsComponent.ExpGainRate.Value + 0.25f);
}
public class LowerHPRecoveryAugment : IAugmentType
{
private readonly IPlayer _player;
public LowerHPRecoveryAugment(IPlayer player)
{
_player = player;
}
public void Apply() => _player.HealthTimerHPRate -= 1;
public void Remove() => _player.HealthTimerHPRate += 1;
}
public class IdentifyAllItemsAugment : IAugmentType
{
private readonly IPlayer _player;
public IdentifyAllItemsAugment(IPlayer player)
{
_player = player;
}
public void Apply()
{
_player.AutoIdentifyItems = true;
foreach (var item in _player.Inventory.Items.ToList())
{
if (item.ItemTag == ItemTag.MysteryItem)
_player.IdentifyItem(item);
}
}
public void Remove()
{
var weaponAugment = _player.EquipmentComponent.EquippedWeapon.Value.Augment;
var armorAugment = _player.EquipmentComponent.EquippedArmor.Value.Augment;
var accessoryAugment = _player.EquipmentComponent.EquippedAccessory.Value.Augment;
var augments = new List<Augment?>() { weaponAugment, armorAugment, accessoryAugment };
if (augments.Count(x => x != null && x.AugmentTag == JewelTags.AutoIdentifyAllItems) > 1)
return;
else
_player.AutoIdentifyItems = false;
}
}
public class RevivePlayerAugment : IAugmentType
{
private readonly IPlayer _player;
public RevivePlayerAugment(IPlayer player)
{
_player = player;
}
public void Apply()
{
_player.AutoRevive = true;
}
public void Remove()
{
var weaponAugment = _player.EquipmentComponent.EquippedWeapon.Value.Augment;
var armorAugment = _player.EquipmentComponent.EquippedArmor.Value.Augment;
var accessoryAugment = _player.EquipmentComponent.EquippedAccessory.Value.Augment;
var augments = new List<Augment?>() { weaponAugment, armorAugment, accessoryAugment };
if (augments.Count(x => x != null && x.AugmentTag == JewelTags.ReviveUserOnce) > 1)
return;
else
_player.AutoRevive = false;
}
}

View File

@@ -0,0 +1,6 @@
public interface IAugmentType
{
void Apply();
void Remove();
}

View File

@@ -0,0 +1,8 @@
namespace Zennysoft.Ma.Adapter;
public enum AccessoryTag
{
None,
HalfVTConsumption,
StatusEffectImmunity
}

View File

@@ -0,0 +1,6 @@
namespace Zennysoft.Ma.Adapter;
public enum BoxItemTag
{
RandomNewItem,
}

View File

@@ -0,0 +1,24 @@
namespace Zennysoft.Ma.Adapter;
public enum ItemTag
{
None,
BreaksOnChange,
MysteryItem,
DamagesPlayer,
ContainsRestorative,
ContainsWeapon,
ContainsArmor,
ContainsBox,
RandomSpell,
ContainsAccessory,
DropTo1HPAndGainRareItem,
TradeOneRandomItem,
TradeAllRandomItems,
ContainsUnobtainedItem,
ContainsBasicItem,
RestrictUnequip,
UnequipAllItems,
EjectAllItems,
UseAllItems
}

View File

@@ -0,0 +1,21 @@
public enum JewelTags
{
None,
AeolicElement,
IncreaseHPRecovery,
HastenVT,
LowerEXPGain,
Glue,
ItemRescue,
HydricElement,
IgneousElement,
IncreaseEXPGain,
LowerHPRecovery,
SlowVTReduction,
AutoIdentifyAllItems,
ReviveUserOnce,
TelluricElement,
IncreaseAtkDefLuck,
IncreaseLuck
}

View File

@@ -0,0 +1,24 @@
namespace Zennysoft.Ma.Adapter;
public enum UsableItemTag
{
None,
IdentifyAllItemsCostHP,
BriefImmunity,
SwapHPAndVT,
TeleportAllEnemiesToRoom,
TurnAllEnemiesIntoHealingItem,
KillHalfEnemiesInRoom,
AbsorbHPFromAllEnemiesInRoom,
HealsAllInRoomToMaxHP,
DealElementalDamageToAllEnemiesInRoom,
RaiseCurrentWeaponAttack,
RaiseCurrentDefenseArmor,
RaiseLevel,
RandomEffect,
DoubleExp,
LowerTargetTo1HP,
CanChangeAffinity,
TeleportToRandomLocation,
WarpToExitIfFound
}

View File

@@ -0,0 +1,18 @@
namespace Zennysoft.Ma.Adapter;
public enum WeaponTag
{
None,
SelfDamage,
IgnoreAffinity,
IgnoreDefense,
Knockback,
InverseHPAttackPower,
RustChanceSelfAndEnemy,
Instakill,
DegradeOnSwing,
DoubleAttack,
TripleAttack,
ElementalProjectile,
KineticProjectile
}

View File

@@ -0,0 +1,185 @@
using Chickensoft.Collections;
using Godot;
using Zennysoft.Game.Abstractions;
using Zennysoft.Game.Implementation;
using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Ma.Adapter;
public interface IGameRepo : IDisposable
{
event Action? Ended;
event Action? CloseInventoryEvent;
event Action<string>? AnnounceMessageOnMainScreenEvent;
event Action<string>? AnnounceMessageInInventoryEvent;
event Action<int>? DoubleExpTimeStart;
event Action? DoubleExpTimeEnd;
event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent;
event Action? PlayerAttack;
event Action? PlayerAttackedWall;
event Action? PlayerAttackedEnemy;
event Action<IEquipableItem>? EquippedItem;
event Action<IEquipableItem>? UnequippedItem;
event Action<IEnemy>? EnemyDied;
void Pause();
void Resume();
IAutoProp<bool> IsPaused { get; }
public void StartDoubleEXP(TimeSpan lengthOfEffect);
public void EndDoubleExp();
public void AnnounceMessageOnMainScreen(string message);
public void AnnounceMessageInInventory(string message);
public void RemoveItemFromInventory(IBaseInventoryItem item);
public void OnPlayerAttack();
public void OnPlayerAttackedWall();
public void CloseInventory();
public void GameEnded();
public void OnEquippedItem(IEquipableItem item);
public void OnUnequippedItem(IEquipableItem item);
public void OnEnemyDied(IEnemy enemy);
public double ExpRate { get; }
}
public class GameRepo : IGameRepo
{
public event Action? Ended;
public event Action? CloseInventoryEvent;
public event Action<string>? AnnounceMessageOnMainScreenEvent;
public event Action<string>? AnnounceMessageInInventoryEvent;
public event Action<int>? DoubleExpTimeStart;
public event Action? DoubleExpTimeEnd;
public event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent;
public event Action? PlayerAttack;
public event Action? PlayerAttackedWall;
public event Action? PlayerAttackedEnemy;
public event Action<IEquipableItem>? EquippedItem;
public event Action<IEquipableItem>? UnequippedItem;
public event Action<IEnemy>? EnemyDied;
public IAutoProp<bool> IsPaused => _isPaused;
private readonly AutoProp<bool> _isPaused;
public double ExpRate { get; private set; }
private bool _disposedValue;
public GameRepo()
{
_isPaused = new AutoProp<bool>(true);
ExpRate = 1;
}
public void Pause()
{
_isPaused.OnNext(true);
GD.Print("Paused");
}
public void Resume()
{
_isPaused.OnNext(false);
GD.Print("Resume");
}
public void StartDoubleEXP(TimeSpan lengthOfEffect)
{
AnnounceMessageInInventory("Experience points temporarily doubled.");
DoubleExpTimeStart?.Invoke(lengthOfEffect.Seconds);
ExpRate *= 2;
}
public void EndDoubleExp()
{
AnnounceMessageOnMainScreen("Experience points effect wore off.");
DoubleExpTimeEnd?.Invoke();
ExpRate /= 2;
}
public void AnnounceMessageOnMainScreen(string message)
{
AnnounceMessageOnMainScreenEvent?.Invoke(message);
}
public void AnnounceMessageInInventory(string message)
{
AnnounceMessageInInventoryEvent?.Invoke(message);
}
public void RemoveItemFromInventory(IBaseInventoryItem item)
{
RemoveItemFromInventoryEvent?.Invoke(item);
}
public void OnPlayerAttack()
{
PlayerAttack?.Invoke();
}
public void OnPlayerAttackedWall()
{
PlayerAttackedWall?.Invoke();
}
public void CloseInventory()
{
CloseInventoryEvent?.Invoke();
}
public void OnEquippedItem(IEquipableItem item) => EquippedItem?.Invoke(item);
public void OnUnequippedItem(IEquipableItem item) => UnequippedItem?.Invoke(item);
public void OnEnemyDied(IEnemy enemy) => EnemyDied?.Invoke(enemy);
public void GameEnded()
{
Pause();
Ended?.Invoke();
}
protected void Dispose(bool disposing)
{
if (!_disposedValue)
{
if (disposing)
{
_isPaused.OnCompleted();
_isPaused.Dispose();
}
_disposedValue = true;
}
}
public void Dispose()
{
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
}

View File

@@ -0,0 +1,13 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace Zennysoft.Ma.Adapter;
public interface IGameState : ILogicBlock<GameState.State>;
[Meta]
[LogicBlock(typeof(State), Diagram = true)]
public partial class GameState : LogicBlock<GameState.State>, IGameState
{
public override Transition GetInitialState() => To<State.InGame>();
}

View File

@@ -0,0 +1,35 @@
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
public static class Input
{
public readonly record struct NewGame;
public readonly record struct LoadGame;
public readonly record struct ExitGame;
public readonly record struct LoadNextFloor;
public readonly record struct InventoryButtonPressed;
public readonly record struct InteractButtonPressed;
public readonly record struct PauseButtonPressed;
public readonly record struct DebugButtonPressed;
public readonly record struct FloorExitEntered;
public readonly record struct AskForTeleport;
public readonly record struct UseTeleport;
public readonly record struct CloseTeleport;
public readonly record struct CloseInventory;
public readonly record struct GameOver;
}
}

View File

@@ -0,0 +1,33 @@
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
public static class Output
{
public readonly record struct InitializeGame;
public readonly record struct ExitGame;
public readonly record struct LoadGameFromFile;
public readonly record struct OpenInventoryMenu;
public readonly record struct CloseInventoryMenu;
public readonly record struct OpenPauseScreen;
public readonly record struct ClosePauseScreen;
public readonly record struct LoadNextFloor;
public readonly record struct OpenTeleportScreen;
public readonly record struct OpenFloorExitScreen;
public readonly record struct OpenDebugMenu;
public readonly record struct CloseDebugMenu;
public readonly record struct GameOver;
}
}

View File

@@ -0,0 +1,12 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
[Meta]
public abstract partial record State : StateLogic<State>
{
}
}

View File

@@ -0,0 +1,31 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
using Godot;
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
public partial record State
{
[Meta, LogicBlock(typeof(State), Diagram = true)]
public partial record AskForTeleportScreen : State, IGet<Input.UseTeleport>, IGet<Input.CloseTeleport>
{
public AskForTeleportScreen()
{
OnAttach(() => Get<IGameRepo>().Pause());
}
public Transition On(in Input.UseTeleport input)
{
Output(new Output.OpenFloorExitScreen());
return To<FloorExitScreen>();
}
public Transition On(in Input.CloseTeleport input)
{
return To<InGame>();
}
}
}
}

View File

@@ -0,0 +1,20 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
public partial record State
{
[Meta, LogicBlock(typeof(State), Diagram = true)]
public partial record DebugMenu : InGame, IGet<Input.DebugButtonPressed>
{
public Transition On(in Input.DebugButtonPressed input)
{
Output(new Output.CloseDebugMenu());
return To<InGame>();
}
}
}
}

View File

@@ -0,0 +1,25 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
public partial record State
{
[Meta, LogicBlock(typeof(State), Diagram = true)]
public partial record FloorExitScreen : State, IGet<Input.LoadNextFloor>
{
public FloorExitScreen()
{
OnAttach(() => Get<IGameRepo>().Pause());
}
public Transition On(in Input.LoadNextFloor input)
{
Output(new Output.LoadNextFloor());
return To<InGame>();
}
}
}
}

View File

@@ -0,0 +1,27 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
public partial record State
{
[Meta, LogicBlock(typeof(State), Diagram = true)]
public partial record GameOver : InGame, IGet<Input.NewGame>, IGet<Input.ExitGame>
{
public Transition On(in Input.NewGame input)
{
Output(new Output.InitializeGame());
return To<InGame>();
}
public Transition On(in Input.ExitGame input)
{
Output(new Output.ClosePauseScreen());
Output(new Output.ExitGame());
return To<State>();
}
}
}
}

View File

@@ -0,0 +1,49 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
public partial record State
{
[Meta, LogicBlock(typeof(State), Diagram = true)]
public partial record InGame : State,
IGet<Input.InventoryButtonPressed>,
IGet<Input.PauseButtonPressed>,
IGet<Input.DebugButtonPressed>,
IGet<Input.FloorExitEntered>,
IGet<Input.GameOver>
{
public Transition On(in Input.InventoryButtonPressed input)
{
Output(new Output.OpenInventoryMenu());
return To<InventoryScreen>();
}
public Transition On(in Input.PauseButtonPressed input)
{
Output(new Output.OpenPauseScreen());
return To<PauseScreen>();
}
public Transition On(in Input.DebugButtonPressed input)
{
Output(new Output.OpenDebugMenu());
return To<DebugMenu>();
}
public Transition On(in Input.FloorExitEntered input)
{
Output(new Output.OpenTeleportScreen());
return To<AskForTeleportScreen>();
}
public Transition On(in Input.GameOver input)
{
Output(new Output.GameOver());
return To<GameOver>();
}
}
}
}

View File

@@ -0,0 +1,26 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
public partial record State
{
[Meta, LogicBlock(typeof(State), Diagram = true)]
public partial record InventoryScreen : State, IGet<Input.InteractButtonPressed>, IGet<Input.CloseInventory>
{
public Transition On(in Input.InteractButtonPressed input)
{
Output(new Output.CloseInventoryMenu());
return To<InGame>();
}
public Transition On(in Input.CloseInventory input)
{
Output(new Output.CloseInventoryMenu());
return To<InGame>();
}
}
}
}

View File

@@ -0,0 +1,28 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
using static Zennysoft.Ma.Adapter.GameState.Output;
namespace Zennysoft.Ma.Adapter;
public partial class GameState
{
public partial record State
{
[Meta, LogicBlock(typeof(State), Diagram = true)]
public partial record PauseScreen : State, IGet<Input.PauseButtonPressed>, IGet<Input.ExitGame>
{
public Transition On(in Input.PauseButtonPressed input)
{
Output(new Output.ClosePauseScreen());
return To<InGame>();
}
public Transition On(in Input.ExitGame input)
{
Output(new Output.ClosePauseScreen());
Output(new Output.ExitGame());
return To<State>();
}
}
}
}

View File

@@ -0,0 +1,5 @@
using Zennysoft.Ma.Adapter;
public interface IAccessory : IEquipableItem, IAugmentableItem
{
}

Some files were not shown because too many files have changed in this diff Show More