USING "camhedz_arcade_using.sch" //------------------------------------- // BG FUNCTIONS //------------------------------------- PROC CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(VECTOR_2D vPos, VECTOR_2D vSize, STRING sSprite, INT iLane, BOOL bGroundY = FALSE, BOOL bSkyY = FALSE) IF (sCMHDZData.iNumberOfBackgroundElements >= COUNT_OF(sCMHDZData.sBackgroundData)) EXIT ENDIF CMHDZ_BACKGROUND_DATA_SET_RENDERING(sCMHDZData.iNumberOfBackgroundElements, TRUE) sCMHDZData.sBackgroundData[sCMHDZData.iNumberOfBackgroundElements].vSpritePos = vPos sCMHDZData.sBackgroundData[sCMHDZData.iNumberOfBackgroundElements].vSpriteSize = vSize sCMHDZData.sBackgroundData[sCMHDZData.iNumberOfBackgroundElements].sSprite = sSprite sCMHDZData.sBackgroundData[sCMHDZData.iNumberOfBackgroundElements].iLane = iLane IF (bGroundY) sCMHDZData.sBackgroundData[sCMHDZData.iNumberOfBackgroundElements].vSpritePos.y = vPos.y - (sCMHDZData.sBackgroundData[sCMHDZData.iNumberOfBackgroundElements].vSpriteSize.y / 2.0) ENDIF IF (bSkyY) sCMHDZData.sBackgroundData[sCMHDZData.iNumberOfBackgroundElements].vSpritePos.y = vPos.y + (sCMHDZData.sBackgroundData[sCMHDZData.iNumberOfBackgroundElements].vSpriteSize.y / 2.0) ENDIF sCMHDZData.iNumberOfBackgroundElements++ ENDPROC PROC CMHDZ_SET_BACKGROUND_ELEMENT_GROUND_POSITION_Y(INT iElement, FLOAT y) sCMHDZData.sBackgroundData[iElement].vSpritePos.y = y - (sCMHDZData.sBackgroundData[iElement].vSpriteSize.y / 2.0) ENDPROC PROC CMHDZ_SET_RANDOM_BG_CITY_BACKGROUND_BUILDING_ELEMENT(INT iElement) SWITCH GET_RANDOM_INT_IN_RANGE(0, 5) CASE 0 sCMHDZData.sBackgroundData[iElement].vSpriteSize = INIT_VECTOR_2D(cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_HEIGHT) sCMHDZData.sBackgroundData[iElement].sSprite = "LEVEL_01_CITY_BUILDING_01" BREAK CASE 1 sCMHDZData.sBackgroundData[iElement].vSpriteSize = INIT_VECTOR_2D(cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_HEIGHT) sCMHDZData.sBackgroundData[iElement].sSprite = "LEVEL_01_CITY_BUILDING_02" BREAK CASE 2 sCMHDZData.sBackgroundData[iElement].vSpriteSize = INIT_VECTOR_2D(cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_HEIGHT) sCMHDZData.sBackgroundData[iElement].sSprite = "LEVEL_01_CITY_BUILDING_03" BREAK CASE 3 sCMHDZData.sBackgroundData[iElement].vSpriteSize = INIT_VECTOR_2D(cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_HEIGHT) sCMHDZData.sBackgroundData[iElement].sSprite = "LEVEL_01_CITY_BUILDING_04" BREAK CASE 4 sCMHDZData.sBackgroundData[iElement].vSpriteSize = INIT_VECTOR_2D(cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_HEIGHT) sCMHDZData.sBackgroundData[iElement].sSprite = "LEVEL_01_CITY_BUILDING_05" BREAK DEFAULT sCMHDZData.sBackgroundData[iElement].vSpriteSize = INIT_VECTOR_2D(cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_HEIGHT) sCMHDZData.sBackgroundData[iElement].sSprite = "LEVEL_01_CITY_BUILDING_01" BREAK ENDSWITCH ENDPROC PROC CMHDZ_ADD_RANDOM_BG_CITY_BACKGROUND_BUILDING_ELEMENT_TO_LIST(VECTOR_2D vPos, INT iLane) SWITCH GET_RANDOM_INT_IN_RANGE(0, 5) CASE 0 CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_HEIGHT), "LEVEL_01_CITY_BUILDING_01", iLane) BREAK CASE 1 CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_HEIGHT), "LEVEL_01_CITY_BUILDING_02", iLane) BREAK CASE 2 CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_HEIGHT), "LEVEL_01_CITY_BUILDING_03", iLane) BREAK CASE 3 CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_HEIGHT), "LEVEL_01_CITY_BUILDING_04", iLane) BREAK CASE 4 CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_HEIGHT), "LEVEL_01_CITY_BUILDING_05", iLane) BREAK DEFAULT CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_WIDTH, cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_HEIGHT), "LEVEL_01_CITY_BUILDING_01", iLane) BREAK ENDSWITCH ENDPROC PROC CMHDZ_ADD_RANDOM_BG_SCRAPYARD_BACKGROUND_VAN_ELEMENT_TO_LIST(VECTOR_2D vPos, INT iLane) SWITCH GET_RANDOM_INT_IN_RANGE(0, 4) CASE 0 CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_HEIGHT), "LEVEL_02_SCRAPYARD_BACKGROUND_VAN_01", iLane) BREAK CASE 1 CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_HEIGHT), "LEVEL_02_SCRAPYARD_BACKGROUND_VAN_02", iLane) BREAK CASE 2 CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_HEIGHT), "LEVEL_02_SCRAPYARD_BACKGROUND_VAN_03", iLane) BREAK CASE 3 CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPos, INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_HEIGHT), "LEVEL_02_SCRAPYARD_BACKGROUND_VAN_04", iLane) BREAK ENDSWITCH ENDPROC PROC CMHDZ_INIT_BACKGROUND(CMHDZ_LEVELS level) sCMHDZData.iFade = 255 sCMHDZData.bFadingOut = FALSE FLOAT fXPos FLOAT fCloudSpace // FLOAT fSlaughterhouseFence FLOAT fSlaughterHouseLights VECTOR_2D vPosition INT i = 0, j = 0 WHILE j < ciCMHDZ_MAX_BACKGROUND_TILES sCMHDZData.sBackgroundTilesData[j].vSpritePos.X = TO_FLOAT(i) i += 276 j ++ ENDWHILE sCMHDZData.iNumberOfBackgroundElements = 0 SWITCH level CASE CMHDZ_LEVEL_CITY // city far bg REPEAT 7 i CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(50 + (i * cfCMHDZ_BG_CITY_SKYLINE_SPRITE_WIDTH), 350), INIT_VECTOR_2D(cfCMHDZ_BG_CITY_SKYLINE_SPRITE_WIDTH, cfCMHDZ_BG_CITY_SKYLINE_SPRITE_HEIGHT), "LEVEL_01_CITY_SKYLINE_TILE", 0) ENDREPEAT REPEAT 6 i CMHDZ_ADD_RANDOM_BG_CITY_BACKGROUND_BUILDING_ELEMENT_TO_LIST(INIT_VECTOR_2D((i * cfCMHDZ_BG_CITY_BUILDING_SPACING), 300), 0) ENDREPEAT REPEAT 7 i CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(50 + (i * cfCMHDZ_BG_CITY_FENCE_SPRITE_WIDTH), 420), INIT_VECTOR_2D(cfCMHDZ_BG_CITY_FENCE_SPRITE_WIDTH, cfCMHDZ_BG_CITY_FENCE_SPRITE_HEIGHT), "LEVEL_01_CITY_FENCE_TILE", 0) ENDREPEAT BREAK CASE CMHDZ_LEVEL_SCRAPYARD fXPos = cfCMHDZ_BG_SCRAPYARD_CLOUD_X fCloudSpace = cfCMHDZ_BG_SCRAPYARD_CLOUD_GAP CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_BG_SCRAPYARD_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_CLOUD1_WIDTH, cfCMHDZ_BG_SCRAPYARD_CLOUD1_HEIGHT), "LEVEL_02_SCRAPYARD_CLOUD_01", 0) fXPos += (cfCMHDZ_BG_SCRAPYARD_CLOUD1_WIDTH/2.0) + (cfCMHDZ_BG_SCRAPYARD_CLOUD2_WIDTH/2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_BG_SCRAPYARD_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_CLOUD2_WIDTH, cfCMHDZ_BG_SCRAPYARD_CLOUD2_HEIGHT), "LEVEL_02_SCRAPYARD_CLOUD_02", 0) fXPos += (cfCMHDZ_BG_SCRAPYARD_CLOUD2_WIDTH / 2.0) + (cfCMHDZ_BG_SCRAPYARD_CLOUD3_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_BG_SCRAPYARD_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_CLOUD3_WIDTH, cfCMHDZ_BG_SCRAPYARD_CLOUD3_HEIGHT), "LEVEL_02_SCRAPYARD_CLOUD_03", 0) fXPos += (cfCMHDZ_BG_SCRAPYARD_CLOUD3_WIDTH / 2.0) + (cfCMHDZ_BG_SCRAPYARD_CLOUD4_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_BG_SCRAPYARD_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_CLOUD4_WIDTH, cfCMHDZ_BG_SCRAPYARD_CLOUD4_HEIGHT), "LEVEL_02_SCRAPYARD_CLOUD_04", 0) fXPos += (cfCMHDZ_BG_SCRAPYARD_CLOUD4_WIDTH / 2.0) + (cfCMHDZ_BG_SCRAPYARD_CLOUD5_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_BG_SCRAPYARD_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_CLOUD5_WIDTH, cfCMHDZ_BG_SCRAPYARD_CLOUD5_HEIGHT), "LEVEL_02_SCRAPYARD_CLOUD_05", 0) fXPos += (cfCMHDZ_BG_SCRAPYARD_CLOUD5_WIDTH / 2.0) + (cfCMHDZ_BG_SCRAPYARD_CLOUD6_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_BG_SCRAPYARD_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_CLOUD6_WIDTH, cfCMHDZ_BG_SCRAPYARD_CLOUD6_HEIGHT), "LEVEL_02_SCRAPYARD_CLOUD_06", 0) fXPos += (cfCMHDZ_LEVEL2_CLOUD6_WIDTH / 2.0) + (cfCMHDZ_BG_SCRAPYARD_CLOUD7_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_BG_SCRAPYARD_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_CLOUD7_WIDTH, cfCMHDZ_BG_SCRAPYARD_CLOUD7_HEIGHT), "LEVEL_02_SCRAPYARD_CLOUD_07", 0) // Trees REPEAT 7 i CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(50 + (i * cfCMHDZ_BG_SCRAPYARD_TREES_SPRITE_WIDTH), cfCMHDZ_BG_SCRAPYARD_TREES_Y), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_TREES_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_TREES_SPRITE_HEIGHT), "LEVEL_03_FOREST_BACKGROUND_TREES", 0) ENDREPEAT REPEAT 6 i CMHDZ_ADD_RANDOM_BG_SCRAPYARD_BACKGROUND_VAN_ELEMENT_TO_LIST(INIT_VECTOR_2D((i * cfCMHDZ_BG_SCRAPYARD_VAN_SPACING), 400), 0) ENDREPEAT // Fence REPEAT 7 i CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(50 + (i * cfCMHDZ_BG_SCRAPYARD_FENCE_SPRITE_WIDTH), 420), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_FENCE_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_FENCE_SPRITE_HEIGHT), "LEVEL_02_SCRAPYARD_METAL_FENCE", 0) ENDREPEAT // Rocks CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(400, 675), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_HEIGHT), "LEVEL_02_SCRAPYARD_ROCKS", ciCMHDZ_LANE_MIDDLE) CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(820, 755), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_HEIGHT), "LEVEL_02_SCRAPYARD_ROCKS", ciCMHDZ_LANE_MIDDLE) CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1050, 895), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_HEIGHT), "LEVEL_02_SCRAPYARD_ROCKS", ciCMHDZ_LANE_MIDDLE) CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1400, 1000), INIT_VECTOR_2D(cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_WIDTH, cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_HEIGHT), "LEVEL_02_SCRAPYARD_ROCKS", ciCMHDZ_LANE_MIDDLE) BREAK CASE CMHDZ_LEVEL_ASYLUM /* fXPos = cfCMHDZ_LEVEL3_CLOUD_X fCloudSpace = cfCMHDZ_LEVEL3_CLOUD_GAP CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_LEVEL3_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_LEVEL3_CLOUD1_WIDTH, cfCMHDZ_LEVEL3_CLOUD1_HEIGHT), "LEVEL_03_FOREST_BACKGROUND_CLOUDS_01", 0) fXPos += (cfCMHDZ_LEVEL3_CLOUD1_WIDTH/2.0) + (cfCMHDZ_LEVEL3_CLOUD2_WIDTH/2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_LEVEL3_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_LEVEL3_CLOUD2_WIDTH, cfCMHDZ_LEVEL3_CLOUD2_HEIGHT), "LEVEL_03_FOREST_BACKGROUND_CLOUDS_02", 0) fXPos += (cfCMHDZ_LEVEL3_CLOUD2_WIDTH / 2.0) + (cfCMHDZ_LEVEL3_CLOUD3_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_LEVEL3_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_LEVEL3_CLOUD3_WIDTH, cfCMHDZ_LEVEL3_CLOUD3_HEIGHT), "LEVEL_03_FOREST_BACKGROUND_CLOUDS_03", 0) fXPos += (cfCMHDZ_LEVEL3_CLOUD3_WIDTH / 2.0) + (cfCMHDZ_LEVEL3_CLOUD4_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_LEVEL3_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_LEVEL3_CLOUD4_WIDTH, cfCMHDZ_LEVEL3_CLOUD4_HEIGHT), "LEVEL_03_FOREST_BACKGROUND_CLOUDS_04", 0) fXPos += (cfCMHDZ_LEVEL3_CLOUD4_WIDTH / 2.0) + (cfCMHDZ_LEVEL3_CLOUD5_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_LEVEL3_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_LEVEL3_CLOUD5_WIDTH, cfCMHDZ_LEVEL3_CLOUD5_HEIGHT), "LEVEL_03_FOREST_BACKGROUND_CLOUDS_05", 0) fXPos += (cfCMHDZ_LEVEL3_CLOUD5_WIDTH / 2.0) + (cfCMHDZ_LEVEL3_CLOUD6_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_LEVEL3_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_LEVEL3_CLOUD6_WIDTH, cfCMHDZ_LEVEL3_CLOUD6_HEIGHT), "LEVEL_03_FOREST_BACKGROUND_CLOUDS_06", 0) fXPos += (cfCMHDZ_LEVEL3_CLOUD6_WIDTH / 2.0) + (cfCMHDZ_LEVEL3_CLOUD7_WIDTH / 2.0) + fCloudSpace CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(fXPos, cfCMHDZ_LEVEL3_CLOUD_Y), INIT_VECTOR_2D(cfCMHDZ_LEVEL3_CLOUD7_WIDTH, cfCMHDZ_LEVEL3_CLOUD7_HEIGHT), "LEVEL_03_FOREST_BACKGROUND_CLOUDS_07", 0) FLOAT fFirstBackgroundTrees fFirstBackgroundTrees = cfCMHDZ_LEVEL3_BACKGROUND_TREES_X VECTOR_2D v2Trees FOR i = 0 TO 6 v2Trees = INIT_VECTOR_2D(fFirstBackgroundTrees + (i * cfCMHDZ_LEVEL3_BACKGROUND_TREES_WIDTH), cfCMHDZ_LEVEL3_BACKGROUND_TREES_Y) CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(v2Trees, INIT_VECTOR_2D(cfCMHDZ_LEVEL3_BACKGROUND_TREES_WIDTH, cfCMHDZ_LEVEL3_BACKGROUND_TREES_HEIGHT), "LEVEL_03_FOREST_BACKGROUND_TREES", 0) ENDFOR // CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1288.125, 696.625), INIT_VECTOR_2D(cfCMHDZ_FOREST_GRASS_SPRITE_WIDTH, cfCMHDZ_FOREST_GRASS_SPRITE_HEIGHT), "FLOOR_GRASS", 1) // CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(665.750, 851.250), INIT_VECTOR_2D(cfCMHDZ_FOREST_GRASS_SPRITE_WIDTH, cfCMHDZ_FOREST_GRASS_SPRITE_HEIGHT), "FLOOR_GRASS", 1) CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(855.000, 660.000), INIT_VECTOR_2D(cfCMHDZ_FOREST_ROCKS_SPRITE_WIDTH, cfCMHDZ_FOREST_ROCKS_SPRITE_HEIGHT), "TERRAIN_ROCKS", 1) CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1275.000, 905), INIT_VECTOR_2D(cfCMHDZ_FOREST_ROCKS_SPRITE_WIDTH, cfCMHDZ_FOREST_ROCKS_SPRITE_HEIGHT), "TERRAIN_ROCKS", 1) CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1110.000, 485), INIT_VECTOR_2D(cfCMHDZ_FOREST_ROCKS_SPRITE_WIDTH, cfCMHDZ_FOREST_ROCKS_SPRITE_HEIGHT), "TERRAIN_ROCKS", 1) // CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1000, 895), INIT_VECTOR_2D(cfCMHDZ_FOREST_GRASS_SPRITE_WIDTH, cfCMHDZ_FOREST_GRASS_SPRITE_HEIGHT), "FLOOR_GRASS", 1) // CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1300, 1000), INIT_VECTOR_2D(cfCMHDZ_FOREST_GRASS_SPRITE_WIDTH, cfCMHDZ_FOREST_GRASS_SPRITE_HEIGHT), "FLOOR_GRASS", 1) */ BREAK CASE CMHDZ_LEVEL_PARK REPEAT 3 i CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(-50 + (i * cfCMHDZ_BG_THEMEPARK_SKYLINE_SPRITE_WIDTH), 70), INIT_VECTOR_2D(cfCMHDZ_BG_THEMEPARK_SKYLINE_SPRITE_WIDTH, cfCMHDZ_BG_THEMEPARK_SKYLINE_SPRITE_HEIGHT), "LEVEL_04_THEMEPARK_BACKGROUND_SKYLINE", 0, FALSE, TRUE) ENDREPEAT // Trees REPEAT 7 i CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(50 + (i * cfCMHDZ_BG_THEMEPARK_TREES_SPRITE_WIDTH), cfCMHDZ_BG_HORIZON_Y_COORD), INIT_VECTOR_2D(cfCMHDZ_BG_THEMEPARK_TREES_SPRITE_WIDTH, cfCMHDZ_BG_THEMEPARK_TREES_SPRITE_HEIGHT), "LEVEL_04_THEMEPARK_BACKGROUND_TREES", 0, TRUE) ENDREPEAT // Railway fXPos = cfCMHDZ_THEMEPARK_MINECART_TRACK_SPRITE_WIDTH FOR i = 0 TO 6 vPosition = INIT_VECTOR_2D(fXPos + (i * cfCMHDZ_THEMEPARK_MINECART_TRACK_SPRITE_WIDTH), cfCMHDZ_BG_HORIZON_Y_COORD) CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(vPosition, INIT_VECTOR_2D(cfCMHDZ_THEMEPARK_MINECART_TRACK_SPRITE_WIDTH, cfCMHDZ_THEMEPARK_MINECART_TRACK_SPRITE_HEIGHT), "LEVEL_04_THEMEPARK_BACKGROUND_PROP_MINECART_01", 1, FALSE, TRUE) ENDFOR //-- Railway // Wooden structures //CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(500, 220), INIT_VECTOR_2D(cfCMHDZ_WOODENSTRUCTURE_SPRITE_WIDTH, cfCMHDZ_WOODENSTRUCTURE_SPRITE_HEIGHT), "WOODENSTRUCTURE", 1) //CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1000, 220), INIT_VECTOR_2D(cfCMHDZ_WOODENSTRUCTURE_SPRITE_WIDTH, cfCMHDZ_WOODENSTRUCTURE_SPRITE_HEIGHT), "WOODENSTRUCTURE", 1) //CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1500, 220), INIT_VECTOR_2D(cfCMHDZ_WOODENSTRUCTURE_SPRITE_WIDTH, cfCMHDZ_WOODENSTRUCTURE_SPRITE_HEIGHT), "WOODENSTRUCTURE", 1) //-- Surface Rocks //CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(700, 675), INIT_VECTOR_2D(cfCMHDZ_ROCKS_SPRITE_WIDTH, cfCMHDZ_ROCKS_SPRITE_HEIGHT), "LEVEL_04_GOLDMINE_ROCK", 1) //CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1020.0, 785), INIT_VECTOR_2D(cfCMHDZ_ROCKS_SPRITE_WIDTH, cfCMHDZ_ROCKS_SPRITE_HEIGHT), "LEVEL_04_GOLDMINE_ROCK", 1) //CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(INIT_VECTOR_2D(1365.0, 545.0), INIT_VECTOR_2D(cfCMHDZ_ROCKS_SPRITE_WIDTH, cfCMHDZ_ROCKS_SPRITE_HEIGHT), "LEVEL_04_GOLDMINE_ROCK", 1) BREAK CASE CMHDZ_LEVEL_SLAUGHTERHOUSE //fSlaughterhouseClouds = cfCMHDZ_SLAUGHTERHOUSE_LIGHTS_X //fSlaughterhouseFence = cfCMHDZ_SLAUGHTERHOUSE_FENCE_X fSlaughterHouseLights = cfCMHDZ_SLAUGHTERHOUSE_LIGHT_X VECTOR_2D v2Slaughterhouse FOR i = 0 TO 3 v2Slaughterhouse = INIT_VECTOR_2D(fSlaughterHouseLights + ((i * 2) * cfCMHDZ_SLAUGHTERHOUSE_LIGHTS_WIDTH), cfCMHDZ_SLAUGHTERHOUSE_LIGHT_Y) CMHDZ_ADD_BACKGROUND_ELEMENT_TO_LIST(v2Slaughterhouse, INIT_VECTOR_2D(cfCMHDZ_SLAUGHTERHOUSE_LIGHTS_WIDTH, cfCMHDZ_SLAUGHTERHOUSE_LIGHTS_HEIGHT), "LEVEL_05_SLAUGHTERHOUSE_LIGHT", ciCMHDZ_LANE_MIDDLE) ENDFOR //CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_INIT_BACKGROUND - LEVEL_05_SLAUGHTERHOUSE_LIGHT - Adding new Midground elements") BREAK ENDSWITCH #IF IS_DEBUG_BUILD FOR i = 0 TO ciCMHDZ_MAX_BACKGROUND_ELEMS - 1 //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_INIT_BACKGROUND] Element ", i, " Type: ", sCMHDZData.sBackgroundData[i].sSprite) ENDFOR #ENDIF ENDPROC //------------------------------------- // ITEM FUNCTIONS //------------------------------------- PROC CMHDZ_RESET_ITEM(INT iItem) sCMHDZData.sItemData[iItem].bRendering = FALSE sCMHDZData.sItemData[iItem].iMinScreen = 0 sCMHDZData.sItemData[iItem].iRenderAfterWarpCount = 0 sCMHDZData.sItemData[iItem].iWarpCount = 0 sCMHDZData.sItemData[iItem].bShot = FALSE ENDPROC PROC CMHDZ_RESET_ITEMS() INT i FOR i = 0 TO ciCMHDZ_MAX_ITEMS -1 sCMHDZData.sItemData[i].eItemType = CMHDZ_ITEM_NONE CMHDZ_RESET_ITEM(i) ENDFOR sCMHDZData.iNumberOfItems = 0 ENDPROC PROC CMHDZ_RESET_ITEM_MAP_DATA(CMHDZ_ITEM_MAP_DATA &dat) dat.eItemType = CMHDZ_ITEM_NONE dat.iLane = 0 dat.iMinScreen = 0 dat.iRenderAfterWarpCount = 0 dat.fForceScale = 1.0 ENDPROC FUNC INT CMHDZ_GET_ITEM_MAP_DATA_SLOT(CMHDZ_ITEM_MAP_DATA &array[]) INT i REPEAT COUNT_OF(array) i IF (array[i].eItemType = CMHDZ_ITEM_NONE) RETURN i ENDIF ENDREPEAT RETURN -1 ENDFUNC FUNC INT CMHDZ_GET_FREE_SLOT_FOR_ITEM() INT i REPEAT ciCMHDZ_MAX_ITEMS i IF sCMHDZData.sItemData[i].bRendering = FALSE AND sCMHDZData.sItemData[i].iRenderAfterWarpCount = 0 AND sCMHDZData.sItemData[i].iMinScreen = 0 //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_ADD_ITEM_TO_LIST] Using slot ", i) RETURN i ENDIF ENDREPEAT RETURN -1 ENDFUNC FUNC VECTOR_2D CMHDZ_GET_ITEM_SIZE_FOR_TYPE(CMHDZ_ITEM_TYPES eType) VECTOR_2D vSize SWITCH (eType) CASE CMHDZ_ITEM_NAIL_GUN_AMMO vSize = INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_AMMO_WIDTH, cfCMHDZ_SPRITE_HUD_AMMO_HEIGHT) BREAK // CASE CMHDZ_ITEM_REVOLVER_AMMO // vSize = INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_PISTOL_AMMO_CLIP_WIDTH, cfCMHDZ_SPRITE_HUD_PISTOL_AMMO_CLIP_HEIGHT) // BREAK CASE CMHDZ_ITEM_HEALTH vSize = INIT_VECTOR_2D(cfCMHDZ_ITEM_HEALTH_WIDTH, cfCMHDZ_ITEM_HEALTH_HEIGHT) BREAK CASE CMHDZ_ITEM_SHOTGUN_AMMO vSize = INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_SHOTGUN_AMMO_CLIP_WIDTH, cfCMHDZ_SPRITE_HUD_SHOTGUN_AMMO_CLIP_HEIGHT) BREAK CASE CMHDZ_ITEM_SHIELD vSize = INIT_VECTOR_2D(cfCMHDZ_ITEM_SHIELD_WIDTH, cfCMHDZ_ITEM_SHIELD_HEIGHT) BREAK CASE CMHDZ_ITEM_BUFF vSize = INIT_VECTOR_2D(cfCMHDZ_ITEM_BUFF_WIDTH, cfCMHDZ_ITEM_BUFF_HEIGHT) BREAK CASE CMHDZ_ITEM_RIFLE_AMMO vSize = INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_RIFLE_AMMO_CLIP_WIDTH, cfCMHDZ_SPRITE_HUD_RIFLE_AMMO_CLIP_HEIGHT) BREAK CASE CMHDZ_ITEM_NAILBOMB vSize = INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_NAILBOMB_AMMO_CLIP_WIDTH, cfCMHDZ_SPRITE_HUD_NAILBOMB_AMMO_CLIP_HEIGHT) BREAK CASE CMHDZ_ITEM_BRICK vSize = INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_BRICK_AMMO_CLIP_WIDTH, cfCMHDZ_SPRITE_HUD_BRICK_AMMO_CLIP_HEIGHT) BREAK CASE CMHDZ_ITEM_MOLOTOV vSize = INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_MOLOTOV_AMMO_CLIP_WIDTH, cfCMHDZ_SPRITE_HUD_MOLOTOV_AMMO_CLIP_HEIGHT) BREAK CASE CMHDZ_ITEM_DYNAMITE vSize = INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_DYNAMITE_AMMO_CLIP_WIDTH, cfCMHDZ_SPRITE_HUD_DYNAMITE_AMMO_CLIP_HEIGHT) BREAK CASE CMHDZ_ITEM_VIDEOTAPE vSize = INIT_VECTOR_2D(88,52) BREAK CASE CMHDZ_ITEM_CASH vSize = INIT_VECTOR_2D(92,64) BREAK ENDSWITCH RETURN vSize ENDFUNC PROC CMHDZ_SET_ITEM_MAP_DATA(CMHDZ_ITEM_MAP_DATA &dat, VECTOR_2D vPos, CMHDZ_ITEM_TYPES eType, INT iLane, INT iRenderAfterWarpCount = 0, FLOAT fForceScale = 1.0, INT iMinScreen = 0) dat.eItemType = eType dat.iLane = iLane dat.iMinScreen = iMinScreen dat.iRenderAfterWarpCount = iRenderAfterWarpCount dat.vSpritePos = vPos dat.fForceScale = fForceScale ENDPROC FUNC INT CMHDZ_GENERATE_ITEM_MAP_DATA_CHECKSUM(CMHDZ_ITEM_MAP_DATA &dat) INT iChecksum = ENUM_TO_INT(dat.eItemType) iChecksum += dat.iLane iChecksum += dat.iRenderAfterWarpCount iChecksum += dat.iMinScreen iChecksum += FLOOR(dat.fForceScale * 100.0) iChecksum += VECTOR_FLAT_PACK(<>) RETURN iChecksum ENDFUNC PROC CMHDZ_COPY_ITEM_TO_ITEM_MAP(INT iCover, CMHDZ_ITEM_MAP_DATA &dat) //CMHDZ_RESET_ITEM_MAP_DATA(dat) dat.eItemType = sCMHDZData.sItemData[iCover].eItemType dat.iMinScreen = sCMHDZData.sItemData[iCover].iMinScreen dat.iLane = sCMHDZData.sItemData[iCover].iLane dat.iRenderAfterWarpCount = sCMHDZData.sItemData[iCover].iRenderAfterWarpCount dat.vSpritePos = sCMHDZData.sItemData[iCover].vSpritePos dat.vSpritePos.x = sCMHDZData.sItemData[iCover].fInitialXPos ENDPROC PROC CMHDZ_COPY_ITEM_MAP_TO_ITEM(CMHDZ_ITEM_MAP_DATA &dat, INT iCover) CMHDZ_RESET_ITEM(iCover) sCMHDZData.sItemData[iCover].eItemType = dat.eItemType sCMHDZData.sItemData[iCover].iMinScreen = dat.iMinScreen sCMHDZData.sItemData[iCover].iLane = dat.iLane sCMHDZData.sItemData[iCover].iRenderAfterWarpCount = dat.iRenderAfterWarpCount sCMHDZData.sItemData[iCover].vSize = CMHDZ_GET_ITEM_SIZE_FOR_TYPE(dat.eItemType) sCMHDZData.sItemData[iCover].vSize.x *= dat.fForceScale sCMHDZData.sItemData[iCover].vSize.y *= dat.fForceScale IF dat.iRenderAfterWarpCount = 0 AND dat.iMinScreen = 0 sCMHDZData.sItemData[iCover].bRendering = TRUE ENDIF ENDPROC PROC CMHDZ_RESET_ALL_ITEM_MAP_DATA(CMHDZ_ITEM_MAP_DATA &src[]) INT i REPEAT ciCMHDZ_MAX_ITEMS i CMHDZ_RESET_ITEM_MAP_DATA(src[i]) IF (i < sCMHDZData.iNumberOfItems) CMHDZ_COPY_ITEM_TO_ITEM_MAP(i, src[i]) ENDIF ENDREPEAT ENDPROC FUNC INT CMHDZ_PARTITION_ITEM_MAP_ARRAY(CMHDZ_ITEM_MAP_DATA &sArray[], INT iLow, INT iHigh) CMHDZ_ITEM_MAP_DATA swap FLOAT pivot = sArray[iHigh].vSpritePos.x INT i = (iLow - 1) INT j FOR j = iLow TO iHigh - 1 STEP 1 IF (sArray[j].vSpritePos.x < pivot) i ++ swap = sArray[i] sArray[i] = sArray[j] sArray[j] = swap ENDIF ENDFOR swap = sArray[i + 1] sArray[i + 1] = sArray[iHigh] sArray[iHigh] = swap RETURN i + 1 ENDFUNC PROC CMHDZ_QUICK_SORT_ITEM_MAP_ARRAY(CMHDZ_ITEM_MAP_DATA &sArray[], INT iLow, INT iHigh) INT pi IF (iLow < iHigh) pi = CMHDZ_PARTITION_ITEM_MAP_ARRAY(sArray, iLow, iHigh) CMHDZ_QUICK_SORT_ITEM_MAP_ARRAY(sArray, iLow, pi - 1) CMHDZ_QUICK_SORT_ITEM_MAP_ARRAY(sArray, pi + 1, iHigh) ENDIF ENDPROC #IF IS_DEBUG_BUILD /// PURPOSE: /// Exports a Spawn Definition to script /// PARAMS: /// data - /// bOpenAndCloseFile - PROC CMHDZ_DEBUG_EXPORT_ITEM_MAP_DATA_TO_SCRIPT(CMHDZ_ITEM_MAP_DATA &data, INT iItemID, BOOL bOpenAndCloseFile = TRUE) IF data.vSpritePos.x <= 0.0 EXIT // Don't add any invalid data ENDIF IF (bOpenAndCloseFile) OPEN_DEBUG_FILE() ENDIF SAVE_STRING_TO_DEBUG_FILE(" // ") SAVE_INT_TO_DEBUG_FILE(iItemID) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" CMHDZ_ADD_ITEM_TO_LIST(") SAVE_STRING_TO_DEBUG_FILE("INIT_VECTOR_2D(") SAVE_FLOAT_TO_DEBUG_FILE(data.vSpritePos.x) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_FLOAT_TO_DEBUG_FILE(data.vSpritePos.y) SAVE_STRING_TO_DEBUG_FILE("), ") SAVE_STRING_TO_DEBUG_FILE(CMHDZ_ITEM_TYPES_TO_STRING(data.eItemType)) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(CMHDZ_LANE_TO_STRING(data.iLane)) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_INT_TO_DEBUG_FILE(data.iRenderAfterWarpCount) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_FLOAT_TO_DEBUG_FILE(data.fForceScale) IF data.iMinScreen > 0 AND NOT ARE_STRINGS_EQUAL(CMHDZ_SCREEN_TO_STRING(data.iMinScreen), "UNKNOWN") SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(CMHDZ_SCREEN_TO_STRING(data.iMinScreen)) ENDIF SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() IF (bOpenAndCloseFile) CLOSE_DEBUG_FILE() ENDIF ENDPROC PROC CMHDZ_DEBUG_EXPORT_ITEM_MAP_DATA_ARRAY_TO_SCRIPT(CMHDZ_ITEM_MAP_DATA &data[]) INT i OPEN_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" // Item Data List") SAVE_NEWLINE_TO_DEBUG_FILE() //CMHDZ_QUICK_SORT_ITEM_MAP_ARRAY(data, 0, COUNT_OF(data) - 1) REPEAT COUNT_OF(data) i IF (data[i].eItemType = CMHDZ_ITEM_NONE) RELOOP ENDIF CMHDZ_DEBUG_EXPORT_ITEM_MAP_DATA_TO_SCRIPT(data[i], i, FALSE) ENDREPEAT SAVE_NEWLINE_TO_DEBUG_FILE() CLOSE_DEBUG_FILE() ENDPROC #ENDIF // Items PROC CMHDZ_ADD_ITEM_TO_LIST(VECTOR_2D vPos, CMHDZ_ITEM_TYPES eType, INT iLane, INT iRenderAfterWarpCount = 0, FLOAT fForceScale = 1.0, INT iMinScreen = 0) INT iSlotToUse = CMHDZ_GET_FREE_SLOT_FOR_ITEM() IF iSlotToUse = -1 #IF IS_DEBUG_BUILD //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_ADD_ITEM_TO_LIST] Not adding item type ", CMHDZ_ITEM_TYPES_TO_STRING(eType), " as ran out of slots") #ENDIF EXIT ENDIF #IF IS_DEBUG_BUILD //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_ADD_ITEM_TO_LIST] Add item type ", CMHDZ_ITEM_TYPES_TO_STRING(eType), " Lane: ", iLane, " Pos: ", vPos.x, ", ", vPos.y, " iRenderAfterWarpCount: ", iRenderAfterWarpCount, " fForceScale: ", fForceScale, " Num so far (inc this): ", sCMHDZData.iNumberOfItems + 1) //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_ADD_ITEM_TO_LIST] Slot to use: ", iSlotToUse, " iMinScreen: ", iMinScreen) DEBUG_PRINTCALLSTACK() #ENDIF IF iRenderAfterWarpCount = 0 AND iMinScreen = 0 sCMHDZData.sItemData[iSlotToUse].bRendering = TRUE ENDIF sCMHDZData.sItemData[iSlotToUse].iMinScreen = iMinScreen sCMHDZData.sItemData[iSlotToUse].bShot = FALSE sCMHDZData.sItemData[iSlotToUse].vSpritePos = vPos sCMHDZData.sItemData[iSlotToUse].eItemType = eType sCMHDZData.sItemData[iSlotToUse].iLane = iLane sCMHDZData.sItemData[iSlotToUse].iRenderAfterWarpCount = iRenderAfterWarpCount sCMHDZData.sItemData[iSlotToUse].iWarpCount = 0 sCMHDZData.sItemData[iSlotToUse].vSize = CMHDZ_GET_ITEM_SIZE_FOR_TYPE(sCMHDZData.sItemData[iSlotToUse].eItemType) sCMHDZData.sItemData[iSlotToUse].fInitialXPos = vPos.x sCMHDZData.sItemData[iSlotToUse].vSize.x *= fForceScale sCMHDZData.sItemData[iSlotToUse].vSize.y *= fForceScale sCMHDZData.iNumberOfItems ++ ENDPROC PROC CMHDZ_COPY_ITEM_MAP_DATA_TO_GAME(CMHDZ_ITEM_MAP_DATA &src[]) INT i sCMHDZData.iNumberOfItems = 0 REPEAT ciCMHDZ_MAX_ITEMS i CMHDZ_RESET_ITEM(i) IF (src[i].eItemType != CMHDZ_ITEM_NONE) CMHDZ_ADD_ITEM_TO_LIST(src[i].vSpritePos, src[i].eItemType, src[i].iLane, src[i].iRenderAfterWarpCount, src[i].fForceScale, src[i].iMinScreen) ENDIF ENDREPEAT ENDPROC PROC CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_TYPES eType, INT iScreen, VECTOR_2D &vPos, VECTOR_2D &vOffset) SWITCH CMHDZ_GET_CURRENT_LEVEL() CASE CMHDZ_LEVEL_SCRAPYARD SWITCH eType CASE CMHDZ_ITEM_HEALTH CASE CMHDZ_ITEM_SHIELD CASE CMHDZ_ITEM_BUFF SWITCH iScreen // vOffset is the offset of the pickup form the large building at base coords (1200, 440) CASE 1 vPos = INIT_VECTOR_2D(1063.875, 822.5) vOffset = INIT_VECTOR_2D(-136.125, 382.5) BREAK CASE 2 vPos = INIT_VECTOR_2D(789.375, 822.5) vOffset = INIT_VECTOR_2D(-410.625, 382.5) BREAK CASE 3 vPos = INIT_VECTOR_2D(993.75, 822.5) vOffset = INIT_VECTOR_2D(-206.25, 382.5) BREAK CASE 4 vPos = INIT_VECTOR_2D(1299.375, 822.5) vOffset = INIT_VECTOR_2D(99.375, 382.5) BREAK ENDSWITCH BREAK // CASE CMHDZ_ITEM_REVOLVER_AMMO // // SWITCH iScreen // CASE 1 vPos = INIT_VECTOR_2D(872.125, 817.125) vOffset = INIT_VECTOR_2D(-327.875, 327.875) BREAK // CASE 2 vPos = INIT_VECTOR_2D(1418.625, 870.625) vOffset = INIT_VECTOR_2D(218.625, 870.625) BREAK // CASE 3 vPos = INIT_VECTOR_2D(776.0, 817.125) vOffset = INIT_VECTOR_2D(-424.0, 327.875) BREAK // CASE 4 vPos = INIT_VECTOR_2D(776.0, 817.125) vOffset = INIT_VECTOR_2D(-424.0, 327.875) BREAK // ENDSWITCH // BREAK // CASE CMHDZ_ITEM_SHOTGUN_AMMO CASE CMHDZ_ITEM_RIFLE_AMMO SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(872.125, 817.125) vOffset = INIT_VECTOR_2D(-327.875, 327.875) BREAK CASE 2 vPos = INIT_VECTOR_2D(1418.625, 870.625)vOffset = INIT_VECTOR_2D(218.625, 870.625) BREAK CASE 3 vPos = INIT_VECTOR_2D(776.0, 817.125) vOffset = INIT_VECTOR_2D(-424.0, 327.875) BREAK CASE 4 vPos = INIT_VECTOR_2D(776.0, 817.125) vOffset = INIT_VECTOR_2D(-424.0, 327.875) BREAK ENDSWITCH BREAK ENDSWITCH BREAK CASE CMHDZ_LEVEL_ASYLUM SWITCH eType /* SCREEN 1 Base: (1404.125, 870) SCREEN 2 Base: (1576.1250 , 870.250) SCREEN 3 Base: (1472.25, 474.625) SCREEN 4 Base: (1415.750, 562.375) */ CASE CMHDZ_ITEM_HEALTH CASE CMHDZ_ITEM_SHIELD CASE CMHDZ_ITEM_BUFF SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(1218.625, 832.75) vOffset = INIT_VECTOR_2D(-185.5, -37.25) BREAK CASE 2 vPos = INIT_VECTOR_2D(1111.75, 832.75) vOffset = INIT_VECTOR_2D(-464.375, -37.5) BREAK CASE 3 vPos = INIT_VECTOR_2D(1001.375,871.625) vOffset = INIT_VECTOR_2D(-470.875, 397.0) BREAK CASE 4 vPos = INIT_VECTOR_2D(717.875, 577.125) vOffset = INIT_VECTOR_2D(-697.875, 14.75) BREAK ENDSWITCH BREAK // CASE CMHDZ_ITEM_RIFLE_AMMO SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(979.625, 510.500) vOffset = INIT_VECTOR_2D(-424.5,-359.5) BREAK CASE 2 vPos = INIT_VECTOR_2D(1026.250, 510.500) vOffset = INIT_VECTOR_2D(-549.875, -359.75) BREAK CASE 3 vPos = INIT_VECTOR_2D(1083.250, 588.750) vOffset = INIT_VECTOR_2D(-389.0, 114.125) BREAK CASE 4 vPos = INIT_VECTOR_2D(1156.875, 872.750) vOffset = INIT_VECTOR_2D(-258.875, 310.375) BREAK ENDSWITCH BREAK // CASE CMHDZ_ITEM_REVOLVER_AMMO CASE CMHDZ_ITEM_SHOTGUN_AMMO SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(704.625, 842.375) vOffset = INIT_VECTOR_2D(-699.5 ,-27.625) BREAK CASE 2 vPos = INIT_VECTOR_2D(648.625, 870.625) vOffset = INIT_VECTOR_2D(-927.5, 0.375) BREAK CASE 3 vPos = INIT_VECTOR_2D(1316.500, 870.625 ) vOffset = INIT_VECTOR_2D(-155.75, 396.0) BREAK CASE 4 vPos = INIT_VECTOR_2D(762.000, 908.500) vOffset = INIT_VECTOR_2D(-653.75, 346.125) BREAK ENDSWITCH BREAK // ENDSWITCH BREAK CASE CMHDZ_LEVEL_PARK SWITCH eType CASE CMHDZ_ITEM_HEALTH CASE CMHDZ_ITEM_SHIELD CASE CMHDZ_ITEM_BUFF SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(835.375, 558.625) vOffset = INIT_VECTOR_2D(-584.25, -187.0) BREAK CASE 2 vPos = INIT_VECTOR_2D(1222.5, 825.375) vOffset = INIT_VECTOR_2D(-172.75, -8.625) BREAK CASE 3 vPos = INIT_VECTOR_2D(1441.25, 886.25) vOffset = INIT_VECTOR_2D(67.25, 347.625) BREAK CASE 4 vPos = INIT_VECTOR_2D(1310.75, 929.125) vOffset = INIT_VECTOR_2D(-44.25, 392.75) BREAK ENDSWITCH BREAK // CASE CMHDZ_ITEM_REVOLVER_AMMO CASE CMHDZ_ITEM_NAIL_GUN_AMMO SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(778.75, 811.25) vOffset = INIT_VECTOR_2D(-641.25, 65.625) BREAK CASE 2 vPos = INIT_VECTOR_2D(641.0, 799.25) vOffset = INIT_VECTOR_2D(-754.25, -34.75) BREAK CASE 3 vPos = INIT_VECTOR_2D(641.0, 819.875) vOffset = INIT_VECTOR_2D(-733.0, 281.25) BREAK CASE 4 vPos = INIT_VECTOR_2D(589.0, 825.75) vOffset = INIT_VECTOR_2D(-766.0, 289.375) BREAK ENDSWITCH BREAK CASE CMHDZ_ITEM_SHOTGUN_AMMO CASE CMHDZ_ITEM_RIFLE_AMMO SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(1220.75, 560.75) vOffset = INIT_VECTOR_2D(-199.25, -184.875) BREAK CASE 2 vPos = INIT_VECTOR_2D(1479.375, 560.75) vOffset = INIT_VECTOR_2D(84.125, -273.25) BREAK CASE 3 vPos = INIT_VECTOR_2D(1169.25, 560.75) vOffset = INIT_VECTOR_2D(-204.75, 22.125) BREAK CASE 4 vPos = INIT_VECTOR_2D(679.5, 560.75) vOffset = INIT_VECTOR_2D(-675.5, 536.375) BREAK ENDSWITCH BREAK ENDSWITCH BREAK CASE CMHDZ_LEVEL_SLAUGHTERHOUSE /* Base coords are: Screen 1: 1700, 850 Screen 2: 1505.500, 857.000 Screen 3: 1521.625, 845.625 Screen 4: 1535.250, 871.375 */ SWITCH eType CASE CMHDZ_ITEM_SHOTGUN_AMMO CASE CMHDZ_ITEM_RIFLE_AMMO SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(822.875, 874.125) vOffset = INIT_VECTOR_2D(-877.125, 24.125) BREAK CASE 2 vPos = INIT_VECTOR_2D(1001.125, 575.25) vOffset = INIT_VECTOR_2D(-504.375, -281.75) BREAK CASE 3 vPos = INIT_VECTOR_2D(1409.875, 575.25) vOffset = INIT_VECTOR_2D(-111.75, -270.375) BREAK CASE 4 vPos = INIT_VECTOR_2D(1082.875, 552.625) vOffset = INIT_VECTOR_2D(-452.375, -318.75) BREAK ENDSWITCH BREAK CASE CMHDZ_ITEM_HEALTH CASE CMHDZ_ITEM_SHIELD CASE CMHDZ_ITEM_BUFF SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(1416.875, 572.0) vOffset = INIT_VECTOR_2D(-283.125, -278) BREAK CASE 2 vPos = INIT_VECTOR_2D(1429.125, 842.875) vOffset = INIT_VECTOR_2D(-76.375, -14.125) BREAK CASE 3 vPos = INIT_VECTOR_2D(984.375, 868.25) vOffset = INIT_VECTOR_2D(-537.25, 22.625) BREAK CASE 4 vPos = INIT_VECTOR_2D(858.5, 868.25) vOffset = INIT_VECTOR_2D(-676.75, -3.125) BREAK ENDSWITCH BREAK // CASE CMHDZ_ITEM_REVOLVER_AMMO CASE CMHDZ_ITEM_NAIL_GUN_AMMO SWITCH iScreen CASE 1 vPos = INIT_VECTOR_2D(525.75, 591.875) vOffset = INIT_VECTOR_2D(-1174.25, -258.125) BREAK CASE 2 vPos = INIT_VECTOR_2D(1251.0, 578.875) vOffset = INIT_VECTOR_2D(-254.5, -278.125) BREAK CASE 3 vPos = INIT_VECTOR_2D(564.875, 578.875) vOffset = INIT_VECTOR_2D(-956.75, -266.75) BREAK CASE 4 vPos = INIT_VECTOR_2D(1405.375, 549.375) vOffset = INIT_VECTOR_2D(-129.875, -322.0) BREAK ENDSWITCH BREAK ENDSWITCH BREAK ENDSWITCH ENDPROC PROC CMHDZ_RESET_ALL_COLLECTIBLE_ITEMS_NOT_ON_SCREEN() #IF IS_DEBUG_BUILD //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_RESET_ALL_COLLECTIBLE_ITEMS_NOT_ON_SCREEN] Called") #ENDIF INT i FOR i = 0 TO ciCMHDZ_MAX_ITEMS - 1 IF sCMHDZData.sItemData[i].bRendering IF NOT CMHDZ_IS_POSITION_ON_SCREEN(sCMHDZData.sItemData[i].vSpritePos) //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_RESET_ALL_COLLECTIBLE_ITEMS_NOT_ON_SCREEN] Resetting item ", i, " Type: ", CMHDZ_ITEM_TYPES_TO_STRING(sCMHDZData.sItemData[i].eItemType)) CMHDZ_RESET_ITEM(i) ELSE //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_RESET_ALL_COLLECTIBLE_ITEMS_NOT_ON_SCREEN] NOT Resetting item ", i, " Type: ", CMHDZ_ITEM_TYPES_TO_STRING(sCMHDZData.sItemData[i].eItemType), " as on screen coords ", sCMHDZData.sItemData[i].vSpritePos.x, ", ", sCMHDZData.sItemData[i].vSpritePos.y) ENDIF ELSE //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_RESET_ALL_COLLECTIBLE_ITEMS_NOT_ON_SCREEN] NOT Resetting item ", i, " Type: ", CMHDZ_ITEM_TYPES_TO_STRING(sCMHDZData.sItemData[i].eItemType), " as not rendering") ENDIF ENDFOR ENDPROC PROC CMHDZ_INIT_ITEMS() //FLOAT fOffset //VECTOR_2D vPos, vOffset CMHDZ_RESET_ITEMS() sCMHDZData.iNumberOfItems = 0 SWITCH sCMHDZData.eCurrentLevel CASE CMHDZ_LEVEL_CITY // 1 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(3322.0000, 848.0000), CMHDZ_ITEM_NAILBOMB, ciCMHDZ_LANE_MIDDLE, 0, 1.0000, 0) // 2 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(5240.0000, 524.0000), CMHDZ_ITEM_HEALTH, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000, 0) // 3 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(7628.0000, 564.0000), CMHDZ_ITEM_SHOTGUN_AMMO, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000, 1) CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(6868.0000, 871.1250), CMHDZ_ITEM_CASH, ciCMHDZ_LANE_MIDDLE, 0, 1.0000) BREAK CASE CMHDZ_LEVEL_SCRAPYARD //-- SHerriff, ammo, health, shotgun // Item Data List // 0 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(1629.3750, 882.5000), CMHDZ_ITEM_HEALTH, ciCMHDZ_LANE_MIDDLE, 2, 1.0000) // 1 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(2625.3750, 472.5000), CMHDZ_ITEM_NAIL_GUN_AMMO, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000) CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(6964.0000, 505.1250), CMHDZ_ITEM_CASH, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000) // 2 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(4494.0000, 786.0000), CMHDZ_ITEM_SHIELD, ciCMHDZ_LANE_MIDDLE, 1, 1.0000, 1) // 3 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(5787.3750, 918.5000), CMHDZ_ITEM_HEALTH, ciCMHDZ_LANE_MIDDLE, 0, 1.0000, 3) // 4 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(6792.0000, 494.0000), CMHDZ_ITEM_RIFLE_AMMO, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000, 3) BREAK CASE CMHDZ_LEVEL_ASYLUM // Item Data List - CMHDZ_LEVEL_ASYLUM // 2 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(7020.0000, 612.000), CMHDZ_ITEM_NAIL_GUN_AMMO, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000) // 3 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(3696.0000, 852.0000), CMHDZ_ITEM_SHIELD, ciCMHDZ_LANE_MIDDLE, 0, 1.0000) // 4 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(3432.0000, 396.0000), CMHDZ_ITEM_NAILBOMB, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000) // 5 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(6264.0000, 828.0000), CMHDZ_ITEM_HEALTH, ciCMHDZ_LANE_MIDDLE, 0, 1.0000) // 6 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(7868.0000, 871.1250), CMHDZ_ITEM_CASH, ciCMHDZ_LANE_MIDDLE, 0, 1.0000) BREAK CASE CMHDZ_LEVEL_PARK // Item Data List // 0 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(3764.7500, 392.7500), CMHDZ_ITEM_RIFLE_AMMO, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000) // 2 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(6094.5000, 489.3750), CMHDZ_ITEM_CASH, ciCMHDZ_LANE_BACKGROUND, 1, 1.0000) // 3 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(6759.3750, 828.7500), CMHDZ_ITEM_MOLOTOV, ciCMHDZ_LANE_MIDDLE, 0, 1.0000) // 6 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(8574.0000, 532.0000), CMHDZ_ITEM_SHOTGUN_AMMO, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000) // 7 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(8496.0000, 876.0000), CMHDZ_ITEM_VIDEOTAPE, ciCMHDZ_LANE_MIDDLE, 0, 1.0000, 5) // 8 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(9118.7500, 610.0000), CMHDZ_ITEM_HEALTH, ciCMHDZ_LANE_MIDDLE, 0, 1.0000) BREAK CASE CMHDZ_LEVEL_SLAUGHTERHOUSE // 2 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(2701.1250, 794.8750), CMHDZ_ITEM_SHIELD, ciCMHDZ_LANE_MIDDLE, 0, 1.0000, 0) // 1 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(3888.8750, 776.0000), CMHDZ_ITEM_SHOTGUN_AMMO, ciCMHDZ_LANE_MIDDLE, 0, 1.0000, 1) // 1 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(5801.8750, 383.2500), CMHDZ_ITEM_VIDEOTAPE, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000, 1) // 4 CMHDZ_ADD_ITEM_TO_LIST(INIT_VECTOR_2D(6570.5000, 340.2500), CMHDZ_ITEM_HEALTH, ciCMHDZ_LANE_BACKGROUND, 0, 1.0000, 3) // //1 // //-- Rifle // CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_RIFLE_AMMO, 1, vPos, vOffset) // CMHDZ_ADD_ITEM_TO_LIST(vPos, CMHDZ_ITEM_RIFLE_AMMO, ciCMHDZ_LANE_MIDDLE) // // // //-- Snake oil // CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_SHIELD, 1, vPos, vOffset) // CMHDZ_ADD_ITEM_TO_LIST(vPos, CMHDZ_ITEM_SHIELD, ciCMHDZ_LANE_MIDDLE) // // //2 // fOffset = cfBASE_SCREEN_WIDTH / 2.0 // // //-- Sheriff // CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_BUFF, 2, vPos, vOffset) // vPos.x += fOffset // CMHDZ_ADD_ITEM_TO_LIST(vPos, CMHDZ_ITEM_BUFF, ciCMHDZ_LANE_MIDDLE, 1) // // //3 // fOffset = cfBASE_SCREEN_WIDTH // //-- Shotgun ammo // CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_SHOTGUN_AMMO, 3, vPos, vOffset) // vPos.x += fOffset // CMHDZ_ADD_ITEM_TO_LIST(vPos, CMHDZ_ITEM_SHOTGUN_AMMO, ciCMHDZ_LANE_MIDDLE, 1) // // //4 // // //-- Health // fOffset = cfBASE_SCREEN_WIDTH + cfBASE_SCREEN_WIDTH / 2.0 // CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_HEALTH, 4, vPos, vOffset) // vPos.x += fOffset // CMHDZ_ADD_ITEM_TO_LIST(vPos, CMHDZ_ITEM_HEALTH, ciCMHDZ_LANE_MIDDLE, 1) // // //-- Rifle // CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_RIFLE_AMMO, 4, vPos, vOffset) // vPos.x += fOffset // CMHDZ_ADD_ITEM_TO_LIST(vPos, CMHDZ_ITEM_RIFLE_AMMO, ciCMHDZ_LANE_MIDDLE, 1) BREAK ENDSWITCH ENDPROC //------------------------------------- // COVER FUNCTIONS //------------------------------------- FUNC BOOL CMHDZ_COVER_UTIL_CAN_SHOOT_THROUGH_TYPE(CMHDZ_ASSET_TYPES eType) // IF CMHDZ_GET_CURRENT_LEVEL() = CMHDZ_LEVEL_ASYLUM // OR CMHDZ_GET_CURRENT_LEVEL() = CMHDZ_LEVEL_PARK // // RETURN TRUE // ENDIF SWITCH eType CASE CMHDZ_ASSET_CACTUS_1 CASE CMHDZ_ASSET_CACTUS_2 CASE CMHDZ_ASSET_CACTUS_3 CASE CMHDZ_ASSET_ASYLUM_MD_BED CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_2 CASE CMHDZ_ASSET_CACTUS_9 CASE CMHDZ_ASSET_SCRAPYARD_PROP_FENCE CASE CMHDZ_ASSET_WATER_TOWER CASE CMHDZ_ASSET_FENCE RETURN TRUE BREAK ENDSWITCH IF CMHDZ_GET_CURRENT_LEVEL() = CMHDZ_LEVEL_SLAUGHTERHOUSE SWITCH eType CASE CMHDZ_ASSET_DOOR_1 CASE CMHDZ_ASSET_DOOR_2 CASE CMHDZ_ASSET_WINDOW CASE CMHDZ_ASSET_PIG CASE CMHDZ_ASSET_BODYBAG_FLOOR_1 CASE CMHDZ_ASSET_BODYBAG_FLOOR_2 CASE CMHDZ_ASSET_BODYBAG_FLOOR_3 CASE CMHDZ_ASSET_BODYBAG_FLOOR_4 RETURN TRUE BREAK ENDSWITCH ENDIF RETURN FALSE ENDFUNC FUNC BOOL CMHDZ_CAN_SHOOT_THROUGH_COVER(INT iCover) // IF CMHDZ_COVER_DATA_IS_BITMASK_SET(iCover, CMHDZ_COVER_DATA_BITS_NEVER_RENDER) // RETURN FALSE // ENDIF // Can always shoot through foreground slaughterhouse cover. IF CMHDZ_GET_CURRENT_LEVEL() = CMHDZ_LEVEL_SLAUGHTERHOUSE AND sCMHDZData.sCoverData[iCover].iCoverLane = ciCMHDZ_LANE_FOREGROUND RETURN TRUE ENDIF RETURN CMHDZ_COVER_UTIL_CAN_SHOOT_THROUGH_TYPE(sCMHDZData.sCoverData[iCover].eType) ENDFUNC FUNC FLOAT CMHDZ_COVER_UTIL_GET_SIZE_MODIFIER_FOR_COLLISION_CHECK(CMHDZ_ASSET_TYPES eType) UNUSED_PARAMETER(eType) IF CMHDZ_COVER_UTIL_IS_TYPE_BUILDING(eType) RETURN 0.6 ENDIF IF eType = CMHDZ_ASSET_BARRELS RETURN 0.8 ENDIF IF eType = CMHDZ_ASSET_BODYBAG_1 OR eType = CMHDZ_ASSET_BODYBAG_2 OR eType = CMHDZ_ASSET_BODYBAG_3 // OR eType = CMHDZ_ASSET_PIG_BATCH RETURN 0.3 ENDIF RETURN 1.0 ENDFUNC PROC CMHDZ_RESET_COVER_MAP_DATA(CMHDZ_COVER_MAP_DATA &dat) //dat.eDataBits = CMHDZ_COVER_DATA_BITS_NONE dat.eType = CMHDZ_ASSET_INVALID dat.fActiveAtPoint = dat.vSpriteInitialPos.x dat.iCoverLane = 0 ENDPROC FUNC INT CMHDZ_GET_COVER_MAP_DATA_SLOT(CMHDZ_COVER_MAP_DATA &array[]) INT i REPEAT COUNT_OF(array) i IF (array[i].eType = CMHDZ_ASSET_INVALID) //CDEBUG2LN(DEBUG_MINIGAME, "CMHDZ_GET_COVER_MAP_DATA_SLOT i value: ", i) RETURN i ENDIF ENDREPEAT RETURN -1 ENDFUNC PROC CMHDZ_RESET_COVER(INT iCover) IF CMHDZ_COVER_DATA_IS_BITMASK_SET(iCover, CMHDZ_COVER_DATA_BITS_SPAWNED_PICKUP) CMHDZ_COVER_DATA_CLEAR_BITMASK(iCover, CMHDZ_COVER_DATA_BITS_SPAWNED_PICKUP) ENDIF //sCMHDZData.sCoverData[iCover].eDataBits = CMHDZ_COVER_DATA_BITS_NONE sCMHDZData.sCoverData[iCover].iHitCount = 0 sCMHDZData.sCoverData[iCover].fActiveAtPoint = sCMHDZData.sCoverData[iCover].vSpriteInitialPos.x ENDPROC FUNC BOOL CMHDZ_COVER_UTIL_IS_TYPE_ANIMATED(CMHDZ_ASSET_TYPES eType) SWITCH eType CASE CMHDZ_ASSET_PIG RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL CMHDZ_COVER_UTIL_IS_TYPE_SPECIAL(CMHDZ_ASSET_TYPES eType) SWITCH (eType) // CASE CMHDZ_ASSET_SPECIAL_TNT_CRATE CASE CMHDZ_ASSET_SPECIAL_TNT_BARREL_1 CASE CMHDZ_ASSET_SPECIAL_TNT_BARREL_2 RETURN TRUE ENDSWITCH RETURN FALSE ENDFUNC FUNC VECTOR_2D CMHDZ_COVER_UTIL_GET_TYPE_SIZE(CMHDZ_ASSET_TYPES eType) VECTOR_2D vSize SWITCH (eType) CASE CMHDZ_ASSET_CACTUS_1 vSize.x = cfCMHDZ_CACTUS_1_SPRITE_WIDTH vSize.y = cfCMHDZ_CACTUS_1_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_CACTUS_2 vSize.x = cfCMHDZ_CACTUS_2_SPRITE_WIDTH vSize.y = cfCMHDZ_CACTUS_2_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_CACTUS_3 vSize.x = cfCMHDZ_CACTUS_3_SPRITE_WIDTH vSize.y = cfCMHDZ_CACTUS_3_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_MD_BED vSize.x = cfCMHDZ_ASYLUM_MD_BED_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_MD_BED_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_MD_WHEELCHAIR vSize.x = cfCMHDZ_ASYLUM_MD_WHEELCHAIR_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_MD_WHEELCHAIR_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_MD_MATTRESS vSize.x = cfCMHDZ_ASYLUM_MD_MATTRESS_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_MD_MATTRESS_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_LIGHT_1 vSize.x = cfCMHDZ_ASYLUM_LIGHT_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_LIGHT_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_LIGHT_2 vSize.x = cfCMHDZ_ASYLUM_LIGHT_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_LIGHT_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_BG_RADIATOR vSize.x = cfCMHDZ_ASYLUM_RADIATOR_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_RADIATOR_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_BG_DOOR vSize.x = cfCMHDZ_ASYLUM_DOOR_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_DOOR_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_GRAFFITI_1 vSize.x = cfCMHDZ_ASYLUM_GRAF_1_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_GRAF_1_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_GRAFFITI_2 vSize.x = cfCMHDZ_ASYLUM_GRAF_2_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_GRAF_2_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ASYLUM_GRAFFITI_3 vSize.x = cfCMHDZ_ASYLUM_GRAF_3_SPRITE_WIDTH vSize.y = cfCMHDZ_ASYLUM_GRAF_3_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_CITY_BUILDING_1 CASE CMHDZ_ASSET_CITY_BUILDING_2 CASE CMHDZ_ASSET_CITY_BUILDING_3 vSize.x = cfCMHDZ_CITY_BUILDING_SPRITE_WIDTH vSize.y = cfCMHDZ_CITY_BUILDING_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_1 CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_2 CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_3 CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_4 vSize.x = cfCMHDZ_SCRAPYARD_MD_VAN_SPRITE_WIDTH vSize.y = cfCMHDZ_SCRAPYARD_MD_VAN_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_THEMEPARK_BUILDING_1 CASE CMHDZ_ASSET_THEMEPARK_BUILDING_2 vSize.x = cfCMHDZ_THEMEPARK_BUILDING_1_SPRITE_WIDTH vSize.y = cfCMHDZ_THEMEPARK_BUILDING_1_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_THEMEPARK_BUILDING_3 CASE CMHDZ_ASSET_THEMEPARK_BUILDING_4 vSize.x = cfCMHDZ_THEMEPARK_BUILDING_3_SPRITE_WIDTH vSize.y = cfCMHDZ_THEMEPARK_BUILDING_3_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_1 vSize.x = cfCMHDZ_THEMEPARK_CLOWNBOARD_1_SPRITE_WIDTH vSize.y = cfCMHDZ_THEMEPARK_CLOWNBOARD_1_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_2 vSize.x = cfCMHDZ_THEMEPARK_CLOWNBOARD_2_SPRITE_WIDTH vSize.y = cfCMHDZ_THEMEPARK_CLOWNBOARD_2_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_FENCE vSize.x = cfCMHDZ_FENCE_SPRITE_WIDTH vSize.y = cfCMHDZ_FENCE_SPRITE_HEIGHT BREAK // CASE CMHDZ_ASSET_FENCE_SMALL // vSize.x = cfCMHDZ_FENCE_SMALL_SPRITE_WIDTH // vSize.y = cfCMHDZ_FENCE_SMALL_SPRITE_HEIGHT // BREAK CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_1 CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_2 CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_3 CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_4 vSize.x = cfCMHDZ_SCRAPYARD_MD_CAR_SPRITE_WIDTH vSize.y = cfCMHDZ_SCRAPYARD_MD_CAR_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_CACTUS_9 vSize.x = cfCMHDZ_CACTUS_9_SPRITE_WIDTH vSize.y = cfCMHDZ_CACTUS_9_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_SCRAPYARD_PROP_FENCE vSize.x = cfCMHDZ_SCRAPYARD_PROP_FENCE_SPRITE_WIDTH vSize.y = cfCMHDZ_SCRAPYARD_PROP_FENCE_SPRITE_HEIGHT BREAK // CASE CMHDZ_ASSET_SCRAPYARD_BG_CARS // vSize.x = cfCMHDZ_SCRAPYARD_BG_CARS_SPRITE_WIDTH // vSize.y = cfCMHDZ_SCRAPYARD_BG_CARS_SPRITE_HEIGHT // BREAK CASE CMHDZ_ASSET_THEMEPARK_TREE_1 vSize.x = cfCMHDZ_FOREST_TREE_1_SPRITE_WIDTH vSize.y = cfCMHDZ_FOREST_TREE_1_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_THEMEPARK_TREE_2 vSize.x = cfCMHDZ_FOREST_TREE_2_SPRITE_WIDTH vSize.y = cfCMHDZ_FOREST_TREE_2_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_THEMEPARK_TREE_3 vSize.x = cfCMHDZ_FOREST_TREE_3_SPRITE_WIDTH vSize.y = cfCMHDZ_FOREST_TREE_3_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_THEMEPARK_TREE_4 vSize.x = cfCMHDZ_FOREST_TREE_4_SPRITE_WIDTH vSize.y = cfCMHDZ_FOREST_TREE_4_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_GRASS vSize.x = cfCMHDZ_FOREST_GRASS_SPRITE_WIDTH vSize.y = cfCMHDZ_FOREST_GRASS_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BUSH_1 vSize.x = cfCMHDZ_FOREST_BUSH_SM_SPRITE_WIDTH vSize.y = cfCMHDZ_FOREST_BUSH_SM_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BUSH_2 vSize.x = cfCMHDZ_FOREST_BUSH_LG_SPRITE_WIDTH vSize.y = cfCMHDZ_FOREST_BUSH_LG_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ROCK_SMALL vSize.x = cfCMHDZ_ROCK_SMALL_SPRITE_WIDTH vSize.y = cfCMHDZ_ROCK_SMALL_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_ROCK_LARGE vSize.x = cfCMHDZ_ROCK_LARGE_SPRITE_WIDTH vSize.y = cfCMHDZ_ROCK_LARGE_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_FOREGROUND_TRASH vSize.x = cfCMHDZ_FOREGROUND_TRASH_SPRITE_WIDTH vSize.y = cfCMHDZ_FOREGROUND_TRASH_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BARRIER vSize.x = cfCMHDZ_BARRIER_SPRITE_WIDTH vSize.y = cfCMHDZ_BARRIER_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BARRELS vSize.x = cfCMHDZ_BARRELS_SPRITE_WIDTH vSize.y = cfCMHDZ_BARRELS_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_MEATGRINDER_1 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_MEATGRINDER_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_MEATGRINDER_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_MEATGRINDER_2 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_MEATGRINDER_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_MEATGRINDER_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BODYBAG_1 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_1_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_1_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BODYBAG_2 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_2_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_2_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BODYBAG_3 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_3_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_3_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BODYBAG_FLOOR_1 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_1_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_1_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BODYBAG_FLOOR_2 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_2_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_2_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_BODYBAG_FLOOR_3 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_2_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_2_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_PIG vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PIG_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PIG_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_WATER_TOWER vSize.x = cfCMHDZ_WATER_TOWER_SPRITE_WIDTH vSize.y = cfCMHDZ_WATER_TOWER_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_MEATHOOK vSize.x = 28 vSize.y = 104 BREAK CASE CMHDZ_ASSET_PIG_BATCH vSize.x = 384 vSize.y = 456 BREAK CASE CMHDZ_ASSET_DOOR_1 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_DOOR_01_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_DOOR_01_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_DOOR_2 vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_DOOR_02_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_DOOR_02_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_WINDOW vSize.x = cfCMHDZ_SLAUGHTERHOUSE_PROP_WINDOW_SPRITE_WIDTH vSize.y = cfCMHDZ_SLAUGHTERHOUSE_PROP_WINDOW_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_SPECIAL_TNT_BARREL_1 vSize.x = cfCMHDZ_TNT_BARREL_1_SPRITE_WIDTH vSize.y = cfCMHDZ_TNT_BARREL_1_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_SPECIAL_TNT_BARREL_2 vSize.x = cfCMHDZ_TNT_BARREL_2_SPRITE_WIDTH vSize.y = cfCMHDZ_TNT_BARREL_2_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_TRASHBAG_BIG vSize.x = cfCMHDZ_TRASHBAG_BIG_SPRITE_WIDTH vSize.y = cfCMHDZ_TRASHBAG_BIG_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_TRASHBAG_SMALL vSize.x = cfCMHDZ_TRASHBAG_SMALL_SPRITE_WIDTH vSize.y = cfCMHDZ_TRASHBAG_SMALL_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_TRASHCAN_BIG_1 CASE CMHDZ_ASSET_TRASHCAN_BIG_2 vSize.x = cfCMHDZ_TRASHCAN_BIG_SPRITE_WIDTH vSize.y = cfCMHDZ_TRASHCAN_BIG_SPRITE_HEIGHT BREAK CASE CMHDZ_ASSET_TRASHCAN_SMALL_1 CASE CMHDZ_ASSET_TRASHCAN_SMALL_2 vSize.x = cfCMHDZ_TRASHCAN_SMALL_SPRITE_WIDTH vSize.y = cfCMHDZ_TRASHCAN_SMALL_SPRITE_HEIGHT BREAK ENDSWITCH RETURN vSize ENDFUNC PROC CMHDZ_SET_DEFAULT_COVER_MAP_DATA(CMHDZ_COVER_MAP_DATA &dat, VECTOR_2D vPos, CMHDZ_ASSET_TYPES eType, INT iLane, BOOL bFarBackground = FALSE, BOOL bRemoveOffScreen = FALSE) //SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(dat.eDataBits, CMHDZ_COVER_DATA_BITS_NEVER_RENDER, bNeverRender) //SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(dat.eDataBits, CMHDZ_COVER_DATA_BITS_STOP_SCROLLING, bStopScrollingOnThisProp) //SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(dat.eDataBits, CMHDZ_COVER_DATA_BITS_THIS_SCREEN_ONLY, bActiveThisScreenOnly) SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(dat.eDataBits, CMHDZ_COVER_DATA_BITS_IS_FAR_BG, bFarBackground) SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(dat.eDataBits, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN, bRemoveOffScreen) dat.eType = eType dat.iCoverLane = iLane dat.vSpriteInitialPos = vPos dat.vSpritePos = vPos dat.fActiveAtPoint = sCMHDZData.fOverallLevelProgression + (cfBASE_SCREEN_WIDTH/2.0) // Only used for placing new objects so place in middle of current screen. dat.vSpriteSize = CMHDZ_COVER_UTIL_GET_TYPE_SIZE(eType) ENDPROC FUNC INT CMHDZ_GENERATE_COVER_MAP_DATA_CHECKSUM(CMHDZ_COVER_MAP_DATA &dat) INT iChecksum = ENUM_TO_INT(dat.eDataBits) iChecksum += ENUM_TO_INT(dat.eType) iChecksum += FLOOR(dat.fActiveAtPoint) iChecksum += dat.iCoverLane iChecksum += VECTOR_FLAT_PACK(<>) iChecksum += VECTOR_FLAT_PACK(<>) RETURN iChecksum ENDFUNC PROC CMHDZ_COPY_COVER_TO_COVER_MAP(CMHDZ_COVER_MAP_DATA &dat, INT iCover) UNUSED_PARAMETER(dat) UNUSED_PARAMETER(iCover) #IF IS_DEBUG_BUILD dat.eType = sCMHDZData.sCoverData[iCover].eType dat.fActiveAtPoint = sCMHDZData.sCoverData[iCover].fActiveAtPoint dat.iCoverLane = sCMHDZData.sCoverData[iCover].iCoverLane dat.vSpriteInitialPos = sCMHDZData.sCoverData[iCover].vSpriteInitialPos dat.vSpritePos = sCMHDZData.sCoverData[iCover].vSpriteInitialPos dat.vSpriteSize = CMHDZ_COVER_UTIL_GET_TYPE_SIZE(dat.eType) CMHDZ_COVER_MAP_DATA_SET_BIT_BY_BOOL(dat, CMHDZ_COVER_DATA_BITS_IS_ANIMATED, CMHDZ_COVER_UTIL_IS_TYPE_ANIMATED(sCMHDZData.sCoverData[iCover].eType)) CMHDZ_COVER_MAP_DATA_SET_BIT_BY_BOOL(dat, CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER, CMHDZ_COVER_UTIL_IS_TYPE_SPECIAL(sCMHDZData.sCoverData[iCover].eType)) CMHDZ_COVER_MAP_DATA_SET_BIT_BY_BOOL(dat, CMHDZ_COVER_DATA_BITS_IS_FAR_BG, CMHDZ_COVER_DATA_IS_BITMASK_SET(iCover, CMHDZ_COVER_DATA_BITS_IS_FAR_BG)) CMHDZ_COVER_MAP_DATA_SET_BIT_BY_BOOL(dat, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN, CMHDZ_COVER_DATA_IS_BITMASK_SET(iCover, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN)) #ENDIF ENDPROC PROC CMHDZ_COPY_COVER_MAP_TO_COVER(CMHDZ_COVER_MAP_DATA &dat, INT iCover) IF dat.eType = CMHDZ_ASSET_INVALID SCRIPT_ASSERT("[BAZ][CMHDZ_COPY_COVER_MAP_TO_COVER] Data will not populate correctly as type is invalid") ENDIF // CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(iCover, CMHDZ_COVER_DATA_BITS_STOP_SCROLLING, IS_BITMASK_ENUM_AS_ENUM_SET(dat.eDataBits, CMHDZ_COVER_DATA_BITS_STOP_SCROLLING)) CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(iCover, CMHDZ_COVER_DATA_BITS_IS_ANIMATED, CMHDZ_COVER_UTIL_IS_TYPE_ANIMATED(dat.eType)) CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(iCover, CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER, CMHDZ_COVER_UTIL_IS_TYPE_SPECIAL(dat.eType)) CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(iCover, CMHDZ_COVER_DATA_BITS_IS_FAR_BG, IS_BITMASK_AS_ENUM_SET(dat.eDataBits, CMHDZ_COVER_DATA_BITS_IS_FAR_BG)) CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(iCover, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN, IS_BITMASK_AS_ENUM_SET(dat.eDataBits, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN)) sCMHDZData.sCoverData[iCover].eType = dat.eType sCMHDZData.sCoverData[iCover].fActiveAtPoint = dat.fActiveAtPoint sCMHDZData.sCoverData[iCover].iCoverLane = dat.iCoverLane sCMHDZData.sCoverData[iCover].vSpriteInitialPos = dat.vSpriteInitialPos sCMHDZData.sCoverData[iCover].vSpriteSize = CMHDZ_COVER_UTIL_GET_TYPE_SIZE(dat.eType) //sCMHDZData.sCoverData[iCover].eDataBits = dat.eDataBits sCMHDZData.sCoverData[iCover].fCoverWidth = sCMHDZData.sCoverData[iCover].vSpriteSize.x sCMHDZData.sCoverData[iCover].fCoverHeight = sCMHDZData.sCoverData[iCover].vSpriteSize.y ENDPROC FUNC INT CMHDZ_PARTITION_COVER_MAP_ARRAY(CMHDZ_COVER_MAP_DATA &sArray[], INT iLow, INT iHigh) CMHDZ_COVER_MAP_DATA swap FLOAT pivot = sArray[iHigh].vSpriteInitialPos.x INT i = (iLow - 1) INT j FOR j = iLow TO iHigh - 1 STEP 1 IF (sArray[j].vSpriteInitialPos.x < pivot) i ++ swap = sArray[i] sArray[i] = sArray[j] sArray[j] = swap ENDIF ENDFOR swap = sArray[i + 1] sArray[i + 1] = sArray[iHigh] sArray[iHigh] = swap RETURN i + 1 ENDFUNC PROC CMHDZ_QUICK_SORT_COVER_MAP_ARRAY(CMHDZ_COVER_MAP_DATA &sArray[], INT iLow, INT iHigh) INT pi IF (iLow < iHigh) pi = CMHDZ_PARTITION_COVER_MAP_ARRAY(sArray, iLow, iHigh) CMHDZ_QUICK_SORT_COVER_MAP_ARRAY(sArray, iLow, pi - 1) CMHDZ_QUICK_SORT_COVER_MAP_ARRAY(sArray, pi + 1, iHigh) ENDIF ENDPROC PROC CMHDZ_RESET_ALL_COVER_MAP_DATA(CMHDZ_COVER_MAP_DATA &src[]) INT i REPEAT ciCMHDZ_MAX_COVER i CMHDZ_RESET_COVER_MAP_DATA(src[i]) IF (i < sCMHDZData.iNumberOfProps) CMHDZ_COPY_COVER_TO_COVER_MAP(src[i], i) ENDIF ENDREPEAT ENDPROC //PROC CMHDZ_RESET_ALL_COVER_MAP_DATA(CMHDZ_COVER_MAP_DATA &src[]) // INT i // // REPEAT COUNT_OF(src) i // CMHDZ_RESET_COVER_MAP_DATA(src[i]) // ENDREPEAT //ENDPROC #IF IS_DEBUG_BUILD /// PURPOSE: /// Exports a Spawn Definition to script /// PARAMS: /// data - /// bOpenAndCloseFile - PROC CMHDZ_DEBUG_EXPORT_COVER_MAP_DATA_TO_SCRIPT(CMHDZ_COVER_MAP_DATA &data, INT iCoverID, BOOL bOpenAndCloseFile = TRUE) IF (bOpenAndCloseFile) OPEN_DEBUG_FILE() ENDIF SAVE_STRING_TO_DEBUG_FILE(" // ") SAVE_INT_TO_DEBUG_FILE(iCoverID) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" CMHDZ_ADD_COVER_TO_LIST(") SAVE_STRING_TO_DEBUG_FILE("INIT_VECTOR_2D(") SAVE_FLOAT_TO_DEBUG_FILE(data.vSpriteInitialPos.x) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_FLOAT_TO_DEBUG_FILE(data.vSpriteInitialPos.y) SAVE_STRING_TO_DEBUG_FILE("), ") // SAVE_STRING_TO_DEBUG_FILE("INIT_VECTOR_2D(") // SAVE_FLOAT_TO_DEBUG_FILE(data.vSpriteSize.x) // SAVE_STRING_TO_DEBUG_FILE(", ") // SAVE_FLOAT_TO_DEBUG_FILE(data.vSpriteSize.y) // SAVE_STRING_TO_DEBUG_FILE("), ") SAVE_STRING_TO_DEBUG_FILE(CMHDZ_ASSET_TYPES_TO_STRING(data.eType)) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(CMHDZ_LANE_TO_STRING(data.iCoverLane)) SAVE_STRING_TO_DEBUG_FILE(", ") // SAVE_STRING_TO_DEBUG_FILE(CMHDZ_SCREEN_TO_STRING(ROUND(data.fActiveAtPoint))) // SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(GET_STRING_FROM_BOOL(IS_BITMASK_ENUM_AS_ENUM_SET(data.eDataBits, CMHDZ_COVER_DATA_BITS_IS_FAR_BG))) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(GET_STRING_FROM_BOOL(IS_BITMASK_ENUM_AS_ENUM_SET(data.eDataBits, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN))) SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() IF (bOpenAndCloseFile) CLOSE_DEBUG_FILE() ENDIF ENDPROC PROC CMHDZ_DEBUG_EXPORT_COVER_MAP_DATA_ARRAY_TO_SCRIPT(CMHDZ_COVER_MAP_DATA &data[]) INT i TEXT_LABEL_63 txt63 txt63 = " // Cover Data List - " txt63 += CMHDZ_LEVELS_TO_STRING(sCMHDZData.eCurrentLevel) OPEN_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(txt63) SAVE_NEWLINE_TO_DEBUG_FILE() //REPEAT 4 iScreen // bStageMarker = FALSE REPEAT COUNT_OF(data) i IF (data[i].eType = CMHDZ_ASSET_INVALID) RELOOP ENDIF //IF (iLastScreen != data[i].iScreen) // SAVE_NEWLINE_TO_DEBUG_FILE() // SAVE_STRING_TO_DEBUG_FILE(" // Screen ") // //SAVE_INT_TO_DEBUG_FILE(data[i].iScreen) // SAVE_NEWLINE_TO_DEBUG_FILE() //ENDIF CMHDZ_DEBUG_EXPORT_COVER_MAP_DATA_TO_SCRIPT(data[i], i, FALSE) //iLastScreen = data[i].iScreen ENDREPEAT SAVE_NEWLINE_TO_DEBUG_FILE() CLOSE_DEBUG_FILE() ENDPROC #ENDIF // Cover and props PROC CMHDZ_ADD_COVER_TO_LIST(VECTOR_2D vPos, CMHDZ_ASSET_TYPES eType, INT iLane, BOOL bIsFarBG = FALSE, BOOL bRemoveOffScreen = FALSE) IF sCMHDZData.iNumberOfProps >= ciCMHDZ_MAX_COVER #IF IS_DEBUG_BUILD //CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_ADD_COVER_TO_LIST] Not adding TYpe: ", CMHDZ_ASSET_TYPES_TO_STRING(eType), " as array full") #ENDIF EXIT ENDIF VECTOR_2D vSize = CMHDZ_COVER_UTIL_GET_TYPE_SIZE(eType) IF vSize.x <= 0.0 TEXT_LABEL_63 sAssert = "[ADD_COVER_TO_LIST] Sprite scale showing as 0.0. Asset num: " sAssert += ENUM_TO_INT(eType) SCRIPT_ASSERT(sAssert) // Obviously wrong vSize.x = 700 vSize.y = 700 ENDIF sCMHDZData.sCoverData[sCMHDZData.iNumberOfProps].fCoverWidth = vSize.x sCMHDZData.sCoverData[sCMHDZData.iNumberOfProps].fCoverHeight = vSize.y // What point in the overall progression should this item appear. sCMHDZData.sCoverData[sCMHDZData.iNumberOfProps].fActiveAtPoint = vPos.x //- (1920 - cfLEFT_SCREEN_LIMIT) sCMHDZData.sCoverData[sCMHDZData.iNumberOfProps].vSpritePos = vPos sCMHDZData.sCoverData[sCMHDZData.iNumberOfProps].vSpriteInitialPos = vPos sCMHDZData.sCoverData[sCMHDZData.iNumberOfProps].vSpriteSize = vSize sCMHDZData.sCoverData[sCMHDZData.iNumberOfProps].eType = eType sCMHDZData.sCoverData[sCMHDZData.iNumberOfProps].iCoverLane = iLane CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(sCMHDZData.iNumberOfProps, CMHDZ_COVER_DATA_BITS_IS_FAR_BG, bIsFarBG) CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(sCMHDZData.iNumberOfProps, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN, bRemoveOffScreen) IF CMHDZ_COVER_UTIL_IS_TYPE_ANIMATED(eType) CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(sCMHDZData.iNumberOfProps, CMHDZ_COVER_DATA_BITS_IS_ANIMATED, TRUE) ENDIF IF CMHDZ_COVER_UTIL_IS_TYPE_SPECIAL(eType) CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(sCMHDZData.iNumberOfProps, CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER, TRUE) ENDIF sCMHDZData.iNumberOfProps++ ENDPROC PROC CMHDZ_COPY_COVER_MAP_DATA_TO_GAME(CMHDZ_COVER_MAP_DATA &src[]) INT i sCMHDZData.iNumberOfProps = 0 // REPEAT COUNT_OF(sCMHDZData.iPropToStopOn) i // sCMHDZData.iPropToStopOn[i] = -1 // ENDREPEAT REPEAT ciCMHDZ_MAX_COVER i CMHDZ_RESET_COVER(i) IF (src[i].eType != CMHDZ_ASSET_INVALID) CMHDZ_ADD_COVER_TO_LIST(src[i].vSpriteInitialPos, src[i].eType, src[i].iCoverLane #IF IS_DEBUG_BUILD ,CMHDZ_COVER_MAP_DATA_IS_BITMASK_SET(src[i], CMHDZ_COVER_DATA_BITS_IS_FAR_BG), CMHDZ_COVER_MAP_DATA_IS_BITMASK_SET(src[i], CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN) #ENDIF ) ENDIF ENDREPEAT ENDPROC PROC CMHDZ_INIT_COVER_POINTS(CMHDZ_LEVELS level) sCMHDZData.iNumberOfProps = 0 SWITCH level CASE CMHDZ_LEVEL_CITY // Cover Data List - CMHDZ_LEVEL_CITY // 0 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(891.5327, 1105.7385), CMHDZ_ASSET_FOREGROUND_TRASH, ciCMHDZ_LANE_FOREGROUND, FALSE, FALSE) // 1 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(563.5327, 417.7386), CMHDZ_ASSET_CITY_BUILDING_3, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) // 2 // CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1763.7964, 449.1813), CMHDZ_ASSET_CITY_BUILDING_2, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1263.5327, 417.7386), CMHDZ_ASSET_CITY_BUILDING_3, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 6 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1483.0000, 810.0000), CMHDZ_ASSET_CITY_BUILDING_1, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) // 3 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1915.7375, 430.6459), CMHDZ_ASSET_TRASHCAN_BIG_1, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1929.0000, 442.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) // 4 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2500.5327, 1105.7386), CMHDZ_ASSET_FOREGROUND_TRASH, ciCMHDZ_LANE_FOREGROUND, FALSE, FALSE) // 5 // CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2914.0066, 445.1742), CMHDZ_ASSET_CITY_BUILDING_3, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) // 7 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2467.0000, 498.0000), CMHDZ_ASSET_BARRIER, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 8 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3372.0000, 802.0000), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 9 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3392.0000, 830.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 15 //CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3552.0000, 454.0000), CMHDZ_ASSET_TRASHBAG_SMALL, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 3 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3655.7375, 420.0), CMHDZ_ASSET_TRASHCAN_BIG_1, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3685.0000, 442.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) // 10 // CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4100.0000, 450.0000), CMHDZ_ASSET_CITY_BUILDING_1, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4100.0000, 660.0000), CMHDZ_ASSET_BARRIER, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4624.0000, 348.0000), CMHDZ_ASSET_CITY_BUILDING_2, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) // 16 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7390.0000, 612.0000), CMHDZ_ASSET_TRASHCAN_BIG_1, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) //CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7362.0000, 632.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) // 11 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(5694.0000, 546.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 12 // CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(6388.0000, 706.0000), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // // 13 // CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(6408.0000, 734.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 14 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7752.0000, 456.0000), CMHDZ_ASSET_CITY_BUILDING_3, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 17 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7368.0000, 672.0000), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7390.0000, 692.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) // 18 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(6888.0000, 672.0000), CMHDZ_ASSET_BARRIER, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) // 19 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(6988.0000, 624.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) BREAK CASE CMHDZ_LEVEL_SCRAPYARD // Cover Data List // 0 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(731.0000, 394.1250), CMHDZ_ASSET_WATER_TOWER, ciCMHDZ_LANE_BACKGROUND, FALSE) // 1 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(360.0000, 590.0000), CMHDZ_ASSET_CACTUS_2, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 2 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(900.0000, 857.3750), CMHDZ_ASSET_SCRAPYARD_MD_CAR_1, ciCMHDZ_LANE_MIDDLE, FALSE) // 3 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1343.2500, 490.0000), CMHDZ_ASSET_SCRAPYARD_MD_VAN_2, ciCMHDZ_LANE_BACKGROUND, FALSE) // 4 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1913.0000, 562.3750), CMHDZ_ASSET_SCRAPYARD_MD_CAR_2, ciCMHDZ_LANE_BACKGROUND, FALSE) // 5 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1550.0000, 790.0000), CMHDZ_ASSET_CACTUS_1, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 6 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1800.0000, 988.1250), CMHDZ_ASSET_CACTUS_3, ciCMHDZ_LANE_FOREGROUND, FALSE) // 7 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2203.2500, 460.0000), CMHDZ_ASSET_SCRAPYARD_MD_VAN_3, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 8 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2745.5000, 513.0000), CMHDZ_ASSET_FENCE, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 9 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2900.0000, 864.3750), CMHDZ_ASSET_SCRAPYARD_MD_CAR_1, ciCMHDZ_LANE_MIDDLE, FALSE) // 10 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3213.2500, 600.0000), CMHDZ_ASSET_BARRELS, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 11 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3105.0000, 877.1250), CMHDZ_ASSET_CACTUS_2, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 12 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3675.0000, 480.1250), CMHDZ_ASSET_SCRAPYARD_MD_VAN_1, ciCMHDZ_LANE_BACKGROUND, FALSE) // 13 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4090.0000, 540.5468), CMHDZ_ASSET_CACTUS_1, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 14 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4240.0000, 1040.0000), CMHDZ_ASSET_CACTUS_3, ciCMHDZ_LANE_FOREGROUND, FALSE) // 15 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4289.6250, 440.6250), CMHDZ_ASSET_CACTUS_9, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) // 16 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4640.7949, 738.5468), CMHDZ_ASSET_SCRAPYARD_MD_CAR_3, ciCMHDZ_LANE_MIDDLE, FALSE) // 17 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7151.2500, 464.0000), CMHDZ_ASSET_SCRAPYARD_MD_VAN_3, ciCMHDZ_LANE_BACKGROUND, FALSE) // 20 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(9120.0000, 444.0000), CMHDZ_ASSET_SCRAPYARD_MD_VAN_4, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) // 21 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(9888.0000, 396.0000), CMHDZ_ASSET_CACTUS_3, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) // 18 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(11420.0000, 950.0000), CMHDZ_ASSET_CACTUS_2, ciCMHDZ_LANE_FOREGROUND, FALSE) // 19 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(16518.0000, 718.3750), CMHDZ_ASSET_SCRAPYARD_MD_CAR_3, ciCMHDZ_LANE_MIDDLE, FALSE) BREAK CASE CMHDZ_LEVEL_ASYLUM // Cover Data List - CMHDZ_LEVEL_ASYLUM CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(480.0000, 610.0000), CMHDZ_ASSET_ROCK_SMALL, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(480.0000, 648.0000), CMHDZ_ASSET_GRASS, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) // 2 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1675.0000, 350.7500), CMHDZ_ASSET_TRASHCAN_BIG_1, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) // 3 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1705.0000, 358.7500), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3969.0000, 358.7500), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4115.0000, 185.7500), CMHDZ_ASSET_ASYLUM_GRAFFITI_1, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4555.0000, 350.7500), CMHDZ_ASSET_TRASHCAN_BIG_1, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2136.0000, 784.0000), CMHDZ_ASSET_ASYLUM_MD_WHEELCHAIR, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(707.0000, 760.0000), CMHDZ_ASSET_ASYLUM_MD_BED, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(891.5327, 917.7386), CMHDZ_ASSET_FOREGROUND_TRASH, ciCMHDZ_LANE_FOREGROUND, FALSE, FALSE) // One offs // 27 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4304.0000, 468.0000), CMHDZ_ASSET_ASYLUM_MD_MATTRESS, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 28 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(5012.0000, 468.0000), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // 29 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(5046.0000, 516.0000), CMHDZ_ASSET_TRASHCAN_BIG_1, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(650.0693, 300.0000), CMHDZ_ASSET_ASYLUM_BG_DOOR, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3336.0000, 432.0000), CMHDZ_ASSET_ASYLUM_MD_WHEELCHAIR, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1260.0000, 300.0000), CMHDZ_ASSET_ASYLUM_BG_DOOR, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2432.4290, 300.0000), CMHDZ_ASSET_ASYLUM_BG_DOOR, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2732.0000, 333.8490), CMHDZ_ASSET_ASYLUM_BG_RADIATOR, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3292.2500, 89.9648), CMHDZ_ASSET_ASYLUM_LIGHT_2, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1256.4404, 80.0000), CMHDZ_ASSET_ASYLUM_LIGHT_1, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(715.0000, 187.7500), CMHDZ_ASSET_ASYLUM_GRAFFITI_3, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(111.2329, 179.1774), CMHDZ_ASSET_ASYLUM_GRAFFITI_2, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1415.0000, 183.7500), CMHDZ_ASSET_ASYLUM_GRAFFITI_1, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1711.2329, 177.1774), CMHDZ_ASSET_ASYLUM_GRAFFITI_2, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2115.0000, 185.7500), CMHDZ_ASSET_ASYLUM_GRAFFITI_1, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2815.0000, 182.7500), CMHDZ_ASSET_ASYLUM_GRAFFITI_3, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3636.0000, 1100.0000), CMHDZ_ASSET_ASYLUM_MD_MATTRESS, ciCMHDZ_LANE_FOREGROUND, FALSE, FALSE) // Final screen CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7828.0000, 390.0000), CMHDZ_ASSET_ASYLUM_MD_MATTRESS, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7538.0000, 780.0000), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7898.0000, 440.0000), CMHDZ_ASSET_ASYLUM_MD_BED, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(7898.0000, 820.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) BREAK CASE CMHDZ_LEVEL_PARK // Cover Data List - CMHDZ_LEVEL_PARK CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(872.0000, 900.0000), CMHDZ_ASSET_THEMEPARK_TREE_1, ciCMHDZ_LANE_FOREGROUND, FALSE, FALSE) // 0 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1212.5034, 351.4268), CMHDZ_ASSET_THEMEPARK_BUILDING_1, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) // 1 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(772.0000, 688.0000), CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_2, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 2 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1442.0000, 268.0000), CMHDZ_ASSET_THEMEPARK_TREE_3, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) // 13 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2115.5751, 796.0000), CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_1, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) // 3 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1877.2715, 803.3350), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) // 4 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2070.5881, 338.6382), CMHDZ_ASSET_THEMEPARK_BUILDING_2, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) // 5 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2355.2500, 1000.6147), CMHDZ_ASSET_TRASHCAN_BIG_1, ciCMHDZ_LANE_FOREGROUND, FALSE, FALSE) // 6 //CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4384.0000, 924.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_FOREGROUND, FALSE, FALSE) // 7 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2916.0127, 364.8707), CMHDZ_ASSET_THEMEPARK_BUILDING_3, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) // 8 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3588.8809, 327.3298), CMHDZ_ASSET_THEMEPARK_BUILDING_2, ciCMHDZ_LANE_BACKGROUND, TRUE, FALSE) // 9 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3761.8198, 483.5000), CMHDZ_ASSET_BARRELS, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) // 10 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(5140.0000, 540.0000), CMHDZ_ASSET_THEMEPARK_BUILDING_4, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 11 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4580.0000, 246.2417), CMHDZ_ASSET_THEMEPARK_BUILDING_3, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) // 12 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(6376.9878, 1000.7474), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_FOREGROUND, FALSE, TRUE) // 14 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3592.5000, 760.0000), CMHDZ_ASSET_ROCK_LARGE, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) // 15 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(5403.7500, 704.0000), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 16 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(5423.7500, 732.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 17 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(6491.0000, 480.0000), CMHDZ_ASSET_THEMEPARK_BUILDING_3, ciCMHDZ_LANE_BACKGROUND, FALSE, FALSE) // 18 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(8642.0000, 790.0000), CMHDZ_ASSET_ROCK_LARGE, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) // 19 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(8840.1650, 272.0000), CMHDZ_ASSET_THEMEPARK_TREE_3, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) // 20 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(9620.2529, 848.5654), CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_2, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 21 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(9132.0000, 713.5000), CMHDZ_ASSET_BARRELS, ciCMHDZ_LANE_MIDDLE, FALSE, TRUE) // 22 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(9672.0000, 276.0000), CMHDZ_ASSET_THEMEPARK_TREE_2, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) BREAK // Cover Data List - CMHDZ_LEVEL_SLAUGHTERHOUSE CASE CMHDZ_LEVEL_SLAUGHTERHOUSE // Screen 1 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(380.1250, 54.6250), CMHDZ_ASSET_PIG, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(500, 296), CMHDZ_ASSET_DOOR_1, ciCMHDZ_LANE_BACKGROUND, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2120.1250, 40.6250), CMHDZ_ASSET_PIG, ciCMHDZ_LANE_FOREGROUND, FALSE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2920.1250, 40.6250), CMHDZ_ASSET_PIG, ciCMHDZ_LANE_FOREGROUND, FALSE, TRUE) // Screen 2 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1700, 296), CMHDZ_ASSET_DOOR_2, ciCMHDZ_LANE_BACKGROUND, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1006.3750, 328.5000), CMHDZ_ASSET_MEATGRINDER_2, ciCMHDZ_LANE_BACKGROUND, DEFAULT, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1134.5000, 1000.8750), CMHDZ_ASSET_BODYBAG_FLOOR_1, ciCMHDZ_LANE_FOREGROUND) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(1886.1250, 104.6250), CMHDZ_ASSET_PIG, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) // Screen 3 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2134.7500, 84.6250), CMHDZ_ASSET_PIG, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) //CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3086.0000, 84.6250), CMHDZ_ASSET_PIG_BATCH, ciCMHDZ_LANE_BACKGROUND, TRUE, T) // Screen 4 // CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(2791.5000, 768.8750), CMHDZ_ASSET_BODYBAG_FLOOR_3, ciCMHDZ_LANE_MIDDLE, DEFAULT, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3642.3750, 94.0), CMHDZ_ASSET_MEATHOOK, ciCMHDZ_LANE_FOREGROUND) // CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3811.0000, 574.0000), CMHDZ_ASSET_MEATGRINDER_1, ciCMHDZ_LANE_MIDDLE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(3900, 220), CMHDZ_ASSET_WINDOW, ciCMHDZ_LANE_BACKGROUND, TRUE) // 21 CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(4056.0000, 588.0000), CMHDZ_ASSET_MEATGRINDER_1, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(5056.0000, 708.0000), CMHDZ_ASSET_BODYBAG_FLOOR_2, ciCMHDZ_LANE_MIDDLE, FALSE, FALSE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(5230.3750, 328.5000), CMHDZ_ASSET_MEATGRINDER_2, ciCMHDZ_LANE_BACKGROUND, DEFAULT, TRUE) // // Final screen // CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D(25306.3750, 628.5000), CMHDZ_ASSET_MEATGRINDER_2, ciCMHDZ_LANE_MIDDLE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D( (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SLAUGHTERHOUSE) * cfCMHDZ_SCREEN_LENGTH) + 400, 84.5000), CMHDZ_ASSET_PIG, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D( (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SLAUGHTERHOUSE) * cfCMHDZ_SCREEN_LENGTH) + 1140, 84.5000), CMHDZ_ASSET_PIG, ciCMHDZ_LANE_BACKGROUND, TRUE, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D( (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SLAUGHTERHOUSE) * cfCMHDZ_SCREEN_LENGTH) + 1680, 818.5000), CMHDZ_ASSET_MEATGRINDER_1, ciCMHDZ_LANE_MIDDLE, DEFAULT, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D( (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SLAUGHTERHOUSE) * cfCMHDZ_SCREEN_LENGTH) + 696, 495.5000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_BACKGROUND, DEFAULT, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D( (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SLAUGHTERHOUSE) * cfCMHDZ_SCREEN_LENGTH) + 720, 500.5000), CMHDZ_ASSET_TRASHCAN_BIG_1, ciCMHDZ_LANE_BACKGROUND, DEFAULT, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D( (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SLAUGHTERHOUSE) * cfCMHDZ_SCREEN_LENGTH) + 1140, 510.5000), CMHDZ_ASSET_TRASHCAN_BIG_2, ciCMHDZ_LANE_BACKGROUND, DEFAULT, TRUE) CMHDZ_ADD_COVER_TO_LIST(INIT_VECTOR_2D( (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SLAUGHTERHOUSE) * cfCMHDZ_SCREEN_LENGTH) + 1160, 526.0000), CMHDZ_ASSET_TRASHBAG_BIG, ciCMHDZ_LANE_BACKGROUND, DEFAULT, TRUE) BREAK ENDSWITCH ENDPROC //------------------------------------- // PROJECTILE FUNCTIONS //------------------------------------- PROC CMHDZ_RESET_ENEMY_THROWN_PROJECTILE(INT iThrown) sCMHDZData.sEnemyProjectiles[iThrown].eState = CMHDZ_PROJECTILE_STATE_INACTIVE sCMHDZData.sEnemyProjectiles[iThrown].iSpriteAnimFrame = 0 ENDPROC PROC CMHDZ_RESET_PLAYER_THROWN_PROJECTILE(INT iPlayer, INT iThrown) IF (iThrown < 0) OR (iThrown >= ciCMHDZ_MAX_PLAYER_THROWN_PROJECTILES) EXIT ENDIF sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[iThrown].eState = CMHDZ_PROJECTILE_STATE_INACTIVE sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[iThrown].iSpriteAnimFrame = 0 ENDPROC PROC CMHDZ_RESET_ALL_PLAYER_THROWN_PROJECTILES(INT iPlayer) INT i REPEAT ciCMHDZ_MAX_PLAYER_THROWN_PROJECTILES i CMHDZ_RESET_PLAYER_THROWN_PROJECTILE(iPlayer, i) ENDREPEAT sCMHDZData.sPlayerData[iPlayer].iNumberOfThrownProjectiles = 0 sCMHDZData.sPlayerData[iPlayer].iLastThrownProjectileTime = GET_GAME_TIMER() ENDPROC //------------------------------------- // ENEMY FUNCTIONS //------------------------------------- PROC CMHDZ_RESET_ENEMY_MAP_DATA(CMHDZ_ENEMY_MAP_DATA &dat) dat.eDataBits = CMHDZ_ENEMY_DATA_BITS_NONE dat.eEnemyType = CMHDZ_ENEMY_INVALID dat.fStoppingPos = 500.0 dat.iLane = 0 dat.fPointToAppear = 0 ENDPROC FUNC INT CMHDZ_GET_ENEMY_MAP_DATA_SLOT(CMHDZ_ENEMY_MAP_DATA &array[]) INT i REPEAT COUNT_OF(array) i IF (array[i].eEnemyType = CMHDZ_ENEMY_INVALID) RETURN i ENDIF ENDREPEAT RETURN -1 ENDFUNC PROC CMHDZ_RESET_ENEMY(INT iEnemy) sCMHDZData.sEnemyData[iEnemy].eDataBits = CMHDZ_ENEMY_DATA_BITS_NONE sCMHDZData.sEnemyData[iEnemy].eState = CMHDZ_ENEMY_STATE_INACTIVE sCMHDZData.sEnemyData[iEnemy].fPointToAppear = 0 sCMHDZData.sEnemyData[iEnemy].iHealth = 10 sCMHDZData.sEnemyData[iEnemy].vSpritePos.x = 0.0 sCMHDZData.sEnemyData[iEnemy].vSpritePos.y = 0.0 sCMHDZData.sEnemyData[iEnemy].vSize.x = 0.0 sCMHDZData.sEnemyData[iEnemy].vSize.y = 0.0 sCMHDZData.sEnemyData[iEnemy].fStoppingX = 0.0 sCMHDZData.sEnemyData[iEnemy].iEnemyType = CMHDZ_ENEMY_1 sCMHDZData.sEnemyData[iEnemy].iEnemyLane = 0 sCMHDZData.sEnemyData[iEnemy].iSpriteAnimFrame = 0 sCMHDZData.sEnemyData[iEnemy].iWarpedForMovingLevelCount = 0 sCMHDZData.sEnemyData[iEnemy].iRenderAfterWarpedCount = 0 sCMHDZData.sEnemyData[iEnemy].iPopUpTime = 0 // replace these with a bit set //sCMHDZData.sEnemyData[iEnemy].bReverse = FALSE //sCMHDZData.sEnemyData[iEnemy].bIsPopup = FALSE //sCMHDZData.sEnemyData[iEnemy].bPlayedAimAudio = FALSE //sCMHDZData.sEnemyData[iEnemy].bPlayedCriticalWarningAudio = FALSE //sCMHDZData.sEnemyData[iEnemy].bWaitUntilLevelStationary = FALSE //sCMHDZData.sEnemyData[iEnemy].bShotAtLeastOnce = FALSE //sCMHDZData.sEnemyData[iEnemy].bThrownProjectile = FALSE //sCMHDZData.sEnemyData[iEnemy].bOuthouseAudio = FALSE //sCMHDZData.sEnemyData[iEnemy].bAppearedOnscreen = FALSE ENDPROC PROC CMHDZ_RESET_ENEMY_ARRAY() INT i REPEAT ciCMHDZ_MAX_ENEMIES i CMHDZ_RESET_ENEMY(i) sCMHDZData.sEnemyData[i].iEnemyType = CMHDZ_ENEMY_INVALID ENDREPEAT ENDPROC FUNC INT CMHDZ_GET_FREE_SLOT_FOR_ENEMY() INT iCurrentStage = CMHDZ_GET_CURRENT_LEVEL_SCREEN() INT i //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_GET_FREE_SLOT_FOR_ENEMY] iCurrentStage: ", iCurrentStage) REPEAT ciCMHDZ_MAX_ENEMIES i IF iCurrentStage = 0 IF sCMHDZData.sEnemyData[i].vSize.x = 0.0 RETURN i ELSE //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_GET_FREE_SLOT_FOR_ENEMY] sCMHDZData.sEnemyData[i].vSize.x : ", sCMHDZData.sEnemyData[i].vSize.x ) ENDIF ELSE IF sCMHDZData.sEnemyData[i].fPointToAppear < iCurrentStage IF sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_INACTIVE CMHDZ_RESET_ENEMY(i) RETURN i ENDIF ENDIF ENDIF ENDREPEAT //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_GET_FREE_SLOT_FOR_ENEMY] {DSW} Failed to find slot") RETURN -1 ENDFUNC FUNC INT CMHDZ_GET_ENEMY_START_HEALTH_FOR_TYPE() RETURN 10 ENDFUNC FUNC VECTOR_2D CMHDZ_GET_ENEMY_SIZE_FOR_TYPE(CMHDZ_ENEMY_TYPES eType, BOOL bIsNotForeground = TRUE) VECTOR_2D vSize IF (bIsNotForeground) SWITCH (eType) CASE CMHDZ_ENEMY_1 CASE CMHDZ_ENEMY_2 CASE CMHDZ_ENEMY_3 CASE CMHDZ_ENEMY_4 CASE CMHDZ_ENEMY_5 vSize.x = cfCMHDZ_ENEMY_SPRITE_WIDTH vSize.y = cfCMHDZ_ENEMY_SPRITE_HEIGHT BREAK CASE CMHDZ_RARE_ENEMY_BUNNY CASE CMHDZ_RARE_ENEMY_MONKEY vSize.x = 116 vSize.y = 196 BREAK CASE CMHDZ_RARE_ENEMY_RAT vSize.x = 140 vSize.y = 60 BREAK CASE CMHDZ_THROWING_ENEMY_1 CASE CMHDZ_THROWING_ENEMY_2 CASE CMHDZ_THROWING_ENEMY_3 CASE CMHDZ_THROWING_ENEMY_4 CASE CMHDZ_THROWING_ENEMY_5 vSize.x = cfCMHDZ_ENEMY_THROWING_SPRITE_WIDTH vSize.y = cfCMHDZ_ENEMY_THROWING_SPRITE_HEIGHT BREAK DEFAULT vSize.x = cfCMHDZ_ENEMY_FOREGROUND_SPRITE_WIDTH vSize.y = cfCMHDZ_ENEMY_FOREGROUND_SPRITE_HEIGHT BREAK ENDSWITCH ELSE vSize.x = cfCMHDZ_ENEMY_FOREGROUND_SPRITE_WIDTH vSize.y = cfCMHDZ_ENEMY_FOREGROUND_SPRITE_HEIGHT IF eType = CMHDZ_FOREGROUND_ENEMY_T5_2 vSize.x = cfCMHDZ_ENEMY_FOREGROUND_HERD_SPRITE_WIDTH vSize.y = cfCMHDZ_ENEMY_FOREGROUND_HERD_SPRITE_HEIGHT ENDIF ENDIF RETURN vSize ENDFUNC PROC CMHDZ_SET_ENEMY_MAP_DATA(CMHDZ_ENEMY_MAP_DATA &dat, VECTOR_2D vPos, FLOAT fStoppingPos, INT iLane, BOOL bFromLeft, CMHDZ_ENEMY_TYPES iType, FLOAT fPointToAppear, BOOL bWaitUntilScreenStationary, BOOL bIsPopup, INT iRenderAfterWarpedCount) SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(dat.eDataBits, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY, bWaitUntilScreenStationary) SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(dat.eDataBits, CMHDZ_ENEMY_DATA_BITS_IS_POPUP, bIsPopup) SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(dat.eDataBits, CMHDZ_ENEMY_DATA_BITS_REVERSE, bFromLeft) dat.eEnemyType = iType dat.fStoppingPos = fStoppingPos dat.iLane = iLane dat.fPointToAppear = fPointToAppear dat.vSpritePos = vPos dat.iRenderAfterWarpCount = iRenderAfterWarpedCount ENDPROC FUNC INT CMHDZ_GENERATE_ENEMY_MAP_DATA_CHECKSUM(CMHDZ_ENEMY_MAP_DATA &dat) INT iChecksum = ENUM_TO_INT(dat.eDataBits) iChecksum += ENUM_TO_INT(dat.eEnemyType) iChecksum += FLOOR(dat.fStoppingPos) iChecksum += dat.iLane iChecksum += FLOOR(dat.fPointToAppear) iChecksum += VECTOR_FLAT_PACK(<>) iChecksum += dat.iRenderAfterWarpCount RETURN iChecksum ENDFUNC PROC CMHDZ_COPY_ENEMY_TO_ENEMY_MAP(INT iEnemy, CMHDZ_ENEMY_MAP_DATA &dat) //CMHDZ_RESET_ENEMY_MAP_DATA(dat) dat.eDataBits = sCMHDZData.sEnemyData[iEnemy].eDataBits dat.eEnemyType = sCMHDZData.sEnemyData[iEnemy].iEnemyType dat.fStoppingPos = sCMHDZData.sEnemyData[iEnemy].fStoppingX dat.iLane = sCMHDZData.sEnemyData[iEnemy].iEnemyLane dat.fPointToAppear = sCMHDZData.sEnemyData[iEnemy].fPointToAppear dat.vSpritePos = sCMHDZData.sEnemyData[iEnemy].vStartPos dat.iRenderAfterWarpCount = sCMHDZData.sEnemyData[iEnemy].iRenderAfterWarpedCount dat.iStaticScreenPhase = sCMHDZData.sEnemyData[iEnemy].iStaticScreenPhase ENDPROC PROC CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(CMHDZ_ENEMY_MAP_DATA &dat, INT iEnemy) sCMHDZData.sEnemyData[iEnemy].iEnemyType = dat.eEnemyType sCMHDZData.sEnemyData[iEnemy].fStoppingX = dat.fStoppingPos sCMHDZData.sEnemyData[iEnemy].iEnemyLane = dat.iLane sCMHDZData.sEnemyData[iEnemy].fPointToAppear = dat.fPointToAppear sCMHDZData.sEnemyData[iEnemy].vStartPos = dat.vSpritePos sCMHDZData.sEnemyData[iEnemy].iStaticScreenPhase = dat.iStaticScreenPhase sCMHDZData.sEnemyData[iEnemy].vSize = CMHDZ_GET_ENEMY_SIZE_FOR_TYPE(dat.eEnemyType, dat.iLane != ciCMHDZ_LANE_FOREGROUND) CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(iEnemy, CMHDZ_ENEMY_DATA_BITS_REVERSE, IS_BITMASK_ENUM_AS_ENUM_SET(dat.eDataBits, CMHDZ_ENEMY_DATA_BITS_REVERSE)) CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(iEnemy, CMHDZ_ENEMY_DATA_BITS_IS_POPUP, IS_BITMASK_ENUM_AS_ENUM_SET(dat.eDataBits, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)) CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(iEnemy, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY, IS_BITMASK_ENUM_AS_ENUM_SET(dat.eDataBits, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)) //CMHDZ_ENEMY_DATA_BITS_WILL_INFLICT_MELEE_DAMAGE = BIT8, //CMHDZ_ENEMY_DATA_BITS_IS_BONUS = BIT9 ENDPROC PROC CMHDZ_RESET_ALL_ENEMY_MAP_DATA(CMHDZ_ENEMY_MAP_DATA &src[]) INT i REPEAT ciCMHDZ_MAX_ENEMIES i CMHDZ_RESET_ENEMY_MAP_DATA(src[i]) IF (i < sCMHDZData.iNumberOfEnemies) CMHDZ_COPY_ENEMY_TO_ENEMY_MAP(i, src[i]) ENDIF ENDREPEAT ENDPROC #IF IS_DEBUG_BUILD /// PURPOSE: /// Exports a Spawn Definition to script /// PARAMS: /// data - /// bOpenAndCloseFile - PROC CMHDZ_DEBUG_EXPORT_ENEMY_MAP_DATA_TO_SCRIPT(CMHDZ_ENEMY_MAP_DATA &data, INT iEnemyID, BOOL bOpenAndCloseFile = TRUE) IF (bOpenAndCloseFile) OPEN_DEBUG_FILE() ENDIF SAVE_STRING_TO_DEBUG_FILE(" // ") SAVE_INT_TO_DEBUG_FILE(iEnemyID) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" CMHDZ_ADD_ENEMY_TO_LIST(") SAVE_FLOAT_TO_DEBUG_FILE(data.vSpritePos.x) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_FLOAT_TO_DEBUG_FILE(data.vSpritePos.y) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_FLOAT_TO_DEBUG_FILE(data.fStoppingPos) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(CMHDZ_LANE_TO_STRING(data.iLane)) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(GET_STRING_FROM_BOOL(IS_BITMASK_ENUM_AS_ENUM_SET(data.eDataBits, CMHDZ_ENEMY_DATA_BITS_REVERSE))) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(CMHDZ_ENEMY_TYPES_TO_STRING(data.eEnemyType)) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_FLOAT_TO_DEBUG_FILE(data.fPointToAppear) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(GET_STRING_FROM_BOOL(IS_BITMASK_ENUM_AS_ENUM_SET(data.eDataBits, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY))) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_STRING_TO_DEBUG_FILE(GET_STRING_FROM_BOOL(IS_BITMASK_ENUM_AS_ENUM_SET(data.eDataBits, CMHDZ_ENEMY_DATA_BITS_IS_POPUP))) SAVE_STRING_TO_DEBUG_FILE(", ") SAVE_INT_TO_DEBUG_FILE(data.iRenderAfterWarpCount) SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() IF (bOpenAndCloseFile) CLOSE_DEBUG_FILE() ENDIF ENDPROC PROC CMHDZ_DEBUG_EXPORT_ENEMY_MAP_DATA_ARRAY_TO_SCRIPT(CMHDZ_ENEMY_MAP_DATA &data[]) INT i TEXT_LABEL_63 txt63 //INT iScreen // BOOL bStageMarker // INT iPreviousLane txt63 = " // Enemy Data List - " txt63 += CMHDZ_LEVELS_TO_STRING(sCMHDZData.eCurrentLevel) OPEN_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(txt63) SAVE_NEWLINE_TO_DEBUG_FILE() //REPEAT 4 iScreen // bStageMarker = FALSE REPEAT COUNT_OF(data) i IF (data[i].eEnemyType = CMHDZ_ENEMY_INVALID) RELOOP ENDIF // IF (data[i].fPointToAppear != iScreen) // RELOOP // ENDIF // IF (bStageMarker = FALSE) // SAVE_NEWLINE_TO_DEBUG_FILE() // SAVE_STRING_TO_DEBUG_FILE(" // Stage ") // SAVE_INT_TO_DEBUG_FILE(iScreen) // SAVE_NEWLINE_TO_DEBUG_FILE() // bStageMarker = TRUE // ENDIF // IF (iPreviousLane != data[i].iLane) // iPreviousLane = data[i].iLane // SAVE_NEWLINE_TO_DEBUG_FILE() // ENDIF CMHDZ_DEBUG_EXPORT_ENEMY_MAP_DATA_TO_SCRIPT(data[i], i, FALSE) ENDREPEAT //ENDREPEAT SAVE_NEWLINE_TO_DEBUG_FILE() CLOSE_DEBUG_FILE() ENDPROC #ENDIF // Enemies PROC CMHDZ_ADD_ENEMY_COVER_POPUP(FLOAT fPointToAppear, VECTOR_2D fPos, INT iIndex = 0) INT iRand VECTOR_2D vPos UNUSED_PARAMETER(iIndex) UNUSED_PARAMETER(iRand) // IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_CITY // // iRand = (iIndex%3) // // SWITCH iRand // CASE 0 // vPos.y += 80 // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_CITY_BUILDING_1, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // BREAK // // CASE 1 // vPos.y += 80 // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_CITY_BUILDING_3, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // BREAK // // CASE 2 // vPos.y += 80 // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_CITY_BUILDING_2, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) // BREAK // ENDSWITCH // // ENDIF // Make switch if adopted throughout. IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_ASYLUM vPos = INIT_VECTOR_2D(fPointToAppear + fPos.x, fPos.Y) //vPos.x += 196.0 vPos.y += 90 //vPos.x += cfLEFT_SCREEN_LIMIT CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_ASYLUM_MD_MATTRESS, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) ENDIF IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_SLAUGHTERHOUSE vPos = INIT_VECTOR_2D(fPointToAppear + fPos.x, fPos.Y) //vPos.x += 196.0 //vPos.y += 240 //vPos.x += cfLEFT_SCREEN_LIMIT CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_MEATGRINDER_2, ciCMHDZ_LANE_BACKGROUND, FALSE, TRUE) ENDIF ENDPROC PROC CMHDZ_ADD_ENEMY_COVER_POINT(INT iIndex, FLOAT fPointToAppear, FLOAT fStoppingPos, FLOAT fPosY, INT iLane) VECTOR_2D vPos vPos = INIT_VECTOR_2D(fPointToAppear + (fStoppingPos - cfLEFT_SCREEN_LIMIT), fPosY) vPos.x += 196.0 // SWITCH sCMHDZData.eCurrentLevel // // CASE CMHDZ_LEVEL_ASYLUM // // BREAK // // ENDSWITCH // Cover variations //INT iRand = GET_RANDOM_INT_IN_RANGE(0, 3) INT iRand // IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_CITY // // iRand = (iIndex%5) // // SWITCH iRand // CASE 0 // vPos.y += 220 // CMHDZ_ADD_COVER_TO_LIST(vPos, INT_TO_ENUM(CMHDZ_ASSET_TYPES, GET_RANDOM_INT_IN_RANGE(14,17)), iLane, FALSE, TRUE) // BREAK // //// CASE 1 //// vPos.y += 220 //// CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_CITY_BUILDING_2, iLane, FALSE, TRUE) //// BREAK // //// CASE 2 //// vPos.y += 220 //// CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_CITY_BUILDING_3, iLane, FALSE, TRUE) //// BREAK // // CASE 2 // vPos.y += 68 // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_BARRIER, iLane, FALSE, TRUE) // BREAK // // CASE 4 // vPos.y += 60 // vPos.x += 24 // // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_TRASHCAN_BIG_2, iLane, FALSE, TRUE) // // vPos.x += 20 // vPos.y += 28 // // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_TRASHBAG_BIG, iLane, FALSE, TRUE) // BREAK // ENDSWITCH // ENDIF IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_ASYLUM iRand = (iIndex%3) SWITCH iRand CASE 0 vPos.y += 60 vPos.x += 24 CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_TRASHCAN_BIG_2, iLane, FALSE, TRUE) vPos.x += 20 vPos.y += 28 CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_TRASHBAG_BIG, iLane, FALSE, TRUE) BREAK CASE 1 vPos.y += 90 CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_ASYLUM_MD_MATTRESS, iLane, FALSE, TRUE) BREAK CASE 2 vPos.y += 72 CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_ASYLUM_MD_BED, iLane, FALSE, TRUE) BREAK ENDSWITCH ENDIF // IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_PARK // // //iRand = (iIndex%4) // // SWITCH iIndex // CASE 0 // vPos.y += 72 // vPos.x -= 36 // // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_1, iLane, FALSE, FALSE) // // BREAK // // CASE 4 // // vPos.y += 80 // vPos.x -= 36 // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_ROCK_LARGE, iLane, FALSE, FALSE) // // BREAK // // CASE 8 // // vPos.y += 60 // vPos.x += 24 // // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_TRASHCAN_BIG_2, iLane, FALSE, TRUE) // // vPos.x += 20 // vPos.y += 28 // // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_TRASHBAG_BIG, iLane, FALSE, TRUE) // // BREAK // // CASE 12 // // vPos.y -= 120 // vPos.x -= 120 // // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_THEMEPARK_BUILDING_3, iLane, FALSE, FALSE) // // BREAK // // CASE 16 // // vPos.y += 80 // vPos.x += 36 // // CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_ROCK_LARGE, iLane, FALSE, FALSE) // // BREAK // // ENDSWITCH // // // ENDIF IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_SLAUGHTERHOUSE iRand = (iIndex%3) SWITCH iRand CASE 0 vPos.y += 90 vPos.x += 24 CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_BODYBAG_FLOOR_1, iLane, FALSE, TRUE) BREAK CASE 1 vPos.y += 90 vPos.x -= 24 CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_BODYBAG_FLOOR_2, iLane, FALSE, TRUE) BREAK CASE 2 vPos.y += 90 vPos.x += 36 CMHDZ_ADD_COVER_TO_LIST(vPos, CMHDZ_ASSET_BODYBAG_FLOOR_3, iLane, FALSE, TRUE) BREAK ENDSWITCH ENDIF ENDPROC PROC CMHDZ_ADD_ENEMY_TO_LIST(FLOAT fPosX = 1000.0, FLOAT fPosY = 900.0, FLOAT fStoppingPos = 500.0, INT iLane = 0, BOOL bFromLeft = FALSE, CMHDZ_ENEMY_TYPES iType = CMHDZ_ENEMY_1, FLOAT fPointToAppear = 0.0, BOOL bWaitUntilScreenStationary = FALSE, BOOL bIsPopup = FALSE, INT iRenderAfterWarpedCount = 0, INT iStaticScreenPhase = 0) INT iSlotToUse = CMHDZ_GET_FREE_SLOT_FOR_ENEMY() IF iSlotToUse > -1 sCMHDZData.sEnemyData[iSlotToUse].eState = CMHDZ_ENEMY_STATE_WAITING sCMHDZData.sEnemyData[iSlotToUse].vSpritePos.x = fPosX sCMHDZData.sEnemyData[iSlotToUse].vSpritePos.y = fPosY sCMHDZData.sEnemyData[iSlotToUse].vStartPos = sCMHDZData.sEnemyData[iSlotToUse].vSpritePos sCMHDZData.sEnemyData[iSlotToUse].fStoppingX = fStoppingPos sCMHDZData.sEnemyData[iSlotToUse].iEnemyType = iType sCMHDZData.sEnemyData[iSlotToUse].iEnemyLane = iLane sCMHDZData.sEnemyData[iSlotToUse].iEnemyVoiceId = GET_RANDOM_INT_IN_RANGE(0, 5) CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_ADD_ENEMY_TO_LIST - iSlotToUse: ", iSlotToUse, " iEnemyVoiceId: ", sCMHDZData.sEnemyData[iSlotToUse].iEnemyVoiceId) // Failsafe for failed asignment IF bWaitUntilScreenStationary AND iStaticScreenPhase = 0 iStaticScreenPhase = 1 ENDIF // Auto fix misasigned popup lanes. IF bIsPopup AND (iLane != ciCMHDZ_LANE_POPUP_LHS OR iLane != ciCMHDZ_LANE_POPUP_RHS) iLane = ciCMHDZ_LANE_POPUP_RHS ENDIF // If slot is greater than the first then make sure the voise ID is not the same as the last. IF iSlotToUse > 0 WHILE sCMHDZData.sEnemyData[iSlotToUse].iEnemyVoiceId = sCMHDZData.sEnemyData[iSlotToUse - 1].iEnemyVoiceId sCMHDZData.sEnemyData[iSlotToUse].iEnemyVoiceId = GET_RANDOM_INT_IN_RANGE(0, 5) CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_ADD_ENEMY_TO_LIST - iSlotToUse WHILE loop: ", iSlotToUse, " iEnemyVoiceId: ", sCMHDZData.sEnemyData[iSlotToUse].iEnemyVoiceId) ENDWHILE IF iSlotToUse > 1 WHILE sCMHDZData.sEnemyData[iSlotToUse].iEnemyVoiceId = sCMHDZData.sEnemyData[iSlotToUse - 2].iEnemyVoiceId sCMHDZData.sEnemyData[iSlotToUse].iEnemyVoiceId = GET_RANDOM_INT_IN_RANGE(0, 5) CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_ADD_ENEMY_TO_LIST - iSlotToUse WHILE loop: ", iSlotToUse, " iEnemyVoiceId: ", sCMHDZData.sEnemyData[iSlotToUse].iEnemyVoiceId) ENDWHILE ENDIF ENDIF CMHDZ_ENEMY_DATA_CLEAR_BITMASK(iSlotToUse, CMHDZ_ENEMY_DATA_BITS_SHOT_AT_LEAST_ONCE) CMHDZ_ENEMY_DATA_CLEAR_BITMASK(iSlotToUse, CMHDZ_ENEMY_DATA_BITS_PLAYED_AIM_AUDIO) CMHDZ_ENEMY_DATA_CLEAR_BITMASK(iSlotToUse, CMHDZ_ENEMY_DATA_BITS_PLAYED_WARN_AUDIO) CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(iSlotToUse, CMHDZ_ENEMY_DATA_BITS_REVERSE, bFromLeft) CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(iSlotToUse, CMHDZ_ENEMY_DATA_BITS_IS_POPUP, bIsPopup) CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(iSlotToUse, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY, bWaitUntilScreenStationary) SWITCH iType CASE CMHDZ_FOREGROUND_ENEMY_T1_1 CASE CMHDZ_FOREGROUND_ENEMY_T2_1 CASE CMHDZ_FOREGROUND_ENEMY_T4_1 CASE CMHDZ_FOREGROUND_ENEMY_T5_2 CMHDZ_ENEMY_DATA_SET_BITMASK(iSlotToUse, CMHDZ_ENEMY_DATA_BITS_WILL_INFLICT_MELEE_DAMAGE) BREAK CASE CMHDZ_RARE_ENEMY_BUNNY CASE CMHDZ_RARE_ENEMY_MONKEY CASE CMHDZ_RARE_ENEMY_RAT CMHDZ_ENEMY_DATA_SET_BITMASK(iSlotToUse, CMHDZ_ENEMY_DATA_BITS_IS_BONUS) BREAK ENDSWITCH sCMHDZData.sEnemyData[iSlotToUse].fPointToAppear = fPointToAppear sCMHDZData.sEnemyData[iSlotToUse].iStaticScreenPhase = iStaticScreenPhase sCMHDZData.sEnemyData[iSlotToUse].iRenderAfterWarpedCount = iRenderAfterWarpedCount sCMHDZData.sEnemyData[iSlotToUse].iWarpedForMovingLevelCount = 0 sCMHDZData.sEnemyData[iSlotToUse].iSpriteAnimFrame = 0 sCMHDZData.sEnemyData[iSlotToUse].iEnemyFlashTimer = 0 IF (sCMHDZData.sEnemyData[iSlotToUse].iStaticScreenPhase > 0) CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] [CMHDZ_ADD_ENEMY_TO_LIST] iStaticScreenPhase > 0") ENDIF sCMHDZData.sEnemyData[iSlotToUse].vSize = CMHDZ_GET_ENEMY_SIZE_FOR_TYPE(sCMHDZData.sEnemyData[iSlotToUse].iEnemyType, sCMHDZData.sEnemyData[iSlotToUse].iEnemyLane != ciCMHDZ_LANE_FOREGROUND) sCMHDZData.sEnemyData[iSlotToUse].iHealth = CMHDZ_GET_ENEMY_START_HEALTH_FOR_TYPE() // TESTING // Adding a cover point whenever an enemy is added. IF iLane != ciCMHDZ_LANE_FOREGROUND AND iLane != ciCMHDZ_LANE_POPUP_LHS AND iLane != ciCMHDZ_LANE_POPUP_RHS IF !bWaitUntilScreenStationary AND (iSlotToUse%2) = 0 // Evens only CMHDZ_ADD_ENEMY_COVER_POINT(iSlotToUse, fPointToAppear, fStoppingPos, fPosY, iLane) ENDIF ELIF iLane = ciCMHDZ_LANE_POPUP_LHS OR iLane = ciCMHDZ_LANE_POPUP_RHS IF !bWaitUntilScreenStationary CMHDZ_ADD_ENEMY_COVER_POPUP(fPointToAppear, sCMHDZData.sEnemyData[iSlotToUse].vSpritePos, iSlotToUse) ENDIF ENDIF sCMHDZData.iNumberOfEnemies++ ELSE #IF IS_DEBUG_BUILD //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ADD_ENEMY_TO_LIST] Failed to add enemy of type ", CMHDZ_ENEMY_TYPES_TO_STRING(iType)) #ENDIF ENDIF ENDPROC PROC CMHDZ_COPY_ENEMY_MAP_DATA_TO_GAME(CMHDZ_ENEMY_MAP_DATA &src[]) INT i sCMHDZData.iNumberOfEnemies = 0 REPEAT ciCMHDZ_MAX_ENEMIES i CMHDZ_RESET_ENEMY(i) IF (src[i].eEnemyType != CMHDZ_ENEMY_INVALID) CMHDZ_ADD_ENEMY_TO_LIST(src[i].vSpritePos.x, src[i].vSpritePos.y, src[i].fStoppingPos, src[i].iLane, IS_BITMASK_ENUM_AS_ENUM_SET(src[i].eDataBits, CMHDZ_ENEMY_DATA_BITS_REVERSE), src[i].eEnemyType, src[i].fPointToAppear, IS_BITMASK_ENUM_AS_ENUM_SET(src[i].eDataBits, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY), IS_BITMASK_ENUM_AS_ENUM_SET(src[i].eDataBits, CMHDZ_ENEMY_DATA_BITS_IS_POPUP), src[i].iRenderAfterWarpCount, src[i].iStaticScreenPhase) ENDIF ENDREPEAT ENDPROC PROC CMHDZ_INIT_ENEMIES() ////CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_INIT_ENEMIES] Called. Stage: ", iScreen) SWITCH sCMHDZData.eCurrentLevel CASE CMHDZ_LEVEL_CITY // #IF IS_DEBUG_BUILD // IF GET_COMMANDLINE_PARAM_EXISTS("sc_BadlandsQuickLevel1") OR (CMHDZ_CMDLINE_QUICK_LEVEL1 = 1) // CMHDZ_ADD_ENEMY_TO_LIST(100, 950, 560, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T1_1) // EXIT // ENDIF // #ENDIF // Enemy Data List - CITY // 0 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 490.0000, -10.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_RARE_ENEMY_RAT, 360.0000, FALSE, FALSE, 0) // CMHDZ_ADD_ENEMY_TO_LIST(220.0000, 590.0000, 944.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_1, 593.0000, FALSE, FALSE, 0) // 1 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 646.0000, 1220.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_1, 781.0000, FALSE, FALSE, 0) // 2 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 430.0000, 1312.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_1, 1109.0000, FALSE, FALSE, 0) // 3 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 966.0000, 676.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T1_1, 1668.0000, FALSE, FALSE, 0) // 4 CMHDZ_ADD_ENEMY_TO_LIST(1682.0000, 742.0000, 1300.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_1, 2102.0000, FALSE, FALSE, 0) // 5 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 398.0000, 920.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_THROWING_ENEMY_1, 2375.0000, FALSE, FALSE, 0) // 6 CMHDZ_ADD_ENEMY_TO_LIST(1826.0000, 918.0000, 1364.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T1_2, 2823.0000, FALSE, FALSE, 0) // 7 CMHDZ_ADD_ENEMY_TO_LIST(200.0000, 430.0000, 1064.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_1, 2843.0000, FALSE, FALSE, 0) // 8 CMHDZ_ADD_ENEMY_TO_LIST(242.0000, 622.0000, 1028.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_1, 3368.0000, FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 458.0000, -10.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_RARE_ENEMY_MONKEY, 3700.0) // 8 CMHDZ_ADD_ENEMY_TO_LIST(964.0000, 406.0000, 244.0000, ciCMHDZ_LANE_POPUP_RHS, TRUE, CMHDZ_ENEMY_1, 4288.0000, FALSE, TRUE, 0) // 10 CMHDZ_ADD_ENEMY_TO_LIST(1658.0000, 616.0000, 1244.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_1, 5152.0000, FALSE, FALSE, 0) // 11 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 958.0000, 560.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T1_1, 4673.0000, FALSE, FALSE, 0) // 12 CMHDZ_ADD_ENEMY_TO_LIST(1826.0000, 942.0000, 1256.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T1_2, 4897.0000, FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 690.0000, -10.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_RARE_ENEMY_RAT, 5200.0000, FALSE, FALSE, 0) // 13 CMHDZ_ADD_ENEMY_TO_LIST(200.0000, 598.0000, 1124.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_1, 5769.0000, FALSE, FALSE, 0) // 14 CMHDZ_ADD_ENEMY_TO_LIST(1682.0000, 622.0000, 1452.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_1, 5590.0000, FALSE, FALSE, 0) // 15 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 454.0000, 1328.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_1, 5744.0000, FALSE, FALSE, 0) // 17 //CMHDZ_ADD_ENEMY_TO_LIST(200.0000, 454.0000, 756.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_THROWING_ENEMY_1, 6607.0000, FALSE, FALSE, 0) // // 18 // CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 670.0000, 1052.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_1, 6943.0000, FALSE, FALSE, 0) // // 19 // CMHDZ_ADD_ENEMY_TO_LIST(200.0000, 670.0000, 948.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_THROWING_ENEMY_1, 7383.0000, FALSE, FALSE, 0) // // 20 // CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 950.0000, 560.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T1_2, 7859.0000, FALSE, FALSE, 0) // // 21 // CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 430.0000, 1272.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_1, 8259.0000, FALSE, FALSE, 0) // // 22 // CMHDZ_ADD_ENEMY_TO_LIST(1706.0000, 670.0000, 1452.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_1, 8657.0000, FALSE, FALSE, 0) // // 23 // CMHDZ_ADD_ENEMY_TO_LIST(200.0000, 718.0000, 1000.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_1, 9050.0000, FALSE, FALSE, 0) // 28 CMHDZ_ADD_ENEMY_TO_LIST(98.0000, 620.0000, 820.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 1) // 30 CMHDZ_ADD_ENEMY_TO_LIST(1856.0000, 620.0000, 1452.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_THROWING_ENEMY_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 1) // 31 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 418.0000, 1024.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 2) // 32 CMHDZ_ADD_ENEMY_TO_LIST(1154.0000, 430.0000, 264.0000, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_ENEMY_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, TRUE, 0, 2) // 33 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 620.0000, 1200.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 2) // 34 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 430.0000, 1024.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 3) // 35 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 430.0000, 612.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 3) // 36 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 950.0000, 560.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T1_2, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 3) // 37 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 608.0000, 1150.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 4) // 38 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 950.0000, 1280.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T1_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 4) // 39 //CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 950.0000, 560.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T1_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_CITY) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 4) BREAK CASE CMHDZ_LEVEL_SCRAPYARD // Enemy Data List - SCRAPYARD // Enemy Data List - CMHDZ_LEVEL_SCRAPYARD // 0 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 430.0000, 1000.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_2, 508.0000, FALSE, FALSE, 0) // 1 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 430.0000, -10.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_RARE_ENEMY_BUNNY, 650.0000, FALSE, FALSE, 0) // 2 CMHDZ_ADD_ENEMY_TO_LIST(1466.6250, 460.8750, 310.8750, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_THROWING_ENEMY_2, 776.0000, FALSE, TRUE, 0) // 3 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 430.0000, 1256.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_2, 1196.0000, FALSE, FALSE, 0) // 4 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 480.0000, 1232.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_2, 1400.0000, FALSE, FALSE, 0) // 5 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 770.0000, 1250.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_2, 1752.0000, FALSE, FALSE, 0) // 6 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 770.0000, 832.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_2, (2 * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 1) // 7 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 470.0000, 1100.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_2, (2 * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 1) // 8 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 412.0000, 850.8750, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_THROWING_ENEMY_2, (2 * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 2) // 9 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 670.0000, 1210.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_2, (2 * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 2) // 10 CMHDZ_ADD_ENEMY_TO_LIST(1658.0000, 434.0000, 1240.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_2, (2 * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 3) // 11 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 952.0000, 524.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T2_1, (2 * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 3) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 744.0000, 1800.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_RARE_ENEMY_RAT, 2640.0000, FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 690.0000, -10.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_RARE_ENEMY_RAT, 2560.0000, FALSE, FALSE, 0) // 12 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 444.0000, 1100.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_2, 2800.0000, FALSE, FALSE, 0) // 13 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 670.0000, 1162.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_2, 3340.0000, FALSE, FALSE, 0) // 14 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 674.0000, 1264.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_2, 3548.0000, FALSE, FALSE, 0) // 15 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 852.0000, 524.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T2_1, 3740.0000, FALSE, FALSE, 0) // 16 CMHDZ_ADD_ENEMY_TO_LIST(1266.6250, 337.0750, 257.8750, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_ENEMY_2, 4240.0000, FALSE, TRUE, 0) // 17 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 950.0000, 560.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T2_2, 4540.0000, FALSE, FALSE, 0) // 18 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 416.0000, 1150.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_2, 4782.0000, FALSE, FALSE, 0) // 19 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 430.0000, 1260.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_2, 5120.0000, FALSE, FALSE, 0) // 20 CMHDZ_ADD_ENEMY_TO_LIST(886.6250, 486.8750, 357.8750, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_THROWING_ENEMY_2, 5248.0000, FALSE, TRUE, 0) // 21 CMHDZ_ADD_ENEMY_TO_LIST(1680.0000, 756.0000, 748.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_2, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SCRAPYARD) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 1) // 22 CMHDZ_ADD_ENEMY_TO_LIST(240.0000, 420.0000, 916.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_2, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SCRAPYARD) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 1) // 23 CMHDZ_ADD_ENEMY_TO_LIST(96.0000, 852.0000, 652.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T2_2, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SCRAPYARD) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 1) // 25 CMHDZ_ADD_ENEMY_TO_LIST(1512.0000, 444.0000, 340.0000, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_ENEMY_2, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SCRAPYARD) * cfCMHDZ_SCREEN_LENGTH), TRUE, TRUE, 0, 2) // 26 CMHDZ_ADD_ENEMY_TO_LIST(624.0000, 492.0000, 364.0000, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_ENEMY_2, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SCRAPYARD) * cfCMHDZ_SCREEN_LENGTH), TRUE, TRUE, 0, 2) // 27 CMHDZ_ADD_ENEMY_TO_LIST(120.0000, 844.0000, 676.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T2_1, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SCRAPYARD) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 3) // 29 CMHDZ_ADD_ENEMY_TO_LIST(1776.0000, 844.0000, 1372.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T2_2, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SCRAPYARD) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 3) // 30 CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 660.0000, 988.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_THROWING_ENEMY_2, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SCRAPYARD) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 3) BREAK CASE CMHDZ_LEVEL_ASYLUM // Enemy Data List - CMHDZ_LEVEL_ASYLUM // 0 CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 660.0000, 1160.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_3, 700.0000, FALSE, FALSE, 0) // 1 CMHDZ_ADD_ENEMY_TO_LIST(288.0000, 372.0000, 1520.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_3, 700.0000, FALSE, FALSE, 0) // 2 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 844.0000, 662.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T3_2, 1400.0000, FALSE, FALSE, 0) // 3 CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 684.0000, 1160.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_3, 1620.0000, FALSE, FALSE, 0) // 4 CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 372.0000, 1356.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_3, 1620.0000, FALSE, FALSE, 0) // 5 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 844.0000, 1210.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T3_2, 2410.0000, FALSE, FALSE, 0) // 6 CMHDZ_ADD_ENEMY_TO_LIST(264.0000, 732.0000, 996.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_3, 2790.0000, FALSE, FALSE, 0) // 7 CMHDZ_ADD_ENEMY_TO_LIST(288.0000, 372.0000, 1044.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_3, 2830.0000, FALSE, FALSE, 0) // 8 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 376.0000, -10.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_RARE_ENEMY_BUNNY, 3250.0000, FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 690.0000, -10.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_RARE_ENEMY_RAT, 3100.0000, FALSE, FALSE, 0) // 10 CMHDZ_ADD_ENEMY_TO_LIST(0.0000, 864.0000, 708.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T3_1, 3710.0000, TRUE, FALSE, 0, 1) // 11 CMHDZ_ADD_ENEMY_TO_LIST(2424.0000, 864.0000, 1176.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T3_2, 3710.0000, TRUE, FALSE, 0, 1) // 12 CMHDZ_ADD_ENEMY_TO_LIST(2100.0000, 614.0000, 948.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_THROWING_ENEMY_3, 3710.0000, TRUE, FALSE, 0, 1) // 8 CMHDZ_ADD_ENEMY_TO_LIST(640.0000, 456.0000, 368.0000, ciCMHDZ_LANE_POPUP_LHS, TRUE, CMHDZ_ENEMY_3, 3710.0000, TRUE, TRUE, 0, 2) // 9 CMHDZ_ADD_ENEMY_TO_LIST(1328.0000, 492.0000, 412.0000, ciCMHDZ_LANE_POPUP_LHS, FALSE, CMHDZ_ENEMY_3, 3710.0000, TRUE, TRUE, 0, 3) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 430.0000, -10.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_RARE_ENEMY_RAT, 3900.0000, FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 744.0000, 1800.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_RARE_ENEMY_RAT, 4240.0000, FALSE, FALSE, 0) // 13 CMHDZ_ADD_ENEMY_TO_LIST(264.0000, 680.0000, 940.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_3, 4630.0000, FALSE, FALSE, 0) // 15 CMHDZ_ADD_ENEMY_TO_LIST(96.0000, 844.0000, 940.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T3_2, 4970.0000, FALSE, FALSE, 0) // 14 CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 420.0000, 1252.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_3, 5246.0000, FALSE, FALSE, 0) // 15 CMHDZ_ADD_ENEMY_TO_LIST(96.0000, 844.0000, 940.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T3_1, 5466.0000, FALSE, FALSE, 0) // 17 CMHDZ_ADD_ENEMY_TO_LIST(264.0000, 324.0000, 940.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_3, 5694.0000, FALSE, FALSE, 0) // 18 // CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 690.0000, 1084.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_3, 5694.0000, FALSE, FALSE, 0) // 25 // CMHDZ_ADD_ENEMY_TO_LIST(264.0000, 324.0000, 1040.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_3, 5854.0000, FALSE, FALSE, 0) // // 26 // CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 690.0000, 884.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_3, 5834.0000, FALSE, FALSE, 0) // 23 CMHDZ_ADD_ENEMY_TO_LIST(1180.0000, 528.0000, 464.0000, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_THROWING_ENEMY_3, 6090.0000, FALSE, TRUE, 0) // 24 //CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 680.0000, 1228.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_THROWING_ENEMY_3, 7366.0000, FALSE, FALSE, 0) // 27 //CMHDZ_ADD_ENEMY_TO_LIST(96.0000, 780.0000, 940.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T3_1, 8146.0000, FALSE, FALSE, 0) // 28 CMHDZ_ADD_ENEMY_TO_LIST(120.0000, 370.0000, 712.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 1) // 29 //CMHDZ_ADD_ENEMY_TO_LIST(2250.0000, 690.0000, 944.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 1) // 30 CMHDZ_ADD_ENEMY_TO_LIST(120.0000, 716.0000, 960.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_THROWING_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 1) // 31 CMHDZ_ADD_ENEMY_TO_LIST(2226.0000, 980.0000, 1440.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T3_2, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 1) // 32 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 952.0000, 924.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T3_2, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 2) // 33 CMHDZ_ADD_ENEMY_TO_LIST(264.0000, 708.0000, 996.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 2) // 34 CMHDZ_ADD_ENEMY_TO_LIST(288.0000, 324.0000, 924.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 2) // 35 //CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 952.0000, 512.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T3_1, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 2) // 36 //CMHDZ_ADD_ENEMY_TO_LIST(264.0000, 732.0000, 926.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 3) // 37 CMHDZ_ADD_ENEMY_TO_LIST(264.0000, 732.0000, 974.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 3) // 38 CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 732.0000, 1296.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 3) // 39 CMHDZ_ADD_ENEMY_TO_LIST(288.0000, 324.0000, 548.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 4) // 40 CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 324.0000, 1210.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_3, (CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_ASYLUM) * cfCMHDZ_SCREEN_LENGTH), TRUE, FALSE, 0, 4) BREAK CASE CMHDZ_LEVEL_PARK // Enemy Data List - CMHDZ_LEVEL_PARK CMHDZ_ADD_ENEMY_TO_LIST(1084.0000, 724.0000, 644.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_4, 1081.5751, FALSE, TRUE, 0) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 368.0000, 1122.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_4, 1539.6500, FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 710.0000, 1320.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_4, 1.66 * cfCMHDZ_SCREEN_LENGTH) // Screen 1 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 950.0000, 560.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T4_2, 2.5 * cfCMHDZ_SCREEN_LENGTH) // Screen 2 CMHDZ_ADD_ENEMY_TO_LIST(1800.0000, 680.0000, 900.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_4, 3* cfCMHDZ_SCREEN_LENGTH) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 430.0000, 1040.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_4, 3 * cfCMHDZ_SCREEN_LENGTH) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 834.0000, 1800.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_RARE_ENEMY_RAT, 3.5 * cfCMHDZ_SCREEN_LENGTH, FALSE, FALSE, 0) // Screen 3 CMHDZ_ADD_ENEMY_TO_LIST(2000.0000, 950.0000, 1400.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T4_2, 4 * cfCMHDZ_SCREEN_LENGTH) // Screen 3.5 CMHDZ_ADD_ENEMY_TO_LIST(-100.0000, 954.0000, 960.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T4_1, (4.5 * cfCMHDZ_SCREEN_LENGTH), FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 580.0000, 1280.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_4, (4.5 * cfCMHDZ_SCREEN_LENGTH), FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 372.0000, 1560.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_4, (4.5 * cfCMHDZ_SCREEN_LENGTH), FALSE, FALSE, 0) // Screen 4 //CMHDZ_ADD_ENEMY_TO_LIST(350.0000, 480.0000, 340.0000, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_ENEMY_4, 4.9 * cfCMHDZ_SCREEN_LENGTH, FALSE, TRUE) CMHDZ_ADD_ENEMY_TO_LIST(1334.0000, 384.0000, 268.0000, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_THROWING_ENEMY_4, 4784.7500, FALSE, TRUE, 0) //4.75 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 378.0000, 996.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_4, (5.66 * cfCMHDZ_SCREEN_LENGTH)) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 430.0000, -10.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_RARE_ENEMY_RAT, 6.2 * cfCMHDZ_SCREEN_LENGTH, FALSE, FALSE, 0) // Screen 6 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 392.0000, 1484.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_4, 6492.5) CMHDZ_ADD_ENEMY_TO_LIST(1856.0000, 684.0000, 1360.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_4, 7 * cfCMHDZ_SCREEN_LENGTH) // Screen 7 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 950.0000, 660.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T4_1, 8* cfCMHDZ_SCREEN_LENGTH) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 710.0000, 1240.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_4, 8 * cfCMHDZ_SCREEN_LENGTH) // Rare 2 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 382.0000, -10.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_RARE_ENEMY_MONKEY, 8.5 * cfCMHDZ_SCREEN_LENGTH) // Static screens // 1 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 392.0000, 880.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_4, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, DEFAULT, DEFAULT, 1) CMHDZ_ADD_ENEMY_TO_LIST(1856.0000, 666.0000, 960.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_4, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, DEFAULT, DEFAULT, 1) // 2 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 392.0000, 1560.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_4, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 2) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 666.0000, 1500.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_4, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 2) // 3 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 660.0000, 960.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_THROWING_ENEMY_4, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 3) CMHDZ_ADD_ENEMY_TO_LIST(0.0000, 828.0000, 708.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T4_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 3) CMHDZ_ADD_ENEMY_TO_LIST(2424.0000, 804.0000, 1176.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T4_2, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 3) // 4 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 391.0000, 728.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_4, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, TRUE, 0, 4) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 666.0000, 1500.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_4, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 4) // 5 CMHDZ_ADD_ENEMY_TO_LIST(1900.0000, 660.0000, 960.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_4, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 5) CMHDZ_ADD_ENEMY_TO_LIST(2000.0000, 950.0000, 1360.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T4_1, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, FALSE, 0, 5) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 392.0000, 880.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_4, CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_PARK) * cfCMHDZ_SCREEN_LENGTH, TRUE, DEFAULT, DEFAULT, 5) BREAK CASE CMHDZ_LEVEL_SLAUGHTERHOUSE // Enemy Data List - CMHDZ_LEVEL_SLAUGHTERHOUSE // 3 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 680.0000, 1412.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_5, 1375.0000, FALSE, FALSE, 0) // 4 CMHDZ_ADD_ENEMY_TO_LIST(0.0000, 950.0000, 700.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T5_1, 2302.5000, FALSE, FALSE, 0) // 5 CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 334.0000, 1100.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_5, 2510.0000, FALSE, FALSE, 0) // 6 CMHDZ_ADD_ENEMY_TO_LIST(-144.0000, 950.0000, 660.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T5_2, 3605.5000, FALSE, FALSE, 0) // 7 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 334.0000, 700.0000, ciCMHDZ_LANE_BACKGROUND, TRUE, CMHDZ_ENEMY_5, 3909.0000, FALSE, FALSE, 0) // 8 CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 720.0000, 900.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_5, 5052.5000, FALSE, FALSE, 0) // 9 CMHDZ_ADD_ENEMY_TO_LIST(1634.0000, 950.0000, 1080.0000, ciCMHDZ_LANE_FOREGROUND, FALSE, CMHDZ_FOREGROUND_ENEMY_T5_2, 5292.5000, FALSE, FALSE, 0) // 10 CMHDZ_ADD_ENEMY_TO_LIST(0.0000, 950.0000, 660.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T5_1, 5548.0000, FALSE, FALSE, 0) // 11 CMHDZ_ADD_ENEMY_TO_LIST(1658.0000, 334.0000, 588.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_ENEMY_5, 5980.0000, FALSE, FALSE, 0) // 12 CMHDZ_ADD_ENEMY_TO_LIST(264.0000, 516.0000, 988.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_ENEMY_5, 6076.0000, FALSE, FALSE, 0) // 13 CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 520.0000, 1108.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_THROWING_ENEMY_5, 6244.0000, FALSE, FALSE, 0) // 15 CMHDZ_ADD_ENEMY_TO_LIST(-360.0000, 852.0000, 860.0000, ciCMHDZ_LANE_FOREGROUND, TRUE, CMHDZ_FOREGROUND_ENEMY_T5_2, 6380.0000, FALSE, FALSE, 0) // 14 CMHDZ_ADD_ENEMY_TO_LIST(1656.0000, 612.0000, 1036.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_ENEMY_5, 6700.0000, FALSE, FALSE, 0) // 16 CMHDZ_ADD_ENEMY_TO_LIST(768.0000, 396.0000, 220.0000, ciCMHDZ_LANE_POPUP_RHS, FALSE, CMHDZ_ENEMY_5, 6480.0000, FALSE, TRUE, 0) // Screen 1 - Rats rats we're the rats CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 430.0000, -10.0000, ciCMHDZ_LANE_BACKGROUND, FALSE, CMHDZ_RARE_ENEMY_RAT, 550.0000, FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(100.0000, 744.0000, 1800.0000, ciCMHDZ_LANE_MIDDLE, TRUE, CMHDZ_RARE_ENEMY_RAT, 550.0000, FALSE, FALSE, 0) CMHDZ_ADD_ENEMY_TO_LIST(1850.0000, 690.0000, -10.0000, ciCMHDZ_LANE_MIDDLE, FALSE, CMHDZ_RARE_ENEMY_RAT, 750.0000, FALSE, FALSE, 0) BREAK ENDSWITCH ENDPROC /// PURPOSE: /// This generates the totals for the progression meter - I don't want to hard code this /// PARAMS: /// iLevel - //PROC CMHDZ_CALCULATE_ENEMY_TOTALS_FOR_LEVEL() // INT iScreen, i // INT iOldNumber // // // reset all enemies and counters // FOR i = 0 TO ciCMHDZ_MAX_ENEMIES -1 // CMHDZ_RESET_ENEMY(i) // ENDFOR // // sCMHDZData.iTotalNumberOfEnemies = 0 // // REPEAT CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL() iScreen // iOldNumber = sCMHDZData.iNumberOfEnemies // //CMHDZ_INIT_ENEMIES() // // sCMHDZData.iTotalNumberOfEnemies += (sCMHDZData.iNumberOfEnemies - iOldNumber) // sCMHDZData.iNumberOfEnemies = 0 // // // reset all enemies // FOR i = 0 TO ciCMHDZ_MAX_ENEMIES -1 // CMHDZ_RESET_ENEMY(i) // ENDFOR // ENDREPEAT // // sCMHDZData.iNumberOfEnemies = 0 //ENDPROC FUNC BOOL CMHDZ_SHOULD_MOVING_LEVEL_STOP() IF CMHDZ_IS_LEVEL_SCREEN_STATIONARY(CMHDZ_GET_CURRENT_LEVEL(), sCMHDZData.iCurrentScreen) RETURN TRUE ENDIF RETURN FALSE ENDFUNC //------------------------------------- // MISC FUNCTIONS //------------------------------------- /// PURPOSE: /// If we want a prop or a pickup to loop round as the level scrolls, so it appears agan, need to work out how far /// to warp it so that it re-appears at a sensible location (i.e. not on top of another prop). /// Generally some multiple of the screen width + an offset. The offset is the difference between the x pos /// of the right-most element on the 'final' screen and the right hand screen limit /// RETURNS: /// FUNC FLOAT CMHDZ_GET_OFFSET_FOR_ELEMENT_WARP_FOR_CURRENT_LEVEL() RETURN (cfBASE_SCREEN_WIDTH * 3.0) // SWITCH CMHDZ_GET_CURRENT_LEVEL() // CASE CMHDZ_LEVEL_SCRAPYARD // RETURN (cfBASE_SCREEN_WIDTH * 2.0) + (cfRIGHT_SCREEN_LIMIT - cfCMHDZ_TOWN_LEVEL_RIGHTMOST_ENTITY_X) // BREAK // // CASE CMHDZ_LEVEL_ASYLUM // RETURN (cfBASE_SCREEN_WIDTH * 2.0) + (cfRIGHT_SCREEN_LIMIT - cfCMHDZ_FOREST_LEVEL_RIGHTMOST_ENTITY_X) // BREAK // // CASE CMHDZ_LEVEL_PARK // RETURN (cfBASE_SCREEN_WIDTH * 2.0) + (cfRIGHT_SCREEN_LIMIT - cfCMHDZ_MINE_LEVEL_RIGHTMOST_ENTITY_X) // BREAK // // CASE CMHDZ_LEVEL_SLAUGHTERHOUSE // RETURN (cfBASE_SCREEN_WIDTH * 2.0) + (cfRIGHT_SCREEN_LIMIT - cfCMHDZ_GRAVEYARD_LEVEL_RIGHTMOST_ENTITY_X) // BREAK // ENDSWITCH // RETURN (cfBASE_SCREEN_WIDTH * 2.0) + (cfRIGHT_SCREEN_LIMIT - cfCMHDZ_TOWN_LEVEL_RIGHTMOST_ENTITY_X) ENDFUNC FUNC STRING CMHDZ_GET_TEXTURE_DICTIONARY_FOR_LEVEL(CMHDZ_LEVELS eLevel) STRING sLevel SWITCH eLevel CASE CMHDZ_LEVEL_CITY sLevel = CMHDZ_GET_TEXTURE_DICT_NAME(CMHDZ_TEXDICT_LVL1) BREAK CASE CMHDZ_LEVEL_SCRAPYARD sLevel = CMHDZ_GET_TEXTURE_DICT_NAME(CMHDZ_TEXDICT_LVL2) BREAK CASE CMHDZ_LEVEL_ASYLUM sLevel = CMHDZ_GET_TEXTURE_DICT_NAME(CMHDZ_TEXDICT_LVL3) BREAK CASE CMHDZ_LEVEL_PARK sLevel = CMHDZ_GET_TEXTURE_DICT_NAME(CMHDZ_TEXDICT_LVL4) BREAK CASE CMHDZ_LEVEL_SLAUGHTERHOUSE sLevel = CMHDZ_GET_TEXTURE_DICT_NAME(CMHDZ_TEXDICT_LVL5) BREAK ENDSWITCH RETURN sLevel ENDFUNC FUNC INT CMHDZ_GET_COVER_OVER_RETICULE(INT iLaneFilter = -1) VECTOR_2D vCoord = CMHDZ_GET_PLAYER_RETICULE_POSITON() FLOAT fDistance, fScale FLOAT fClosest = MAX_FLOAT INT iClosest = -1 VECTOR_2D vSize, vPos INT i REPEAT ciCMHDZ_MAX_COVER i IF (sCMHDZData.sCoverData[i].eType = CMHDZ_ASSET_INVALID) RELOOP ENDIF IF (iLaneFilter != -1) AND (sCMHDZData.sCoverData[i].iCoverLane != iLaneFilter) RELOOP ENDIF fScale = CMHDZ_COVER_UTIL_GET_TYPE_SCALE_FOR_LANE(sCMHDZData.sCoverData[i].eType, sCMHDZData.sCoverData[i].iCoverLane) vSize = MULTIPLY_VECTOR_2D(CMHDZ_COVER_UTIL_GET_TYPE_SIZE(sCMHDZData.sCoverData[i].eType), fScale) vPos = sCMHDZData.sCoverData[i].vSpritePos IF CMHDZ_IS_POSITION_IN_BOX(vCoord, vPos, vSize) fDistance = VECTOR_2D_DIST2(vCoord, vPos) IF fDistance <= fClosest fClosest = fDistance iClosest = i ENDIF ENDIF ENDREPEAT RETURN iClosest ENDFUNC FUNC INT CMHDZ_GET_ENEMY_OVER_RETICULE(INT iLaneFilter = -1) VECTOR_2D vCoord = CMHDZ_GET_PLAYER_RETICULE_POSITON() FLOAT fDistance, fScale FLOAT fClosest = MAX_FLOAT INT iClosest = -1 VECTOR_2D vSize VECTOR_2D vPos INT i REPEAT ciCMHDZ_MAX_ENEMIES i IF (sCMHDZData.sEnemyData[i].iEnemyType = CMHDZ_ENEMY_INVALID) RELOOP ENDIF IF (iLaneFilter != -1) AND (sCMHDZData.sEnemyData[i].iEnemyLane != iLaneFilter) RELOOP ENDIF fScale = CMHDZ_GET_ENEMY_TYPE_SCALE_FOR_LANE(sCMHDZData.sEnemyData[i].iEnemyLane) vSize = MULTIPLY_VECTOR_2D(CMHDZ_GET_ENEMY_SIZE_FOR_TYPE(sCMHDZData.sEnemyData[i].iEnemyType, sCMHDZData.sEnemyData[i].iEnemyLane != ciCMHDZ_LANE_FOREGROUND), fScale) vPos = sCMHDZData.sEnemyData[i].vSpritePos IF CMHDZ_IS_POSITION_IN_BOX(vCoord, vPos, vSize) fDistance = VECTOR_2D_DIST2(vCoord, vPos) IF fDistance <= fClosest fClosest = fDistance iClosest = i ENDIF ENDIF ENDREPEAT RETURN iClosest ENDFUNC FUNC INT CMHDZ_GET_ITEM_OVER_RETICULE(INT iLaneFilter = -1) VECTOR_2D vCoord = CMHDZ_GET_PLAYER_RETICULE_POSITON() FLOAT fDistance FLOAT fClosest = MAX_FLOAT INT iClosest = -1 VECTOR_2D vSize, vPos INT i REPEAT ciCMHDZ_MAX_ITEMS i IF (sCMHDZData.sItemData[i].eItemType = CMHDZ_ITEM_NONE) RELOOP ENDIF IF (iLaneFilter != -1) AND (sCMHDZData.sItemData[i].iLane != iLaneFilter) RELOOP ENDIF vSize = CMHDZ_GET_ITEM_SIZE_FOR_TYPE(sCMHDZData.sItemData[i].eItemType) vPos = sCMHDZData.sItemData[i].vSpritePos IF CMHDZ_IS_POSITION_IN_BOX(vCoord, vPos, vSize) fDistance = VECTOR_2D_DIST2(vCoord, vPos) IF fDistance <= fClosest fClosest = fDistance iClosest = i ENDIF ENDIF ENDREPEAT RETURN iClosest ENDFUNC