.INCLUDE "definitions.gbasm" .INCLUDE "init.gbasm" .MACRODEF HBLANK_WAIT LD A, $reg_lcd_controller BIT 7, A JR Z, =$HBlank_Wait.End $HBlank_Wait.loop: LD A, $reg_lcd_status AND $03 CP $00 JR NZ, =$HBlank_Wait.loop $HBlank_Wait.End: .END .MACRODEF SET_WINDOW_LCDC_E LD A, $mem_display_flag BIT 3, A LD E, $00 JR Z, =$No_Window LD E, $60 $No_Window: .END .MACRODEF ENABLE_TOP_BAR XOR A LD $reg_viewport_x, A LD A, $57 LD $reg_viewport_y, A LD A, $lcdc_guibg_tilemap OR E LD $reg_lcd_controller, A .END .MACRODEF ENABLE_DIALOGUE .HBLANK_WAIT LD A, $98 LD $reg_viewport_x, A LD A, $b8 LD $reg_viewport_y, A LD A, $lcdc_guibg_tilemap OR E LD $reg_lcd_controller, A .END .MACRODEF DISABLE_DIALOGUE PUSH BC LD A, $mem_prepared_viewport_x LD B, A LD A, $mem_prepared_viewport_y LD C, A .HBLANK_WAIT LD A, B LD $reg_viewport_x, A LD A, C LD $reg_viewport_y, A LD A, $mem_prepared_color_palette LD $reg_bg_palette, A LD A, $lcdc_mapbg_tilemap OR E LD $reg_lcd_controller, A POP BC .END .MACRODEF ENABLE_VBLANK_INTERRUPTS LD A, $03 LD $reg_interrupt_enable, A .END .MACRODEF RESET_STAT_INTERRUPT LD A, $reg_interrupt_flags RES 1, A LD $reg_interrupt_flags, A .END .MACRODEF ENABLE_LYC_INTERRUPT .RESET_STAT_INTERRUPT LD A, $02 LD $reg_interrupt_enable, A LD A, $40 LD $reg_lcd_status, A .END .MACRODEF DISABLE_LYC_INTERRUPT LD A, $reg_interrupt_enable RES 1, A LD $reg_interrupt_enable, A .END Entrypoint: CALL =Initialize_RNG LD A, $20 LD $mem_bunny_health, A New_Dungeon: LD SP, $fffe LD HL, $mem_loaded_enemies_indices LD A, $00 LD (HL+), A LD (HL+), A LD (HL+), A LD A, $03 LD (HL+), A CALL =Dungeon_Generation CALL =Initialize_Entities CALL =Initialize_Objects CALL =Load_Tile CALL =Load_Map CALL =Load_Objects CALL =Reload_Entities_Tile_Data LD A, $00 LD $mem_bunny_flags, A LD $mem_display_flag, A LD A, $enum_dungeon_mode LD $mem_current_mode, A LD $mem_requested_mode, A ; Heart LD A, $68 LD ($9d62), A ; Energy points LD A, $6a LD ($9d66), A .SET_WINDOW_LCDC_E .ENABLE_TOP_BAR .ENABLE_VBLANK_INTERRUPTS EI Wait_for_Interrupt.loop: HALT EI JP =Wait_for_Interrupt.loop VBLANK_Entrypoint: .SET_WINDOW_LCDC_E .ENABLE_TOP_BAR LD A, $palette_bold_font LD $reg_bg_palette, A LD HL, $9d72 LD A, $dbg_VBLANK_STATE CALL =Print_8bit LD HL, $9c43 LD A, $dbg_VBLANK_STATE CALL =Print_8bit_Thin CALL $OAM_DMA_Transfer_routine CALL =Loading_Mode_VBlank LD A, $mem_current_mode CP $enum_dungeon_mode JR NZ, =Skip_VBlank_Dungeon_Update LD HL, $9d60 LD A, $mem_bunny_health CALL =Print_8bit LD HL, $9d64 LD A, $mem_bunny_mana CALL =Print_8bit CALL =Display_Prepared_Block CALL =Display_Object Skip_VBlank_Dungeon_Update: CALL =Copy_Dialogue_Buffer CALL =Display_dialogue_cursor LD A, $reg_lcd_status AND $03 LD $dbg_VBLANK_STATE, A ; LYC LD A, $0a LD $reg_lyc, A .ENABLE_LYC_INTERRUPT .RESET_STAT_INTERRUPT EI CALL =Pad_Button_Check LD A, $mem_current_mode CP $enum_dungeon_mode JR NZ, =Skip_Dungeon_Update CALL =Object_Interactions_Check CALL =Entities_Actions CALL =Respawn_Entities CALL =Prepare_Scrolling_Map LD A, $mem_current_mode LD B, A LD A, $mem_animation_wait_frames Skip_Dungeon_Update: LD A, $mem_current_mode CALL =Loading_Mode_Regular CALL =Animation_Wait_Mode CALL =Update_Animation_Steps CALL =Open_dialogue_on_dungeon_menu_mode CALL =Check_Open_Menu_button CALL =Move_dialogue_cursor CALL =Check_dialogue_action LD A, $00 LD $mem_oam_buffer_low, A CALL =Display_Animation_List CALL =Display_Entities .ENABLE_VBLANK_INTERRUPTS RET STAT_Entrypoint: PUSH AF PUSH DE .SET_WINDOW_LCDC_E LD A, $reg_lyc CP $0a JR Z, =.End_Top_Bar CP $67 JR Z, =.Start_dialogue .Thin_font: LD A, $palette_thin_font LD $reg_bg_palette, A JR =.skip_dialogue .Start_dialogue: LD A, $mem_display_flag BIT 0, A JR Z, =.skip_dialogue .ENABLE_DIALOGUE LD A, $mem_display_flag BIT 1, A JR Z, =.Thin_font LD A, $palette_bold_font LD $reg_bg_palette, A LD A, $77 LD $reg_lyc, A .RESET_STAT_INTERRUPT POP DE POP AF RETI .skip_dialogue: .DISABLE_LYC_INTERRUPT POP DE POP AF RET .End_Top_Bar: .DISABLE_DIALOGUE LD A, $67 LD $reg_lyc, A .RESET_STAT_INTERRUPT POP DE POP AF RETI .INCLUDE "tiles.gbasm" .INCLUDE "rng.gbasm" .INCLUDE "utils.gbasm" .INCLUDE "buttons.gbasm" .INCLUDE "map/loading.gbasm" .INCLUDE "map/generation.gbasm" .INCLUDE "map/objects.gbasm" .INCLUDE "gui.gbasm" .INCLUDE "entity/utils.gbasm" .INCLUDE "entity/init.gbasm" .INCLUDE "entity/bunny.gbasm" .INCLUDE "entity/fox.gbasm" .INCLUDE "entity/frog.gbasm" .INCLUDE "entity/penguin.gbasm" .INCLUDE "entity/actions.gbasm" .INCLUDE "entity/collisions.gbasm" .INCLUDE "entity/display.gbasm" .INCLUDE "entity/list.gbasm" .INCLUDE "animation.gbasm" .INCLUDE "playerattacks.gbasm" .INCLUDE "enemiesattacks.gbasm" .INCLUDE "tileset.gbasm" .INCLUDE "dialogues.gbasm"