aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-09-05 15:29:27 +0200
committerAstatin <[email protected]>2025-09-05 15:29:27 +0200
commit03c359596bdacbf39cdc244d2f164d0ec94d5505 (patch)
tree7e4d8d8056b2560f550d68635caa2ae851c7b911
parent16c308b2567d1dddb44ca928fe376b4a6219744f (diff)
Add static human at campsiteHEADlatestmain
-rw-r--r--dialogues/demo_quest.gbasm2
-rw-r--r--dialogues/text.gbasm4
-rw-r--r--dialogues/text.gbtxt2
-rw-r--r--entity/init.gbasm31
-rw-r--r--entity/list.gbasm55
-rw-r--r--entity/questgoal.gbasm16
-rw-r--r--main.gbasm4
-rw-r--r--map/dungeons.gbasm23
-rw-r--r--map/dungeons/campsite.gbasm6
-rw-r--r--map/generationevents.gbasm63
-rw-r--r--scripts/generate-tiledata.py9
-rw-r--r--sprites/human/back.pngbin579 -> 610 bytes
-rw-r--r--sprites/human/front.pngbin626 -> 646 bytes
-rw-r--r--sprites/human/side.pngbin619 -> 650 bytes
-rw-r--r--tileset.gbasm22
-rw-r--r--utils.gbasm9
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
diff --git a/main.gbasm b/main.gbasm
index 0ff7fcf..2dcbbe3 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -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
index 19f2f12..4d4bc34 100644
--- a/sprites/human/back.png
+++ b/sprites/human/back.png
Binary files differ
diff --git a/sprites/human/front.png b/sprites/human/front.png
index 71346d8..c0c6cfa 100644
--- a/sprites/human/front.png
+++ b/sprites/human/front.png
Binary files differ
diff --git a/sprites/human/side.png b/sprites/human/side.png
index 4c8f541..739cec4 100644
--- a/sprites/human/side.png
+++ b/sprites/human/side.png
Binary files differ
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