From 417a89feddf7294ab2a11f42579f47bf28158ee1 Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Fri, 20 Oct 2023 18:09:06 +0200 Subject: [PATCH] V0.0 --- src/main.asm | 10 +++---- src/state_gameplay.asm | 8 +++--- src/state_title.asm | 61 +++++++++++++++++++++++++++++++++++++++++ tools/Emulicious.ini | 46 +++++++++++++++---------------- tools/projects/out.bps | 1 + tools/sstates/out.sn5 | Bin 0 -> 18455 bytes tools/sstates/out.sn8 | Bin 0 -> 18455 bytes 7 files changed, 93 insertions(+), 33 deletions(-) create mode 100644 src/state_title.asm create mode 100644 tools/projects/out.bps create mode 100644 tools/sstates/out.sn5 create mode 100644 tools/sstates/out.sn8 diff --git a/src/main.asm b/src/main.asm index 5488491..37ce098 100644 --- a/src/main.asm +++ b/src/main.asm @@ -5,6 +5,7 @@ DEF MAIN_ASM EQU 1 INCLUDE "globals.asm" INCLUDE "res/tiles.inc" INCLUDE "res/gameplay_map.inc" +INCLUDE "res/title_map.inc" SECTION "Globals", HRAM @@ -33,13 +34,9 @@ Main:: ld bc, TilesEnd - Tiles call UnsafeMemCopy - ; Make sure both sprites and bg use the same tile data. - ldh a, [rLCDC] - or LCDCF_BLK01 - ldh [rLCDC], a - ; Clear OAM. call ClearOAM + call SetNumberSpritePositions call CopyOAMHandler ; Zero out the ram where needed. @@ -52,7 +49,7 @@ Main:: call InitializeLCDCInterrupt ; Switch to gameplay state. - call SwitchToGameplay + call SwitchToTitle EventLoop:: @@ -68,6 +65,7 @@ EventLoop:: ldh a, [hGameState] cp a, b jp nz, GamePlayEventLoopHandler + jp TitleEventLoopHandler EventLoopPostHandler:: ; Wait for vblank. diff --git a/src/state_gameplay.asm b/src/state_gameplay.asm index df05d4f..c6caf8d 100644 --- a/src/state_gameplay.asm +++ b/src/state_gameplay.asm @@ -81,8 +81,7 @@ SwitchToGameplay:: ldh [hGameState], a ; And turn the LCD back on before we start. - ldh a, [rLCDC] - or LCDCF_ON | LCDCF_BGON | LCDCF_OBJON + ld a, LCDCF_ON | LCDCF_BGON | LCDCF_OBJON | LCDCF_BLK01 ldh [rLCDC], a ; Make sure the first game loop starts just like all the future ones. @@ -306,8 +305,9 @@ gameOverMode: ; Quit : ldh a, [hBState] cp a, 1 - jp z, $100 - jr drawStaticInfo + jr nz, :+ + call SwitchToTitle + jp EventLoopPostHandler ; Always draw the score, level, next piece, and held piece. diff --git a/src/state_title.asm b/src/state_title.asm new file mode 100644 index 0000000..8eb428d --- /dev/null +++ b/src/state_title.asm @@ -0,0 +1,61 @@ +IF !DEF(STATE_TITLE_ASM) +DEF STATE_TITLE_ASM EQU 1 + + +INCLUDE "globals.asm" + + +SECTION "Title Functions", ROM0 +SwitchToTitle:: + ; Turn the screen off if it's on. + ldh a, [rLCDC] + and LCDCF_ON + jr z, :+ ; Screen is already off. + wait_vram + xor a, a + ldh [rLCDC], a + + ; Load the gameplay tilemap. +: ld de, TitleScreenTilemap + ld hl, $9800 + ld bc, TitleScreenTilemapEnd - TitleScreenTilemap + call UnsafeMemCopy + + ; Clear OAM. + call ClearOAM + call SetNumberSpritePositions + + ; Set up the palettes. + ld a, PALETTE_INVERTED + set_bg_palette + set_obj0_palette + set_obj1_palette + + ; Install the event loop handlers. + ld a, 0 + ldh [hGameState], a + + ; And turn the LCD back on before we start. + ld a, LCDCF_ON | LCDCF_BGON | LCDCF_BLK01 + ldh [rLCDC], a + + ; Make sure the first game loop starts just like all the future ones. + wait_vblank + wait_vblank_end + ret + + +TitleEventLoopHandler:: + ldh a, [hStartState] + ld b, a + ldh a, [hAState] + ld c, a + ldh a, [hBState] + or a, b + or a, c + jp z, EventLoopPostHandler + call SwitchToGameplay + jp EventLoopPostHandler + + +ENDC diff --git a/tools/Emulicious.ini b/tools/Emulicious.ini index ae35860..556a7b0 100644 --- a/tools/Emulicious.ini +++ b/tools/Emulicious.ini @@ -1,5 +1,5 @@ #Emulicious settings file -#Fri Oct 20 17:25:15 CEST 2023 +#Fri Oct 20 18:08:57 CEST 2023 WindowProfilerWindowOpen=false WindowEventViewerWindowHeight=1416 WindowEventViewerWindowDivider=876 @@ -7,7 +7,7 @@ WindowMemoryTracerWindowY=631 WindowMemoryTracerWindowX=383 Update=2 AudioSync=false -DebuggerMemoryTabVisibleRect=0,0,0,0 +DebuggerMemoryTabVisibleRect=0,0,583,128 WindowProfilerWindowWidth=1073 UninitializedMemoryBreakpointSuspend=true GameBoyErrorBreakpointEnabled32=false @@ -22,7 +22,7 @@ GameBoyErrorBreakpointEnabled20=false StretchToWindow=false WindowProfilerWindowHeight=563 WindowTileViewerOpen=false -DebuggerWestPanelSelectedTab=0 +DebuggerWestPanelSelectedTab=1 WindowMemoryTracerWindowWidth=1136 WindowPaletteViewerOpen=false Key37=-1 @@ -35,7 +35,7 @@ GameBoyErrorBreakpointEnabled17=false Key33=-1 GameBoyErrorBreakpointEnabled16=false Key32=-1 -WindowDebuggerHeight=1896 +WindowDebuggerHeight=1416 Key31=-1 Key30=-1 WindowMemoryTracerWindowHeight=289 @@ -75,7 +75,7 @@ WindowMemoryTracerWindowOpen=false SMSInputDeviceB=1 SMSInputDeviceA=1 InterruptBreakpointEnabled=false -OutlineWidth=208 +OutlineWidth=550 DebuggerEventFiltersGameBoy= GameBoyErrorBreakpointSuspend9=true WindowMemoryEditorOpen=false @@ -92,7 +92,7 @@ GameBoyErrorBreakpointSuspend2=true GameBoyErrorBreakpointSuspend1=true GameBoyErrorBreakpointSuspend0=true DebuggerConsoleLogBreakpoints=true -WindowDebuggerOpen=false +WindowDebuggerOpen=true Gamepad1Key37=-1 Gamepad1Key36=-1 Gamepad1Key35=-1 @@ -104,8 +104,8 @@ Gamepad1Key31=-1 Gamepad1Key30=-1 BankSwapAtPCBreakpointEnabled=false DebuggerMemorySelectedTab=HRAM -WindowVideoViewerOpen=false -WindowMemoryEditorTabVisibleRect=0,0,583,128 +WindowVideoViewerOpen=true +WindowMemoryEditorTabVisibleRect=0,6096,583,384 Gamepad1Key29=-1 Gamepad1Key28=-1 Gamepad1Key27=-1 @@ -142,7 +142,7 @@ Gamepad1Key13=-1 Gamepad1Key12=-1 Gamepad1Key11=-1 Gamepad1Key10=-1 -WindowMemoryEditorSelectedAddress=37 +WindowMemoryEditorSelectedAddress=6144 WindowMemoryEditorWidth=665 GameBoyErrorBreakpointCondition9= GameBoyErrorBreakpointCondition8= @@ -161,13 +161,13 @@ Gamepad0Key35=-1 Gamepad0Key34=-1 Gamepad0Key33=-1 Gamepad0Key32=-1 -WindowMemoryEditorSelectedTab=HRAM +WindowMemoryEditorSelectedTab=VRAM Gamepad0Key31=-1 Gamepad0Key30=-1 SMSGamepadAThreshold=50 WindowPaletteViewerHeight=313 -WindowVideoViewerY=674 -WindowVideoViewerX=2606 +WindowVideoViewerY=474 +WindowVideoViewerX=2578 UninitializedMemoryBreakpointEnabled=false Gamepad0Key29=-1 Gamepad0Key28=-1 @@ -179,13 +179,13 @@ Gamepad0Key23=-1 Gamepad0Key22=-1 DebuggerHideToolbar=false Gamepad0Key21=-1 -WindowDebuggerWidth=1096 +WindowDebuggerWidth=2576 Gamepad0Key20=-1 DebuggerSouthPanelSelectedTab=1 WindowEmuliciousWidth=816 WindowVideoViewerWidth=980 -WindowMemoryEditorY=695 -WindowMemoryEditorX=243 +WindowMemoryEditorY=1009 +WindowMemoryEditorX=2715 Gamepad0Key19=-1 Gamepad0Key18=-1 Gamepad0Key17=-1 @@ -197,7 +197,7 @@ FontSize=13 Gamepad0Key12=-1 Gamepad0Key11=-1 Gamepad0Key10=-1 -StackWidth=685 +StackWidth=2165 BankSwapAtPCBreakpointSuspend=true WindowEmuliciousHeight=781 WindowSpriteViewerHeight=527 @@ -205,8 +205,8 @@ GameBoyErrorBreakpointMessage32= InterruptBreakpointCondition= Recent0=C\:\\workspace\\dmgtris\\bin\\out.gb GameBoyErrorBreakpointMessage20= -WindowEmuliciousY=367 -WindowEmuliciousX=982 +WindowEmuliciousY=445 +WindowEmuliciousX=1412 GameBoyErrorBreakpointEnabled9=false GameBoyErrorBreakpointEnabled8=false GameBoyErrorBreakpointEnabled7=false @@ -271,7 +271,7 @@ Gamepad0Key2=-1 Gamepad0Key1=-1 Gamepad0Key0=-1 WindowDebuggerY=-8 -WindowDebuggerX=2552 +WindowDebuggerX=-8 InterruptBreakpointSuspend=true SMSGamepadAKeyboard=false GameBoyErrorBreakpointSuspend32=true @@ -282,12 +282,12 @@ WindowEventViewerWindowWidth=2576 WindowRAMWatchWindowOpen=false BankSwapAtPCBreakpointCondition= GameBoyErrorBreakpointSuspend20=true -SouthPanelHeight=1544 +SouthPanelHeight=1064 SMSbuttonsKeyboard=false -StackSplitLocation=774 +StackSplitLocation=534 WindowMemoryEditorHeight=534 -WindowTilemapViewerWidth=404 GBGamepadKeyboard=false +WindowTilemapViewerWidth=404 UninitializedMemoryBreakpointCondition= GameBoyErrorBreakpointSuspend19=true GameBoyErrorBreakpointSuspend18=true @@ -299,5 +299,5 @@ WindowSpriteViewerOpen=false WindowProfilerWindowY=639 WindowProfilerWindowX=461 Scale=5.0 -KeyboardRequireWindowFocus=true WindowProfilerWindowProcedureProfiler=true +KeyboardRequireWindowFocus=true diff --git a/tools/projects/out.bps b/tools/projects/out.bps new file mode 100644 index 0000000..278a719 --- /dev/null +++ b/tools/projects/out.bps @@ -0,0 +1 @@ +type=instruction address=gameOverMode%20+%2079 end=gameOverMode%20+%2081 enabled=true suspend=true condition= message= diff --git a/tools/sstates/out.sn5 b/tools/sstates/out.sn5 new file mode 100644 index 0000000000000000000000000000000000000000..338c70f58f2aeefa6658e2cb96e14cf2734f0a91 GIT binary patch literal 18455 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∓|@P=4c-mQg1JQA260Z z)7#awgR>L0G!%<~j1cKi^J#sEh-=3T@DZC@@qm%p`7f&>%*B#O<)EnU}U8P28}f-EqX`9k3RO^_h~cLvvus0u3>=C4^y8 z5voG&mA8gc#b+eCf3{>zS~z;G6IG1i!kqMe38i!8zUU}4%2s`3(@3Gyf6zEgI+7}$ zqd-HCNCIqLZ-8ZeG`k8dviXx&SlKclXIGbwBPfpUMkR>m=R^Q!y? z)%&@E?v|@&@~ID^W(M0|K*vH>>KaH}??Rnzi+Ufm)}P>1kbv4%#doQaoI+nlA9(Ux zkO#o)zGo>^FSnC?Qz?P}@SB*Lp0mvdvZ@*7=YA`l4O!#<5Y`uS8EKL4yVg5}#tb;E zaZ#0b4hFVjCdv(7GKh#Gc(97zXz9;B%b3sbJpf#EU&J=KMm z5KXjrG-ZZN>#xjWQi5e@Xinv}OAEPJEEAU*VL1l#P+P-S=-i7Z-z?c8pGA|n2Gb+~ z7sYp{vIUG<(;;UiG9Mmy0`s-#XzEU`xZcvy@jP83^)Ta3rzjpvn@^O9^V0tFApq=4 ziT`MOfIYyk-~AA92zdNo{n~%suiLf%?=}b+yqRJHumNJQem(waEr6E)m|x?6^8AVU z?|j#55dP{=02GG&+uHzbf0o{i*XO>@@#l=!&i5D~0jLG!-26zuW_Rt5fjb87 z7`S8Lj)6M{?ijdZ;EsVi2JRTRW8jW~I|l9;xMSdsfjb877`S8Lj)6M{{@)mYgGWF_ zLPkMFL%)YX{6D0?#KOk8{{R;cpMa3)e{kPHcMRMyaL2$M19uGkf5!mW!s0L85GPAZ z3m11=h`G&w$XGaA0xc}T4mWZT=3v*~S`z@5zrtZ6AMQXG8=%9j4h6slXz^R@;6{xA z02B7Gvf}@(W^gM28O}LNtmvVA8ZW#{RG0yoAw0uTUtem>Uu&h3zPGKmH)p0m}8w( literal 0 HcmV?d00001 diff --git a/tools/sstates/out.sn8 b/tools/sstates/out.sn8 new file mode 100644 index 0000000000000000000000000000000000000000..338c70f58f2aeefa6658e2cb96e14cf2734f0a91 GIT binary patch literal 18455 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∓|@P=4c-mQg1JQA260Z z)7#awgR>L0G!%<~j1cKi^J#sEh-=3T@DZC@@qm%p`7f&>%*B#O<)EnU}U8P28}f-EqX`9k3RO^_h~cLvvus0u3>=C4^y8 z5voG&mA8gc#b+eCf3{>zS~z;G6IG1i!kqMe38i!8zUU}4%2s`3(@3Gyf6zEgI+7}$ zqd-HCNCIqLZ-8ZeG`k8dviXx&SlKclXIGbwBPfpUMkR>m=R^Q!y? z)%&@E?v|@&@~ID^W(M0|K*vH>>KaH}??Rnzi+Ufm)}P>1kbv4%#doQaoI+nlA9(Ux zkO#o)zGo>^FSnC?Qz?P}@SB*Lp0mvdvZ@*7=YA`l4O!#<5Y`uS8EKL4yVg5}#tb;E zaZ#0b4hFVjCdv(7GKh#Gc(97zXz9;B%b3sbJpf#EU&J=KMm z5KXjrG-ZZN>#xjWQi5e@Xinv}OAEPJEEAU*VL1l#P+P-S=-i7Z-z?c8pGA|n2Gb+~ z7sYp{vIUG<(;;UiG9Mmy0`s-#XzEU`xZcvy@jP83^)Ta3rzjpvn@^O9^V0tFApq=4 ziT`MOfIYyk-~AA92zdNo{n~%suiLf%?=}b+yqRJHumNJQem(waEr6E)m|x?6^8AVU z?|j#55dP{=02GG&+uHzbf0o{i*XO>@@#l=!&i5D~0jLG!-26zuW_Rt5fjb87 z7`S8Lj)6M{?ijdZ;EsVi2JRTRW8jW~I|l9;xMSdsfjb877`S8Lj)6M{{@)mYgGWF_ zLPkMFL%)YX{6D0?#KOk8{{R;cpMa3)e{kPHcMRMyaL2$M19uGkf5!mW!s0L85GPAZ z3m11=h`G&w$XGaA0xc}T4mWZT=3v*~S`z@5zrtZ6AMQXG8=%9j4h6slXz^R@;6{xA z02B7Gvf}@(W^gM28O}LNtmvVA8ZW#{RG0yoAw0uTUtem>Uu&h3zPGKmH)p0m}8w( literal 0 HcmV?d00001