diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | bunny.gbasm | 19 | ||||
-rw-r--r-- | definitions.gbasm | 12 | ||||
-rw-r--r-- | main.gbasm | 7 | ||||
-rw-r--r-- | map/generation.gbasm | 8 | ||||
-rw-r--r-- | map/loading.gbasm | 17 | ||||
-rw-r--r-- | map/objects.gbasm | 120 | ||||
-rw-r--r-- | rng.gbasm | 4 | ||||
-rw-r--r-- | sprites/stairs.png | bin | 0 -> 163 bytes | |||
-rw-r--r-- | tiles.gbasm | 8 |
10 files changed, 180 insertions, 17 deletions
@@ -7,7 +7,7 @@ build/main.rom: main.gbasm gbasm $< $@ run: build/main.rom - gb -s 200 $< + gb $< sameboy: build/main.rom sameboy build/main.rom diff --git a/bunny.gbasm b/bunny.gbasm index 19009d7..9ba996b 100644 --- a/bunny.gbasm +++ b/bunny.gbasm @@ -9,14 +9,27 @@ Initialize_Bunny: LD B, $c8 LD A, (BC) + LD D, A + INC BC + LD A, (BC) + INC A + CALL =RNG_Bound + ADD D + LD $mem_bunny_x, A INC BC - INC BC LD A, (BC) + LD D, A + INC BC + LD A, (BC) + INC A + CALL =RNG_Bound + ADD D LD $mem_bunny_y, A +Fix_Bunny_screen: LD A, $mem_bunny_x SUB $05 LD $mem_viewport_x, A @@ -175,9 +188,11 @@ Move_Bunny: LD $mem_bunny_y, A Move_Bunny.end: + LD A, C + LD $mem_map_loading_flags, A RET -Display_Bunny: ; X position in $81, Y position in $80 +Display_Bunny: LD A, $mem_bunny_x_px LD B, A LD A, $mem_bunny_y_px diff --git a/definitions.gbasm b/definitions.gbasm index 655dfbd..745136a 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -26,6 +26,9 @@ .DEFINE mem_rng_state_1 ($c00a) ; 2 bytes .DEFINE mem_rng_state_2 ($c00b) ; 2 bytes +.DEFINE mem_map_loading_flags ($c00c) +; bit 0: if the object should be reloaded (scroll or first load) + .DEFINE next_free_head_higher_bytes $c7 .DEFINE mem_next_free_head_lower_bytes ($c6ff) .DEFINE mem_dungeon_generation_heads $c700 ; Takes the memory from c700 to c717 @@ -45,6 +48,15 @@ ; sizey: u8, ; } +.DEFINE mem_object_list $c900 ; Takes the memory from c900 to c97f +; struct objects { +; sprite: u8, +; x: u8, +; y: u8, +; interaction: u16 +; _padding: u24 +; } + .DEFINE enum_direction_left $01 .DEFINE enum_direction_right $02 .DEFINE enum_direction_up $03 @@ -5,6 +5,7 @@ Entrypoint: CALL =Initialize_RNG CALL =Dungeon_Generation CALL =Initialize_Bunny + CALL =Initialize_Objects CALL =Load_Tile CALL =Load_Map @@ -18,14 +19,18 @@ Entrypoint: JP =Wait_for_VRAM.loop VBLANK_Entrypoint: + CALL =Display_Bunny + CALL =Display_Objects + CALL =Pad_Button_Check CALL =Move_Bunny - CALL =Display_Bunny + RET .INCLUDE "tiles.gbasm" .INCLUDE "map/loading.gbasm" .INCLUDE "map/generation.gbasm" +.INCLUDE "map/objects.gbasm" .INCLUDE "bunny.gbasm" .INCLUDE "buttons.gbasm" .INCLUDE "rng.gbasm" diff --git a/map/generation.gbasm b/map/generation.gbasm index 8b0181e..4f5296a 100644 --- a/map/generation.gbasm +++ b/map/generation.gbasm @@ -159,9 +159,9 @@ Generation_Head_Explosion: LD A, C LD (HL+), A - LD L, C + LD L, B Room_Generation.X_loop: - LD H, B + LD H, C Room_Generation.Y_loop: PUSH BC LD A, D @@ -175,11 +175,11 @@ Generation_Head_Explosion: DEC H LD A, H - CP $00 + CP $ff JR NZ, =Room_Generation.Y_loop DEC L LD A, L - CP $00 + CP $ff JR NZ, =Room_Generation.X_loop POP HL diff --git a/map/loading.gbasm b/map/loading.gbasm index 8b3f414..bb3410b 100644 --- a/map/loading.gbasm +++ b/map/loading.gbasm @@ -104,12 +104,7 @@ Load_Column: ; (+1/-1 direction in B) POP AF RET -Load_Block: ; X in A, Y in B - PUSH BC - PUSH AF - PUSH DE - - ; Construct Tile Map address from A and B in DE +Construct_Tile_Address: ; Construct Tile Map address from A and B in DE PUSH AF PUSH BC @@ -134,9 +129,19 @@ Load_Block: ; X in A, Y in B LD A, D OR $98 LD D, A + POP BC POP AF + RET + +Load_Block: ; X in A, Y in B + PUSH BC + PUSH AF + PUSH DE + + CALL =Construct_Tile_Address + PUSH AF PUSH DE diff --git a/map/objects.gbasm b/map/objects.gbasm new file mode 100644 index 0000000..da80118 --- /dev/null +++ b/map/objects.gbasm @@ -0,0 +1,120 @@ +Initialize_Objects: + LD A, $mem_map_loading_flags + OR $01 + LD $mem_map_loading_flags, A + LD HL, $mem_object_list + LD A, $60 + LD (HL+), A + + LD A, $mem_number_of_rooms + CALL =RNG_Bound + SLA A + SLA A + ADD $80 + LD C, A + + LD B, $c8 + + LD A, (BC) + LD D, A + INC BC + LD A, (BC) + INC A + CALL =RNG_Bound + ADD D + + LD (HL+), A + + INC BC + + LD A, (BC) + LD D, A + INC BC + LD A, (BC) + INC A + CALL =RNG_Bound + ADD D + LD (HL+), A + + + LD BC, =Stairs_action + LD A, B + LD (HL+), A + LD A, C + LD (HL+), A + RET + +Stairs_action: + LD A, $00 + LD $mem_bunny_x, A + LD A, $00 + LD $mem_bunny_y, A + CALL =Fix_Bunny_screen + RET + +Display_Objects: + LD A, $mem_map_loading_flags + BIT 0, A + JR Z, =Display_Objects.End + LD HL, $mem_object_list + Display_Objects.loop: + LD A, (HL+) + CP $00 + JR Z, =Display_Objects.next + LD C, A + LD A, (HL+) + LD D, A + LD A, $mem_viewport_x + SUB $03 + CP D + JR NC, =Display_Objects.next + ADD $10 + CP D + JR C, =Display_Objects.next + + LD A, (HL+) + LD B, A + LD A, $mem_viewport_y + SUB $03 + CP B + JR NC, =Display_Objects.next + ADD $10 + CP B + JR C, =Display_Objects.next + + LD A, D + CALL =Construct_Tile_Address + + LD A, C + LD (DE), A + + INC E + INC C + + LD A, C + LD (DE), A + + INC C + + LD A, E + XOR $21 + LD E, A + + LD A, C + LD (DE), A + + INC C + INC E + + LD A, C + LD (DE), A + + Display_Objects.next: + LD A, L + AND $f8 + ADD $08 + LD L, A + CP $80 + JR NZ, =Display_Objects.loop + Display_Objects.End: + RET @@ -7,9 +7,9 @@ Debug_RNG: RET Initialize_RNG: - LD A, $0c + LD A, $15 ; $0c LD $mem_rng_state_1, A - LD A, $15 + LD A, $15 ; $15 LD $mem_rng_state_2, A RET diff --git a/sprites/stairs.png b/sprites/stairs.png Binary files differnew file mode 100644 index 0000000..a2f8cae --- /dev/null +++ b/sprites/stairs.png diff --git a/tiles.gbasm b/tiles.gbasm index faeda8d..8c7dc15 100644 --- a/tiles.gbasm +++ b/tiles.gbasm @@ -1,4 +1,5 @@ BG_Tile_Image_Data: + ; Trees tileset .DB $07, $07, $1c, $1f, $38, $37, $3a, $27, $64, $6f, $41, $7f, $47, $78, $4d, $7d .DB $f0, $f0, $b0, $d0, $38, $f8, $8c, $7c, $86, $fe, $be, $c6, $c2, $ee, $c2, $ee .DB $70, $7f, $22, $3f, $6d, $73, $58, $6f, $6d, $5a, $6d, $7d, $3f, $3f, $00, $00 @@ -64,6 +65,11 @@ BG_Tile_Image_Data: .DB $70, $7f, $82, $ff, $2d, $d3, $58, $af, $6d, $1a, $cc, $bd, $a2, $ff, $37, $e3 .DB $13, $ff, $76, $df, $35, $ba, $48, $fd, $69, $d7, $c1, $ef, $1c, $fb, $f0, $27 + ; Stairs + .DB $ff, $ff, $d5, $ff, $aa, $ff, $d5, $ff, $ab, $ff, $df, $ff, $b1, $f1, $f1, $f1 + .DB $ff, $ff, $5f, $ff, $b1, $f1, $f1, $f1, $11, $11, $17, $11, $3f, $11, $ff, $11 + .DB $9f, $91, $ff, $91, $ff, $91, $ff, $91, $ff, $91, $fd, $93, $f1, $9f, $ff, $ff + .DB $ff, $11, $ff, $11, $ff, $11, $f1, $1f, $91, $7f, $11, $ff, $11, $ff, $ff, $ff OBJ_Tile_Image_Data: ; Bunny Side @@ -110,7 +116,7 @@ Load_Tile: CALL =Load_Number_Font LD HL, $9200 LD DE, =BG_Tile_Image_Data - LD BC, $0400 + LD BC, $0440 CALL =memcpy RET |