; ---------------------------------------------------------------------------
; "MAIN LEVEL LOAD BLOCK" (after Nemesis)
;
; This struct array tells the engine where to find all the art associated with
; a particular zone. Each zone gets three longwords, in which it stores three
; pointers (in the lower 24 bits) and three jump table indeces (in the upper eight
; bits). The assembled data looks something like this:
;
; aaBBBBBB
; ccDDDDDD
; eeFFFFFF
;
; aa = index for primary pattern load request list
; BBBBBB = pointer to level art
; cc = index for secondary pattern load request list
; DDDDDD = pointer to 16x16 block mappings
; ee = index for palette
; FFFFFF = pointer to 128x128 block mappings
;
; Nemesis refers to this as the "main level load block". However, that name implies
; that this is code (obviously, it isn't), or at least that it points to the level's
; collision, object and ring placement arrays (it only points to art...
; although the 128x128 mappings do affect the actual level layout and collision)
; ---------------------------------------------------------------------------
; declare some global variables to be used by the levartptrs macro
cur_zone_id := 0
cur_zone_str := "0"
; macro for declaring a "main level load block" (MLLB)
levartptrs macro plc1,plc2,palette,art,map16x16,map128x128
!org LevelArtPointers+zone_id_{cur_zone_str}*12
dc.l (plc1<<24)|art
dc.l (plc2<<24)|map16x16
dc.l (palette<<24)|map128x128
cur_zone_id := cur_zone_id+1
cur_zone_str := "\{cur_zone_id}"
endm
; BEGIN SArt_Ptrs Art_Ptrs_Array[17]
; dword_42594: MainLoadBlocks: saArtPtrs:
LevelArtPointers:
levartptrs PLCID_Ehz1, PLCID_Ehz2, PalID_EHZ, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ; 0 ; WHZ ; WINTER HILL ZONE
levartptrs PLCID_Ehz1, PLCID_Ehz2, PalID_EHZ2, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ; 1 ; LEV1 ; LEVEL 1 (UNUSED)
levartptrs PLCID_Ehz1, PLCID_Ehz2, PalID_WZ, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ; 2 ; LEV2 ; LEVEL 2 (UNUSED)
levartptrs PLCID_Unused1, PLCID_Unused2, PalID_EHZ3, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ; 3 ; LEV3 ; LEVEL 3 (UNUSED)
levartptrs PLCID_Mtz1, PLCID_Mtz2, PalID_MTZ, ArtKos_MTZ, BM16_MTZ, BM128_MTZ ; 4 ; RRZ ; RUSTY RIOT ZONE ACTS 1 & 2
levartptrs PLCID_Mtz1, PLCID_Mtz2, PalID_MTZ, ArtKos_MTZ, BM16_MTZ, BM128_MTZ ; 5 ; RRZ3 ; RUSTY RIOT ZONE ACT 3
levartptrs PLCID_Wfz1, PLCID_Wfz2, PalID_WFZ, ArtKos_SCZ, BM16_WFZ, BM128_WFZ ; 6 ; AAZ ; ARCANE AIRSHIP ZONE
levartptrs PLCID_Htz1, PLCID_Htz2, PalID_HTZ, ArtKos_MCZ2, BM16_MCZ, BM128_MCZ ; 7 ; MCZ ; MOUNTAIN CLIMB ZONE
levartptrs PLCID_Hpz1, PLCID_Hpz2, PalID_HPZ, ArtKos_HPZ, BM16_HPZ, BM128_HPZ ; 8 ; HPZ ; HIDDEN PALACE ZONE
levartptrs PLCID_Unused3, PLCID_Unused4, PalID_EHZ4, ArtKos_EHZ, BM16_EHZ, BM128_EHZ ; 9 ; LEV9 ; LEVEL 9 (UNUSED)
levartptrs PLCID_Ooz1, PLCID_Ooz2, PalID_OOZ, ArtKos_OOZ, BM16_OOZ, BM128_OOZ ; $A ; BSZ ; BLACK SEA ZONE
levartptrs PLCID_Mcz1, PLCID_Mcz2, PalID_MCZ, ArtKos_CCZ, BM16_CCZ, BM128_CCZ ; $B ; CCZ ; CREEPY CAVERNS ZONE
levartptrs PLCID_Cnz1, PLCID_Cnz2, PalID_CNZ, ArtKos_CNZ, BM16_CNZ, BM128_CNZ ; $C ; JWZ ; JACKPOT WAY ZONE
levartptrs PLCID_Cpz1, PLCID_Cpz2, PalID_CPZ, ArtKos_CPZ, BM16_CPZ, BM128_CPZ ; $D ; CPZ ; CORROSION PLANT ZONE
levartptrs PLCID_Dez1, PLCID_Dez2, PalID_DEZ, ArtKos_DEZ, BM16_DEZ, BM128_DEZ ; $E ; DEZ ; DEATH EGG ZONE
levartptrs PLCID_Arz1, PLCID_Arz2, PalID_ARZ, ArtKos_WRZ, BM16_WRZ, BM128_ARZ ; $F ; WRZ ; WATERED RELIC ZONE
levartptrs PLCID_Scz1, PLCID_Scz2, PalID_SCZ, ArtKos_SCZ, BM16_WFZ, BM128_WFZ ; $10 ; ACZ ; AERIAL CHASE ZONE
if (cur_zone_id<>no_of_zones)&&(MOMPASS=1)
message "Warning: Table LevelArtPointers has \{cur_zone_id/1.0} entries, but it should have \{no_of_zones/1.0} entries"
endif
!org LevelArtPointers+cur_zone_id*12
; ---------------------------------------------------------------------------
; END Art_Ptrs_Array[17]
Comments