mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-03-21 17:24:13 -05:00
Add packed_sprite_oam macro and dumping script, dump duskull spritesheet oam entries
This commit is contained in:
parent
4c8d5a9871
commit
9b8360eaf4
|
|
@ -1,2 +1,3 @@
|
|||
.include "asm/macros/function.inc"
|
||||
.include "asm/macros/label.inc"
|
||||
.include "asm/macros/sprite_oam.inc"
|
||||
|
|
|
|||
4
asm/macros/sprite_oam.inc
Normal file
4
asm/macros/sprite_oam.inc
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.macro packed_sprite_oam x, y, affineMode, objMode, mosaic, bpp, shape, matrixNum, hFlip, vFlip, size, tileNum, priority, paletteNum
|
||||
.4byte ( ((\y) & 0xFF) | (((\affineMode) & 0x3) << 8) | (((\objMode) & 0x3) << 10) | (((\mosaic) & 0x1) << 12) | (((\bpp) & 0x1) << 13) | (((\shape) & 0x3) << 14) | (((\x) & 0x1FF) << 16) | (((\matrixNum) & 0x7) << 25) | (((\hFlip) & 0x1) << 28) | (((\vFlip) & 0x1) << 29) | (((\size) & 0x3) << 30) )
|
||||
.2byte ( ((\tileNum) & 0x3FF) | (((\priority) & 0x3) << 10) | (((\paletteNum) & 0xF) << 12) )
|
||||
.endm
|
||||
41
data/rom.s
41
data/rom.s
|
|
@ -4,6 +4,7 @@
|
|||
#include "constants/species.h"
|
||||
#include "constants/bg_music.h"
|
||||
#include "gba/io_reg.h"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
gUnknown_08055A68:: @ 0x08055A68
|
||||
.2byte AREA_FOREST_RUBY
|
||||
|
|
@ -3439,8 +3440,44 @@ gUnknown_086B9AB8:: @ 0x086B9AB8
|
|||
gUnknown_086B9DAC:: @ 0x086B9DAC
|
||||
.incbin "baserom.gba", 0x6B9DAC, 0x2F4
|
||||
|
||||
gUnknown_086BA0A0:: @ 0x086BA0A0
|
||||
.incbin "baserom.gba", 0x6BA0A0, 0x1380
|
||||
gDuskullSpritesheetOam:: @ 0x086BA0A0
|
||||
packed_sprite_oam x=0x0, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x20, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x0, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x20, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x0, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x20, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x0, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x20, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x0, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x20, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x2, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x1E, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x8, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x10, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x8, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x10, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x8, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x10, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x8, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x10, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x8, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x10, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x6, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0xE, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x1, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x3, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x1D, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x0, y=-0x2, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x20, y=-0x2, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x7, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x19, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x8, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x18, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=-0x8, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x0, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x2, tileNum=0x49, priority=0x1, paletteNum=0x2
|
||||
packed_sprite_oam x=0x18, y=0x0, affineMode=0x0, objMode=0x1, mosaic=0x0, bpp=0x0, shape=0x2, matrixNum=0x0, hFlip=0x0, vFlip=0x0, size=0x1, tileNum=0x59, priority=0x1, paletteNum=0x2
|
||||
|
||||
gUnknown_086BA16C:: @ 0x086BA16C
|
||||
.incbin "baserom.gba", 0x6BA16C, 0x12B4
|
||||
|
||||
gUnknown_086BB420:: @ 0x086BB420
|
||||
.incbin "baserom.gba", 0x6BB420, 0x284
|
||||
|
|
|
|||
87
data_dump_tools/dump_packed_sprite_oam.py
Normal file
87
data_dump_tools/dump_packed_sprite_oam.py
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
import sys
|
||||
import struct
|
||||
|
||||
def signed(val, bits):
|
||||
sign_bit = 1 << (bits - 1)
|
||||
mask = (1 << bits) - 1
|
||||
val = val & mask
|
||||
return val - (1 << bits) if (val & sign_bit) else val
|
||||
|
||||
def parse_oam_entry(data):
|
||||
word, half = struct.unpack('<IH', data)
|
||||
y = (word >> 0) & 0xFF
|
||||
affineMode = (word >> 8) & 0x3
|
||||
objMode = (word >> 10) & 0x3
|
||||
mosaic = (word >> 12) & 0x1
|
||||
bpp = (word >> 13) & 0x1
|
||||
shape = (word >> 14) & 0x3
|
||||
x = (word >> 16) & 0x1FF
|
||||
matrixNum = (word >> 25) & 0x7
|
||||
hFlip = (word >> 28) & 0x1
|
||||
vFlip = (word >> 29) & 0x1
|
||||
size = (word >> 30) & 0x3
|
||||
tileNum = (half >> 0) & 0x3FF
|
||||
priority = (half >> 10) & 0x3
|
||||
paletteNum = (half >> 12) & 0xF
|
||||
return {
|
||||
'y': signed(y, 8),
|
||||
'affineMode': affineMode,
|
||||
'objMode': objMode,
|
||||
'mosaic': mosaic,
|
||||
'bpp': bpp,
|
||||
'shape': shape,
|
||||
'x': signed(x, 9),
|
||||
'matrixNum': matrixNum,
|
||||
'hFlip': hFlip,
|
||||
'vFlip': vFlip,
|
||||
'size': size,
|
||||
'tileNum': tileNum,
|
||||
'priority': priority,
|
||||
'paletteNum': paletteNum,
|
||||
}
|
||||
|
||||
def hex_or_signed(val):
|
||||
if isinstance(val, int) and val < 0:
|
||||
return f"-0x{-val:X}"
|
||||
else:
|
||||
return f"0x{val:X}"
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 4:
|
||||
print(f"Usage: {sys.argv[0]} <file> <offset> <length>")
|
||||
sys.exit(1)
|
||||
filename = sys.argv[1]
|
||||
offset = int(sys.argv[2], 0)
|
||||
length = int(sys.argv[3], 0)
|
||||
with open(filename, 'rb') as f:
|
||||
f.seek(offset)
|
||||
data = f.read(length)
|
||||
if len(data) % 6 != 0:
|
||||
print("Error: length must be a multiple of 6")
|
||||
sys.exit(1)
|
||||
for i in range(0, len(data), 6):
|
||||
e = parse_oam_entry(data[i:i+6])
|
||||
print(
|
||||
" packed_sprite_oam x={x}, y={y}, affineMode={affineMode}, objMode={objMode}, mosaic={mosaic}, "
|
||||
"bpp={bpp}, shape={shape}, matrixNum={matrixNum}, hFlip={hFlip}, vFlip={vFlip}, size={size}, "
|
||||
"tileNum={tileNum}, priority={priority}, paletteNum={paletteNum}"
|
||||
.format(
|
||||
x=hex_or_signed(e['x']),
|
||||
y=hex_or_signed(e['y']),
|
||||
affineMode=hex(e['affineMode']),
|
||||
objMode=hex(e['objMode']),
|
||||
mosaic=hex(e['mosaic']),
|
||||
bpp=hex(e['bpp']),
|
||||
shape=hex(e['shape']),
|
||||
matrixNum=hex(e['matrixNum']),
|
||||
hFlip=hex(e['hFlip']),
|
||||
vFlip=hex(e['vFlip']),
|
||||
size=hex(e['size']),
|
||||
tileNum=hex(e['tileNum']),
|
||||
priority=hex(e['priority']),
|
||||
paletteNum=hex(e['paletteNum']),
|
||||
)
|
||||
)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
@ -1,18 +1,18 @@
|
|||
import sys
|
||||
|
||||
def extract_bytes(input_file, output_file, start, length):
|
||||
with open(input_file, 'rb') as f:
|
||||
f.seek(start)
|
||||
data = f.read(length)
|
||||
with open(output_file, 'wb') as f:
|
||||
f.write(data)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 5:
|
||||
print(f"Usage: {sys.argv[0]} <input_file> <output_file> <start> <length>")
|
||||
sys.exit(1)
|
||||
input_file = sys.argv[1]
|
||||
output_file = sys.argv[2]
|
||||
start = int(sys.argv[3], 0)
|
||||
length = int(sys.argv[4], 0)
|
||||
extract_bytes(input_file, output_file, start, length)
|
||||
import sys
|
||||
|
||||
def extract_bytes(input_file, output_file, start, length):
|
||||
with open(input_file, 'rb') as f:
|
||||
f.seek(start)
|
||||
data = f.read(length)
|
||||
with open(output_file, 'wb') as f:
|
||||
f.write(data)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 5:
|
||||
print(f"Usage: {sys.argv[0]} <input_file> <output_file> <start> <length>")
|
||||
sys.exit(1)
|
||||
input_file = sys.argv[1]
|
||||
output_file = sys.argv[2]
|
||||
start = int(sys.argv[3], 0)
|
||||
length = int(sys.argv[4], 0)
|
||||
extract_bytes(input_file, output_file, start, length)
|
||||
|
|
@ -1254,7 +1254,7 @@ void sub_336E0(void) {
|
|||
}
|
||||
|
||||
extern const u8 gUnknown_08510E4C[];
|
||||
extern const u16 gUnknown_086BA0A0[][2][3];
|
||||
extern const u16 gDuskullSpritesheetOam[][2][3];
|
||||
void sub_340EC() {
|
||||
s16 i, j;
|
||||
s16 sb;
|
||||
|
|
@ -1297,7 +1297,7 @@ void sub_340EC() {
|
|||
oamData = &spriteGroup->oam[j];
|
||||
|
||||
dst = (u16*)&gOamBuffer[oamData->oamId];
|
||||
src = gUnknown_086BA0A0[sb][j];
|
||||
src = gDuskullSpritesheetOam[sb][j];
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
|
|
@ -1316,7 +1316,7 @@ void sub_340EC() {
|
|||
oamData = &spriteGroup->oam[j];
|
||||
|
||||
dst = (u16*)&gOamBuffer[oamData->oamId];
|
||||
src = gUnknown_086BA0A0[sb][j];
|
||||
src = gDuskullSpritesheetOam[sb][j];
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user