Add disassembled regi decoration card

This commit is contained in:
Artrios 2022-09-09 22:03:00 +08:00
parent 4957a30a58
commit fca39eed9c
31 changed files with 2835 additions and 0 deletions

1145
decoration/08-O001.asm Normal file

File diff suppressed because it is too large Load Diff

1181
decoration/08-O002.asm Normal file

File diff suppressed because it is too large Load Diff

64
decoration/Makefile Normal file
View File

@ -0,0 +1,64 @@
all: 08-O001-EN.raw 08-O002-EN.raw
.SECONDARY: 08-O002-EN.z80
decoration-%.tx: decoration.asm
python ../scripts/regionalize.py $< $@ $* $*
decoration-%.o: decoration-%.tx
./rgbasm -o $@ $<
decoration-%.gbc: decoration-%.o
./rgblink -o $@ $<
decoration-%.bin: decoration-%.gbc
python ../scripts/stripgbc.py $< $@
decoration-%.mev: decoration-%.bin
python ../scripts/checksum_regi.py $< $@
prologue-%.tx: prologue.asm
python ../scripts/regionalize.py $< $@ $* $*
prologue-%.o: prologue-%.tx
./rgbasm -o $@ $<
prologue-%.gbc: prologue-%.o
./rgblink -o $@ $<
prologue-%.bin: prologue-%.gbc
python ../scripts/stripgbc.py $< $@
08-O001-%.tx: 08-O001.asm decoration-%.mev prologue-%.bin
python ../scripts/ereadertext.py $< $@ $*
08-O001-%.o: 08-O001-%.tx
./rgbasm -o $@ $<
08-O001-%.gbc: 08-O001-%.o
./rgblink -o $@ $<
08-O001-%.z80: 08-O001-%.gbc
python ../scripts/stripgbc.py $< $@
08-O001-%.vpk: 08-O001-%.z80
./nevpk -c -i $< -o $@
08-O001-%.raw: 08-O001-%.vpk
./nedcmake -i $< -o $@ -type 1 -region 1
mv $@-01.raw $@
decoration-tickets-%.tx: decoration-tickets.asm
python ../scripts/regionalize.py $< $@ $* $*
decoration-tickets-%.o: decoration-tickets-%.tx
./rgbasm -o $@ $<
decoration-tickets-%.gbc: decoration-tickets-%.o
./rgblink -o $@ $<
decoration-tickets-%.bin: decoration-tickets-%.gbc
python ../scripts/stripgbc.py $< $@
decoration-tickets-%.mev: decoration-tickets-%.bin
python ../scripts/checksum_regi.py $< $@
08-O002-%.tx: 08-O002.asm decoration-tickets-%.mev prologue-%.bin
python ../scripts/ereadertext.py $< $@ $*
08-O002-%.o: 08-O002-%.tx
./rgbasm -o $@ $<
08-O002-%.gbc: 08-O002-%.o
./rgblink -o $@ $<
08-O002-%.z80: 08-O002-%.gbc
python ../scripts/stripgbc.py $< $@
08-O002-%.vpk: 08-O002-%.z80
./nevpk -c -i $< -o $@
08-O002-%.raw: 08-O002-%.vpk
./nedcmake -i $< -o $@ -type 1 -region 1
mv $@-01.raw $@
clean:
rm -f *.tx *.o *.gbc *.z80 *.bin *.mev *.vpk *.raw

View File

@ -0,0 +1,132 @@
INCLUDE "../macros.asm"
INCLUDE "../constants/items.asm"
INCLUDE "../constants/scriptcommands.asm"
DataStartEonTicket:
Mystery_Event
db CHECKSUM_CRC
dd 0 ; checksum placeholder
GBAPTR ScriptStartEonTicket
GBAPTR EonTicketEnd
ScriptStartEonTicket: ; 008E
db PRELOAD_SCRIPT
GBAPTR PreloadScriptStartEonTicket
db END_OF_CHUNKS
PreloadScriptStartEonTicket: ; 0094
setvirtualaddress PreloadScriptStartEonTicket
bufferitemname $01, EON_TICKET
checkitem EON_TICKET, $0001
compare $800D, $0001
virtualgotoif $01, TransferFailEonTicket
additem EON_TICKET, $0001
setflag $08B3
setflag $08B3
virtualloadpointer TransferSuccessEonTicket
setbyte $02
end
TransferFailEonTicket: ; 00B3
virtualloadpointer TransferFailTextEonTicket
setbyte $03
end
TransferSuccessEonTicket:
Text_EN "\v2 has been sent!@"
;db $FD,$02,$37,$00,$05,$08,$27,$2A,$13,$00,$07,$10,$AB,$FF
TransferFailTextEonTicket:
Text_EN "\v2 has already been\n"
Text_EN "received.@"
;db $FD,$02,$2D,$00,$02,$2A,$29,$FE,$46,$0C,$36,$37,$00,$01,$02,$13,$00,$02,$15,$06,$50,$10,$B0,$FF
EonTicketEnd:
db $00,$00,$00
DataStartAuroraTicket:
db $01,$00,$00,$00,$02,$02,$00,$02,$00,$00,$00,$04,$00,$80,$01,$00,$00 ; Mystery_Event
db CHECKSUM_CRC
dd 0 ; checksum placeholder
GBAPTR ScriptStartEonTicket
GBAPTR EonTicketEnd
ScriptStartAuroraTicket:
db PRELOAD_SCRIPT
GBAPTR PreloadScriptStartEonTicket
db END_OF_CHUNKS
PreloadScriptStartAuroraTicket:
setvirtualaddress PreloadScriptStartEonTicket
bufferitemname $01, AURORA_TICKET
checkitem AURORA_TICKET, $0001
compare $800D, $0001
virtualgotoif $01, TransferFailEonTicket
additem AURORA_TICKET, $0001
setflag $013A
setflag $08F0
virtualloadpointer TransferSuccessEonTicket
setbyte $02
end
TransferFailAuroraTicket:
virtualloadpointer TransferFailTextEonTicket
setbyte $03
end
TransferSuccessAuroraTicket:
Text_EN "\v2 has been sent!@"
;db $FD,$02,$37,$00,$05,$08,$27,$2A,$13,$00,$07,$10,$AB,$FF
TransferFailTextAuroraTicket:
Text_EN "\v2 has already been\n"
Text_EN "received.@"
;db $FD,$02,$2D,$00,$02,$2A,$29,$FE,$46,$0C,$36,$37,$00,$01,$02,$13,$00,$02,$15,$06,$50,$10,$B0,$FF
AuroraTicketEnd:
db $00,$00,$00
DataStartMysticTicket:
db $01,$00,$00,$00,$02,$02,$00,$02,$00,$00,$00,$04,$00,$80,$01,$00,$00 ; Mystery_Event
db CHECKSUM_CRC
dd 0 ; checksum placeholder
GBAPTR ScriptStartEonTicket
GBAPTR EonTicketEnd
ScriptStartMysticTicket:
db PRELOAD_SCRIPT
GBAPTR PreloadScriptStartEonTicket
db END_OF_CHUNKS
PreloadScriptStartMysticTicket:
setvirtualaddress PreloadScriptStartEonTicket
bufferitemname $01, MYSTIC_TICKET
checkitem MYSTIC_TICKET, $0001
compare $800D, $0001
virtualgotoif $01, TransferFailEonTicket
additem MYSTIC_TICKET, $0001
setflag $013B
setflag $08D5
virtualloadpointer TransferSuccessEonTicket
setbyte $02
end
TransferFailMysticTicket:
virtualloadpointer TransferFailTextEonTicket
setbyte $03
end
TransferSuccessMysticTicket:
Text_EN "\v2 has been sent!@"
;db $FD,$02,$37,$00,$05,$08,$27,$2A,$13,$00,$07,$10,$AB,$FF
TransferFailTextMysticTicket:
Text_EN "\v2 has already been\n"
Text_EN "received.@"
;db $FD,$02,$2D,$00,$02,$2A,$29,$FE,$46,$0C,$36,$37,$00,$01,$02,$13,$00,$02,$15,$06,$50,$10,$B0,$FF
MysticTicketEnd:
db $00,$00,$00
EndofTicketChunks:
DataEnd:
EOF

123
decoration/decoration.asm Normal file
View File

@ -0,0 +1,123 @@
INCLUDE "../macros.asm"
INCLUDE "../constants/items.asm"
INCLUDE "../constants/scriptcommands.asm"
DataStartRegirock: ; 0070
Mystery_Event
db CHECKSUM_CRC ; 0081
dd 0 ; checksum placeholder 0082
GBAPTR ScriptStartRegirock ; 0086
GBAPTR RegirockEnd ; 008A
ScriptStartRegirock: ; 008E
db PRELOAD_SCRIPT
GBAPTR PreloadScriptStartRegirock
db END_OF_CHUNKS
PreloadScriptStartRegirock: ; 0094
setvirtualaddress PreloadScriptStartRegirock
bufferdecorationname $00, $0076 ;Regirock doll
adddecoration $0076
compare $800D, $0000
virtualgotoif $01, TransferFailRegirock
virtualloadpointer TransferSuccessRegirock
setbyte $02
end
TransferFailRegirock: ; 00B3
virtualloadpointer TransferFailTextRegirock
setbyte $03
end
TransferSuccessRegirock:
Text_EN "\v2 has been sent!@"
;db $FD,$02,$37,$00,$05,$08,$27,$2A,$13,$00,$07,$10,$AB,$FF
TransferFailTextRegirock:
Text_EN "There is not enough room for the\n"
Text_EN "\v2...@"
;db $FD,$02,$2D,$00,$02,$2A,$29,$FE,$46,$0C,$36,$37,$00,$01,$02,$13,$00,$02,$15,$06,$50,$10,$B0,$FF
RegirockEnd:
db $00,$00,$00
DataStartRegice:
db $01,$00,$00,$00,$02,$02,$00,$02,$00,$00,$00,$04,$00,$80,$01,$00,$00 ; Mystery_Event
db CHECKSUM_CRC
dd 0 ; checksum placeholder
GBAPTR ScriptStartRegirock
GBAPTR RegirockEnd
ScriptStartRegice:
db PRELOAD_SCRIPT
GBAPTR PreloadScriptStartRegirock
db END_OF_CHUNKS
PreloadScriptStartRegice:
setvirtualaddress PreloadScriptStartRegirock
bufferdecorationname $00, $0077 ;Regice doll
adddecoration $0077
compare $800D, $0000
virtualgotoif $01, TransferFailRegirock
virtualloadpointer TransferSuccessRegirock
setbyte $02
end
TransferFailRegice:
virtualloadpointer TransferFailTextRegirock
setbyte $03
end
TransferSuccessRegice:
Text_EN "\v2 has been sent!@"
;db $FD,$02,$37,$00,$05,$08,$27,$2A,$13,$00,$07,$10,$AB,$FF
TransferFailTextRegice:
Text_EN "There is not enough room for the\n"
Text_EN "\v2...@"
;db $FD,$02,$2D,$00,$02,$2A,$29,$FE,$46,$0C,$36,$37,$00,$01,$02,$13,$00,$02,$15,$06,$50,$10,$B0,$FF
RegiceEnd:
db $00,$00,$00
DataStartRegisteel:
db $01,$00,$00,$00,$02,$02,$00,$02,$00,$00,$00,$04,$00,$80,$01,$00,$00 ; Mystery_Event
db CHECKSUM_CRC
dd 0 ; checksum placeholder
GBAPTR ScriptStartRegirock
GBAPTR RegirockEnd
ScriptStartRegisteel:
db PRELOAD_SCRIPT
GBAPTR PreloadScriptStartRegirock
db END_OF_CHUNKS
PreloadScriptStartRegisteel:
setvirtualaddress PreloadScriptStartRegirock
bufferdecorationname $00, $0078 ;Registeel doll
adddecoration $0078
compare $800D, $0000
virtualgotoif $01, TransferFailRegirock
virtualloadpointer TransferSuccessRegirock
setbyte $02
end
TransferFailRegisteel:
virtualloadpointer TransferFailTextRegirock
setbyte $03
end
TransferSuccessRegisteel:
Text_EN "\v2 has been sent!@"
;db $FD,$02,$37,$00,$05,$08,$27,$2A,$13,$00,$07,$10,$AB,$FF
TransferFailTextRegisteel:
Text_EN "There is not enough room for the\n"
Text_EN "\v2...@"
;db $FD,$02,$2D,$00,$02,$2A,$29,$FE,$46,$0C,$36,$37,$00,$01,$02,$13,$00,$02,$15,$06,$50,$10,$B0,$FF
RegisteelEnd:
db $00,$00,$00
EndofRegiChunks:
DataEnd:
EOF

14
decoration/prologue.asm Normal file
View File

@ -0,0 +1,14 @@
INCLUDE "../macros.asm"
SECTION "prologue", ROM0[$100]
db "GameFreak inc."
db 0,0,0,0,0,0
db $78,$56,$34,$12,$56,$AD,$95,$BF,$FF
db 0,0,0,0,0,0,0,$01,$55
db 0,0,0,0
db REGION
db 0
db "GameFreak inc."
db 0,0
EOF

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
3333DDDD3333DDDD3333DDDD3333DDDD3333DDDD333DDD33DD3D333DDDD13DD13"D$"3""DD""3333""""""""""""#"""$"""#"""D"""33"""D"""3#""BD"""33""BD""""""""3"""D$""33""DD$"333"DDD$3333DDDD""""""""""""""""""""""""#"""DD""

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
%0Fö^ZkÙM)9rZ9k ¯!•2)¹9ÿ

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -29,6 +29,51 @@ LD_IND_HL_A: MACRO
db $77
ENDM
; ld a, [hl]
LD_IND_A_HL: MACRO
db $7E
ENDM
; ld c, [hl]
LD_IND_C_HL: MACRO
db $4E
ENDM
; ld b, [hl]
LD_IND_B_HL: MACRO
db $46
ENDM
; ld l, [hl]
LD_IND_L_HL: MACRO
db $6E
ENDM
; ld e, [hl]
LD_IND_E_HL: MACRO
db $5E
ENDM
; ld d, [hl]
LD_IND_D_HL: MACRO
db $56
ENDM
; ld [hl], c
LD_IND_HL_C: MACRO
db $71
ENDM
; ld [hl], b
LD_IND_HL_B: MACRO
db $70
ENDM
; ld a, [de]
LD_IND_A_DE: MACRO
db $1A
ENDM
; add a, [hl]
ADD_A_HL_IND: MACRO
db $86
@ -108,6 +153,7 @@ BATTLE_TRAINER EQU $0D
CLOCK_ADJUSTMENT EQU $0E
CHECKSUM_BYTES EQU $0F ; dont use this
CHECKSUM_CRC EQU $10 ; use this instead
DOME_TRAINER EQU $11 ; Battle Dome trainer
; an FF byte followed by 00s will flag the end of the program so that it can
; be extracted automatically from the Game Boy ROM that rgbds tries to build
@ -122,6 +168,18 @@ FadeIn: MACRO
ld a, \1
API $000
ENDM
SetBackgroundAutoScroll: MACRO
ld bc, \1
ld de, \2
xor a
API $012
ENDM
SetBackgroundMode: MACRO
ld e, \1
push de
xor a
API $019
ENDM
API_02C: MACRO
ld hl, $0000
push hl
@ -168,6 +226,12 @@ CreateCustomSprite: MACRO
API $04D
LD_IND_HL \1
ENDM
SpriteAutoScaleUntilSize: MACRO
ld c, \2
ld de, \3
LD_HL_IND \1
API $05B
ENDM
SetBackgroundPalette: MACRO
ld c, \1
ld de, \2
@ -218,6 +282,11 @@ API_09B: MACRO
LD_A_IND \1
API $09B
ENDM
GetTextWidth: MACRO
ld de, \2
LD_A_IND \1
API $0C0
ENDM
API_0C7: MACRO
ld hl, \1
API $0C7

105
scripts/checksum_regi.py Normal file
View File

@ -0,0 +1,105 @@
import struct
import sys
chunk_lengths = [0,0,0,6,2,5,12,5,3,1,2,5,5,5,1,13,13,5]
bytewises = []
bytewise_results = []
wordwises = []
wordwise_results = []
crcs = []
crc_results = []
data = ""
with open(sys.argv[1], 'rb') as f:
data = f.read()
f.closed
base_address = struct.unpack('<I', data[1:5])[0]
def find_all(a_str, sub):
start = 0
while True:
start = a_str.find(sub, start)
if start == -1: return
yield start
start += len(sub) # use start += 1 to find overlapping matches
pos=list(find_all(data,b'\x01\x00\x00\x00\x02\x02\x00\x02\x00\x00\x00\x04\x00\x80\x01\x00\x00\x10'))
for i in pos:
i=i+17
chunk_type = ord(data[i])
if chunk_type == 0x02: # END_OF_CHUNKS
break
elif chunk_type == 0x07: # CUSTOM_BERRY
start_address = struct.unpack('<I', data[i+1:i+5])[0] - base_address
bytewises.append([start_address + 0x52C, start_address, start_address + 0x52C])
elif chunk_type == 0x0D: # BATTLE_TRAINER
start_address = struct.unpack('<I', data[i+1:i+5])[0] - base_address
wordwises.append([start_address + 0x13C, start_address, start_address + 0x13C])
elif chunk_type == 0x0F: # CHECKSUM_BYTES
start_address = struct.unpack('<I', data[i+5:i+9])[0] - base_address
end_address = struct.unpack('<I', data[i+9:i+13])[0] - base_address
bytewise.append([i + 1, start_address, end_address])
elif chunk_type == 0x10: # CHECKSUM_CRC
start_address = struct.unpack('<I', data[i+5:i+9])[0] - base_address +i-0x11
end_address = struct.unpack('<I', data[i+9:i+13])[0] - base_address +i-0x11
crcs.append([i + 1, start_address, end_address])
elif chunk_type == 0x11: # DOME_TRAINER
start_address = struct.unpack('<I', data[i+1:i+5])[0] - base_address
wordwises.append([start_address + 0x13C, start_address, start_address + 0x13C])
elif chunk_type < 0x02 or chunk_type > 0x11:
print "Unknown chunk {0:X}".format(chunk_type)
raise TypeError
i += chunk_lengths[chunk_type]
# calculate and insert all wordwise checksums
for wordwise in wordwises:
sum = 0
for i in range(wordwise[1], wordwise[2], 4):
sum = (sum + struct.unpack('<I', data[i:i+4])[0]) & 0xFFFFFFFF
wordwise_results.append(sum)
i = 0
for wordwise in wordwises:
data = data[0:wordwise[0]] + struct.pack('<I', wordwise_results[i]) + data[(wordwise[0] + 4):]
i += 1
# calculate and insert all bytewise checksums
for bytewise in bytewises:
sum = 0
for i in range(bytewise[1], bytewise[2]):
sum = (sum + ord(data[i])) & 0xFFFFFFFF
bytewise_results.append(sum)
i = 0
for bytewise in bytewises:
data = data[0:bytewise[0]] + struct.pack('<I', bytewise_results[i]) + data[(bytewise[0] + 4):]
i += 1
# calculate and insert all CRC checksums
for crc in crcs:
sum = 0x1121
for i in range(crc[1], crc[2]):
sum ^= ord(data[i])
for j in range(8):
if(sum & 1):
sum = (sum >> 1) ^ 0x8408
else:
sum >>= 1
sum = ~sum & 0xFFFF
crc_results.append(sum)
i = 0
for crc in crcs:
data = data[0:crc[0]] + struct.pack('<I', crc_results[i]) + data[(crc[0] + 4):]
i += 1
# write the updated file
out = open(sys.argv[2], 'w')
out.write(data)