mirror of
https://github.com/Artrios/pokecarde.git
synced 2026-04-25 07:36:51 -05:00
Add disassembled regi decoration card
This commit is contained in:
parent
4957a30a58
commit
fca39eed9c
1145
decoration/08-O001.asm
Normal file
1145
decoration/08-O001.asm
Normal file
File diff suppressed because it is too large
Load Diff
1181
decoration/08-O002.asm
Normal file
1181
decoration/08-O002.asm
Normal file
File diff suppressed because it is too large
Load Diff
64
decoration/Makefile
Normal file
64
decoration/Makefile
Normal 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
|
||||
132
decoration/decoration-tickets.asm
Normal file
132
decoration/decoration-tickets.asm
Normal 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
123
decoration/decoration.asm
Normal 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
14
decoration/prologue.asm
Normal 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
|
||||
BIN
decoration/sprites/arrow-ticket.gbapal
Normal file
BIN
decoration/sprites/arrow-ticket.gbapal
Normal file
Binary file not shown.
BIN
decoration/sprites/arrow.4bpp
Normal file
BIN
decoration/sprites/arrow.4bpp
Normal file
Binary file not shown.
BIN
decoration/sprites/arrow.gbapal
Normal file
BIN
decoration/sprites/arrow.gbapal
Normal file
Binary file not shown.
BIN
decoration/sprites/aurora_ticket.4bpp
Normal file
BIN
decoration/sprites/aurora_ticket.4bpp
Normal file
Binary file not shown.
BIN
decoration/sprites/aurora_ticket.gbapal
Normal file
BIN
decoration/sprites/aurora_ticket.gbapal
Normal file
Binary file not shown.
BIN
decoration/sprites/eon_ticket.4bpp
Normal file
BIN
decoration/sprites/eon_ticket.4bpp
Normal file
Binary file not shown.
BIN
decoration/sprites/eon_ticket.gbapal
Normal file
BIN
decoration/sprites/eon_ticket.gbapal
Normal file
Binary file not shown.
BIN
decoration/sprites/mystic_ticket.4bpp
Normal file
BIN
decoration/sprites/mystic_ticket.4bpp
Normal file
Binary file not shown.
BIN
decoration/sprites/mystic_ticket.gbapal
Normal file
BIN
decoration/sprites/mystic_ticket.gbapal
Normal file
Binary file not shown.
BIN
decoration/sprites/pokeball_bg-ticket.gbapal
Normal file
BIN
decoration/sprites/pokeball_bg-ticket.gbapal
Normal file
Binary file not shown.
1
decoration/sprites/pokeball_bg.4bpp
Normal file
1
decoration/sprites/pokeball_bg.4bpp
Normal file
|
|
@ -0,0 +1 @@
|
|||
3333DDDD3333DDDD3333DDDD3333DDDD3333DDDD333DDD33DD3D333DDDD13DD13"D$"3""DD""3333""""""""""""#"""$"""#"""D"""33"""D"""3#""BD"""33""BD""""""""3"""D$""33""DD$"333"DDD$3333DDDD""""""""""""""""""""""""#"""DD""
|
||||
BIN
decoration/sprites/pokeball_bg.gbapal
Normal file
BIN
decoration/sprites/pokeball_bg.gbapal
Normal file
Binary file not shown.
BIN
decoration/sprites/pokeball_bg.tilemap
Normal file
BIN
decoration/sprites/pokeball_bg.tilemap
Normal file
Binary file not shown.
1
decoration/sprites/regi.gbapal
Normal file
1
decoration/sprites/regi.gbapal
Normal file
|
|
@ -0,0 +1 @@
|
|||
€%0Fö^ZkÙM)9rZ9kKǯ!•2)¹9ÿ
|
||||
BIN
decoration/sprites/regice.4bpp
Normal file
BIN
decoration/sprites/regice.4bpp
Normal file
Binary file not shown.
BIN
decoration/sprites/regirock.4bpp
Normal file
BIN
decoration/sprites/regirock.4bpp
Normal file
Binary file not shown.
BIN
decoration/sprites/registeel.4bpp
Normal file
BIN
decoration/sprites/registeel.4bpp
Normal file
Binary file not shown.
BIN
decoration/sprites/text.gbapal
Normal file
BIN
decoration/sprites/text.gbapal
Normal file
Binary file not shown.
BIN
decoration/sprites/textbox_main.tilemap
Normal file
BIN
decoration/sprites/textbox_main.tilemap
Normal file
Binary file not shown.
BIN
decoration/sprites/textboxes-ticket.gbapal
Normal file
BIN
decoration/sprites/textboxes-ticket.gbapal
Normal file
Binary file not shown.
BIN
decoration/sprites/textboxes.4bpp
Normal file
BIN
decoration/sprites/textboxes.4bpp
Normal file
Binary file not shown.
BIN
decoration/sprites/textboxes.gbapal
Normal file
BIN
decoration/sprites/textboxes.gbapal
Normal file
Binary file not shown.
BIN
decoration/sprites/textboxes.tilemap
Normal file
BIN
decoration/sprites/textboxes.tilemap
Normal file
Binary file not shown.
69
macros.asm
69
macros.asm
|
|
@ -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 ; don’t 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
105
scripts/checksum_regi.py
Normal 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)
|
||||
Loading…
Reference in New Issue
Block a user