Convert to MBC5
This commit is contained in:
parent
de8f10f348
commit
81a0ae0672
|
@ -1,8 +1,9 @@
|
|||
/bin/
|
||||
/obj/
|
||||
/dep/
|
||||
/res/
|
||||
/tools/**
|
||||
/src/res/sources/*.z80
|
||||
/src/res/sources/*.inc
|
||||
DMGTRIS.sav
|
||||
/bin/*.map
|
||||
/bin/*.sym
|
||||
/bin/*.sav
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
"request": "launch",
|
||||
"name": "Launch in Emulicious",
|
||||
"program": "${workspaceFolder}\\bin\\DMGTRIS.gbc",
|
||||
"emuliciousPath": "K:\\TGM\\dmgtris\\tools",
|
||||
"port": 58870,
|
||||
"stopOnEntry": false,
|
||||
"preLaunchTask": "buildrom"
|
||||
|
|
BIN
DMGTRIS.GBC
BIN
DMGTRIS.GBC
Binary file not shown.
50
Makefile
50
Makefile
|
@ -43,7 +43,7 @@ INCDIRS = src/ src/include/
|
|||
WARNINGS = all extra
|
||||
ASFLAGS = -p 0xFF $(addprefix -i,$(INCDIRS)) $(addprefix -W,$(WARNINGS))
|
||||
LDFLAGS = -p 0xFF
|
||||
FIXFLAGS = -p 0xFF -l 0x33 -r 0x02 -v -i $(GAMEID) -k $(LICENSEE) -t $(TITLE) -n $(VERSION) -m $(MAPPER)
|
||||
FIXFLAGS = -p 0xFF -l 0x33 -r 0x04 -v -i $(GAMEID) -k $(LICENSEE) -t $(TITLE) -n $(VERSION) -m $(MAPPER)
|
||||
|
||||
# The list of "root" ASM files that RGBASM will be invoked on
|
||||
SRCS = $(wildcard src/*.asm)
|
||||
|
@ -52,11 +52,7 @@ SRCS = $(wildcard src/*.asm)
|
|||
# Use this to override the above
|
||||
include project.mk
|
||||
|
||||
################################################
|
||||
# #
|
||||
# TARGETS #
|
||||
# #
|
||||
################################################
|
||||
|
||||
|
||||
# `all` (Default target): build the ROM
|
||||
all: $(ROM)
|
||||
|
@ -77,52 +73,12 @@ rebuild:
|
|||
$(MAKE) all
|
||||
.PHONY: rebuild
|
||||
|
||||
################################################
|
||||
# #
|
||||
# RESOURCE FILES #
|
||||
# #
|
||||
################################################
|
||||
|
||||
# By default, asset recipes convert files in `res/` into other files in `res/`
|
||||
# This line causes assets not found in `res/` to be also looked for in `src/res/`
|
||||
# "Source" assets can thus be safely stored there without `make clean` removing them
|
||||
VPATH := src
|
||||
|
||||
res/%.1bpp: res/%.png
|
||||
@$(MKDIR_P) $(@D)
|
||||
$(RGBGFX) -d 1 -o $@ $<
|
||||
|
||||
# Define how to compress files using the PackBits16 codec
|
||||
# Compressor script requires Python 3
|
||||
res/%.pb16: res/% src/tools/pb16.py
|
||||
@$(MKDIR_P) $(@D)
|
||||
$(PY) src/tools/pb16.py $< res/$*.pb16
|
||||
|
||||
res/%.pb16.size: res/%
|
||||
@$(MKDIR_P) $(@D)
|
||||
$(call filesize,$<,16) > res/$*.pb16.size
|
||||
|
||||
# Define how to compress files using the PackBits8 codec
|
||||
# Compressor script requires Python 3
|
||||
res/%.pb8: res/% src/tools/pb8.py
|
||||
@$(MKDIR_P) $(@D)
|
||||
$(PY) src/tools/pb8.py $< res/$*.pb8
|
||||
|
||||
res/%.pb8.size: res/%
|
||||
@$(MKDIR_P) $(@D)
|
||||
$(call filesize,$<,8) > res/$*.pb8.size
|
||||
|
||||
###############################################
|
||||
# #
|
||||
# COMPILATION #
|
||||
# #
|
||||
###############################################
|
||||
|
||||
# How to build a ROM
|
||||
$(BINDIR)/%.$(ROMEXT) $(BINDIR)/%.sym $(BINDIR)/%.map: $(patsubst src/%.asm,$(OBJDIR)/%.o,$(SRCS))
|
||||
@$(MKDIR_P) $(@D)
|
||||
$(RGBASM) $(ASFLAGS) -o $(OBJDIR)/build_date.o src/res/build_date.asm
|
||||
$(RGBLINK) $(LDFLAGS) -m $(BINDIR)/$*.map -n $(BINDIR)/$*.sym -o $(BINDIR)/$*.$(ROMEXT) $^ $(OBJDIR)/build_date.o \
|
||||
$(RGBLINK) $(LDFLAGS) -m $(BINDIR)/$*.map -n $(BINDIR)/$*.sym -o $(BINDIR)/$*.$(ROMEXT) $^ \
|
||||
&& $(RGBFIX) -v $(FIXFLAGS) $(BINDIR)/$*.$(ROMEXT)
|
||||
|
||||
# `.mk` files are auto-generated dependency lists of the "root" ASM files, to save a lot of hassle.
|
||||
|
|
|
@ -70,7 +70,7 @@ ScoreIncrement points are then awarded.
|
|||
|
||||
|
||||
## Playing
|
||||
You can build the game yourself, or use the binary [here](https://git.villadelfia.org/villadelfia/dmgtris/raw/branch/master/DMGTRIS.GBC) or [here](https://github.com/Villadelfia/DMGTRIS/raw/master/DMGTRIS.GBC).
|
||||
You can build the game yourself, or use the binary [here](https://git.villadelfia.org/villadelfia/dmgtris/raw/branch/master/bin/DMGTRIS.GBC) or [here](https://github.com/Villadelfia/DMGTRIS/raw/master/bin/DMGTRIS.GBC).
|
||||
|
||||
The game should run in any accurate emulator. For Windows or Linux using Wine [bgb](https://bgb.bircd.org/) is generally regarded as the best option. For macOS [SameBoy](https://sameboy.github.io/) comes recommended.
|
||||
|
||||
|
|
Binary file not shown.
|
@ -15,16 +15,12 @@ ROMNAME := DMGTRIS
|
|||
ROMEXT := GBC
|
||||
|
||||
# Mapper
|
||||
MAPPER := 0x03
|
||||
MAPPER := 0x1B
|
||||
|
||||
# Extra assembler flags
|
||||
# Do not insert nop after halt
|
||||
ASFLAGS += -h
|
||||
|
||||
# Extra linker flags
|
||||
# Tiny Rom
|
||||
LDFLAGS += -t
|
||||
|
||||
# Extra fix flags
|
||||
# Set as gbc compatible
|
||||
FIXFLAGS += -c
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
; DMGTRIS
|
||||
; Copyright (C) 2023 - Randy Thiemann <randy.thiemann@gmail.com>
|
||||
|
||||
; This program is free software: you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation, either version 3 of the License, or
|
||||
; (at your option) any later version.
|
||||
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
IF !DEF(BANKID_ASM)
|
||||
DEF BANKID_ASM EQU 1
|
||||
|
||||
|
||||
SECTION "Bank ID 0", ROM0[$0]
|
||||
db $00
|
||||
|
||||
SECTION "Bank ID 1", ROMX[$4000], BANK[1]
|
||||
db $01
|
||||
|
||||
SECTION "Bank ID 2", ROMX[$4000], BANK[2]
|
||||
db $02
|
||||
|
||||
|
||||
ENDC
|
|
@ -65,7 +65,7 @@ CHARMAP "|", 126
|
|||
CHARMAP "#", 125
|
||||
|
||||
|
||||
SECTION "Static Data", ROM0
|
||||
SECTION "Static Data", ROMX, BANK[1]
|
||||
sLeady:: db " READY? "
|
||||
sGo:: db " GO "
|
||||
sPause::
|
||||
|
|
|
@ -93,6 +93,10 @@ MACRO lb
|
|||
ld \1, (LOW(\2) << 8) | LOW(\3)
|
||||
ENDM
|
||||
|
||||
DEF SAVE_MAGIC_0 EQU "D"
|
||||
DEF SAVE_MAGIC_1 EQU "M"
|
||||
DEF SAVE_MAGIC_2 EQU "G"
|
||||
DEF SAVE_MAGIC_3 EQU "3"
|
||||
|
||||
DEF PALETTE_REGULAR EQU %11100100
|
||||
DEF PALETTE_INVERTED EQU %00011011
|
||||
|
@ -211,5 +215,7 @@ DEF FIELD_TOP_LEFT EQU $9800+1
|
|||
DEF EASTER_0 EQU $9845
|
||||
DEF EASTER_1 EQU $9865
|
||||
|
||||
DEF rBANKID EQU $4000
|
||||
|
||||
|
||||
ENDC
|
||||
|
|
105
src/main.asm
105
src/main.asm
|
@ -45,17 +45,6 @@ wInitialH:: ds 1
|
|||
wInitialL:: ds 1
|
||||
|
||||
|
||||
SECTION "Persistent Globals", SRAM
|
||||
rMagic:: ds 4
|
||||
rSwapABState:: ds 1
|
||||
rRNGModeState:: ds 1
|
||||
rRotModeState:: ds 1
|
||||
rDropModeState:: ds 1
|
||||
rSpeedCurveState:: ds 1
|
||||
rAlways20GState:: ds 1
|
||||
rSelectedStartLevel:: ds 2
|
||||
|
||||
|
||||
SECTION "Stack", WRAM0
|
||||
wStack::
|
||||
ds STACK_SIZE + 1
|
||||
|
@ -95,6 +84,13 @@ Main::
|
|||
ldh [rKEY1], a
|
||||
stop
|
||||
.notgbc
|
||||
; Initialize the mapper.
|
||||
ld a, CART_SRAM_ENABLE
|
||||
ld [rRAMG], a
|
||||
xor a, a
|
||||
ld [rRAMB], a
|
||||
ld a, BANK("Static Data")
|
||||
ld [rROMB0], a
|
||||
|
||||
; We use a single set of tiles for the entire game, so we copy it at the start.
|
||||
ld de, Tiles
|
||||
|
@ -107,91 +103,8 @@ Main::
|
|||
call SetNumberSpritePositions
|
||||
call CopyOAMHandler
|
||||
|
||||
; Enable RAM. (Not actually needed since we don't ACTUALLY use an MBC, but without this emulators shit the bed.)
|
||||
ld hl, rRAMG
|
||||
ld a, CART_SRAM_ENABLE
|
||||
ld [hl], a
|
||||
|
||||
; Check for save data.
|
||||
ld a, [rMagic]
|
||||
cp a, "D"
|
||||
jr nz, .nosavedata
|
||||
ld a, [rMagic+1]
|
||||
cp a, "M"
|
||||
jr nz, .nosavedata
|
||||
ld a, [rMagic+2]
|
||||
cp a, "G"
|
||||
jr nz, .nosavedata
|
||||
ld a, [rMagic+3]
|
||||
cp a, "2"
|
||||
jr nz, .nosavedata
|
||||
|
||||
.savedata
|
||||
ld a, [rSwapABState]
|
||||
ld [wSwapABState], a
|
||||
ld a, [rRNGModeState]
|
||||
ld [wRNGModeState], a
|
||||
ld a, [rRotModeState]
|
||||
ld [wRotModeState], a
|
||||
ld a, [rDropModeState]
|
||||
ld [wDropModeState], a
|
||||
ld a, [rSpeedCurveState]
|
||||
ld [wSpeedCurveState], a
|
||||
ld a, [rAlways20GState]
|
||||
ld [wAlways20GState], a
|
||||
ld a, [rSelectedStartLevel]
|
||||
ldh [hStartSpeed], a
|
||||
ld a, [rSelectedStartLevel+1]
|
||||
ldh [hStartSpeed+1], a
|
||||
jr .otherinit
|
||||
|
||||
.nosavedata
|
||||
ld a, "D"
|
||||
ld [rMagic], a
|
||||
ld a, "M"
|
||||
ld [rMagic+1], a
|
||||
ld a, "G"
|
||||
ld [rMagic+2], a
|
||||
ld a, "2"
|
||||
ld [rMagic+3], a
|
||||
|
||||
ld a, BUTTON_MODE_NORM
|
||||
ld [rSwapABState], a
|
||||
ld [wSwapABState], a
|
||||
|
||||
ld a, RNG_MODE_TGM3
|
||||
ld [rRNGModeState], a
|
||||
ld [wRNGModeState], a
|
||||
|
||||
ld a, RNG_MODE_TGM3
|
||||
ld [rRNGModeState], a
|
||||
ld [wRNGModeState], a
|
||||
|
||||
ld a, ROT_MODE_ARSTI
|
||||
ld [rRotModeState], a
|
||||
ld [wRotModeState], a
|
||||
|
||||
ld a, DROP_MODE_SONIC
|
||||
ld [rDropModeState], a
|
||||
ld [wDropModeState], a
|
||||
|
||||
ld a, SCURVE_DMGT
|
||||
ld [rSpeedCurveState], a
|
||||
ld [wSpeedCurveState], a
|
||||
|
||||
ld a, HIG_MODE_OFF
|
||||
ld [rAlways20GState], a
|
||||
ld [wAlways20GState], a
|
||||
|
||||
ld hl, sSpeedCurve
|
||||
ld a, l
|
||||
ldh [hStartSpeed], a
|
||||
ld [rSelectedStartLevel], a
|
||||
ld a, h
|
||||
ldh [hStartSpeed+1], a
|
||||
ld [rSelectedStartLevel+1], a
|
||||
|
||||
.otherinit
|
||||
; Other initialization.
|
||||
call RestoreSRAM
|
||||
call TimeInit
|
||||
call IntrInit
|
||||
call InputInit
|
||||
|
|
|
@ -19,7 +19,7 @@ IF !DEF(GAMEPLAY_MAP_INC)
|
|||
DEF GAMEPLAY_MAP_INC EQU 1
|
||||
|
||||
|
||||
SECTION "Gameplay Tilemap", ROM0
|
||||
SECTION "Gameplay Tilemap", ROMX, BANK[1]
|
||||
GameplayTilemap::
|
||||
DB $02,$01,$01,$01,$01,$01,$01,$01,$01,$01
|
||||
DB $01,$03,$09,$01,$01,$01,$01,$01,$01,$09
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
IF !DEF(TILES_INC)
|
||||
DEF TILES_INC EQU 1
|
||||
|
||||
SECTION "Tile data", ROM0
|
||||
SECTION "Tile data", ROMX, BANK[1]
|
||||
Tiles::
|
||||
DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
|
|
|
@ -19,7 +19,7 @@ IF !DEF(TITLE_MAP_INC)
|
|||
DEF TITLE_MAP_INC EQU 1
|
||||
|
||||
|
||||
SECTION "Title Screen Tilemap", ROM0
|
||||
SECTION "Title Screen Tilemap", ROMX, BANK[1]
|
||||
TitleScreenTilemap::
|
||||
DB $C3,$5B,$4C,$59,$4F,$5A,$5D,$4C,$01,$59
|
||||
DB $5A,$61,$4C,$01,$FA,$FB,$FC,$FD,$FE,$FF
|
||||
|
|
17
src/sfx.asm
17
src/sfx.asm
|
@ -61,7 +61,7 @@ DEF REG_WAVE_PATTERN_E EQU $3E
|
|||
DEF REG_WAVE_PATTERN_F EQU $3F
|
||||
|
||||
|
||||
SECTION "SFX Data", ROM0
|
||||
SECTION "SFX Data", ROMX, BANK[2]
|
||||
sSFXPieceI::
|
||||
db REG_NR12_CH1_VOLEV, $00, REG_NR14_CH1_FRQHI, $80, REG_NR22_CH2_VOLEV, $00, REG_NR24_CH2_FRQHI, $80
|
||||
db REG_NR32_CH3_VOLUM, $00, REG_NR34_CH3_FRQHI, $80, REG_NR42_CH4_VOLEV, $00, REG_NR44_CH4_CNTRL, $80
|
||||
|
@ -2431,6 +2431,12 @@ SFXKill::
|
|||
|
||||
; This play routine must be called every frame.
|
||||
SFXPlay::
|
||||
; Bank to SFX bank.
|
||||
ld a, [rBANKID]
|
||||
ld e, a
|
||||
ld a, BANK("SFX Data")
|
||||
ld [rROMB0], a
|
||||
|
||||
; Load the playhead position into HL.
|
||||
ldh a, [hPlayhead]
|
||||
ld l, a
|
||||
|
@ -2439,7 +2445,10 @@ SFXPlay::
|
|||
|
||||
; Nothing to do if it's a null ptr.
|
||||
or a, l
|
||||
ret z
|
||||
jr nz, .getRegister
|
||||
ld a, e
|
||||
ld [rROMB0], a
|
||||
ret
|
||||
|
||||
; Otherwise, get the register to write to.
|
||||
.getRegister
|
||||
|
@ -2449,6 +2458,8 @@ SFXPlay::
|
|||
; If it's $FE, then we're done. Check if there's more for us in the queue.
|
||||
cp a, $FE
|
||||
jr nz, :+
|
||||
ld a, e
|
||||
ld [rROMB0], a
|
||||
call SFXProcessQueue
|
||||
ret
|
||||
|
||||
|
@ -2473,6 +2484,8 @@ SFXPlay::
|
|||
ldh [hPlayhead], a
|
||||
ld a, h
|
||||
ldh [hPlayhead+1], a
|
||||
ld a, e
|
||||
ld [rROMB0], a
|
||||
ret
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,160 @@
|
|||
; DMGTRIS
|
||||
; Copyright (C) 2023 - Randy Thiemann <randy.thiemann@gmail.com>
|
||||
|
||||
; This program is free software: you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation, either version 3 of the License, or
|
||||
; (at your option) any later version.
|
||||
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
IF !DEF(SRAM_ASM)
|
||||
DEF SRAM_ASM EQU 1
|
||||
|
||||
|
||||
INCLUDE "globals.asm"
|
||||
|
||||
|
||||
SECTION "Persistent Globals", SRAM
|
||||
rMagic:: ds 4
|
||||
rCheck:: ds 6
|
||||
rSwapABState:: ds 1
|
||||
rRNGModeState:: ds 1
|
||||
rRotModeState:: ds 1
|
||||
rDropModeState:: ds 1
|
||||
rSpeedCurveState:: ds 1
|
||||
rAlways20GState:: ds 1
|
||||
rSelectedStartLevel:: ds 2
|
||||
|
||||
|
||||
SECTION "SRAM Functions", ROM0
|
||||
InitializeSRAM:
|
||||
; Set the magic id.
|
||||
ld a, SAVE_MAGIC_0
|
||||
ld [rMagic], a
|
||||
ld a, SAVE_MAGIC_1
|
||||
ld [rMagic+1], a
|
||||
ld a, SAVE_MAGIC_2
|
||||
ld [rMagic+2], a
|
||||
ld a, SAVE_MAGIC_3
|
||||
ld [rMagic+3], a
|
||||
|
||||
; Load defaults.
|
||||
ld a, BUTTON_MODE_NORM
|
||||
ld [rSwapABState], a
|
||||
ld [wSwapABState], a
|
||||
|
||||
ld a, RNG_MODE_TGM3
|
||||
ld [rRNGModeState], a
|
||||
ld [wRNGModeState], a
|
||||
|
||||
ld a, ROT_MODE_ARSTI
|
||||
ld [rRotModeState], a
|
||||
ld [wRotModeState], a
|
||||
|
||||
ld a, DROP_MODE_SONIC
|
||||
ld [rDropModeState], a
|
||||
ld [wDropModeState], a
|
||||
|
||||
ld a, SCURVE_DMGT
|
||||
ld [rSpeedCurveState], a
|
||||
ld [wSpeedCurveState], a
|
||||
|
||||
ld a, HIG_MODE_OFF
|
||||
ld [rAlways20GState], a
|
||||
ld [wAlways20GState], a
|
||||
; Falls through to the next label!
|
||||
|
||||
|
||||
PartiallyInitializeSRAM:
|
||||
; Save build data.
|
||||
ld a, LOW(__UTC_YEAR__)
|
||||
ld [rCheck], a
|
||||
ld a, __UTC_MONTH__
|
||||
ld [rCheck+1], a
|
||||
ld a, __UTC_DAY__
|
||||
ld [rCheck+2], a
|
||||
ld a, __UTC_HOUR__
|
||||
ld [rCheck+3], a
|
||||
ld a, __UTC_MINUTE__
|
||||
ld [rCheck+4], a
|
||||
ld a, __UTC_SECOND__
|
||||
ld [rCheck+5], a
|
||||
|
||||
; Set to the default start level.
|
||||
ld hl, sSpeedCurve
|
||||
ld a, l
|
||||
ldh [hStartSpeed], a
|
||||
ld [rSelectedStartLevel], a
|
||||
ld a, h
|
||||
ldh [hStartSpeed+1], a
|
||||
ld [rSelectedStartLevel+1], a
|
||||
ret
|
||||
|
||||
|
||||
RestoreSRAM::
|
||||
; Check if our SRAM is initialized at all.
|
||||
; If not, we load all the defaults.
|
||||
ld a, [rMagic]
|
||||
cp a, SAVE_MAGIC_0
|
||||
jr nz, InitializeSRAM
|
||||
ld a, [rMagic+1]
|
||||
cp a, SAVE_MAGIC_1
|
||||
jr nz, InitializeSRAM
|
||||
ld a, [rMagic+2]
|
||||
cp a, SAVE_MAGIC_2
|
||||
jp nz, InitializeSRAM
|
||||
ld a, [rMagic+3]
|
||||
cp a, SAVE_MAGIC_3
|
||||
jp nz, InitializeSRAM
|
||||
|
||||
; If SRAM is initialized, we still need to check if it's for this exact build.
|
||||
; If not, wipe data that is no longer valid.
|
||||
ld a, [rCheck]
|
||||
cp a, LOW(__UTC_YEAR__)
|
||||
jr nz, PartiallyInitializeSRAM
|
||||
ld a, [rCheck+1]
|
||||
cp a, __UTC_MONTH__
|
||||
jr nz, PartiallyInitializeSRAM
|
||||
ld a, [rCheck+2]
|
||||
cp a, __UTC_DAY__
|
||||
jr nz, PartiallyInitializeSRAM
|
||||
ld a, [rCheck+3]
|
||||
cp a, __UTC_HOUR__
|
||||
jr nz, PartiallyInitializeSRAM
|
||||
ld a, [rCheck+4]
|
||||
cp a, __UTC_MINUTE__
|
||||
jr nz, PartiallyInitializeSRAM
|
||||
ld a, [rCheck+5]
|
||||
cp a, __UTC_SECOND__
|
||||
jr nz, PartiallyInitializeSRAM
|
||||
|
||||
; SRAM is initialized and for this build, so we can load the data.
|
||||
ld a, [rSwapABState]
|
||||
ld [wSwapABState], a
|
||||
ld a, [rRNGModeState]
|
||||
ld [wRNGModeState], a
|
||||
ld a, [rRotModeState]
|
||||
ld [wRotModeState], a
|
||||
ld a, [rDropModeState]
|
||||
ld [wDropModeState], a
|
||||
ld a, [rSpeedCurveState]
|
||||
ld [wSpeedCurveState], a
|
||||
ld a, [rAlways20GState]
|
||||
ld [wAlways20GState], a
|
||||
|
||||
ld a, [rSelectedStartLevel]
|
||||
ldh [hStartSpeed], a
|
||||
ld a, [rSelectedStartLevel+1]
|
||||
ldh [hStartSpeed+1], a
|
||||
ret
|
||||
|
||||
|
||||
ENDC
|
Loading…
Reference in New Issue