diff options
author | Astatin <[email protected]> | 2025-09-05 15:29:27 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-09-05 15:29:27 +0200 |
commit | 03c359596bdacbf39cdc244d2f164d0ec94d5505 (patch) | |
tree | 7e4d8d8056b2560f550d68635caa2ae851c7b911 | |
parent | 16c308b2567d1dddb44ca928fe376b4a6219744f (diff) |
-rw-r--r-- | dialogues/demo_quest.gbasm | 2 | ||||
-rw-r--r-- | dialogues/text.gbasm | 4 | ||||
-rw-r--r-- | dialogues/text.gbtxt | 2 | ||||
-rw-r--r-- | entity/init.gbasm | 31 | ||||
-rw-r--r-- | entity/list.gbasm | 55 | ||||
-rw-r--r-- | entity/questgoal.gbasm | 16 | ||||
-rw-r--r-- | main.gbasm | 4 | ||||
-rw-r--r-- | map/dungeons.gbasm | 23 | ||||
-rw-r--r-- | map/dungeons/campsite.gbasm | 6 | ||||
-rw-r--r-- | map/generationevents.gbasm | 63 | ||||
-rw-r--r-- | scripts/generate-tiledata.py | 9 | ||||
-rw-r--r-- | sprites/human/back.png | bin | 579 -> 610 bytes | |||
-rw-r--r-- | sprites/human/front.png | bin | 626 -> 646 bytes | |||
-rw-r--r-- | sprites/human/side.png | bin | 619 -> 650 bytes | |||
-rw-r--r-- | tileset.gbasm | 22 | ||||
-rw-r--r-- | utils.gbasm | 9 |
16 files changed, 181 insertions, 65 deletions
diff --git a/dialogues/demo_quest.gbasm b/dialogues/demo_quest.gbasm index f9414e9..0547729 100644 --- a/dialogues/demo_quest.gbasm +++ b/dialogues/demo_quest.gbasm @@ -1,5 +1,5 @@ Demo_quest_bunny: -.TEXTB =Bunny_Header_Text =Dialogue_1_1b +.TEXTB =Human_Header_Text =Dialogue_1_1b .TEXT =Dialogue_1_2t =Empty .TEXT =Dialogue_1_3t =Dialogue_1_3b .TEXT =Dialogue_1_4t =Empty diff --git a/dialogues/text.gbasm b/dialogues/text.gbasm index c952b74..ea176b4 100644 --- a/dialogues/text.gbasm +++ b/dialogues/text.gbasm @@ -1,8 +1,8 @@ ; THIS FILE IS GENERATED AUTOMATICALLY, DO NOT CHANGE Empty: .DB , 0xff -Bunny_Header_Text: -.DB 0x8b, 0x9e, 0x97, 0x97, 0xa2, 0xaa, 0xff +Human_Header_Text: +.DB 0x9d, 0x92, 0x97, 0xaa, 0xff Unknown_Header_Text: .DB 0xa6, 0xa6, 0xa6, 0xaa, 0xff Double_Exclamation: diff --git a/dialogues/text.gbtxt b/dialogues/text.gbtxt index 0101507..51a18e2 100644 --- a/dialogues/text.gbtxt +++ b/dialogues/text.gbtxt @@ -1,5 +1,5 @@ Empty: -Bunny_Header_Text: Bunny: +Human_Header_Text: Tin: Unknown_Header_Text: ???: Double_Exclamation: !! diff --git a/entity/init.gbasm b/entity/init.gbasm index 173bf32..0f0f354 100644 --- a/entity/init.gbasm +++ b/entity/init.gbasm @@ -97,16 +97,24 @@ Initialize_Enemy: ; HL => pointer to entity struct RET Z ADD $03 -Initialize_Entity: ; HL => pointer to entity struct, A => entity loaded index, 1 in $tmp_var_3 if should retry if collsion (could potentially fail multiple time/infinite loop) +Initialize_Entity: ; HL => pointer to entity struct, A => entity loaded index, + ; $tmp_var_3: + ; = 01 => if should retry if collsion (could potentially fail multiple time/infinite loop) + ; = x2 => use BC as XY, and high nibble as direction LD E, A SLA A SLA A - LD B, A + LD D, A SLA A - ADD B + ADD D INC A LD (HL), A + LD A, $tmp_var_3 + AND $0f + CP $02 + JR Z, =.XY_BC + LD A, $mem_bunny_current_room_idx CALL =Pick_Room_position_Avoid_A @@ -118,7 +126,6 @@ Initialize_Entity: ; HL => pointer to entity struct, A => entity loaded index, 1 XOR A LD (HL), A - LD A, $tmp_var_3 CP $01 @@ -129,6 +136,7 @@ Initialize_Entity: ; HL => pointer to entity struct, A => entity loaded index, 1 .no_collision: + .XY_BC: INC HL LD (HL), B INC HL @@ -138,7 +146,20 @@ Initialize_Entity: ; HL => pointer to entity struct, A => entity loaded index, 1 CALL =Carve_Entity_Collision_Map ; Direction - LD A, $33 + + LD A, $tmp_var_3 + AND $0f + CP $02 + LD A, $44 + JR NZ, =.set_direction + LD A, $tmp_var_3 + AND $f0 + DBG + LD D, A + SWAP A + OR D + + .set_direction: LD (HL+), A LD A, E diff --git a/entity/list.gbasm b/entity/list.gbasm index 7623b39..3e98c42 100644 --- a/entity/list.gbasm +++ b/entity/list.gbasm @@ -23,9 +23,6 @@ Entity_list: ; Starting mana .DB $05 - ; Spawning rate (2 lsb) - .DB 0b10 - .PADTO =.Fox+8 .Frog: @@ -47,9 +44,6 @@ Entity_list: ; Starting mana .DB $05 - ; Spawning rate (2 lsb) - .DB 0b01 - .PADTO =.Frog+8 .Cat: @@ -71,9 +65,6 @@ Entity_list: ; Starting mana .DB $00 - ; Spawning rate (2 lsb) - .DB 0b11 - .PADTO =.Cat+8 .Penguin: @@ -95,9 +86,6 @@ Entity_list: ; Starting mana .DB $05 - ; Spawning rate (2 lsb) - .DB 0b11 - .PADTO =.Penguin+8 .Mouse: @@ -119,9 +107,6 @@ Entity_list: ; Starting mana .DB $00 - ; Spawning rate (2 lsb) - .DB 0b10 - .PADTO =.Mouse+8 .Fimsh: @@ -143,14 +128,11 @@ Entity_list: ; Starting mana .DB $00 - ; Spawning rate (2 lsb) - .DB 0b11 - .PADTO =.Fimsh+8 - .QuestGoalBunny: + .Human: ; Sprite address - .SPRITE =Entity_Tile_Image_Data.Bunny + .SPRITE =Entity_Tile_Image_Data.Human ; Turn Jump Table index .DB $05 @@ -167,10 +149,7 @@ Entity_list: ; Starting mana .DB $00 - ; Spawning rate (2 lsb) - .DB 0b00 - - .PADTO =.QuestGoalBunny+8 + .PADTO =.Human+8 .Bug: ; Sprite address @@ -191,11 +170,29 @@ Entity_list: ; Starting mana .DB $05 - ; Spawning rate (2 lsb) - .DB 0b11 - .PADTO =.Bug+8 + .Static_Human: + ; Sprite address + .SPRITE =Entity_Tile_Image_Data.Human + + ; Turn Jump Table index + .DB $0a + + ; Interaction Jump Table index + .DB $02 + + ; Starting health + .DB $00 + + ; Starting status + .DB $02 + + ; Starting mana + .DB $00 + + .PADTO =.Static_Human+8 + Turn_Jump_table: ; 00 RET @@ -239,6 +236,10 @@ Turn_Jump_table: JP =Bug_Turn NOP + ; 0a + JP =Static_Human_Turn + NOP + .INCLUDE "entity/bunny.gbasm" .INCLUDE "entity/fox.gbasm" .INCLUDE "entity/cat.gbasm" diff --git a/entity/questgoal.gbasm b/entity/questgoal.gbasm index 64cd745..17eecb8 100644 --- a/entity/questgoal.gbasm +++ b/entity/questgoal.gbasm @@ -99,3 +99,19 @@ QuestGoal_Turn: POP BC POP HL RET + +Static_Human_Turn: + LD A, $mem_map_loading_flags + BIT 3, A + RET Z + + INC HL + INC HL + INC HL + + LD (HL), $11 + + DEC HL + DEC HL + DEC HL + RET @@ -20,9 +20,9 @@ Entrypoint: LD A, $01 LD $mem_number_of_attacks, A - LD A, bank(=Morning_Forest) + LD A, bank(=Camp_Site) LD ($mem_dungeon), A - LD HL, ptr(=Morning_Forest) + LD HL, ptr(=Camp_Site) LD A, H LD ($mem_dungeon+1), A LD A, L diff --git a/map/dungeons.gbasm b/map/dungeons.gbasm index f6ac819..8afe451 100644 --- a/map/dungeons.gbasm +++ b/map/dungeons.gbasm @@ -30,14 +30,29 @@ .END .MACRODEF GEN_EVENT_SPECIAL_ENTITY floor entity_idx - $start: - .DB low($floor), $02, low($entity_idx) - .PADTO =$start+8 + $load: + .DB low($floor), $03, $07, low($entity_idx) + .PADTO =$load+8 + $spawn: + .DB low($floor), $04, $07 + .PADTO =$spawn+8 +.END + +.MACRODEF GEN_EVENT_LOAD_ENTITY floor loaded_entity_idx entity_idx + $load: + .DB low($floor), $03, low($loaded_entity_idx), low($entity_idx) + .PADTO =$load+8 +.END + +.MACRODEF GEN_EVENT_SPAWN_LOADED_ENTITY_XY floor loaded_entity_idx arg_x arg_y arg_d + $spawn: + .DB low($floor), $05, low($loaded_entity_idx), low($arg_x), low($arg_y), low($arg_d) + .PADTO =$spawn+8 .END .MACRODEF GEN_EVENT_REMOVE_STAIRS floor $start: - .DB low($floor), $03 + .DB low($floor), $02 .PADTO =$start+8 .END diff --git a/map/dungeons/campsite.gbasm b/map/dungeons/campsite.gbasm index 2ee4a1f..cef4abb 100644 --- a/map/dungeons/campsite.gbasm +++ b/map/dungeons/campsite.gbasm @@ -5,7 +5,7 @@ Camp_Site: .flag: .DB 0b00100001 - .tilemap_padding: + .tilemap: .DB bank(=_map_Test) .DB ptr(=_map_Test) @@ -13,10 +13,12 @@ Camp_Site: .DB bank(=Camp_Site_Fire_Animation) .DB ptr(=Camp_Site_Fire_Animation) - .generation_events.size: + .generation_events.size_padding: .DB low(=.generation_events.end-=.generation_events) .generation_events: + .GEN_EVENT_LOAD_ENTITY $01 $05 $08 + .GEN_EVENT_SPAWN_LOADED_ENTITY_XY $01 $05 $11 $10 $01 .GEN_EVENT_REMOVE_STAIRS $01 .generation_events.end: diff --git a/map/generationevents.gbasm b/map/generationevents.gbasm index b540508..5fc35de 100644 --- a/map/generationevents.gbasm +++ b/map/generationevents.gbasm @@ -4,7 +4,7 @@ Generation_Event_Execution: LD HL, $mem_dungeon_generation_events .loop: LD A, (HL+) - CP $00 + AND A JR Z, =.skip CP D JR NZ, =.skip @@ -24,7 +24,7 @@ Generation_Event_Execution: AND $f8 ADD $08 LD L, A - CP $00 + AND A JR NZ, =.loop RET @@ -40,11 +40,20 @@ Generation_Event_Jump_Table: NOP ; 02 - JP =.Entity + JP =.Remove_Stairs NOP ; 03 - JP =.Remove_Stairs + JP =.Load_Entity + NOP + + ; 04 + JP =.Entity_Random_Room + NOP + + ; 05 + JP =.Entity_XY + NOP .Dialogue_Script: LD A, $enum_dungeon_dialogue_mode @@ -58,18 +67,42 @@ Generation_Event_Jump_Table: LD ($mem_dialogue_script_program_counter+1), A JP =Dialogue_script_step - .Entity: - LD A, (HL) - LD $mem_loaded_special_entity_index, A + .Load_Entity: + LD A, (HL+) + LD E, A + LD D, $00 + LD A, (HL) + LD HL, $mem_loaded_entities_indices + ADD HL, DE + LD (HL), A + RET - CALL =FindFreeEntity - LD A, $01 - LD $tmp_var_3, A - LD A, $07 - CALL =Initialize_Entity - RET + .Entity_Random_Room: + LD A, $01 + LD $tmp_var_3, A + + LD D, (HL) + CALL =FindFreeEntity + LD A, D + JP =Initialize_Entity + + .Entity_XY: + LD A, (HL+) + LD D, A + LD A, (HL+) + LD B, A + LD A, (HL+) + LD C, A + LD A, (HL) + DBG + SWAP A + OR $02 + LD $tmp_var_3, A + CALL =FindFreeEntity + LD A, D + JP =Initialize_Entity .Remove_Stairs: - LD HL, $mem_object_list - LD (HL), $00 + LD HL, $mem_object_list + LD (HL), $00 RET diff --git a/scripts/generate-tiledata.py b/scripts/generate-tiledata.py index 3cd3492..662cd1d 100644 --- a/scripts/generate-tiledata.py +++ b/scripts/generate-tiledata.py @@ -159,6 +159,15 @@ get_sprite_png_parse_output("./sprites/frog/back.png", tallmode=True) print("\n\t; Frog front") get_sprite_png_parse_output("./sprites/frog/front.png", tallmode=True) print("\n.Frog.end:") + +print("\n.Human:") +print("\n\t; Human side") +get_sprite_png_parse_output("./sprites/human/side.png", tallmode=True) +print("\n\t; Human back") +get_sprite_png_parse_output("./sprites/human/back.png", tallmode=True) +print("\n\t; Human front") +get_sprite_png_parse_output("./sprites/human/front.png", tallmode=True) +print("\n.Human.end:") print("\nEntity_Tile_Image_Data.end:") sprite_idx = 0x60 diff --git a/sprites/human/back.png b/sprites/human/back.png Binary files differindex 19f2f12..4d4bc34 100644 --- a/sprites/human/back.png +++ b/sprites/human/back.png diff --git a/sprites/human/front.png b/sprites/human/front.png Binary files differindex 71346d8..c0c6cfa 100644 --- a/sprites/human/front.png +++ b/sprites/human/front.png diff --git a/sprites/human/side.png b/sprites/human/side.png Binary files differindex 4c8f541..739cec4 100644 --- a/sprites/human/side.png +++ b/sprites/human/side.png diff --git a/tileset.gbasm b/tileset.gbasm index d1126a7..a17dae4 100644 --- a/tileset.gbasm +++ b/tileset.gbasm @@ -394,6 +394,28 @@ Entity_Tile_Image_Data: .Frog.end: +.Human: + + ; Human side + .DB $0f, $0f, $10, $1f, $1c, $13, $1e, $1d, $0f, $0a, $0f, $0d, $17, $19, $0f, $09 ; 0x6e + .DB $07, $07, $0a, $0d, $0f, $0f, $07, $06, $05, $07, $04, $07, $08, $0f, $0f, $0f ; 0x6f + .DB $c0, $c0, $20, $e0, $10, $f0, $08, $f8, $08, $f8, $88, $78, $c8, $b8, $d0, $b0 ; 0x70 + .DB $f0, $f0, $a8, $78, $f4, $ec, $dc, $d4, $4c, $cc, $40, $c0, $20, $e0, $e0, $e0 ; 0x71 + + ; Human back + .DB $07, $07, $08, $0f, $10, $1f, $10, $1f, $10, $1f, $10, $1f, $10, $1f, $0f, $08 ; 0x72 + .DB $0f, $0f, $0a, $0d, $1f, $1f, $1c, $17, $1c, $1f, $04, $07, $0c, $0f, $0f, $0f ; 0x73 + .DB $c0, $c0, $20, $e0, $10, $f0, $10, $f0, $10, $f0, $10, $f0, $10, $f0, $e0, $20 ; 0x74 + .DB $f8, $f8, $b8, $68, $e4, $fc, $7c, $d4, $7c, $fc, $40, $c0, $60, $e0, $e0, $e0 ; 0x75 + + ; Human front + .DB $07, $07, $08, $0f, $13, $1c, $17, $1b, $1f, $14, $1f, $16, $1e, $19, $1f, $14 ; 0x76 + .DB $0f, $0f, $0d, $0a, $1f, $1f, $1c, $17, $1c, $1f, $04, $07, $08, $0f, $0f, $0f ; 0x77 + .DB $c0, $c0, $20, $e0, $10, $f0, $90, $70, $d0, $b0, $f0, $d0, $f0, $50, $f0, $50 ; 0x78 + .DB $f0, $f0, $78, $a8, $ec, $f4, $74, $dc, $7c, $fc, $40, $c0, $20, $e0, $e0, $e0 ; 0x79 + +.Human.end: + Entity_Tile_Image_Data.end: Animation_Sprites_Data: diff --git a/utils.gbasm b/utils.gbasm index 596c314..328dbe2 100644 --- a/utils.gbasm +++ b/utils.gbasm @@ -41,7 +41,6 @@ tilemap_memcpy: ; src = DE, dest = HL, n = C $HBlank_Wait.loop: LD A, $reg_lcd_status AND $03 - CP $00 JR NZ, =$HBlank_Wait.loop $HBlank_Wait.End: .END @@ -187,15 +186,13 @@ bff: ; dest = HL, n = BC .END .MACRODEF JUMP_TABLE ; Jump table pointer in BC, index in A, also overwrites DE - LD E, A LD D, $00 - SLA E + ADD A RL D - SLA E + ADD A RL D - LD A, E ADD C LD E, A LD A, D @@ -371,7 +368,7 @@ RRx: ; B is the number to rotate, A & 7 is how many bits to rotate it CP $04 CALL NC, =.swap - CP $00 + AND A RET Z RRC B |