Files
perfect_dark/src/include/files/tiles.s
T

161 lines
5.4 KiB
ArmAsm

# Tile files are implemented here using assembly macros because it doesn't
# appear to be possible to do it in C in a sane way. Some rooms have no tiles,
# and you cannot declare an empty array in C.
.data
.set FLOORTYPE_DEFAULT, 0
.set FLOORTYPE_WOOD, 1
.set FLOORTYPE_STONE, 2
.set FLOORTYPE_CARPET, 3
.set FLOORTYPE_METAL, 4
.set FLOORTYPE_MUD, 5
.set FLOORTYPE_WATER, 6
.set FLOORTYPE_DIRT, 7
.set FLOORTYPE_SNOW, 8
.set GEOFLAG_0001, 0x0001
.set GEOFLAG_0002, 0x0002
.set GEOFLAG_COLLISIONS, 0x0004
.set GEOFLAG_0008, 0x0008
.set GEOFLAG_OPAQUE, 0x0010
.set GEOFLAG_LIFTFLOOR, 0x0020
.set GEOFLAG_LADDER, 0x0040
.set GEOFLAG_0080, 0x0080
.set GEOFLAG_0100, 0x0100
.set GEOFLAG_UNDERWATER, 0x0200
.set GEOFLAG_0400, 0x0400
.set GEOFLAG_AIBOTCROUCH, 0x0800
.set GEOFLAG_AIBOTDUCK, 0x1000
.set GEOFLAG_STEP, 0x2000
.set GEOFLAG_DIE, 0x4000
.set GEOFLAG_CLIMBABLELEDGE, 0x8000
.set VERSION_NTSC_BETA, 0
.set VERSION_NTSC_1_0, 1
.set VERSION_NTSC_FINAL, 2
.set VERSION_PAL_BETA, 3
.set VERSION_PAL_FINAL, 4
.set VERSION_JPN_FINAL, 5
.macro tileabstract numverts, flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour
.byte 0
.byte \numverts
.short \flags
.short \floortype
.byte \xmin
.byte \ymin
.byte \zmin
.byte \xmax
.byte \ymax
.byte \zmax
.short \floorcolour
.endm
.macro tilevert x, y, z
.short \x
.short \y
.short \z
.endm
.macro tile3 flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour, x1, y1, z1, x2, y2, z2, x3, y3, z3
tileabstract 3, \flags, \floortype, \xmin, \ymin, \zmin, \xmax, \ymax, \zmax, \floorcolour
tilevert \x1, \y1, \z1
tilevert \x2, \y2, \z2
tilevert \x3, \y3, \z3
.endm
.macro tile4 flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4
tileabstract 4, \flags, \floortype, \xmin, \ymin, \zmin, \xmax, \ymax, \zmax, \floorcolour
tilevert \x1, \y1, \z1
tilevert \x2, \y2, \z2
tilevert \x3, \y3, \z3
tilevert \x4, \y4, \z4
.endm
.macro tile5 flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5
tileabstract 5, \flags, \floortype, \xmin, \ymin, \zmin, \xmax, \ymax, \zmax, \floorcolour
tilevert \x1, \y1, \z1
tilevert \x2, \y2, \z2
tilevert \x3, \y3, \z3
tilevert \x4, \y4, \z4
tilevert \x5, \y5, \z5
.endm
.macro tile6 flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5, x6, y6, z6
tileabstract 6, \flags, \floortype, \xmin, \ymin, \zmin, \xmax, \ymax, \zmax, \floorcolour
tilevert \x1, \y1, \z1
tilevert \x2, \y2, \z2
tilevert \x3, \y3, \z3
tilevert \x4, \y4, \z4
tilevert \x5, \y5, \z5
tilevert \x6, \y6, \z6
.endm
.macro tile7 flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5, x6, y6, z6, x7, y7, z7
tileabstract 7, \flags, \floortype, \xmin, \ymin, \zmin, \xmax, \ymax, \zmax, \floorcolour
tilevert \x1, \y1, \z1
tilevert \x2, \y2, \z2
tilevert \x3, \y3, \z3
tilevert \x4, \y4, \z4
tilevert \x5, \y5, \z5
tilevert \x6, \y6, \z6
tilevert \x7, \y7, \z7
.endm
.macro tile8 flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5, x6, y6, z6, x7, y7, z7, x8, y8, z8
tileabstract 8, \flags, \floortype, \xmin, \ymin, \zmin, \xmax, \ymax, \zmax, \floorcolour
tilevert \x1, \y1, \z1
tilevert \x2, \y2, \z2
tilevert \x3, \y3, \z3
tilevert \x4, \y4, \z4
tilevert \x5, \y5, \z5
tilevert \x6, \y6, \z6
tilevert \x7, \y7, \z7
tilevert \x8, \y8, \z8
.endm
.macro tile9 flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5, x6, y6, z6, x7, y7, z7, x8, y8, z8, x9, y9, z9
tileabstract 9, \flags, \floortype, \xmin, \ymin, \zmin, \xmax, \ymax, \zmax, \floorcolour
tilevert \x1, \y1, \z1
tilevert \x2, \y2, \z2
tilevert \x3, \y3, \z3
tilevert \x4, \y4, \z4
tilevert \x5, \y5, \z5
tilevert \x6, \y6, \z6
tilevert \x7, \y7, \z7
tilevert \x8, \y8, \z8
tilevert \x9, \y9, \z9
.endm
.macro tile11 flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5, x6, y6, z6, x7, y7, z7, x8, y8, z8, x9, y9, z9, x10, y10, z10, x11, y11, z11
tileabstract 11, \flags, \floortype, \xmin, \ymin, \zmin, \xmax, \ymax, \zmax, \floorcolour
tilevert \x1, \y1, \z1
tilevert \x2, \y2, \z2
tilevert \x3, \y3, \z3
tilevert \x4, \y4, \z4
tilevert \x5, \y5, \z5
tilevert \x6, \y6, \z6
tilevert \x7, \y7, \z7
tilevert \x8, \y8, \z8
tilevert \x9, \y9, \z9
tilevert \x10, \y10, \z10
tilevert \x11, \y11, \z11
.endm
.macro tile12 flags, floortype, xmin, ymin, zmin, xmax, ymax, zmax, floorcolour, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5, x6, y6, z6, x7, y7, z7, x8, y8, z8, x9, y9, z9, x10, y10, z10, x11, y11, z11, x12, y12, z12
tileabstract 12, \flags, \floortype, \xmin, \ymin, \zmin, \xmax, \ymax, \zmax, \floorcolour
tilevert \x1, \y1, \z1
tilevert \x2, \y2, \z2
tilevert \x3, \y3, \z3
tilevert \x4, \y4, \z4
tilevert \x5, \y5, \z5
tilevert \x6, \y6, \z6
tilevert \x7, \y7, \z7
tilevert \x8, \y8, \z8
tilevert \x9, \y9, \z9
tilevert \x10, \y10, \z10
tilevert \x11, \y11, \z11
tilevert \x12, \y12, \z12
.endm