Files
gtav-src/script/dev_ng/shared/include/public/camhedz_arcade_using.sch
T
2025-09-29 00:52:08 +02:00

9208 lines
369 KiB
XML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
USING "arcade_cabinet_minigame_common.sch"
USING "arcade_games_help_text.sch"
USING "arcade_games_help_text_flow.sch"
USING "degenatron_games_movie.sch"
USING "net_arcade_cabinet.sch"
//-----------------------
// CONSTANTS
//-----------------------
// Overscan Constants
CONST_FLOAT cfGAME_OVERSCAN_MIN_X 300.0
CONST_FLOAT cfGAME_OVERSCAN_MAX_X 1620.0
CONST_FLOAT cfGAME_OVERSCAN_MIN_Y 50.0
CONST_FLOAT cfGAME_OVERSCAN_MAX_Y 1030.0
CONST_FLOAT cfGAME_OVERSCAN_WIDTH 1320.0
CONST_FLOAT cfGAME_OVERSCAN_HEIGHT 980.0
CONST_FLOAT cfGAME_HUD_MINIMAP_X 600.0
CONST_FLOAT cfGAME_HUD_MINIMAP_Y 780.0
CONST_FLOAT cfGAME_HUD_MINIMAP_WIDTH 320.0
CONST_FLOAT cfGAME_HUD_MINIMAP_HEIGHT 240.0
CONST_FLOAT cfGAME_SCREEN_WIDTH 1264.0
CONST_FLOAT cfGAME_SCREEN_HEIGHT 930.0
CONST_FLOAT cfLEFT_SCREEN_LIMIT 250.0
CONST_FLOAT cfRIGHT_SCREEN_LIMIT 1605.0
CONST_FLOAT cfCMHDZ_DEFAULT_ANIM_FRAME_TIME 33.0 //30 FPS
CONST_FLOAT cfCMHDZ_SLOW_ANIM_FRAME_TIME 165.0 //15 FPS
CONST_FLOAT cfCMHDZ_PSA_SCREEN_WIDTH 1260.0
CONST_FLOAT cfCMHDZ_PSA_SCREEN_HEIGHT 920.0
CONST_FLOAT cfCMHDZ_MIN_EDITOR_X_COORD -800.0
CONST_FLOAT cfCMHDZ_MAX_EDITOR_X_COORD 25000.0
CONST_FLOAT cfCMHDZ_MIN_EDITOR_Y_COORD -600.0
CONST_FLOAT cfCMHDZ_MAX_EDITOR_Y_COORD 2500.0
// Sprite Size Constants
CONST_FLOAT cfCMHDZ_ENEMY_SPRITE_WIDTH 164.0
CONST_FLOAT cfCMHDZ_ENEMY_SPRITE_HEIGHT 236.0
CONST_FLOAT cfCMHDZ_ENEMY_THROWING_SPRITE_WIDTH 164.0
CONST_FLOAT cfCMHDZ_ENEMY_THROWING_SPRITE_HEIGHT 236.0
CONST_FLOAT cfCMHDZ_ENEMY_DEAD_SPRITE_WIDTH 164.0
CONST_FLOAT cfCMHDZ_ENEMY_DEAD_SPRITE_HEIGHT 236.0
CONST_FLOAT cfCMHDZ_ENEMY_FOREGROUND_SPRITE_WIDTH 376.0
CONST_FLOAT cfCMHDZ_ENEMY_FOREGROUND_SPRITE_HEIGHT 536.0
CONST_FLOAT cfCMHDZ_ENEMY_FOREGROUND_DEAD_SPRITE_WIDTH 452.0
CONST_FLOAT cfCMHDZ_ENEMY_FOREGROUND_DEAD_SPRITE_HEIGHT 540.0
CONST_FLOAT cfCMHDZ_ENEMY_FOREGROUND_HERD_SPRITE_WIDTH 960.0
CONST_FLOAT cfCMHDZ_ENEMY_FOREGROUND_HERD_SPRITE_HEIGHT 720.0
CONST_FLOAT cfCMHDZ_ENEMY_CART_SPRITE_WIDTH 536.0
CONST_FLOAT cfCMHDZ_ENEMY_CART_SPRITE_HEIGHT 404.0
// BG Constants
CONST_FLOAT cfCMHDZ_BG_HORIZON_Y_COORD 370.0
CONST_FLOAT cfCMHDZ_BG_CITY_SKYLINE_SPRITE_WIDTH 276.0
CONST_FLOAT cfCMHDZ_BG_CITY_SKYLINE_SPRITE_HEIGHT 180.0
CONST_FLOAT cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_WIDTH 196.0
CONST_FLOAT cfCMHDZ_BG_CITY_TALL_BUILDING_SPRITE_HEIGHT 280.0
CONST_FLOAT cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_WIDTH 328.0
CONST_FLOAT cfCMHDZ_BG_CITY_SMALL_BUILDING_SPRITE_HEIGHT 280.0
CONST_FLOAT cfCMHDZ_BG_CITY_FENCE_SPRITE_WIDTH 276.0
CONST_FLOAT cfCMHDZ_BG_CITY_FENCE_SPRITE_HEIGHT 92.0
CONST_FLOAT cfCMHDZ_BG_CITY_BUILDING_SPACING 340.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD_X 723.750
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD_Y 193.750
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD_GAP 100.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD1_WIDTH 188.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD1_HEIGHT 56.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD2_WIDTH 96.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD2_HEIGHT 32.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD3_WIDTH 112.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD3_HEIGHT 60.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD4_WIDTH 304.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD4_HEIGHT 60.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD5_WIDTH 252.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD5_HEIGHT 20.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD6_WIDTH 140.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD6_HEIGHT 44.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD7_WIDTH 128.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CLOUD7_HEIGHT 44.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_FENCE_SPRITE_WIDTH 276.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_FENCE_SPRITE_HEIGHT 112.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_WIDTH 40.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_ROCKS_SPRITE_HEIGHT 40.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_TREES_SPRITE_WIDTH 276.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_TREES_SPRITE_HEIGHT 156.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_TREES_Y 290.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_WIDTH 184.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_VAN_SPRITE_HEIGHT 144.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_VAN_SPACING 256.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CARS_SPRITE_WIDTH 424.0
CONST_FLOAT cfCMHDZ_BG_SCRAPYARD_CARS_SPRITE_HEIGHT 128.0
CONST_FLOAT cfCMHDZ_BG_THEMEPARK_SKYLINE_SPRITE_WIDTH 1232.0
CONST_FLOAT cfCMHDZ_BG_THEMEPARK_SKYLINE_SPRITE_HEIGHT 212.0
CONST_FLOAT cfCMHDZ_BG_THEMEPARK_TREES_SPRITE_WIDTH 276.0
CONST_FLOAT cfCMHDZ_BG_THEMEPARK_TREES_SPRITE_HEIGHT 156.0
CONST_FLOAT cfCMHDZ_BG_THEMEPARK_TREE_1_SPRITE_WIDTH 236.0
CONST_FLOAT cfCMHDZ_BG_THEMEPARK_TREE_1_SPRITE_HEIGHT 392.0
CONST_FLOAT cfCMHDZ_BG_THEMEPARK_TREE_2_SPRITE_WIDTH 200.0
CONST_FLOAT cfCMHDZ_BG_THEMEPARK_TREE_2_SPRITE_HEIGHT 238.0
CONST_FLOAT cfCMHDZ_MOUNTAIN_1_SPRITE_WIDTH 1300.0
CONST_FLOAT cfCMHDZ_MOUNTAIN_1_SPRITE_HEIGHT 112.0
CONST_FLOAT cfCMHDZ_MOUNTAIN_1_SPRITE_X 788.125
CONST_FLOAT cfCMHDZ_MOUNTAIN_1_SPRITE_Y 315.0
CONST_FLOAT cfCMHDZ_MOUNTAIN_2_SPRITE_WIDTH 272.0
CONST_FLOAT cfCMHDZ_MOUNTAIN_2_SPRITE_HEIGHT 112.0
// Asset Size
CONST_FLOAT cfCMHDZ_CITY_BUILDING_SPRITE_WIDTH 468.0
CONST_FLOAT cfCMHDZ_CITY_BUILDING_SPRITE_HEIGHT 444.0
CONST_FLOAT cfCMHDZ_SCRAPYARD_MD_VAN_SPRITE_WIDTH 408.0
CONST_FLOAT cfCMHDZ_SCRAPYARD_MD_VAN_SPRITE_HEIGHT 320.0
CONST_FLOAT cfCMHDZ_SCRAPYARD_MD_CAR_SPRITE_WIDTH 500.0
CONST_FLOAT cfCMHDZ_SCRAPYARD_MD_CAR_SPRITE_HEIGHT 212.0
CONST_FLOAT cfCMHDZ_ASYLUM_MD_BED_SPRITE_WIDTH 340.0
CONST_FLOAT cfCMHDZ_ASYLUM_MD_BED_SPRITE_HEIGHT 164.0
CONST_FLOAT cfCMHDZ_ASYLUM_MD_WHEELCHAIR_SPRITE_WIDTH 156.0
CONST_FLOAT cfCMHDZ_ASYLUM_MD_WHEELCHAIR_SPRITE_HEIGHT 148.0
CONST_FLOAT cfCMHDZ_ASYLUM_MD_MATTRESS_SPRITE_WIDTH 452.0
CONST_FLOAT cfCMHDZ_ASYLUM_MD_MATTRESS_SPRITE_HEIGHT 220.0
CONST_FLOAT cfCMHDZ_ASYLUM_LIGHT_SPRITE_WIDTH 236.0
CONST_FLOAT cfCMHDZ_ASYLUM_LIGHT_SPRITE_HEIGHT 68.0
CONST_FLOAT cfCMHDZ_ASYLUM_RADIATOR_SPRITE_WIDTH 160.0
CONST_FLOAT cfCMHDZ_ASYLUM_RADIATOR_SPRITE_HEIGHT 92.0
CONST_FLOAT cfCMHDZ_ASYLUM_DOOR_SPRITE_WIDTH 150.0
CONST_FLOAT cfCMHDZ_ASYLUM_DOOR_SPRITE_HEIGHT 204.0
CONST_FLOAT cfCMHDZ_ASYLUM_GRAF_1_SPRITE_WIDTH 100.0
CONST_FLOAT cfCMHDZ_ASYLUM_GRAF_1_SPRITE_HEIGHT 112.0
CONST_FLOAT cfCMHDZ_ASYLUM_GRAF_2_SPRITE_WIDTH 184.0
CONST_FLOAT cfCMHDZ_ASYLUM_GRAF_2_SPRITE_HEIGHT 92.0
CONST_FLOAT cfCMHDZ_ASYLUM_GRAF_3_SPRITE_WIDTH 148.0
CONST_FLOAT cfCMHDZ_ASYLUM_GRAF_3_SPRITE_HEIGHT 100.0
CONST_FLOAT cfCMHDZ_THEMEPARK_BUILDING_1_SPRITE_WIDTH 408.0
CONST_FLOAT cfCMHDZ_THEMEPARK_BUILDING_1_SPRITE_HEIGHT 400.0
CONST_FLOAT cfCMHDZ_THEMEPARK_BUILDING_3_SPRITE_WIDTH 596.0
CONST_FLOAT cfCMHDZ_THEMEPARK_BUILDING_3_SPRITE_HEIGHT 452.0
CONST_FLOAT cfCMHDZ_THEMEPARK_CLOWNBOARD_1_SPRITE_WIDTH 276.0
CONST_FLOAT cfCMHDZ_THEMEPARK_CLOWNBOARD_1_SPRITE_HEIGHT 344.0
CONST_FLOAT cfCMHDZ_THEMEPARK_CLOWNBOARD_2_SPRITE_WIDTH 436.0
CONST_FLOAT cfCMHDZ_THEMEPARK_CLOWNBOARD_2_SPRITE_HEIGHT 464.0
CONST_FLOAT cfCMHDZ_ROCK_TOP_SPRITE_WIDTH 284.0
CONST_FLOAT cfCMHDZ_ROCK_TOP_SPRITE_HEIGHT 100.0
CONST_FLOAT cfCMHDZ_WOODENSTRUCTURE_SPRITE_WIDTH 312.0
CONST_FLOAT cfCMHDZ_WOODENSTRUCTURE_SPRITE_HEIGHT 304.0
CONST_FLOAT cfCMHDZ_THEMEPARK_MINECART_TRACK_SPRITE_WIDTH 284.0
CONST_FLOAT cfCMHDZ_THEMEPARK_MINECART_TRACK_SPRITE_HEIGHT 36.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_DOOR_01_SPRITE_WIDTH 140.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_DOOR_01_SPRITE_HEIGHT 210.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_DOOR_02_SPRITE_WIDTH 140.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_DOOR_02_SPRITE_HEIGHT 210.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_WINDOW_SPRITE_WIDTH 200.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_WINDOW_SPRITE_HEIGHT 200.0
CONST_FLOAT cfCMHDZ_BACKGROUND_TOMBS_SPRITE_WIDTH 540.0
CONST_FLOAT cfCMHDZ_BACKGROUND_TOMBS_SPRITE_HEIGHT 84.0
CONST_FLOAT cfCMHDZ_CACTUS_1_SPRITE_WIDTH 168.0
CONST_FLOAT cfCMHDZ_CACTUS_1_SPRITE_HEIGHT 288.0
CONST_FLOAT cfCMHDZ_CACTUS_2_SPRITE_WIDTH 168.0
CONST_FLOAT cfCMHDZ_CACTUS_2_SPRITE_HEIGHT 408.0
CONST_FLOAT cfCMHDZ_CACTUS_3_SPRITE_WIDTH 120.0
CONST_FLOAT cfCMHDZ_CACTUS_3_SPRITE_HEIGHT 540.0
CONST_FLOAT cfCMHDZ_CACTUS_9_SPRITE_WIDTH 112.0
CONST_FLOAT cfCMHDZ_CACTUS_9_SPRITE_HEIGHT 236.0
CONST_FLOAT cfCMHDZ_SCRAPYARD_PROP_FENCE_SPRITE_WIDTH 276.0
CONST_FLOAT cfCMHDZ_SCRAPYARD_PROP_FENCE_SPRITE_HEIGHT 112.0
CONST_FLOAT cfCMHDZ_SCRAPYARD_BG_CARS_SPRITE_WIDTH 428.0
CONST_FLOAT cfCMHDZ_SCRAPYARD_BG_CARS_SPRITE_HEIGHT 128.0
CONST_FLOAT cfCMHDZ_BUILDING_1_SPRITE_WIDTH 564.0
CONST_FLOAT cfCMHDZ_BUILDING_1_SPRITE_HEIGHT 452.0
CONST_FLOAT cfCMHDZ_BUILDING_2_SPRITE_WIDTH 412.0
CONST_FLOAT cfCMHDZ_BUILDING_2_SPRITE_HEIGHT 400.0
CONST_FLOAT cfCMHDZ_FENCE_SPRITE_WIDTH 376.0
CONST_FLOAT cfCMHDZ_FENCE_SPRITE_HEIGHT 196.0
//CONST_FLOAT cfCMHDZ_FENCE_SMALL_SPRITE_WIDTH 92.0
//CONST_FLOAT cfCMHDZ_FENCE_SMALL_SPRITE_HEIGHT 24.0
CONST_FLOAT cfCMHDZ_ROCKS_SPRITE_WIDTH 36.0
CONST_FLOAT cfCMHDZ_ROCKS_SPRITE_HEIGHT 36.0
CONST_FLOAT cfCMHDZ_FOREST_ROCKS_SPRITE_WIDTH 40.0
CONST_FLOAT cfCMHDZ_FOREST_ROCKS_SPRITE_HEIGHT 40.0
CONST_FLOAT cfCMHDZ_FOREST_TREE_1_SPRITE_WIDTH 472.0
CONST_FLOAT cfCMHDZ_FOREST_TREE_1_SPRITE_HEIGHT 784.0
CONST_FLOAT cfCMHDZ_FOREST_TREE_2_SPRITE_WIDTH 400.0
CONST_FLOAT cfCMHDZ_FOREST_TREE_2_SPRITE_HEIGHT 656.0
CONST_FLOAT cfCMHDZ_FOREST_TREE_3_SPRITE_WIDTH 236.0
CONST_FLOAT cfCMHDZ_FOREST_TREE_3_SPRITE_HEIGHT 392.0
CONST_FLOAT cfCMHDZ_FOREST_TREE_4_SPRITE_WIDTH 200.0
CONST_FLOAT cfCMHDZ_FOREST_TREE_4_SPRITE_HEIGHT 238.0
CONST_FLOAT cfCMHDZ_FOREST_GRASS_SPRITE_WIDTH 288.0
CONST_FLOAT cfCMHDZ_FOREST_GRASS_SPRITE_HEIGHT 204.0
CONST_FLOAT cfCMHDZ_FOREST_BUSH_SM_SPRITE_WIDTH 120.0
CONST_FLOAT cfCMHDZ_FOREST_BUSH_SM_SPRITE_HEIGHT 80.0
CONST_FLOAT cfCMHDZ_FOREST_BUSH_LG_SPRITE_WIDTH 212.0
CONST_FLOAT cfCMHDZ_FOREST_BUSH_LG_SPRITE_HEIGHT 140.0
CONST_FLOAT cfCMHDZ_ROCK_SMALL_SPRITE_WIDTH 164.0
CONST_FLOAT cfCMHDZ_ROCK_SMALL_SPRITE_HEIGHT 92.0
CONST_FLOAT cfCMHDZ_ROCK_LARGE_SPRITE_WIDTH 288.0
CONST_FLOAT cfCMHDZ_ROCK_LARGE_SPRITE_HEIGHT 160.0
CONST_FLOAT cfCMHDZ_FOREGROUND_TRASH_SPRITE_WIDTH 680.0
CONST_FLOAT cfCMHDZ_FOREGROUND_TRASH_SPRITE_HEIGHT 240.0
CONST_FLOAT cfCMHDZ_BARRIER_SPRITE_WIDTH 336.0
CONST_FLOAT cfCMHDZ_BARRIER_SPRITE_HEIGHT 208.0
CONST_FLOAT cfCMHDZ_BARRELS_SPRITE_WIDTH 236.0
CONST_FLOAT cfCMHDZ_BARRELS_SPRITE_HEIGHT 184.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_1_SPRITE_WIDTH 208.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_1_SPRITE_HEIGHT 440.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_2_SPRITE_WIDTH 104.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_2_SPRITE_HEIGHT 504.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_3_SPRITE_WIDTH 200.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_3_SPRITE_HEIGHT 504.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_1_SPRITE_WIDTH 328.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_1_SPRITE_HEIGHT 144.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_2_SPRITE_WIDTH 328.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_BODYBAG_2_SPRITE_HEIGHT 100.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_6_SPRITE_WIDTH 140.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_HANGING_BODYBAG_6_SPRITE_HEIGHT 140.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_MEATGRINDER_SPRITE_WIDTH 504.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PROP_MEATGRINDER_SPRITE_HEIGHT 476.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PIG_SPRITE_WIDTH 188.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_PIG_SPRITE_HEIGHT 456.0
CONST_FLOAT cfCMHDZ_WATER_TOWER_SPRITE_WIDTH 360.0
CONST_FLOAT cfCMHDZ_WATER_TOWER_SPRITE_HEIGHT 376.0
//CONST_FLOAT cfCMHDZ_TNT_CRATE_SPRITE_WIDTH 192.0
//CONST_FLOAT cfCMHDZ_TNT_CRATE_SPRITE_HEIGHT 124.0
CONST_FLOAT cfCMHDZ_TNT_BARREL_1_SPRITE_WIDTH 140.0
CONST_FLOAT cfCMHDZ_TNT_BARREL_1_SPRITE_HEIGHT 176.0
CONST_FLOAT cfCMHDZ_TNT_BARREL_2_SPRITE_WIDTH 176.0
CONST_FLOAT cfCMHDZ_TNT_BARREL_2_SPRITE_HEIGHT 140.0
CONST_FLOAT cfCMHDZ_COFFIN_ENEMY_SPRITE_WIDTH 200.0
CONST_FLOAT cfCMHDZ_COFFIN_ENEMY_SPRITE_HEIGHT 248.0
CONST_FLOAT cfCMHDZ_TRASHBAG_BIG_SPRITE_WIDTH 132.0
CONST_FLOAT cfCMHDZ_TRASHBAG_BIG_SPRITE_HEIGHT 140.0
CONST_FLOAT cfCMHDZ_TRASHBAG_SMALL_SPRITE_WIDTH 76.0
CONST_FLOAT cfCMHDZ_TRASHBAG_SMALL_SPRITE_HEIGHT 80.0
CONST_FLOAT cfCMHDZ_TRASHCAN_BIG_SPRITE_WIDTH 132.0
CONST_FLOAT cfCMHDZ_TRASHCAN_BIG_SPRITE_HEIGHT 168.0
CONST_FLOAT cfCMHDZ_TRASHCAN_SMALL_SPRITE_WIDTH 76.0
CONST_FLOAT cfCMHDZ_TRASHCAN_SMALL_SPRITE_HEIGHT 96.0
CONST_FLOAT cfCMHDZ_SPRITE_BULLET_1_WIDTH 30.0
CONST_FLOAT cfCMHDZ_SPRITE_BULLET_1_HEIGHT 8.0
CONST_FLOAT cfCMHDZ_SPRITE_IMPACT_WIDTH 96.0
CONST_FLOAT cfCMHDZ_SPRITE_IMPACT_HEIGHT 96.0
CONST_FLOAT cfCMHDZ_SPRITE_EXPLOSION_WIDTH 408.0
CONST_FLOAT cfCMHDZ_SPRITE_EXPLOSION_HEIGHT 268.0
CONST_FLOAT cfCMHDZ_SPRITE_GANG_SHOT_WIDTH 128.0
CONST_FLOAT cfCMHDZ_SPRITE_GANG_SHOT_HEIGHT 128.0
CONST_FLOAT cfCMHDZ_SPRITE_DAMAGE_WIDTH 504.0
CONST_FLOAT cfCMHDZ_SPRITE_DAMAGE_HEIGHT 460.0
CONST_FLOAT cfCMHDZ_SPRITE_BEAR_DAMAGE_WIDTH 392.0
CONST_FLOAT cfCMHDZ_SPRITE_BEAR_DAMAGE_HEIGHT 612.0
CONST_FLOAT cfCMHDZ_SPRITE_GANG_THROWN_EXPLOSION_SMALL_WIDTH 412.0
CONST_FLOAT cfCMHDZ_SPRITE_GANG_THROWN_EXPLOSION_SMALL_HEIGHT 344.0
CONST_FLOAT cfCMHDZ_SPRITE_GANG_THROWN_EXPLOSION_LARGE_WIDTH 572.0
CONST_FLOAT cfCMHDZ_SPRITE_GANG_THROWN_EXPLOSION_LARGE_HEIGHT 504.0
CONST_FLOAT cfCMHDZ_SPRITE_LOOT_CRATE_EXPLOSION_WIDTH 356.0
CONST_FLOAT cfCMHDZ_SPRITE_LOOT_CRATE_EXPLOSION_HEIGHT 228.0
CONST_FLOAT cfCMHDZ_SPRITE_FEATHERS_WIDTH 204.0
CONST_FLOAT cfCMHDZ_SPRITE_FEATHERS_HEIGHT 116.0
CONST_INT ciCMHDZ_DYNAMITE_SMALL_WIDTH 76
CONST_INT ciCMHDZ_DYNAMITE_SMALL_HEIGHT 76
CONST_INT ciCMHDZ_DYNAMITE_MEDIUM_WIDTH 128
CONST_INT ciCMHDZ_DYNAMITE_MEDIUM_HEIGHT 128
CONST_INT ciCMHDZ_DYNAMITE_LARGE_WIDTH 284
CONST_INT ciCMHDZ_DYNAMITE_LARGE_HEIGHT 276
CONST_INT ciCMHDZ_MOLOTOV_SMALL_WIDTH 100
CONST_INT ciCMHDZ_MOLOTOV_SMALL_HEIGHT 60
CONST_INT ciCMHDZ_MOLOTOV_MEDIUM_WIDTH 164
CONST_INT ciCMHDZ_MOLOTOV_MEDIUM_HEIGHT 96
CONST_INT ciCMHDZ_MOLOTOV_LARGE_WIDTH 364
CONST_INT ciCMHDZ_MOLOTOV_LARGE_HEIGHT 208
CONST_INT ciCMHDZ_BRICK_SMALL_WIDTH 88
CONST_INT ciCMHDZ_BRICK_SMALL_HEIGHT 92
CONST_INT ciCMHDZ_BRICK_MEDIUM_WIDTH 128
CONST_INT ciCMHDZ_BRICK_MEDIUM_HEIGHT 116
CONST_INT ciCMHDZ_BRICK_LARGE_WIDTH 280
CONST_INT ciCMHDZ_BRICK_LARGE_HEIGHT 296
CONST_INT ciCMHDZ_NAILBOMB_SMALL_WIDTH 84
CONST_INT ciCMHDZ_NAILBOMB_SMALL_HEIGHT 76
CONST_INT ciCMHDZ_NAILBOMB_MEDIUM_WIDTH 148
CONST_INT ciCMHDZ_NAILBOMB_MEDIUM_HEIGHT 156
CONST_INT ciCMHDZ_NAILBOMB_LARGE_WIDTH 272
CONST_INT ciCMHDZ_NAILBOMB_LARGE_HEIGHT 244
CONST_FLOAT cfCMHDZ_SPRITE_MARKER_WIDTH 104.0
CONST_FLOAT cfCMHDZ_SPRITE_MARKER_HEIGHT 104.0
//CONST_FLOAT cfCMHDZ_SPEECH_SPRITE_WIDTH 116.0
//CONST_FLOAT cfCMHDZ_SPEECH_SPRITE_HEIGHT 96.0
CONST_FLOAT cfCMHDZ_ITEM_HEALTH_WIDTH 56.0
CONST_FLOAT cfCMHDZ_ITEM_HEALTH_HEIGHT 80.0
CONST_FLOAT cfCMHDZ_ITEM_SHIELD_WIDTH 56.0
CONST_FLOAT cfCMHDZ_ITEM_SHIELD_HEIGHT 80.0
CONST_FLOAT cfCMHDZ_ITEM_BUFF_WIDTH 56.0
CONST_FLOAT cfCMHDZ_ITEM_BUFF_HEIGHT 80.0
CONST_FLOAT cfCMHDZ_PICKUP_THROWABLE_WIDTH 100.0
CONST_FLOAT cfCMHDZ_PICKUP_THROWABLE_HEIGHT 64.0
CONST_FLOAT cfCMHDZ_PICKUP_COFFIN_OFFSET_X 21.375
CONST_FLOAT cfCMHDZ_PICKUP_COFFIN_OFFSET_Y 104.0
CONST_FLOAT cfCMHDZ_BCAKGROUND_TILE_WIDTH 276.0
CONST_FLOAT cfCMHDZ_LEVEL1_CLOUD_X 754.000
CONST_FLOAT cfCMHDZ_LEVEL1_CLOUD_Y 152.500
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD_X 723.750
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD_Y 193.750
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD_GAP 100.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD_X 723.750
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD_Y 193.750
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD_GAP 100.0
CONST_FLOAT cfCMHDZ_LEVEL1_CLOUD_WIDTH 1232.0
CONST_FLOAT cfCMHDZ_LEVEL1_CLOUD_HEIGHT 136.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD1_WIDTH 188.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD1_HEIGHT 56.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD2_WIDTH 96.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD2_HEIGHT 32.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD3_WIDTH 112.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD3_HEIGHT 60.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD4_WIDTH 304.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD4_HEIGHT 60.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD5_WIDTH 252.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD5_HEIGHT 20.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD6_WIDTH 140.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD6_HEIGHT 44.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD7_WIDTH 128.0
CONST_FLOAT cfCMHDZ_LEVEL2_CLOUD7_HEIGHT 44.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD1_WIDTH 188.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD1_HEIGHT 56.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD2_WIDTH 96.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD2_HEIGHT 32.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD3_WIDTH 112.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD3_HEIGHT 60.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD4_WIDTH 304.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD4_HEIGHT 60.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD5_WIDTH 252.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD5_HEIGHT 20.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD6_WIDTH 140.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD6_HEIGHT 44.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD7_WIDTH 128.0
CONST_FLOAT cfCMHDZ_LEVEL3_CLOUD7_HEIGHT 44.0
CONST_FLOAT cfCMHDZ_LEVEL3_BACKGROUND_TREES_WIDTH 276.0
CONST_FLOAT cfCMHDZ_LEVEL3_BACKGROUND_TREES_HEIGHT 156.0
CONST_FLOAT cfCMHDZ_LEVEL3_BACKGROUND_TREES_X 276.0
CONST_FLOAT cfCMHDZ_LEVEL3_BACKGROUND_TREES_Y 290.0
CONST_FLOAT cfCMHDZ_LEVEL4_BACKGROUND_SURFACE_WIDTH 276.0
CONST_FLOAT cfCMHDZ_LEVEL4_BACKGROUND_SURFACE_HEIGHT 100.0
CONST_FLOAT cfCMHDZ_LEVEL4_BACKGROUND_SURFACE_X 276.0
CONST_FLOAT cfCMHDZ_LEVEL4_BACKGROUND_SURFACE_Y 263.125
CONST_FLOAT cfCMHDZ_LEVEL4_BACKGROUND_ROCKS_WIDTH 276.0
CONST_FLOAT cfCMHDZ_LEVEL4_BACKGROUND_ROCKS_HEIGHT 120.0
CONST_FLOAT cfCMHDZ_LEVEL4_BACKGROUND_ROCKS_X 276.000
CONST_FLOAT cfCMHDZ_LEVEL4_BACKGROUND_ROCKS_Y 306.375
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_LIGHTS_WIDTH 636.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_LIGHTS_HEIGHT 68.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_LIGHT_X 1604.0
CONST_FLOAT cfCMHDZ_SLAUGHTERHOUSE_LIGHT_Y 100.0
CONST_FLOAT cfCMHDZ_BG_ENEMY_1_X_OFFSET -20.0
CONST_FLOAT cfCMHDZ_BG_ENEMY_1_Y_OFFSET -30.0
CONST_FLOAT cfCMHDZ_FG_ENEMY_1_X_OFFSET 18.0
CONST_FLOAT cfCMHDZ_FG_ENEMY_1_Y_OFFSET 58.0
// Frontend Constants
CONST_FLOAT cfCMHDZ_HUD_MIN_X_POS 390.0
CONST_FLOAT cfCMHDZ_SPRITE_POSTER_MENU_WIDTH 276.0
CONST_FLOAT cfCMHDZ_SPRITE_POSTER_MENU_HEIGHT 376.0
//CONST_FLOAT cfCMHDZ_SPRITE_POSTER_SELECTION_WIDTH 500.0
//CONST_FLOAT cfCMHDZ_SPRITE_POSTER_SELECTION_HEIGHT 600.0
CONST_FLOAT cfCMHDZ_SPRITE_STAR_ICON_WIDTH 44.0
CONST_FLOAT cfCMHDZ_SPRITE_STAR_ICON_HEIGHT 48.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_HP_WIDTH 216.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_HP_HEIGHT 40.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_AMMO_WIDTH 64.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_AMMO_HEIGHT 64.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PISTOL_AMMO_SINGLE_WIDTH 24.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PISTOL_AMMO_SINGLE_HEIGHT 86.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RIFLE_AMMO_SINGLE_WIDTH 28.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RIFLE_AMMO_SINGLE_HEIGHT 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_SHOTGUN_AMMO_SINGLE_WIDTH 28.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_SHOTGUN_AMMO_SINGLE_HEIGHT 80.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PISTOL_AMMO_CLIP_WIDTH 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PISTOL_AMMO_CLIP_HEIGHT 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_SHOTGUN_AMMO_CLIP_WIDTH 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_SHOTGUN_AMMO_CLIP_HEIGHT 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RIFLE_AMMO_CLIP_WIDTH 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RIFLE_AMMO_CLIP_HEIGHT 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_NAILBOMB_AMMO_CLIP_WIDTH 52.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_NAILBOMB_AMMO_CLIP_HEIGHT 80.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_BRICK_AMMO_CLIP_WIDTH 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_BRICK_AMMO_CLIP_HEIGHT 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_MOLOTOV_AMMO_CLIP_WIDTH 64.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_MOLOTOV_AMMO_CLIP_HEIGHT 100.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_DYNAMITE_AMMO_CLIP_WIDTH 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_DYNAMITE_AMMO_CLIP_HEIGHT 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_AMMO_QTY_WIDTH 36.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_AMMO_QTY_HEIGHT 60.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_DOLLAR_WIDTH 32.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_DOLLAR_HEIGHT 36.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_MONEY_QTY_WIDTH 32.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_MONEY_QTY_HEIGHT 36.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_COWBOY_TITLE_WIDTH 412.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_COWBOY_TITLE_HEIGHT 640.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_COWBOY_DEAD_WIDTH 516.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_COWBOY_DEAD_HEIGHT 880.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_DEAD_SCREEN_TEXT_WIDTH 280.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_DEAD_SCREEN_TEXT_HEIGHT 228.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RESULT_TEXT_WIDTH 400.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RESULT_TEXT_HEIGHT 104.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_LOGO_WIDTH 536.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_LOGO_HEIGHT 276.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_START_WIDTH 252.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_START_HEIGHT 36.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_LEADERBOARDS_WIDTH 320.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_LEADERBOARDS_HEIGHT 36.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_REWIND_WIDTH 200.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_REWIND_HEIGHT 52.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_EJECT_WIDTH 200.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_EJECT_HEIGHT 52.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PIXTRO_LOGO_WIDTH 196.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PIXTRO_LOGO_HEIGHT 44.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RELOAD_PROMPT_X 948.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RELOAD_PROMPT_Y 540.375
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RELOAD_PROMPT_WIDTH 576.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_RELOAD_PROMPT_HEIGHT 204.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_NO_AMMO_PROMPT_X 960.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_NO_AMMO_PROMPT_Y 540.375
CONST_FLOAT cfCMHDZ_SPRITE_HUD_NO_AMMO_PROMPT_WIDTH 308.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_NO_AMMO_PROMPT_HEIGHT 296.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROGRESS_BAR_X 1538.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROGRESS_BAR_Y 610.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROGRESS_BAR_WIDTH 8.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROGRESS_BAR_HEIGHT 600.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROGRESS_MARKER_X 1538.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROGRESS_MARKER_Y 910.0 // this is the base position
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROGRESS_MARKER_WIDTH 32.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROGRESS_MARKER_HEIGHT 42.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROJECTILE_AMMO_X 424.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROJECTILE_AMMO_Y 300.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROJECTILE_AMMO_WIDTH 60.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_PROJECTILE_AMMO_HEIGHT 60.0
CONST_FLOAT cfCMHDZ_SPRITE_FINAL_SCENE_POSTER_X 1212.000
CONST_FLOAT cfCMHDZ_SPRITE_FINAL_SCENE_POSTER_Y 540.0
CONST_FLOAT cfCMHDZ_SPRITE_FINAL_SCENE_POSTER_WIDTH 687.0
CONST_FLOAT cfCMHDZ_SPRITE_FINAL_SCENE_POSTER_HEIGHT 698.0
CONST_FLOAT cfCMHDZ_SPRITE_FINAL_SCENE_TEXT_X 652.000
CONST_FLOAT cfCMHDZ_SPRITE_FINAL_SCENE_TEXT_Y 200.0
CONST_FLOAT cfCMHDZ_SPRITE_FINAL_SCENE_TEXT_WIDTH 660.0
CONST_FLOAT cfCMHDZ_SPRITE_FINAL_SCENE_TEXT_HEIGHT 360.000
CONST_FLOAT cfCMHDZ_SPRITE_HUD_HP_INDICATOR_X 400.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_HP_INDICATOR_Y 100.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_HP_INDICATOR_W 96.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_HP_INDICATOR_H 96.0
CONST_FLOAT cfCMHDZ_HP_X_POS 500.0
CONST_FLOAT cfCMHDZ_HP_Y_POS 130.0
CONST_FLOAT cfCMHDZ_NAILGUN_TEMP_BORDER_X_POS 447.375
CONST_FLOAT cfCMHDZ_NAILGUN_TEMP_BORDER_Y_POS 174.750
CONST_FLOAT cfCMHDZ_NAILGUN_TEMP_BORDER_WIDTH 108.0
CONST_FLOAT cfCMHDZ_NAILGUN_TEMP_BORDER_HEIGHT 40.0
CONST_FLOAT cfCMHDZ_AMMO_X_POS 420.0
CONST_FLOAT cfCMHDZ_AMMO_Y_POS 180.0
CONST_FLOAT cfCMHDZ_AMMO_QTY_1_X_POS 560.0// 475.0
CONST_FLOAT cfCMHDZ_AMMO_QTY_1_Y_POS 218.0//180.0
CONST_FLOAT cfCMHDZ_AMMO_QTY_2_X_POS 584.625 //515.0
CONST_FLOAT cfCMHDZ_AMMO_QTY_2_Y_POS 174.875 // 180.0
CONST_FLOAT cfCMHDZ_PROJECTILE_AMMO_QTY_1_X_POS 484.0// 475.0
CONST_FLOAT cfCMHDZ_PROJECTILE_AMMO_QTY_1_Y_POS 302.875//180.0
CONST_FLOAT cfCMHDZ_PROJECTILE_AMMO_QTY_2_X_POS 508.625 //515.0
CONST_FLOAT cfCMHDZ_PROJECTILE_AMMO_QTY_2_Y_POS 302.875 // 180.0
CONST_FLOAT cfCMHDZ_SINGLE_PISTOL_AMMO_0_X 535.0
CONST_FLOAT cfCMHDZ_SINGLE_PISTOL_AMMO_0_Y 216.0
CONST_FLOAT cfCMHDZ_SINGLE_PISTOL_AMMO_1_X 511.0
CONST_FLOAT cfCMHDZ_SINGLE_PISTOL_AMMO_2_X 487.0
CONST_FLOAT cfCMHDZ_SINGLE_PISTOL_AMMO_3_X 463.0
CONST_FLOAT cfCMHDZ_SINGLE_PISTOL_AMMO_4_X 439.0
CONST_FLOAT cfCMHDZ_SINGLE_PISTOL_AMMO_5_X 415.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_TIME_X 1550.0
CONST_FLOAT cfCMHDZ_SPRITE_HUD_TIME_Y 100.0
TWEAK_FLOAT cfCMHDZ_SPRITE_HUD_TIME_TEXT_X 420.0
TWEAK_FLOAT cfCMHDZ_SPRITE_HUD_TIME_TEXT_Y 30.0
CONST_INT ciCMHDZ_WAIT_FOR_DEAD_TIME 1500
//-- In-Game scores
CONST_FLOAT cfCMHDZ_SCORE_GAP_DOLLAR_FIRST_DIGIT_X 105.5
CONST_FLOAT cfCMHDZ_SCORE_GAP_DOLLAR_TO_DOLLAR_X 282.5
CONST_FLOAT cfCMHDZ_MY_HISCORE_DOLLAR_X_SIZE 24.0
CONST_FLOAT cfCMHDZ_MY_HISCORE_DOLLAR_Y_SIZE 40.0
CONST_FLOAT cfCMHDZ_MY_HISCORE_X_DIGIT_SIZE 24.0
CONST_FLOAT cfCMHDZ_MY_HISCORE_Y_DIGIT_SIZE 40.0
CONST_FLOAT cfCMHDZ_SCORE_WIN_X_SIZE 52.0
CONST_FLOAT cfCMHDZ_SCORE_WIN_Y_SIZE 32.0
CONST_FLOAT cfCMHDZ_SCORE_WIN_RED_X_POS 864.0
CONST_FLOAT cfCMHDZ_SCORE_WIN_RED_Y_POS 130.0
CONST_FLOAT cfCMHDZ_SCORE_WIN_BLUE_X_POS 1430.0
CONST_FLOAT cfCMHDZ_SCORE_WIN_BLUE_Y_POS 130.0
CONST_FLOAT cfCMHDZ_MY_SCORE_DOLLAR_X_POS 634.5
CONST_FLOAT cfCMHDZ_MY_SCORE_DOLLAR_Y_POS 130.0
CONST_FLOAT cfCMHDZ_MY_SCORE_X_POS 740.0
CONST_FLOAT cfCMHDZ_MY_SCORE_Y_POS 130.0
CONST_FLOAT cfCMHDZ_RED_SCORE_DOLLAR_X_POS 634.5
CONST_FLOAT cfCMHDZ_RED_SCORE_DOLLAR_Y_POS 130.0
CONST_FLOAT cfCMHDZ_RED_SCORE_X_POS 740.0
CONST_FLOAT cfCMHDZ_RED_SCORE_Y_POS 130.0
CONST_FLOAT cfCMHDZ_MY_HISCORE_DOLLAR_X_POS 917.0
CONST_FLOAT cfCMHDZ_MY_HISCORE_DOLLAR_Y_POS 130.0
CONST_FLOAT cfCMHDZ_MY_HISCORE_X_POS 1022.5
CONST_FLOAT cfCMHDZ_MY_HISCORE_Y_POS 130.0
CONST_FLOAT cfCMHDZ_BLUE_SCORE_DOLLAR_X_POS 1199.5
CONST_FLOAT cfCMHDZ_BLUE_SCORE_DOLLAR_Y_POS 130.0
CONST_FLOAT cfCMHDZ_BLUE_SCORE_X_POS 1305.0
CONST_FLOAT cfCMHDZ_BLUE_SCORE_Y_POS 130.0
//-- Level select scores
CONST_FLOAT cfCMHDZ_LEVEL_SCORE_SCALE 0.75
//-- Solo play hi-scores on wanted poster positions
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_X_POS 562.0
CONST_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_Y_POS 560.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL2_SCORE_X_POS 946.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL3_SCORE_X_POS 1329.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL4_SCORE_X_POS 754.0
CONST_FLOAT cfCMHDZ_SOLO_LEVEL4_SCORE_Y_POS 964.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL5_SCORE_X_POS 1140.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL1_STAR_X_POS 486.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL1_STAR_Y_POS 552.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL2_STAR_X_POS 870.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL3_STAR_X_POS 1255.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL4_STAR_X_POS 679.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL4_STAR_Y_POS 962.0
TWEAK_FLOAT cfCMHDZ_SOLO_LEVEL5_STAR_X_POS 1063.0
TWEAK_FLOAT cfCMHDZ_SOLO_RESULTS_STAR_X_POS 890.0
TWEAK_FLOAT cfCMHDZ_SOLO_RESULTS_STAR_Y_POS 700.0
TWEAK_FLOAT cfCMHDZ_SOLO_GAME_RESULTS_STAR_X_POS 472.0
TWEAK_FLOAT cfCMHDZ_SOLO_GAME_RESULTS_STAR_Y_POS 956.0
///////////////////////////////////
/// Multiplayer constants ///
///////////////////////////////////
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_X_POS 462.875
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_Y_POS 551.250
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_X_POS 475.875
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_Y_POS 551.25
////CONST_FLOAT cfCMHDZ_RED_LEVEL1_WIN_X_POS 469.750
////CONST_FLOAT cfCMHDZ_RED_LEVEL1_WIN_Y_POS 533.250
//
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_X_POS 462.875
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_Y_POS 551.250
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_X_POS 675.75
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL1_SCORE_Y_POS 551.25
////CONST_FLOAT cfCMHDZ_BLUE_LEVEL1_WIN_X_POS 671.0
////CONST_FLOAT cfCMHDZ_BLUE_LEVEL1_WIN_Y_POS 533.250
//
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL2_SCORE_X_POS 846.625
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL2_SCORE_Y_POS 551.250
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL2_SCORE_X_POS 860.375
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL2_SCORE_Y_POS 551.25
////CONST_FLOAT cfCMHDZ_RED_LEVEL2_WIN_X_POS 854.125
//
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL2_SCORE_X_POS 1062.375
////CONST_FLOAT cfCMHDZ_BLUE_LEVEL2_WIN_X_POS 1057.75
//
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL3_SCORE_X_POS 1231.87
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL3_SCORE_Y_POS 551.250
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL3_SCORE_X_POS 1245.62
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL3_SCORE_Y_POS 551.25
////CONST_FLOAT cfCMHDZ_RED_LEVEL3_WIN_X_POS 1238.625
//
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL3_SCORE_X_POS 1446.875
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL3_SCORE_Y_POS 551.25
////CONST_FLOAT cfCMHDZ_BLUE_LEVEL3_WIN_X_POS 1442.0
//
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL4_SCORE_X_POS 655.25
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL4_SCORE_Y_POS 957.0
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL4_SCORE_X_POS 669.0
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL4_SCORE_Y_POS 957.0
////CONST_FLOAT cfCMHDZ_RED_LEVEL4_WIN_X_POS 663.625
////CONST_FLOAT cfCMHDZ_RED_LEVEL4_WIN_Y_POS 938.625
//
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL4_SCORE_X_POS 868.5
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL4_SCORE_Y_POS 957.0
////CONST_FLOAT cfCMHDZ_BLUE_LEVEL4_WIN_X_POS 863.625
//
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL5_SCORE_X_POS 1039.625
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL5_SCORE_Y_POS 957.0
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL5_SCORE_X_POS 1053.375
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL5_SCORE_Y_POS 957.0
////CONST_FLOAT cfCMHDZ_RED_LEVEL5_WIN_X_POS 1046.5
//
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL5_SCORE_X_POS 1252.625
//CONST_FLOAT cfCMHDZ_SOLO_LEVEL5_SCORE_Y_POS 957.0
//CONST_FLOAT cfCMHDZ_BLUE_LEVEL5_WIN_X_POS 1248.0
CONST_FLOAT cfCMHDZ_LEVEL_RED_SCORE_DOLLAR_X_POS 486.375
CONST_FLOAT cfCMHDZ_LEVEL_RED_SCORE_DOLLAR_Y_POS 130.0
CONST_FLOAT cfCMHDZ_LEVEL_RED_HI_SCORE_X_POS 592.125
CONST_FLOAT cfCMHDZ_LEVEL_RED_HI_SCORE_Y_POS 130.0
CONST_FLOAT cfCMHDZ_LEVEL_BLUE_SCORE_DOLLAR_X_POS 1247.625
CONST_FLOAT cfCMHDZ_LEVEL_BLUE_SCORE_DOLLAR_Y_POS 130.0
CONST_FLOAT cfCMHDZ_LEVEL_BLUE_HI_SCORE_X_POS 1353.625
CONST_FLOAT cfCMHDZ_LEVEL_BLUE_HI_SCORE_Y_POS 130.0
//CONST_FLOAT cfCMHDZ_LEVEL_SCORE_WIN_RED_X_POS 717.375
//CONST_FLOAT cfCMHDZ_LEVEL_SCORE_WIN_RED_Y_POS 130.0
//CONST_FLOAT cfCMHDZ_LEVEL_SCORE_WIN_BLUE_X_POS 1481.375
//CONST_FLOAT cfCMHDZ_LEVEL_SCORE_WIN_BLUE_Y_POS 130.0
//-- Results Screen - Level Complete
TWEAK_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_POS_X 876.00
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_POS_Y 577.125
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_SIZE_X 172.0
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_SIZE_Y 44.0
TWEAK_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_VAL_POS_X 1156.0
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_VAL_POS_Y 574.25
TWEAK_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_POS_X 876.0
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_POS_Y 637.125
TWEAK_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_VAL_POS_X 1156.0
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_VAL_POS_Y 636.625
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_SIZE_X 256.0
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_SIZE_Y 40.0
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_PERCENT_SIZE_X 28.0
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_PERCENT_SIZE_Y 36.0
//-- Results Screen - Game Complete
TWEAK_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_SCORE_POS_X 458.25
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_SCORE_POS_Y 825.5
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_SCORE_DOLLAR_POS_X 719.625
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_SCORE_DOLLAR_POS_Y 624.75
TWEAK_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_SCORE_VAL_POS_X 673.25
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_SCORE_VAL_POS_Y 665.375
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_ACCURACY_POS_X 458.25
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_ACCURACY_POS_Y 890.375
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_ACCURACY_VAL_POS_X 672.000
CONST_FLOAT cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_ACCURACY_VAL_POS_Y 896.000
CONST_FLOAT cfCMHDZ_HEADSHOT_BACKGROUND_MIN_Y 0.0
CONST_FLOAT cfCMHDZ_HEADSHOT_BACKGROUND_MAX_Y 53.0
CONST_FLOAT cfCMHDZ_HEADSHOT_MIDGROUND_MIN_Y 0.0
CONST_FLOAT cfCMHDZ_HEADSHOT_MIDGROUND_MAX_Y 74.0
CONST_FLOAT cfCMHDZ_HEADSHOT_FOREGROUND_MIN_Y 0.0
CONST_FLOAT cfCMHDZ_HEADSHOT_FOREGROUND_MAX_Y 148.0
CONST_FLOAT cfCMHDZ_DAMAGE_1_X_POS 1200.0
CONST_FLOAT cfCMHDZ_DAMAGE_1_Y_POS 900.0
CONST_FLOAT cfCMHDZ_DAMAGE_2_X_POS 500.0
CONST_FLOAT cfCMHDZ_DAMAGE_2_Y_POS 400.0
CONST_FLOAT cfCMHDZ_DAMAGE_3_X_POS 900.0
CONST_FLOAT cfCMHDZ_DAMAGE_3_Y_POS 600.0
CONST_FLOAT cfCMHDZ_DAMAGE_4_X_POS 1400.0
CONST_FLOAT cfCMHDZ_DAMAGE_4_Y_POS 500.0
CONST_FLOAT cfCMHDZ_DAMAGE_5_X_POS 900.0
CONST_FLOAT cfCMHDZ_DAMAGE_5_Y_POS 300.0
CONST_FLOAT cfCMHDZ_DAMAGE_BEAR_X_POS 913.75
CONST_FLOAT cfCMHDZ_DAMAGE_BEAR_Y_POS 658.25
CONST_FLOAT cfCMHDZ_TOWN_LEVEL_RIGHTMOST_ENTITY_X 1343.0
CONST_FLOAT cfCMHDZ_FOREST_LEVEL_RIGHTMOST_ENTITY_X 1415.75
CONST_FLOAT cfCMHDZ_MINE_LEVEL_RIGHTMOST_ENTITY_X 1420.0
CONST_FLOAT cfCMHDZ_GRAVEYARD_LEVEL_RIGHTMOST_ENTITY_X 1535.250
CONST_FLOAT cfIAP_CONTROLLER_AXIS_THRESHOLD_MOD 1.0
CONST_INT ciCMHDZ_ENEMY_TIME_TO_SHOOT 2000
CONST_INT ciCMHDZ_PLAYER_CRITICAL_DAMAGE_NO_AMMO_TIME 1000
CONST_INT ciCMHDZ_ITEM_SHIELD_TIME 12000
CONST_INT ciCMHDZ_HIDE_RETICULE_TIME 10000
CONST_INT ciCMHDZ_ITEM_BUFF_TIME 10000
CONST_INT ciCMHDZ_ITEM_MOLOTOV_AMMO_COUNT 3
CONST_INT ciCMHDZ_ITEM_NAILBOMB_AMMO_COUNT 6
CONST_INT ciCMHDZ_ITEM_DYNAMITE_AMMO_COUNT 5
CONST_INT ciCMHDZ_ITEM_BRICK_AMMO_COUNT 100
CONST_INT ciCMHDZ_MAX_ANIM_FRAMES 2
CONST_INT ciCMHDZ_MAX_THROWING_FRAMES 4
CONST_INT ciCMHDZ_MAX_CART_ANIM_FRAMES 4
CONST_INT ciCMHDZ_EXPLOSION_MAX_ANIM_FRAMES 3
CONST_INT ciCMHDZ_ENEMY_SHOT_MAX_ANIM_FRAMES 6
CONST_INT ciCMHDZ_PLAYER_SHOT_MAX_ANIM_FRAMES 2
CONST_INT ciCMHDZ_MAX_ENEMY_THROWN_DYNAMITE_ANIM_FRAMES 6
CONST_INT ciCMHDZ_MAX_ENEMY_THROWN_EXPLOSION_ANIM_FRAMES 3
CONST_INT ciCMHDZ_MAX_LOOT_CRATE_FX_ANIM_FRAMES 3
CONST_INT ciCMHDZ_BLOOD_SPLAT_MAX_ANIM_FRAMES 8
CONST_INT ciCMHDZ_SCREEN_SLASH_MAX_ANIM_FRAMES 8
CONST_INT ciCMHDZ_BEARSY_CHAINSAW_BLOOD_MAX_ANIM_FRAMES 4
CONST_INT ciCMHDZ_BEARSY_BLEED_MAX_ANIM_FRAMES 5
CONST_INT ciCMHDZ_SPARKS_MAX_ANIM_FRAMES 5
CONST_INT ciCMHDZ_MAX_PROJECTILES 4
CONST_INT ciCMHDZ_MAX_PLAYER_THROWN_PROJECTILES 1
CONST_INT ciCMHDZ_MAX_ENEMY_PROJECTILES 1
CONST_INT ciCMHDZ_MAX_ENEMY_SHOT_AT_ONCE 8
CONST_INT ciCMHDZ_MAX_COVER 60
CONST_INT ciCMHDZ_MAX_SUITABLE_HIDE_BEHIND_COVER 16
CONST_INT ciCMHDZ_MAX_FX 6
CONST_INT ciCMHDZ_MAX_MENU_OPTIONS 9
CONST_INT ciCMHDZ_MAX_PLAYERS 1
CONST_INT ciCMHDZ_MAX_BACKGROUND_TILES 7
CONST_INT ciCMHDZ_MAX_BACKGROUND_ELEMS 50
CONST_INT ciCMHDZ_MAX_ENEMIES 60
CONST_INT ciCMHDZ_MAX_ITEMS 12
CONST_INT ciCMHDZ_MAX_SCREENS 11
CONST_FLOAT cfCMHDZ_SCREEN_LENGTH 927.5
CONST_INT MAX_PLAYER_HELD_WEAPONS 2
CONST_INT ciCMHDZ_PLAYER_START_AMMO 100
CONST_INT ciCMHDZ_PLAYER_WEAPON_REVOLVER 0
CONST_INT ciCMHDZ_MAX_SCORE_DIGITS 6
CONST_INT ciCMHDZ_LANE_BACKGROUND 0
CONST_INT ciCMHDZ_LANE_MIDDLE 1
CONST_INT ciCMHDZ_LANE_FOREGROUND 2
CONST_INT ciCMHDZ_LANE_POPUP_RHS 3
CONST_INT ciCMHDZ_LANE_POPUP_LHS 4
CONST_INT ciCMHDZ_MAX_LANES 5
CONST_FLOAT cfCMHDZ_DEFAULT_PIXEL_UPDATE 4.0
TWEAK_INT ciBASE_FPS 30
// Game States
CONST_INT CMHDZ_GAME_STATE_INIT 0
CONST_INT CMHDZ_GAME_STATE_RUNNING 1
CONST_INT CMHDZ_GAME_STATE_LEAVE 2
CONST_INT CMHDZ_GAME_STATE_END 3
CONST_FLOAT CMHDZ_PX_HUD_THIN_CHAR_WIDTH 16.0
CONST_FLOAT CMHDZ_PX_HUD_CHAR_WIDTH 24.0
CONST_FLOAT CMHDZ_PX_HUD_CHAR_HEIGHT 40.0
CONST_INT CMHDZ_HUD_MAX_NUM_LENGTH 16
CONST_INT ciCMHDZ_DIRECTOR_SOUND_COOLDOWN 3000
//CONST_INT ciCMHDZ_ENEMY_SOUND_COOLDOWN 2000
// Command Lines
#IF IS_DEBUG_BUILD
CONST_INT CMHDZ_CMDLINE_NO_INTRO 0
CONST_INT CMHDZ_CMDLINE_QUICK_LEVEL1 0
CONST_INT CMHDZ_CMDLINE_UNLOCK_ALL_LEVELS 0
CONST_INT CMHDZ_CMDLINE_NO_DEATH 0
CONST_INT CMHDZ_CMDLINE_RTN_TO_MENU_IN_GAME 0
CONST_INT CMHDZ_CMDLINE_FORCE_OUTRO 0
CONST_INT CMHDZ_CMDLINE_ON_SCREEN_DEBUG 0
CONST_INT CMHDZ_CMDLINE_EDITOR_NEW 0
CONST_INT CMHDZ_CMDLINE_BOOT_INTO_EDITOR 0
// Editor Constants
CONST_INT CMHDZ_EDITOR_MODE_MAX_TYPES 5
CONST_INT CMHDZ_EDITOR_MODE_ITEM 0
CONST_INT CMHDZ_EDITOR_MODE_ENEMY 1
CONST_INT CMHDZ_EDITOR_MODE_COVER 2
CONST_INT CMHDZ_EDITOR_MODE_LEVEL 3
CONST_INT CMHDZ_EDITOR_MODE_BOSS 4
CONST_INT CMHDZ_EDITOR_MODE_COVER_NEW_UNIT 1
CONST_INT CMHDZ_EDITOR_MODE_COVER_INDEX 2
CONST_INT CMHDZ_EDITOR_MODE_COVER_LEVEL 3
CONST_INT CMHDZ_EDITOR_MODE_COVER_TYPE 4
CONST_INT CMHDZ_EDITOR_MODE_COVER_LANE 5
CONST_INT CMHDZ_EDITOR_MODE_COVER_SCREEN 6
CONST_INT CMHDZ_EDITOR_MODE_COVER_INITIAL_X 7
CONST_INT CMHDZ_EDITOR_MODE_COVER_INITIAL_Y 8
CONST_INT CMHDZ_EDITOR_MODE_COVER_IS_FAR_BG 9
CONST_INT CMHDZ_EDITOR_MODE_COVER_REMOVE_OFF_SCREEN 10
CONST_INT CMHDZ_EDITOR_MODE_COVER_EXPORT 11
CONST_INT CMHDZ_EDITOR_MODE_COVER_EXPORT_ALL 12
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_NEW_UNIT 1
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_INDEX 2
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_LEVEL 3
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_TYPE 4
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_LANE 5
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_POSITION 6
//CONST_INT CMHDZ_EDITOR_MODE_ENEMY_SCREEN 7
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_INITIAL_X 7
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_INITIAL_Y 8
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_STOP_POS 9
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_WAITSCROLL 10
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_REVERSE 11
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_IS_POP_UP 12
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_EXPORT 13
CONST_INT CMHDZ_EDITOR_MODE_ENEMY_EXPORT_ALL 14
CONST_INT CMHDZ_EDITOR_MODE_ITEM_NEW_UNIT 1
CONST_INT CMHDZ_EDITOR_MODE_ITEM_INDEX 2
CONST_INT CMHDZ_EDITOR_MODE_ITEM_LEVEL 3
CONST_INT CMHDZ_EDITOR_MODE_ITEM_TYPE 4
CONST_INT CMHDZ_EDITOR_MODE_ITEM_LANE 5
CONST_INT CMHDZ_EDITOR_MODE_ITEM_SCREEN 6
CONST_INT CMHDZ_EDITOR_MODE_ITEM_INITIAL_X 7
CONST_INT CMHDZ_EDITOR_MODE_ITEM_INITIAL_Y 8
CONST_INT CMHDZ_EDITOR_MODE_ITEM_RENDERWARP 9
CONST_INT CMHDZ_EDITOR_MODE_ITEM_FORCESCALE 10
CONST_INT CMHDZ_EDITOR_MODE_ITEM_EXPORT 11
CONST_INT CMHDZ_EDITOR_MODE_ITEM_EXPORT_ALL 12
//CONST_INT CMHDZ_EDITOR_MODE_HOSTAGE_NEW_UNIT 1
//CONST_INT CMHDZ_EDITOR_MODE_HOSTAGE_INDEX 2
//CONST_INT CMHDZ_EDITOR_MODE_HOSTAGE_TYPE 3
//CONST_INT CMHDZ_EDITOR_MODE_HOSTAGE_LANE 4
//CONST_INT CMHDZ_EDITOR_MODE_HOSTAGE_INITIAL_X 5
//CONST_INT CMHDZ_EDITOR_MODE_HOSTAGE_INITIAL_Y 6
//CONST_INT CMHDZ_EDITOR_MODE_HOSTAGE_REVERSE 7
//CONST_INT CMHDZ_EDITOR_MODE_HOSTAGE_STOP_POS 8
CONST_INT CMHDZ_EDITOR_MODE_LEVEL_INDEX 1
CONST_INT CMHDZ_EDITOR_MODE_LEVEL_PROGRESS_SET 2
CONST_INT CMHDZ_EDITOR_MODE_LEVEL_SCREEN 3
//CONST_INT CMHDZ_EDITOR_MODE_LEVEL_STOP_PROP 4
CONST_INT CMHDZ_EDITOR_MODE_LEVEL_PLAY 4
CONST_INT CMHDZ_EDITOR_MODE_LEVEL_RESET 5
CONST_INT CMHDZ_EDITOR_MODE_EXPORT_LEVEL 6
CONST_INT CMHDZ_EDITOR_MODE_SCREEN_NUM 1
#ENDIF
//-----------------------
// ENUMS
//-----------------------
ENUM CMHDZ_ARCADE_CLIENT_STATE
CMHDZ_ARCADE_CLIENT_STATE_INIT = 0,
CMHDZ_ARCADE_CLIENT_STATE_REQUESTING_ASSETS,
CMHDZ_ARCADE_CLIENT_STATE_FIB,
CMHDZ_ARCADE_CLIENT_STATE_INTRO,
CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN,
CMHDZ_ARCADE_CLIENT_STATE_TITLE_FADEOUT,
CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU,
CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL,
CMHDZ_ARCADE_CLIENT_STATE_PLAYING,
CMHDZ_ARCADE_CLIENT_STATE_EDITOR_ACTIVE,
CMHDZ_ARCADE_CLIENT_STATE_RESULT_SCREEN,
CMHDZ_ARCADE_CLIENT_STATE_GAME_OVER,
CMHDZ_ARCADE_CLIENT_STATE_OUTRO_MOVIE,
CMHDZ_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD,
CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD,
CMHDZ_ARCADE_CLIENT_STATE_CLEANUP,
NUM_CMHDZ_ARCADE_CLIENT_STATE
ENDENUM
ENUM CMHDZ_ARCADE_CLIENT_SUBSTATE
CMHDZ_ARCADE_CLIENT_SUBSTATE_INIT,
CMHDZ_ARCADE_CLIENT_SUBSTATE_ACTIVE,
CMHDZ_ARCADE_CLIENT_SUBSTATE_CLEANUP,
NUM_CMHDZ_ARCADE_CLIENT_SUBSTATE
ENDENUM
ENUM CMHDZ_ASSET_TYPES
CMHDZ_ASSET_INVALID = -1,
CMHDZ_ASSET_CACTUS_1 = 0,
CMHDZ_ASSET_CACTUS_2,
CMHDZ_ASSET_CACTUS_3,
CMHDZ_ASSET_BARRIER,
CMHDZ_ASSET_TRASHBAG_BIG,
CMHDZ_ASSET_TRASHBAG_SMALL,
CMHDZ_ASSET_TRASHCAN_BIG_1,
CMHDZ_ASSET_TRASHCAN_BIG_2,
CMHDZ_ASSET_TRASHCAN_SMALL_1,
CMHDZ_ASSET_TRASHCAN_SMALL_2,
CMHDZ_ASSET_BUSH_1,
CMHDZ_ASSET_BUSH_2,
CMHDZ_ASSET_ROCK_SMALL,
CMHDZ_ASSET_ROCK_LARGE,
CMHDZ_ASSET_GRASS,
CMHDZ_ASSET_CITY_BUILDING_1,
CMHDZ_ASSET_CITY_BUILDING_2,
CMHDZ_ASSET_CITY_BUILDING_3,
CMHDZ_ASSET_SCRAPYARD_MD_VAN_1,
CMHDZ_ASSET_SCRAPYARD_MD_VAN_2,
CMHDZ_ASSET_SCRAPYARD_MD_VAN_3,
CMHDZ_ASSET_SCRAPYARD_MD_VAN_4,
CMHDZ_ASSET_SCRAPYARD_MD_CAR_1,
CMHDZ_ASSET_SCRAPYARD_MD_CAR_2,
CMHDZ_ASSET_SCRAPYARD_MD_CAR_3,
CMHDZ_ASSET_SCRAPYARD_MD_CAR_4,
CMHDZ_ASSET_THEMEPARK_BUILDING_1,
CMHDZ_ASSET_THEMEPARK_BUILDING_2,
CMHDZ_ASSET_THEMEPARK_BUILDING_3,
CMHDZ_ASSET_THEMEPARK_BUILDING_4,
CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_1,
CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_2,
CMHDZ_ASSET_THEMEPARK_TREE_1,
CMHDZ_ASSET_THEMEPARK_TREE_2,
CMHDZ_ASSET_THEMEPARK_TREE_3,
CMHDZ_ASSET_THEMEPARK_TREE_4,
CMHDZ_ASSET_ASYLUM_BG_DOOR,
CMHDZ_ASSET_ASYLUM_BG_RADIATOR,
CMHDZ_ASSET_ASYLUM_GRAFFITI_1,
CMHDZ_ASSET_ASYLUM_GRAFFITI_2,
CMHDZ_ASSET_ASYLUM_GRAFFITI_3,
CMHDZ_ASSET_ASYLUM_MD_BED,
CMHDZ_ASSET_ASYLUM_MD_WHEELCHAIR,
CMHDZ_ASSET_ASYLUM_MD_MATTRESS,
CMHDZ_ASSET_ASYLUM_LIGHT_1,
CMHDZ_ASSET_ASYLUM_LIGHT_2,
CMHDZ_ASSET_FENCE,
CMHDZ_ASSET_CACTUS_9,
CMHDZ_ASSET_SCRAPYARD_PROP_FENCE,
CMHDZ_ASSET_FOREGROUND_TRASH,
CMHDZ_ASSET_BARRELS,
CMHDZ_ASSET_MEATGRINDER_1,
CMHDZ_ASSET_MEATGRINDER_2,
CMHDZ_ASSET_BODYBAG_1,
CMHDZ_ASSET_BODYBAG_2,
CMHDZ_ASSET_BODYBAG_3,
CMHDZ_ASSET_BODYBAG_FLOOR_1,
CMHDZ_ASSET_BODYBAG_FLOOR_2,
CMHDZ_ASSET_BODYBAG_FLOOR_3,
CMHDZ_ASSET_BODYBAG_FLOOR_4,
CMHDZ_ASSET_PIG,
CMHDZ_ASSET_PIG_BATCH,
CMHDZ_ASSET_MEATHOOK,
CMHDZ_ASSET_DOOR_1,
CMHDZ_ASSET_DOOR_2,
CMHDZ_ASSET_WINDOW,
CMHDZ_ASSET_OVERHEAD_LIGHT,
CMHDZ_ASSET_WATER_TOWER,
// CMHDZ_ASSET_SPECIAL_TNT_CRATE,
CMHDZ_ASSET_SPECIAL_TNT_BARREL_1,
CMHDZ_ASSET_SPECIAL_TNT_BARREL_2,
NUM_CMHDZ_ASSET_TYPES
ENDENUM
ENUM CMHDZ_AUDIO_EFFECT
CMHDZ_AUDIO_EFFECT_GET_READY,
CMHDZ_AUDIO_EFFECT_DRAW,
CMHDZ_AUDIO_EFFECT_SELECT_STAGE,
CMHDZ_AUDIO_EFFECT_SCREEN_LOCKED,
CMHDZ_AUDIO_EFFECT_MENU_BACK,
CMHDZ_AUDIO_EFFECT_MENU_CONTINUE,
CMHDZ_AUDIO_EFFECT_Shoot_Option,
CMHDZ_AUDIO_EFFECT_Logo_Appear,
CMHDZ_AUDIO_EFFECT_Score_Letter_Change,
CMHDZ_AUDIO_EFFECT_Score_Letter_Select,
CMHDZ_AUDIO_EFFECT_Score_Entered,
CMHDZ_AUDIO_EFFECT_MUSIC_TRANSITION,
CMHDZ_AUDIO_EFFECT_LEVEL_BACKGROUND_LOOP,
CMHDZ_AUDIO_EFFECT_SWAP_WEAPON,
CMHDZ_AUDIO_EFFECT_RELOAD,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_BODY,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_PLAYER,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_METAL,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_BUSHES,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_ROCK,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_MISS,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_OPTION,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_START,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_GENERIC,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_HEADSHOT,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_BEARSY,
CMHDZ_AUDIO_EFFECT_BULLET_HIT_BEARSY_DEFLECT,
CMHDZ_AUDIO_EFFECT_REVOLVER_FIRE,
CMHDZ_AUDIO_EFFECT_REVOLVER_EMPTY,
CMHDZ_AUDIO_EFFECT_RIFLE_FIRE,
CMHDZ_AUDIO_EFFECT_RIFLE_EMPTY,
CMHDZ_AUDIO_EFFECT_SHOTGUN_FIRE,
CMHDZ_AUDIO_EFFECT_SHOTGUN_EMPTY,
CMHDZ_AUDIO_EFFECT_NAILGUN_FIRE,
CMHDZ_AUDIO_EFFECT_Melee_Bat_Metal_Hit,
CMHDZ_AUDIO_EFFECT_Melee_Bat_Metal_Swing,
CMHDZ_AUDIO_EFFECT_Melee_Bat_Wood_Hit,
CMHDZ_AUDIO_EFFECT_Melee_Bat_Wood_Swing,
CMHDZ_AUDIO_EFFECT_Melee_Crowbar_Hit,
CMHDZ_AUDIO_EFFECT_Melee_Crowbar_Swing,
CMHDZ_AUDIO_EFFECT_Melee_Machete_Hit,
CMHDZ_AUDIO_EFFECT_Melee_Machete_Swing,
CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_FIRST,
CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_SINGLE,
CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_LAST,
CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE,
CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_LAST,
CMHDZ_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE,
CMHDZ_AUDIO_EFFECT_NAILGUN_RELOAD_SINGLE,
CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_DEAD,
CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW,
CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_LOW,
CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM,
CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_HIGH,
// Figurative sfx for Enemy filtering.
CMHDZ_AUDIO_EFFECT_ENEMY_DEAD,
CMHDZ_AUDIO_EFFECT_ENEMY_INJURED,
CMHDZ_AUDIO_EFFECT_ENEMY_GLOAT,
CMHDZ_AUDIO_EFFECT_ENEMY_ATTACK,
CMHDZ_AUDIO_EFFECT_ENEMY_PAIN,
CMHDZ_AUDIO_EFFECT_ENEMY_ON_FIRE,
CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD,
CMHDZ_AUDIO_EFFECT_ENEMY_A_INJURED,
CMHDZ_AUDIO_EFFECT_ENEMY_A_GLOAT,
CMHDZ_AUDIO_EFFECT_ENEMY_A_ATTACK,
CMHDZ_AUDIO_EFFECT_ENEMY_A_PAIN,
CMHDZ_AUDIO_EFFECT_ENEMY_A_ON_FIRE,
CMHDZ_AUDIO_EFFECT_ENEMY_B_DEAD,
CMHDZ_AUDIO_EFFECT_ENEMY_B_INJURED,
CMHDZ_AUDIO_EFFECT_ENEMY_B_GLOAT,
CMHDZ_AUDIO_EFFECT_ENEMY_B_ATTACK,
CMHDZ_AUDIO_EFFECT_ENEMY_B_PAIN,
CMHDZ_AUDIO_EFFECT_ENEMY_B_ON_FIRE,
CMHDZ_AUDIO_EFFECT_ENEMY_C_DEAD,
CMHDZ_AUDIO_EFFECT_ENEMY_C_INJURED,
CMHDZ_AUDIO_EFFECT_ENEMY_C_GLOAT,
CMHDZ_AUDIO_EFFECT_ENEMY_C_ATTACK,
CMHDZ_AUDIO_EFFECT_ENEMY_C_PAIN,
CMHDZ_AUDIO_EFFECT_ENEMY_C_ON_FIRE,
CMHDZ_AUDIO_EFFECT_ENEMY_D_DEAD,
CMHDZ_AUDIO_EFFECT_ENEMY_D_INJURED,
CMHDZ_AUDIO_EFFECT_ENEMY_D_GLOAT,
CMHDZ_AUDIO_EFFECT_ENEMY_D_ATTACK,
CMHDZ_AUDIO_EFFECT_ENEMY_D_PAIN,
CMHDZ_AUDIO_EFFECT_ENEMY_D_ON_FIRE,
CMHDZ_AUDIO_EFFECT_ENEMY_E_DEAD,
CMHDZ_AUDIO_EFFECT_ENEMY_E_GLOAT,
CMHDZ_AUDIO_EFFECT_ENEMY_E_ATTACK,
CMHDZ_AUDIO_EFFECT_ENEMY_E_PAIN,
CMHDZ_AUDIO_EFFECT_ENEMY_E_INJURED,
CMHDZ_AUDIO_EFFECT_ENEMY_E_ON_FIRE,
CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_AIM,
CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_FIRE,
CMHDZ_AUDIO_EFFECT_ENEMY_SHOTGUN_AIM,
CMHDZ_AUDIO_EFFECT_ENEMY_SHOTGUN_FIRE,
CMHDZ_AUDIO_EFFECT_ENEMY_REVOLVER_AIM,
CMHDZ_AUDIO_EFFECT_ENEMY_REVOLVER_FIRE,
CMHDZ_AUDIO_EFFECT_ENEMY_CRIT_WARNING,
CMHDZ_AUDIO_EFFECT_ENEMY_THROW_DYNAMITE,
CMHDZ_AUDIO_EFFECT_RESULTS_SCORE_UPDATE,
CMHDZ_AUDIO_EFFECT_EXP_GENERIC,
CMHDZ_AUDIO_EFFECT_EXP_DYNAMITE,
CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_THROW,
CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_HIT,
CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_THROW,
CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_HIT,
CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_THROW,
CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_HIT,
CMHDZ_AUDIO_EFFECT_BUNNYGIRL_APPEAR,
CMHDZ_AUDIO_EFFECT_BUNNYGIRL_PAIN,
CMHDZ_AUDIO_EFFECT_BUNNYGIRL_DEATH,
CMHDZ_AUDIO_EFFECT_BUNNYGIRL_MISSED,
CMHDZ_AUDIO_EFFECT_MONKEY_APPEAR,
CMHDZ_AUDIO_EFFECT_MONKEY_PAIN,
CMHDZ_AUDIO_EFFECT_MONKEY_DEATH,
CMHDZ_AUDIO_EFFECT_MONKEY_MISSED,
CMHDZ_AUDIO_EFFECT_RAT_APPEAR,
CMHDZ_AUDIO_EFFECT_RAT_DEATH,
CMHDZ_AUDIO_EFFECT_RAT_IDLE_LOOP,
CMHDZ_AUDIO_EFFECT_BEARSY_APPEAR,
CMHDZ_AUDIO_EFFECT_BEARSY_ATTACK,
CMHDZ_AUDIO_EFFECT_BEARSY_PAIN,
CMHDZ_AUDIO_EFFECT_BEARSY_HIDE,
CMHDZ_AUDIO_EFFECT_BEARSY_REVEAL,
CMHDZ_AUDIO_EFFECT_BEARSY_DIE,
CMHDZ_AUDIO_EFFECT_BEARSY_IDLE_LOOP,
CMHDZ_AUDIO_EFFECT_BEARSY_CHAINSAW_LOOP,
CMHDZ_AUDIO_EFFECT_BEARSY_CHAINSAW_ATTACK,
CMHDZ_AUDIO_EFFECT_BEARSY_MEAT_THROW,
CMHDZ_AUDIO_EFFECT_BEARSY_MEAT_IMPACT,
CMHDZ_AUDIO_EFFECT_PICKUP_HEALTH,
CMHDZ_AUDIO_EFFECT_PICKUP_BUFF,
CMHDZ_AUDIO_EFFECT_PICKUP_SHIELD,
CMHDZ_AUDIO_EFFECT_PICKUP_CASH,
CMHDZ_AUDIO_EFFECT_PICKUP_TAPE,
CMHDZ_AUDIO_EFFECT_PLAYER_RELOAD,
CMHDZ_AUDIO_EFFECT_PLAYER_SHOOT_HEADSHOT,
CMHDZ_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL,
// CMHDZ_AUDIO_EFFECT_PLAYER_AWARD_STV,
// CMHDZ_AUDIO_EFFECT_PLAYER_AWARD_TTK,
// CMHDZ_AUDIO_EFFECT_PLAYER_AWARD_FOD,
CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_BAD,
CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_AVERAGE,
CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_GOOD,
CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_AMAZING,
CMHDZ_AUDIO_EFFECT_PLAYER_COMPLETE_LEVEL,
CMHDZ_AUDIO_EFFECT_PLAYER_DEATH,
CMHDZ_AUDIO_EFFECT_PLAYER_RESULTS_DEAD,
CMHDZ_AUDIO_EFFECT_PLAYER_FINISH_GAME,
CMHDZ_AUDIO_EFFECT_REWIND_START,
CMHDZ_AUDIO_EFFECT_REWIND_LOOP,
CMHDZ_AUDIO_EFFECT_REWIND_STOP,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Asylum,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Junkyard,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Slaughterhouse,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Slums,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Theme_Park,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Get_Ready,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Start,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Complete_Level,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Quit,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Restart_Level,
CMHDZ_AUDIO_EFFECT_DIRECTOR_First_Enemy_Appear,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill_Headshot,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill_Nailgun,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Long,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Extreme,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Damage,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Near_Death,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Death,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Inactive,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Reload,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_AR,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_MV,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_NB,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_SG,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_Rnd,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Cash,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Damage,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Health,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Invulnerable,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Rnd_Neg,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Rnd_Pos,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Run_Out,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Tape,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_FOD,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_STV,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_MSMD,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TTK,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TD,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Score_Ok,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Score_Good,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Monkey_Kill,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Bunny_Kill,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Critter_Kill,
CMHDZ_AUDIO_EFFECT_DIRECTOR_Props_Destroyed,
CMHDZ_AUDIO_EFFECT_MAX
ENDENUM
ENUM CMHDZ_AUDIO_SCENE
CMHDZ_AUDIO_SCENE_MENUS,
CMHDZ_AUDIO_SCENE_GAMEPLAY,
CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE
#IF IS_DEBUG_BUILD
,CMHDZ_AUDIO_SCENE_FORCE_MACHINE
#ENDIF
ENDENUM
ENUM CMHDZ_CHALLENGES
CMHDZ_CHALLENGE_FACES_OF_DEATH_PLATINUM = 0,
CMHDZ_CHALLENGE_TRAINED_TO_KILL,
CMHDZ_CHALLENGE_STRAIGHT_TO_VIDEO,
CMHDZ_CHALLENGE_FACES_OF_DEATH_BRONZE,
CMHDZ_CHALLENGE_FACES_OF_DEATH_SILVER,
CMHDZ_CHALLENGE_FACES_OF_DEATH_GOLD,
CMHDZ_CHALLENGE_MONKEY_C_MONKEY_DIE,
CMHDZ_CHALLENGE_THE_DIRECTOR
ENDENUM
ENUM CMHDZ_COVER_DATA_BITS
CMHDZ_COVER_DATA_BITS_NONE = 0,
CMHDZ_COVER_DATA_BITS_SPAWNED_PICKUP = BIT0,
CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER = BIT1,
CMHDZ_COVER_DATA_BITS_IS_ANIMATED = BIT2,
CMHDZ_COVER_DATA_BITS_IS_FAR_BG = BIT3,
CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN = BIT4
ENDENUM
ENUM CMHDZ_DAMAGE_PLAYER_TYPES
CMHDZ_DAMAGE_PLAYER_TYPE_BULLET,
CMHDZ_DAMAGE_PLAYER_TYPE_DYNAMITE,
CMHDZ_DAMAGE_PLAYER_TYPE_SLASH
ENDENUM
ENUM CMHDZ_ENEMY_DATA_BITS
CMHDZ_ENEMY_DATA_BITS_NONE = 0,
CMHDZ_ENEMY_DATA_BITS_REVERSE = BIT0,
CMHDZ_ENEMY_DATA_BITS_IS_POPUP = BIT1,
CMHDZ_ENEMY_DATA_BITS_PLAYED_AIM_AUDIO = BIT2,
CMHDZ_ENEMY_DATA_BITS_PLAYED_WARN_AUDIO = BIT3,
CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY = BIT4,
CMHDZ_ENEMY_DATA_BITS_SHOT_AT_LEAST_ONCE = BIT5,
CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE = BIT6,
CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN = BIT7,
CMHDZ_ENEMY_DATA_BITS_WILL_INFLICT_MELEE_DAMAGE = BIT8,
CMHDZ_ENEMY_DATA_BITS_IS_BONUS = BIT9
ENDENUM
ENUM CMHDZ_ENEMY_STATE
CMHDZ_ENEMY_STATE_WAITING = 0,
CMHDZ_ENEMY_STATE_ACTIVE,
CMHDZ_ENEMY_STATE_ATTACKING,
CMHDZ_ENEMY_STATE_STUNNED,
CMHDZ_ENEMY_STATE_DYING,
CMHDZ_ENEMY_STATE_DYING_HEADSHOT,
CMHDZ_ENEMY_STATE_DYING_BURNING,
CMHDZ_ENEMY_STATE_INACTIVE
ENDENUM
ENUM CMHDZ_ENEMY_TYPES
CMHDZ_ENEMY_INVALID = -1,
CMHDZ_ENEMY_1 = 0,
CMHDZ_ENEMY_2,
CMHDZ_ENEMY_3,
CMHDZ_ENEMY_4,
CMHDZ_ENEMY_5,
CMHDZ_FOREGROUND_ENEMY_T1_1,
CMHDZ_FOREGROUND_ENEMY_T1_2,
CMHDZ_FOREGROUND_ENEMY_T2_1,
CMHDZ_FOREGROUND_ENEMY_T2_2,
CMHDZ_FOREGROUND_ENEMY_T3_1,
CMHDZ_FOREGROUND_ENEMY_T3_2,
CMHDZ_FOREGROUND_ENEMY_T4_1,
CMHDZ_FOREGROUND_ENEMY_T4_2,
CMHDZ_FOREGROUND_ENEMY_T5_1,
CMHDZ_FOREGROUND_ENEMY_T5_2,
CMHDZ_THROWING_ENEMY_1,
CMHDZ_THROWING_ENEMY_2,
CMHDZ_THROWING_ENEMY_3,
CMHDZ_THROWING_ENEMY_4,
CMHDZ_THROWING_ENEMY_5,
CMHDZ_RARE_ENEMY_MONKEY,
CMHDZ_RARE_ENEMY_BUNNY,
CMHDZ_RARE_ENEMY_RAT,
NUM_CMHDZ_ENEMY_TYPES
ENDENUM
//ENUM CMHDZ_BOSS_DATA_BITS
//ENDENUM
ENUM CMHDZ_BOSS_STATE
CMHDZ_BOSS_STATE_INACTIVE = 0,
CMHDZ_BOSS_STATE_WAITING,
CMHDZ_BOSS_STATE_WALKING,
CMHDZ_BOSS_STATE_WALKING_INV,
CMHDZ_BOSS_STATE_THROWING,
CMHDZ_BOSS_STATE_BACKUP,
CMHDZ_BOSS_STATE_FOREGROUND_POP_UP,
CMHDZ_BOSS_STATE_FOREGROUND_POP_DOWN,
CMHDZ_BOSS_STATE_FOREGROUND_PAIN,
CMHDZ_BOSS_STATE_FOREGROUND_IDLE,
CMHDZ_BOSS_STATE_BLOCKING,
CMHDZ_BOSS_STATE_ATTACK_READY,
CMHDZ_BOSS_STATE_ATTACKING,
CMHDZ_BOSS_STATE_ATTACKING_COUNTER,
CMHDZ_BOSS_STATE_STUNNED_BACKGROUND,
CMHDZ_BOSS_STATE_STUNNED_FOREGROUND,
CMHDZ_BOSS_STATE_PAIN,
CMHDZ_BOSS_STATE_DYING,
CMHDZ_BOSS_STATE_FINAL,
CMHDZ_BOSS_STATE_SPAWN_HELPERS_1,
CMHDZ_BOSS_STATE_SPAWN_HELPERS_2,
CMHDZ_BOSS_STATE_WAIT_FOR_ALL_ENEMIES_DEAD
ENDENUM
ENUM CMHDZ_BOSS_DATA_BITS
CMHDZ_BOSS_DATA_BITS_NONE = 0,
CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_1 = BIT0,
CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_2 = BIT1,
CMHDZ_BOSS_DATA_BITS_REVERSE = BIT2,
CMHDZ_BOSS_DATA_BITS_ANIM_FINISHED_ONCE = BIT3,
CMHDZ_BOSS_DATA_BITS_TAKING_DAMAGE = BIT4
ENDENUM
ENUM CMHDZ_FX_TYPE
CMHDZ_FX_EXPLOSION,
CMHDZ_FX_ENEMY_SHOT,
CMHDZ_FX_IMPACT,
CMHDZ_FX_ENEMY_TNT_EXP,
CMHDZ_FX_BLOOD_SPLAT,
CMHDZ_FX_BEARSY_FOREGROUND_ATTACKING_BLOOD,
CMHDZ_FX_BEARSY_FOREGROUND_PAIN_BLOOD,
CMHDZ_FX_BEARSY_FOREGROUND_SPARKS,
CMHDZ_FX_SLASH_EFFECT,
CMHDZ_FX_OUCH,
CMHDZ_FX_LOOT_CRATE
ENDENUM
ENUM CMHDZ_HELP_TEXT_BITS
CMHDZ_HELP_TEXT_BIT_SHOOT_AIM = 0,
CMHDZ_HELP_TEXT_BIT_RELOAD,
CMHDZ_HELP_TEXT_BIT_HEADSHOT,
CMHDZ_HELP_TEXT_BIT_THROW,
CMHDZ_HELP_TEXT_BIT_MICROAIM,
CMHDZ_HELP_TEXT_BIT_PAINKILLERS,
CMHDZ_HELP_TEXT_BIT_BUFF,
CMHDZ_HELP_TEXT_BIT_PILLS,
CMHDZ_HELP_TEXT_BIT_CASH,
CMHDZ_HELP_TEXT_BIT_VIDEO,
CMHDZ_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT,
CMHDZ_HELP_TEXT_BIT_FOD_GOLD,
CMHDZ_HELP_TEXT_BIT_FOD_SILVER,
CMHDZ_HELP_TEXT_BIT_FOD_BRONZE,
CMHDZ_HELP_TEXT_BIT_TRAINED_TO_KILL,
CMHDZ_HELP_TEXT_BIT_DIRECTOR,
CMHDZ_HELP_TEXT_BIT_STRAIGHT_TO_VIDEO,
CMHDZ_HELP_TEXT_BIT_MONKEY,
CMHDZ_HELP_TEXT_BIT_RIFLE,
CMHDZ_HELP_TEXT_BIT_SHOTGUN,
CMHDZ_HELP_TEXT_BIT_NAIL,
CMHDZ_HELP_TEXT_BIT_MOLOTOV,
CMHDZ_HELP_TEXT_BIT_NAILBOMB,
CMHDZ_HELP_TEXT_BIT_BEARSY,
CMHDZ_HELP_TEXT_BIT_DYNAMITE
ENDENUM
ENUM CMHDZ_HUD_CHAR
CMHDZ_HUD_CHAR_INVALID = 0,
CMHDZ_HUD_CHAR_SPACE = 1,
CMHDZ_HUD_CHAR_0 = 2,
CMHDZ_HUD_CHAR_1 = 3,
CMHDZ_HUD_CHAR_2 = 4,
CMHDZ_HUD_CHAR_3 = 5,
CMHDZ_HUD_CHAR_4 = 6,
CMHDZ_HUD_CHAR_5 = 7,
CMHDZ_HUD_CHAR_6 = 8,
CMHDZ_HUD_CHAR_7 = 9,
CMHDZ_HUD_CHAR_8 = 10,
CMHDZ_HUD_CHAR_9 = 11,
CMHDZ_HUD_CHAR_A = 12,
CMHDZ_HUD_CHAR_B = 13,
CMHDZ_HUD_CHAR_C = 14,
CMHDZ_HUD_CHAR_D = 15,
CMHDZ_HUD_CHAR_E = 16,
CMHDZ_HUD_CHAR_F = 17,
CMHDZ_HUD_CHAR_G = 18,
CMHDZ_HUD_CHAR_H = 19,
CMHDZ_HUD_CHAR_I = 20,
CMHDZ_HUD_CHAR_J = 21,
CMHDZ_HUD_CHAR_K = 22,
CMHDZ_HUD_CHAR_L = 23,
CMHDZ_HUD_CHAR_M = 24,
CMHDZ_HUD_CHAR_N = 25,
CMHDZ_HUD_CHAR_O = 26,
CMHDZ_HUD_CHAR_P = 27,
CMHDZ_HUD_CHAR_Q = 28,
CMHDZ_HUD_CHAR_R = 29,
CMHDZ_HUD_CHAR_S = 30,
CMHDZ_HUD_CHAR_T = 31,
CMHDZ_HUD_CHAR_U = 32,
CMHDZ_HUD_CHAR_V = 33,
CMHDZ_HUD_CHAR_W = 34,
CMHDZ_HUD_CHAR_X = 35,
CMHDZ_HUD_CHAR_Y = 36,
CMHDZ_HUD_CHAR_Z = 37,
CMHDZ_HUD_CHAR_APOSTROPHE = 38,
CMHDZ_HUD_CHAR_BACKSLASH = 39,
CMHDZ_HUD_CHAR_CLOSEBRACKET = 40,
CMHDZ_HUD_CHAR_COLON = 41,
CMHDZ_HUD_CHAR_COMMA = 42,
CMHDZ_HUD_CHAR_DOLLAR = 43,
CMHDZ_HUD_CHAR_EXCLAMATION = 44,
CMHDZ_HUD_CHAR_FULL_STOP = 45,
CMHDZ_HUD_CHAR_MINUS = 46,
CMHDZ_HUD_CHAR_OPEN_BRACKET = 47,
CMHDZ_HUD_CHAR_PLUS = 48,
CMHDZ_HUD_CHAR_QUESTION = 49,
CMHDZ_HUD_CHAR_SEMI_COLON = 50,
CMHDZ_HUD_CHAR_SPEECH = 51,
CMHDZ_HUD_CHAR_STAR = 52,
CMHDZ_HUD_CHAR_PERCENT = 53,
NUM_CMHDZ_HUD_CHAR
ENDENUM
ENUM CMHDZ_HUD_TEXTPIVOT
CMHDZ_HUD_TEXTPIVOT_LEFT,
CMHDZ_HUD_TEXTPIVOT_CENTER,
CMHDZ_HUD_TEXTPIVOT_RIGHT,
CMHDZ_HUD_TEXTPIVOT_USE_STORED
ENDENUM
ENUM CMHDZ_ITEM_DATA_BITS
CMHDZ_ITEM_DATA_BITS_NONE = 0,
CMHDZ_ITEM_DATA_BITS_SPAWNED = BIT0,
CMHDZ_ITEM_DATA_BITS_RENDERING = BIT1,
CMHDZ_ITEM_DATA_BITS_SHOT = BIT2
ENDENUM
ENUM CMHDZ_ITEM_TYPES
CMHDZ_ITEM_NONE = -1,
CMHDZ_ITEM_HEALTH = 0,
CMHDZ_ITEM_SHIELD,
CMHDZ_ITEM_BUFF,
CMHDZ_ITEM_VIDEOTAPE,
CMHDZ_ITEM_NAIL_GUN_AMMO,
CMHDZ_ITEM_RIFLE_AMMO,
CMHDZ_ITEM_SHOTGUN_AMMO,
CMHDZ_ITEM_MOLOTOV,
CMHDZ_ITEM_NAILBOMB,
CMHDZ_ITEM_BRICK,
CMHDZ_ITEM_DYNAMITE,
CMHDZ_ITEM_CASH,
NUM_CMHDZ_ITEM_TYPES
ENDENUM
// Bits for one shot Director dialogue
ENUM CMHDZ_DIRECTOR_BITS
CMHDZ_DIRECTOR_BITS_Level_Start_TRIGGER,
CMHDZ_DIRECTOR_BITS_Level_Start_PLAYED,
CMHDZ_DIRECTOR_BITS_First_Enemy_Appear_PLAYED,
CMHDZ_DIRECTOR_BITS_Enemy_Kill_PLAYED,
// CMHDZ_DIRECTOR_BITS_Enemy_Kill_Headshot_PLAYED,
CMHDZ_DIRECTOR_BITS_Enemy_Kill_Nailgun_PLAYED,
CMHDZ_DIRECTOR_BITS_Kill_Streak_PLAYED,
CMHDZ_DIRECTOR_BITS_Kill_Streak_Long_PLAYED,
CMHDZ_DIRECTOR_BITS_Kill_Streak_Extreme_PLAYED,
CMHDZ_DIRECTOR_BITS_Player_Damage_Played,
CMHDZ_DIRECTOR_BITS_Player_Near_Death_Played,
CMHDZ_DIRECTOR_BITS_Props_Destroyed_Played
ENDENUM
ENUM CMHDZ_LEVEL_SCREEN
CMHDZ_FADING_IN = 0,
CMHDZ_PLAY,
CMHDZ_WAIT_FOR_DEAD,
CMHDZ_FADING_OUT
ENDENUM
ENUM CMHDZ_LEVELS
CMHDZ_LEVEL_CITY = 0,
CMHDZ_LEVEL_SCRAPYARD,
CMHDZ_LEVEL_ASYLUM,
CMHDZ_LEVEL_PARK,
CMHDZ_LEVEL_SLAUGHTERHOUSE,
CMHDZ_MAX_LEVELS
ENDENUM
ENUM CMHDZ_LEVELS_BITSET
CMHDZ_LEVELS_BIT_STOPPED = 0,
CMHDZ_LEVELS_BIT_TOWN_LARGE_BUILDING_PASSED_BY1,
CMHDZ_LEVELS_BIT_REPLAYING_LEVEL,
CMHDZ_LEVELS_BIT_USED_SPECIAL_WEAPON,
CMHDZ_LEVELS_BIT_DONE_RESULTS_SCREEN_AUDIO,
CMHDZ_LEVELS_BIT_ADDED_ON_ACCURACY_BONUS,
CMHDZ_LEVELS_BIT_PLAYED_DEATH_SCREEN_AUDIO,
CMHDZ_LEVELS_BIT_PLAYED_RESULTS_SCORE_AUDIO,
CMHDZ_LEVELS_BIT_PLAYED_ACCURACY_SCORE_AUDIO,
CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_MONKEY_KILL,
CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_BUNNY_KILL
ENDENUM
ENUM CMHDZ_MENU_OPTIONS
CMHDZ_START = 0,
CMHDZ_SCORES,
CMHDZ_WANTED_1,
CMHDZ_WANTED_2,
CMHDZ_WANTED_3,
CMHDZ_WANTED_4,
CMHDZ_WANTED_5,
CMHDZ_REWIND,
CMHDZ_EJECT
ENDENUM
ENUM CMHDZ_MUSIC_BITS
CMHDZ_MUSIC_BIT_STARTED_INTRO,
CMHDZ_MUSIC_BIT_STARTED_TITLE,
//CMHDZ_MUSIC_BIT_STARTED_LEVEL,
CMHDZ_MUSIC_BIT_STOPPED,
CMHDZ_MUSIC_BIT_DEATH
ENDENUM
ENUM CMHDZ_MUSIC_EVENTS
CMHDZ_MUSIC_EVENT_INVALID = -1,
CMHDZ_MUSIC_EVENT_INTRO,
CMHDZ_MUSIC_EVENT_TITLE,
CMHDZ_MUSIC_EVENT_GOSPEL,
CMHDZ_MUSIC_EVENT_BUCKLE,
CMHDZ_MUSIC_EVENT_HILLBILLY,
CMHDZ_MUSIC_EVENT_RUCKUS,
CMHDZ_MUSIC_EVENT_BARREL,
CMHDZ_MUSIC_EVENT_DEATH,
CMHDZ_MUSIC_EVENT_HIT,
CMHDZ_MUSIC_EVENT_HIT_ALT,
CMHDZ_MUSIC_EVENT_STOP,
CMHDZ_MUSIC_EVENT_FINAL_BOSS,
CMHDZ_MUSIC_EVENT_FINAL_BOSS_DEFEATED
ENDENUM
ENUM CMHDZ_PLAYER_BITSET
CMHDZ_PLAYER_BIT_INVULNERABILE,
CMHDZ_PLAYER_BIT_HIDE_RETICULE,
CMHDZ_PLAYER_BIT_INIT_NEW_CHAIN,
// CMHDZ_PLAYER_BIT_NAILGUN_OVERHEAT,
// CMHDZ_PLAYER_BIT_NAILGUN_STOPPED_SHOOTING,
CMHDZ_PLAYER_BIT_RELOADED_FIRST_BULLET,
CMHDZ_PLAYER_BIT_QUAD_DAMAGE,
CMHDZ_PLAYER_BIT_DYING
ENDENUM
ENUM CMHDZ_PLAYER_PED_ANIM_STATE
CMHDZ_PLAYER_PED_ANIM_IDLE,
CMHDZ_PLAYER_PED_ANIM_IDLE_TO_AIM,
CMHDZ_PLAYER_PED_ANIM_AIM_IDLE,
CMHDZ_PLAYER_PED_ANIM_PLAY_IDLE,
CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_LOSE_LIFE,
CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_SCREEN,
CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_GAME
ENDENUM
ENUM CMHDZ_PLAYER_WEAPON
CMHDZ_PLAYER_WEAPON_NONE = -1,
CMHDZ_PLAYER_WEAPON_REVOLVER = 0,
//CMHDZ_PLAYER_WEAPON_REVOLVER,
CMHDZ_PLAYER_WEAPON_RIFLE,
CMHDZ_PLAYER_WEAPON_SHOTGUN,
CMHDZ_PLAYER_WEAPON_NAILGUN,
CMHDZ_PLAYER_WEAPON_MAX
ENDENUM
ENUM CMHDZ_PLAYER_WEAPON_TYPE
CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT = 0,
CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL,
CMHDZ_PLAYER_WEAPON_TYPE_MAX
ENDENUM
ENUM CMHDZ_PROJECTILE_TYPES
CMHDZ_PROJECTILE_NONE,
CMHDZ_PROJECTILE_DYNAMITE,
CMHDZ_PROJECTILE_MOLOTOV,
CMHDZ_PROJECTILE_BRICK,
CMHDZ_PROJECTILE_NAILBOMB,
// Bearsy projectiles
CMHDZ_PROJECTILE_BONE,
CMHDZ_PROJECTILE_JOWL,
CMHDZ_PROJECTILE_LEG,
CMHDZ_PROJECTILE_TROTTER,
NUM_CMHDZ_PROJECTILE_TYPES
ENDENUM
ENUM CMHDZ_PROJECTILE_STATE
CMHDZ_PROJECTILE_STATE_INACTIVE,
CMHDZ_PROJECTILE_STATE_AIRBORNE,
CMHDZ_PROJECTILE_STATE_IMPACT
ENDENUM
ENUM CMHDZ_REPLAY_BITS
CMHDZ_REPLAY_BITS_NONE = 0,
CMHDZ_REPLAY_BITS_WAS_PLAYBACK_ON = BIT0,
CMHDZ_REPLAY_BITS_WAS_RECORDING_ON = BIT1,
CMHDZ_REPLAY_BITS_IS_NEW_FRAME = BIT2,
CMHDZ_REPLAY_BITS_IS_RECORD_FRAME = BIT3,
CMHDZ_REPLAY_BITS_IS_PLAYBACK = BIT4,
CMHDZ_REPLAY_BITS_IS_RECORDING = BIT5
ENDENUM
ENUM CMHDZ_RESULT_SCREEN_STATE
CMHDZ_RESULT_SCREEN_STATE_INIT,
CMHDZ_RESULT_SCREEN_STATE_DEAD_SCREEN,
CMHDZ_RESULT_SCREEN_STATE_START_REWIND,
CMHDZ_RESULT_SCREEN_STATE_REWIND,
CMHDZ_RESULT_SCREEN_STATE_COMPLETE,
CMHDZ_RESULT_SCREEN_STATE_GOTO_LEADERBOARD,
NUM_CMHDZ_RESULT_SCREEN_STATE
ENDENUM
ENUM CMHDZ_RETICLE_BITS
CMHDZ_RETICLE_BITS_NONE = 0,
CMHDZ_RETICLE_BITS_IS_SHOOTING = BIT0,
CMHDZ_RETICLE_BITS_HIT_TARGET = BIT1,
CMHDZ_RETICLE_BITS_DESTROYED_TARGET = BIT2,
CMHDZ_RETICLE_BITS_NO_AMMO = BIT3
ENDENUM
ENUM CMHDZ_SCORE_TYPE
CMHDZ_SCORE_TYPE_ENEMY,
CMHDZ_SCORE_TYPE_ENEMY_HEADSHOT,
CMHDZ_SCORE_TYPE_SCENERY,
CMHDZ_SCORE_TYPE_ENEMY_EXPLOSION,
CMHDZ_SCORE_TYPE_ANIMAL,
CMHDZ_SCORE_TYPE_TAPE,
CMHDZ_SCORE_TYPE_CASH,
CMHDZ_SCORE_TYPE_BEARSY,
CMHDZ_SCORE_TYPE_BEARSY_KILL
ENDENUM
ENUM CMHDZ_SCORE_INTEGER_TYPE
CMHDZ_SCORE_INTEGER_TYPE_HI_SCORE,
CMHDZ_SCORE_INTEGER_TYPE_MY_SCORE,
CMHDZ_SCORE_INTEGER_TYPE_RED_SCORE,
CMHDZ_SCORE_INTEGER_TYPE_BLUE_SCORE
ENDENUM
// The order of this enum is important:
// The 1st 255 entries are enemy sprites and other things which will be shown by the replay system
ENUM CMHDZ_SPRITE
CMHDZ_SPRITE_NONE,
CMHDZ_SPRITE_GANG_01_ATTACKING,
CMHDZ_SPRITE_GANG_01_DEAD,
CMHDZ_SPRITE_GANG_01_RUNNING_01,
CMHDZ_SPRITE_GANG_01_RUNNING_02,
CMHDZ_SPRITE_GANG_01_THROWING_01,
CMHDZ_SPRITE_GANG_01_THROWING_02,
CMHDZ_SPRITE_GANG_01_THROWING_03,
CMHDZ_SPRITE_GANG_01_THROWING_04,
CMHDZ_SPRITE_GANG_01_THROWING_05,
CMHDZ_SPRITE_GANG_01_HEADSHOT_01,
CMHDZ_SPRITE_GANG_01_HEADSHOT_02,
CMHDZ_SPRITE_GANG_01_HEADSHOT_03,
CMHDZ_SPRITE_GANG_01_HEADSHOT_04,
CMHDZ_SPRITE_GANG_01_HEADSHOT_05,
CMHDZ_SPRITE_GANG_01_HEADSHOT_06,
CMHDZ_SPRITE_GANG_01_HEADSHOT_07,
CMHDZ_SPRITE_GANG_01_HEADSHOT_08,
CMHDZ_SPRITE_GANG_01_HEADSHOT_09,
CMHDZ_SPRITE_GANG_02_ATTACKING,
CMHDZ_SPRITE_GANG_02_DEAD,
CMHDZ_SPRITE_GANG_02_RUNNING_01,
CMHDZ_SPRITE_GANG_02_RUNNING_02,
CMHDZ_SPRITE_GANG_02_THROWING_01,
CMHDZ_SPRITE_GANG_02_THROWING_02,
CMHDZ_SPRITE_GANG_02_THROWING_03,
CMHDZ_SPRITE_GANG_02_THROWING_04,
CMHDZ_SPRITE_GANG_02_THROWING_05,
CMHDZ_SPRITE_GANG_02_THROWING_07,
CMHDZ_SPRITE_GANG_02_THROWING_08,
CMHDZ_SPRITE_GANG_02_THROWING_09,
CMHDZ_SPRITE_GANG_02_HEADSHOT_01,
CMHDZ_SPRITE_GANG_02_HEADSHOT_02,
CMHDZ_SPRITE_GANG_02_HEADSHOT_03,
CMHDZ_SPRITE_GANG_02_HEADSHOT_04,
CMHDZ_SPRITE_GANG_02_HEADSHOT_05,
CMHDZ_SPRITE_GANG_02_HEADSHOT_06,
CMHDZ_SPRITE_GANG_02_HEADSHOT_07,
CMHDZ_SPRITE_GANG_02_HEADSHOT_08,
CMHDZ_SPRITE_GANG_02_HEADSHOT_09,
CMHDZ_SPRITE_GANG_03_ATTACKING,
CMHDZ_SPRITE_GANG_03_DEAD,
CMHDZ_SPRITE_GANG_03_RUNNING_01,
CMHDZ_SPRITE_GANG_03_RUNNING_02,
CMHDZ_SPRITE_GANG_03_THROWING_01,
CMHDZ_SPRITE_GANG_03_THROWING_02,
CMHDZ_SPRITE_GANG_03_THROWING_03,
CMHDZ_SPRITE_GANG_03_THROWING_04,
CMHDZ_SPRITE_GANG_03_THROWING_05,
CMHDZ_SPRITE_GANG_03_HEADSHOT_01,
CMHDZ_SPRITE_GANG_03_HEADSHOT_02,
CMHDZ_SPRITE_GANG_03_HEADSHOT_03,
CMHDZ_SPRITE_GANG_03_HEADSHOT_04,
CMHDZ_SPRITE_GANG_03_HEADSHOT_05,
CMHDZ_SPRITE_GANG_03_HEADSHOT_06,
CMHDZ_SPRITE_GANG_03_HEADSHOT_07,
CMHDZ_SPRITE_GANG_03_HEADSHOT_08,
CMHDZ_SPRITE_GANG_03_HEADSHOT_09,
CMHDZ_SPRITE_GANG_04_ATTACKING,
CMHDZ_SPRITE_GANG_04_DEAD,
CMHDZ_SPRITE_GANG_04_RUNNING_01,
CMHDZ_SPRITE_GANG_04_RUNNING_02,
CMHDZ_SPRITE_GANG_04_THROWING_01,
CMHDZ_SPRITE_GANG_04_THROWING_02,
CMHDZ_SPRITE_GANG_04_THROWING_03,
CMHDZ_SPRITE_GANG_04_THROWING_04,
CMHDZ_SPRITE_GANG_04_THROWING_05,
CMHDZ_SPRITE_GANG_04_HEADSHOT_01,
CMHDZ_SPRITE_GANG_04_HEADSHOT_02,
CMHDZ_SPRITE_GANG_04_HEADSHOT_03,
CMHDZ_SPRITE_GANG_04_HEADSHOT_04,
CMHDZ_SPRITE_GANG_04_HEADSHOT_05,
CMHDZ_SPRITE_GANG_04_HEADSHOT_06,
CMHDZ_SPRITE_GANG_04_HEADSHOT_07,
CMHDZ_SPRITE_GANG_04_HEADSHOT_08,
CMHDZ_SPRITE_GANG_04_HEADSHOT_09,
CMHDZ_SPRITE_GANG_05_ATTACKING,
CMHDZ_SPRITE_GANG_05_DEAD,
CMHDZ_SPRITE_GANG_05_RUNNING_01,
CMHDZ_SPRITE_GANG_05_RUNNING_02,
CMHDZ_SPRITE_GANG_05_THROWING_01,
CMHDZ_SPRITE_GANG_05_THROWING_02,
CMHDZ_SPRITE_GANG_05_THROWING_03,
CMHDZ_SPRITE_GANG_05_THROWING_04,
CMHDZ_SPRITE_GANG_05_THROWING_05,
CMHDZ_SPRITE_GANG_05_HEADSHOT_01,
CMHDZ_SPRITE_GANG_05_HEADSHOT_02,
CMHDZ_SPRITE_GANG_05_HEADSHOT_03,
CMHDZ_SPRITE_GANG_05_HEADSHOT_04,
CMHDZ_SPRITE_GANG_05_HEADSHOT_05,
CMHDZ_SPRITE_GANG_05_HEADSHOT_06,
CMHDZ_SPRITE_GANG_05_HEADSHOT_07,
CMHDZ_SPRITE_GANG_05_HEADSHOT_08,
CMHDZ_SPRITE_GANG_05_HEADSHOT_09,
CMHDZ_SPRITE_GANG_RARE_BUNNY_RUNNING_01,
CMHDZ_SPRITE_GANG_RARE_BUNNY_RUNNING_02,
CMHDZ_SPRITE_GANG_RARE_BUNNY_DEAD,
CMHDZ_SPRITE_GANG_RARE_MONKEY_RUNNING_01,
CMHDZ_SPRITE_GANG_RARE_MONKEY_RUNNING_02,
CMHDZ_SPRITE_GANG_RARE_MONKEY_DEAD,
CMHDZ_SPRITE_GANG_RARE_RAT_RUNNING_01,
CMHDZ_SPRITE_GANG_RARE_RAT_RUNNING_02,
CMHDZ_SPRITE_GANG_BURNING_01,
CMHDZ_SPRITE_GANG_BURNING_02,
CMHDZ_SPRITE_FOREGROUND_ENEMY_01_A,
CMHDZ_SPRITE_FOREGROUND_ENEMY_01_A_ATTACK,
CMHDZ_SPRITE_FOREGROUND_ENEMY_01_B,
CMHDZ_SPRITE_FOREGROUND_ENEMY_01_DEAD,
CMHDZ_SPRITE_FOREGROUND_ENEMY_01_HEADSHOT,
CMHDZ_SPRITE_FOREGROUND_ENEMY_02_A,
CMHDZ_SPRITE_FOREGROUND_ENEMY_02_A_ATTACK,
CMHDZ_SPRITE_FOREGROUND_ENEMY_02_B,
CMHDZ_SPRITE_FOREGROUND_ENEMY_02_DEAD,
CMHDZ_SPRITE_FOREGROUND_ENEMY_02_HEADSHOT,
CMHDZ_SPRITE_FOREGROUND_ENEMY_03_A,
CMHDZ_SPRITE_FOREGROUND_ENEMY_03_B,
CMHDZ_SPRITE_FOREGROUND_ENEMY_03_DEAD,
CMHDZ_SPRITE_FOREGROUND_ENEMY_03_HEADSHOT,
CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A,
CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A_ATTACK,
CMHDZ_SPRITE_FOREGROUND_ENEMY_04_B,
CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A_DEAD,
CMHDZ_SPRITE_FOREGROUND_ENEMY_04_B_DEAD,
CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A_HEADSHOT,
CMHDZ_SPRITE_FOREGROUND_ENEMY_04_B_HEADSHOT,
CMHDZ_SPRITE_FOREGROUND_ENEMY_05_A,
CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B_ATTACK,
CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B,
CMHDZ_SPRITE_FOREGROUND_ENEMY_05_A_DEAD,
CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B_DEAD,
CMHDZ_SPRITE_FOREGROUND_ENEMY_05_A_HEADSHOT,
CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B_HEADSHOT,
CMHDZ_SPRITE_FOREGROUND_ENEMY_BURNING_01,
CMHDZ_SPRITE_FOREGROUND_ENEMY_BURNING_02,
CMHDZ_SPRITE_FOREGROUND_ENEMY_BURNING_03,
CMHDZ_SPRITE_FOREGROUND_ENEMY_BURNING_04,
CMHDZ_SPRITE_FG_ENEMY_GUNFIRE,
CMHDZ_SPRITE_THROWING_DYNAMITE_LARGE_01,
CMHDZ_SPRITE_THROWING_DYNAMITE_LARGE_02,
CMHDZ_SPRITE_THROWING_DYNAMITE_MEDIUM_01,
CMHDZ_SPRITE_THROWING_DYNAMITE_MEDIUM_02,
CMHDZ_SPRITE_THROWING_DYNAMITE_SMALL_01,
CMHDZ_SPRITE_THROWING_DYNAMITE_SMALL_02,
CMHDZ_SPRITE_THROWING_MOLOTOV_LARGE,
CMHDZ_SPRITE_THROWING_MOLOTOV_MEDIUM,
CMHDZ_SPRITE_THROWING_MOLOTOV_SMALL,
CMHDZ_SPRITE_THROWING_NAILBOMB_LARGE,
CMHDZ_SPRITE_THROWING_NAILBOMB_MEDIUM,
CMHDZ_SPRITE_THROWING_NAILBOMB_SMALL,
CMHDZ_SPRITE_THROWING_BRICK_LARGE,
CMHDZ_SPRITE_THROWING_BRICK_MEDIUM,
CMHDZ_SPRITE_THROWING_BRICK_SMALL,
CMHDZ_SPRITE_BEARSY_BONE_HIT_01,
CMHDZ_SPRITE_BEARSY_BONE_HIT_02,
CMHDZ_SPRITE_BEARSY_BONE_LARGE_01,
CMHDZ_SPRITE_BEARSY_BONE_LARGE_02,
CMHDZ_SPRITE_BEARSY_BONE_MED_01,
CMHDZ_SPRITE_BEARSY_BONE_MED_02,
CMHDZ_SPRITE_BEARSY_BONE_SMALL_01,
CMHDZ_SPRITE_BEARSY_BONE_SMALL_02,
CMHDZ_SPRITE_BEARSY_JOWL_HIT_01,
CMHDZ_SPRITE_BEARSY_JOWL_HIT_02,
CMHDZ_SPRITE_BEARSY_JOWL_LARGE_01,
CMHDZ_SPRITE_BEARSY_JOWL_LARGE_02,
CMHDZ_SPRITE_BEARSY_JOWL_MED_01,
CMHDZ_SPRITE_BEARSY_JOWL_MED_02,
CMHDZ_SPRITE_BEARSY_JOWL_SMALL_01,
CMHDZ_SPRITE_BEARSY_JOWL_SMALL_02,
CMHDZ_SPRITE_BEARSY_LEG_HIT_01,
CMHDZ_SPRITE_BEARSY_LEG_HIT_02,
CMHDZ_SPRITE_BEARSY_LEG_LARGE_01,
CMHDZ_SPRITE_BEARSY_LEG_LARGE_02,
CMHDZ_SPRITE_BEARSY_LEG_MED_01,
CMHDZ_SPRITE_BEARSY_LEG_MED_02,
CMHDZ_SPRITE_BEARSY_LEG_SMALL_01,
CMHDZ_SPRITE_BEARSY_LEG_SMALL_02,
CMHDZ_SPRITE_BEARSY_TROTTER_HIT_01,
CMHDZ_SPRITE_BEARSY_TROTTER_HIT_02,
CMHDZ_SPRITE_BEARSY_TROTTER_LARGE_01,
CMHDZ_SPRITE_BEARSY_TROTTER_LARGE_02,
CMHDZ_SPRITE_BEARSY_TROTTER_MED_01,
CMHDZ_SPRITE_BEARSY_TROTTER_MED_02,
CMHDZ_SPRITE_BEARSY_TROTTER_SMALL_01,
CMHDZ_SPRITE_BEARSY_TROTTER_SMALL_02,
CMHDZ_SPRITE_THROWN_WEAPON_EXP_01,
CMHDZ_SPRITE_THROWN_WEAPON_EXP_02,
CMHDZ_SPRITE_TRASHBAG_BIG,
CMHDZ_SPRITE_TRASHBAG_SMALL,
CMHDZ_SPRITE_TRASHCAN_BIG_01,
CMHDZ_SPRITE_TRASHCAN_BIG_02,
CMHDZ_SPRITE_TRASHCAN_SMALL_01,
CMHDZ_SPRITE_TRASHCAN_SMALL_02,
CMHDZ_SPRITE_OUCH1,
CMHDZ_SPRITE_FENCE,
CMHDZ_SPRITE_CITY_BUILDING_06,
CMHDZ_SPRITE_CITY_BUILDING_07,
CMHDZ_SPRITE_CITY_BUILDING_08,
CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_01,
CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_02,
CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_03,
CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_04,
CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_01,
CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_02,
CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_03,
CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_04,
CMHDZ_SPRITE_THEMEPARK_BUILDING_1,
CMHDZ_SPRITE_THEMEPARK_BUILDING_2,
CMHDZ_SPRITE_THEMEPARK_BUILDING_3,
CMHDZ_SPRITE_THEMEPARK_BUILDING_4,
CMHDZ_SPRITE_THEMEPARK_CLOWNBOARD_1,
CMHDZ_SPRITE_THEMEPARK_CLOWNBOARD_2,
CMHDZ_SPRITE_ASYLUM_PROP_MD_BED,
CMHDZ_SPRITE_ASYLUM_PROP_MD_WHEELCHAIR,
CMHDZ_SPRITE_ASYLUM_PROP_MD_MATTRESS,
CMHDZ_SPRITE_ASYLUM_PROP_LIGHT_STATE_1,
CMHDZ_SPRITE_ASYLUM_PROP_LIGHT_STATE_2,
CMHDZ_SPRITE_ASYLUM_RADIATOR_PROP,
CMHDZ_SPRITE_ASYLUM_RADIATOR_DOOR,
CMHDZ_SPRITE_ASYLUM_GRAFFITI_1,
CMHDZ_SPRITE_ASYLUM_GRAFFITI_2,
CMHDZ_SPRITE_ASYLUM_GRAFFITI_3,
CMHDZ_SPRITE_ROCKS,
CMHDZ_SPRITE_WATER_TANK,
CMHDZ_SPRITE_FLOOR_GRASS,
CMHDZ_SPRITE_LEVEL_03_FOREST_ROCKS,
CMHDZ_SPRITE_TREE_01,
CMHDZ_SPRITE_TREE_02,
CMHDZ_SPRITE_BARREL_HORIZONTAL,
CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_ASSETS_10,
CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_CAVE_TILE,
CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_CAVE_TILE_02,
CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_MINECART,
CMHDZ_SPRITE_THEMEPARK_MINECART_WHEEL_01,
CMHDZ_SPRITE_THEMEPARK_MINECART_WHEEL_02,
CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_ROCK,
CMHDZ_SPRITE_PROP_BARRELS,
CMHDZ_SPRITE_PROP_FOREGROUND_TRASH,
CMHDZ_SPRITE_PROP_BARRIER,
CMHDZ_SPRITE_WOODENSTRUCTURE,
CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_DOOR_01,
CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_DOOR_02,
CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_WINDOW,
CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_MEATGRINDER_01,
CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_MEATGRINDER_02,
CMHDZ_SPRITE_SLAUGHTERHOUSE_PIG_01,
CMHDZ_SPRITE_SLAUGHTERHOUSE_PIG_02,
CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_01,
CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_02,
CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_03,
CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_01,
CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_02,
CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_03,
CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_04,
CMHDZ_SPRITE_SLAUGHTERHOUSE_PIG_BATCH,
CMHDZ_SPRITE_SLAUGHTERHOUSE_MEATHOOK,
CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_LIGHT,
CMHDZ_SPRITE_CACTUS_1,
CMHDZ_SPRITE_CACTUS_2,
CMHDZ_SPRITE_CACTUS_3,
CMHDZ_SPRITE_PROP_BUSH_LARGE,
CMHDZ_SPRITE_PROP_BUSH_SMALL,
CMHDZ_SPRITE_PROP_CACTUS_07,
CMHDZ_SPRITE_SCRAPYARD_PROP_FENCE,
CMHDZ_SPRITE_SCRAPYARD_PROP_BG_CARS,
CMHDZ_SPRITE_PROP_ROCK_LARGE,
CMHDZ_SPRITE_PROP_ROCK_SMALL,
CMHDZ_SPRITE_ITEM_HEALTH,
CMHDZ_SPRITE_ITEM_SHIELD,
CMHDZ_SPRITE_ITEM_BUFF,
CMHDZ_SPRITE_ITEM_ALCOHOL,
CMHDZ_SPRITE_ITEM_GOLD_BARS,
CMHDZ_SPRITE_ITEM_QUAD_DAMAGE,
CMHDZ_SPRITE_ITEM_VIDEOTAPE,
//CMHDZ_SPRITE_ITEM_REVOLVER_AMMO,
CMHDZ_SPRITE_ITEM_MACHINE_GUN_AMMO,
CMHDZ_SPRITE_ITEM_RIFLE_AMMO,
CMHDZ_SPRITE_ITEM_SHOTGUN_AMMO,
CMHDZ_SPRITE_ITEM_MOLOTOV_AMMO,
CMHDZ_SPRITE_ITEM_NAILBOMB_AMMO,
CMHDZ_SPRITE_ITEM_CASH,
CMHDZ_SPRITE_GORE_BACKGROUND_1,
CMHDZ_SPRITE_GORE_BACKGROUND_2,
CMHDZ_SPRITE_GORE_BACKGROUND_3,
CMHDZ_SPRITE_GORE_BACKGROUND_4,
CMHDZ_SPRITE_GORE_BACKGROUND_5,
CMHDZ_SPRITE_GORE_BACKGROUND_6,
CMHDZ_SPRITE_GORE_BACKGROUND_7,
CMHDZ_SPRITE_GORE_BACKGROUND_8,
//CMHDZ_SPRITE_GORE_BACKGROUND_9,
CMHDZ_SPRITE_GORE_BACKGROUND_10,
CMHDZ_SPRITE_GORE_BACKGROUND_11,
CMHDZ_SPRITE_GORE_BACKGROUND_12,
CMHDZ_SPRITE_GORE_BACKGROUND_13,
CMHDZ_SPRITE_BEARSY_WALK_FRAME_01,
CMHDZ_SPRITE_BEARSY_WALK_FRAME_02,
CMHDZ_SPRITE_BEARSY_WALK_FRAME_03,
CMHDZ_SPRITE_BEARSY_WALK_FRAME_04,
CMHDZ_SPRITE_BEARSY_WALK_FRAME_05,
CMHDZ_SPRITE_BEARSY_WALK_FRAME_IDLE,
CMHDZ_SPRITE_BEARSY_THROWING_01,
CMHDZ_SPRITE_BEARSY_THROWING_02,
CMHDZ_SPRITE_BEARSY_THROWING_03,
CMHDZ_SPRITE_BEARSY_BACK_PAIN,
CMHDZ_SPRITE_BEARSY_FORE_PAIN_1,
CMHDZ_SPRITE_BEARSY_FORE_PAIN_2,
CMHDZ_SPRITE_BEARSY_FORE_PAIN_3,
CMHDZ_SPRITE_BEARSY_FORE_PAIN_4,
CMHDZ_SPRITE_BEARSY_FORE_PAIN_5,
CMHDZ_SPRITE_BEARSY_FORE_PAIN_6,
CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_01,
CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_02,
CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_03,
CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_04,
CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_05,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_01,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_02,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_03,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_04,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_05,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_01,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_02,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_03,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_04,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_01,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_02,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_03,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_04,
CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_05,
CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_01,
CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_02,
CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_03,
CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_04,
CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_05,
CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_06,
CMHDZ_SPRITE_SCREEN_DAMAGE_RIP,
CMHDZ_SPRITE_SCREEN_DAMAGE_BLOOD_SPLATTER,
CMHDZ_SPRITE_BEARSY_BACKGROUND_STAGGERED,
CMHDZ_SPRITE_BEARSY_FOREGROUND_STAGGERED,
CMHDZ_SPRITE_BEARSY_DEATH_01,
CMHDZ_SPRITE_BEARSY_DEATH_02,
CMHDZ_SPRITE_BEARSY_DEATH_PAIN_01,
CMHDZ_SPRITE_BEARSY_DEATH_PAIN_02,
CMHDZ_SPRITE_BEARSY_DEATH_PAIN_03,
CMHDZ_SPRITE_BEARSY_DEATH_PAIN_04,
CMHDZ_SPRITE_BEARSY_DEATH_PAIN_05,
CMHDZ_SPRITE_POWER_UP_LINE_01,
CMHDZ_SPRITE_POWER_UP_LINE_02,
CMHDZ_SPRITE_POWER_UP_LINE_03,
CMHDZ_SPRITE_POWER_UP_LINE_04,
CMHDZ_SPRITE_POWER_UP_LINE_05,
NUM_CMHDZ_SPRITE
ENDENUM
ENUM CMHDZ_TEXDICT
CMHDZ_TEXDICT_INVALID = -1,
CMHDZ_TEXDICT_BASE,
CMHDZ_TEXDICT_TITLE,
CMHDZ_TEXDICT_HUD,
CMHDZ_TEXDICT_FACADE,
CMHDZ_TEXDICT_LVLSELECT,
CMHDZ_TEXDICT_LVLCOMP,
CMHDZ_TEXDICT_LVL1,
CMHDZ_TEXDICT_LVL2,
CMHDZ_TEXDICT_LVL3,
CMHDZ_TEXDICT_LVL4,
CMHDZ_TEXDICT_LVL5,
CMHDZ_TEXDICT_FG_ENEMY_A,
CMHDZ_TEXDICT_FG_ENEMY_B,
CMHDZ_TEXDICT_FG_ENEMY_C,
CMHDZ_TEXDICT_FG_ENEMY_D,
//CMHDZ_TEXDICT_FG_ENEMY_D,
CMHDZ_TEXDICT_FG_ENEMY_E,
CMHDZ_TEXDICT_FG_ENEMY_E_2,
CMHDZ_TEXDICT_ENEMY_BURNING,
CMHDZ_TEXDICT_COMMON_PROPS,
CMHDZ_TEXDICT_RESULTS,
CMHDZ_TEXDICT_DEAD,
CMHDZ_TEXDICT_CH_GANG_A,
CMHDZ_TEXDICT_CH_GANG_B,
CMHDZ_TEXDICT_CH_GANG_C,
CMHDZ_TEXDICT_CH_GANG_D,
CMHDZ_TEXDICT_CH_GANG_E,
CMHDZ_TEXDICT_CH_GANG_RARE,
CMHDZ_TEXDICT_CH_CITY,
CMHDZ_TEXDICT_CH_SCRAPYARD,
CMHDZ_TEXDICT_CH_ASYLUM,
CMHDZ_TEXDICT_CH_THEMEPARK,
CMHDZ_TEXDICT_CH_SLAUGHTERHOUSE,
CMHDZ_TEXDICT_CH_VHSFONT,
CMHDZ_TEXDICT_CH_TITLES,
CMHDZ_TEXDICT_CH_DAMAGE,
CMHDZ_TEXDICT_CH_RESULTS,
CMHDZ_TEXDICT_BACKGROUND_GORE,
CMHDZ_TEXDICT_BEARSY,
CMHDZ_TEXDICT_BEARSY_THROWING,
CMHDZ_TEXDICT_BEARSY_FOREGROUND,
CMHDZ_TEXDICT_BEARSY_FOREGROUND_ATTACK,
CMHDZ_TEXDICT_BEARSY_BONE,
CMHDZ_TEXDICT_BEARSY_JOWL,
CMHDZ_TEXDICT_BEARSY_LEG,
CMHDZ_TEXDICT_BEARSY_TROTTER,
CMHDZ_TEXDICT_BEARSY_EFFECTS,
CMHDZ_TEXDICT_BEARSY_DEATH,
CMHDZ_TEXDICT_RETICLE_TYPES,
NUM_CMHDZ_TEXTDICT
ENDENUM
#IF IS_DEBUG_BUILD
//----------------------------------
// NOT GENERATED ENUM FUNCTIONS
//----------------------------------
FUNC STRING CMHDZ_EDITOR_MODE_TO_STRING(INT iType)
SWITCH (iType)
CASE CMHDZ_EDITOR_MODE_ENEMY
RETURN "Enemy"
BREAK
CASE CMHDZ_EDITOR_MODE_COVER
RETURN "Cover"
BREAK
// CASE CMHDZ_EDITOR_MODE_HOSTAGE
// RETURN "Hostage"
// BREAK
CASE CMHDZ_EDITOR_MODE_ITEM
RETURN "Item"
BREAK
CASE CMHDZ_EDITOR_MODE_LEVEL
RETURN "Level"
BREAK
CASE CMHDZ_EDITOR_MODE_BOSS
RETURN "Boss"
BREAK
ENDSWITCH
RETURN "NONE"
ENDFUNC
FUNC STRING CMHDZ_LANE_TO_STRING(INT iLane)
SWITCH (iLane)
CASE ciCMHDZ_LANE_BACKGROUND RETURN "ciCMHDZ_LANE_BACKGROUND"
CASE ciCMHDZ_LANE_FOREGROUND RETURN "ciCMHDZ_LANE_FOREGROUND"
CASE ciCMHDZ_LANE_MIDDLE RETURN "ciCMHDZ_LANE_MIDDLE"
CASE ciCMHDZ_LANE_POPUP_LHS RETURN "ciCMHDZ_LANE_POPUP_LHS"
CASE ciCMHDZ_LANE_POPUP_RHS RETURN "ciCMHDZ_LANE_POPUP_RHS"
ENDSWITCH
RETURN "ciCMHDZ_LANE_MIDDLE"
ENDFUNC
FUNC STRING CMHDZ_GET_SERVER_STATE_AS_STRING(INT iState)
SWITCH iState
CASE CMHDZ_GAME_STATE_INIT RETURN "GAME_STATE_INIT"
CASE CMHDZ_GAME_STATE_RUNNING RETURN "GAME_STATE_RUNNING"
CASE CMHDZ_GAME_STATE_LEAVE RETURN "GAME_STATE_LEAVE"
CASE CMHDZ_GAME_STATE_END RETURN "GAME_STATE_END"
ENDSWITCH
RETURN "UNKNOWN"
ENDFUNC
FUNC STRING CMHDZ_SCREEN_TO_STRING(INT iLane)
SWITCH (iLane)
CASE 0
CASE 1 RETURN "1"
CASE 2 RETURN "2"
CASE 3 RETURN "3"
CASE 4 RETURN "4"
CASE 5 RETURN "5"
CASE 6 RETURN "6"
CASE 7 RETURN "7"
CASE 8 RETURN "8"
CASE 9 RETURN "9"
CASE 10 RETURN "10"
CASE 11 RETURN "11"
CASE 12 RETURN "12"
CASE 13 RETURN "13"
CASE 14 RETURN "14"
CASE 15 RETURN "15"
CASE 16 RETURN "16"
CASE 17 RETURN "17"
ENDSWITCH
RETURN "UNKNOWN"
ENDFUNC
//----------------------------------
// AUTOGENERATED ENUM FUNCTIONS
//----------------------------------
FUNC STRING CMHDZ_ARCADE_CLIENT_STATE_TO_STRING(CMHDZ_ARCADE_CLIENT_STATE eType)
SWITCH (eType)
CASE CMHDZ_ARCADE_CLIENT_STATE_INIT RETURN "CMHDZ_ARCADE_CLIENT_STATE_INIT"
CASE CMHDZ_ARCADE_CLIENT_STATE_REQUESTING_ASSETS RETURN "CMHDZ_ARCADE_CLIENT_STATE_REQUESTING_ASSETS"
CASE CMHDZ_ARCADE_CLIENT_STATE_FIB RETURN "CMHDZ_ARCADE_CLIENT_STATE_FIB"
CASE CMHDZ_ARCADE_CLIENT_STATE_INTRO RETURN "CMHDZ_ARCADE_CLIENT_STATE_INTRO"
CASE CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN RETURN "CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN"
CASE CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU RETURN "CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU"
CASE CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL RETURN "CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL"
CASE CMHDZ_ARCADE_CLIENT_STATE_PLAYING RETURN "CMHDZ_ARCADE_CLIENT_STATE_PLAYING"
CASE CMHDZ_ARCADE_CLIENT_STATE_EDITOR_ACTIVE RETURN "CMHDZ_ARCADE_CLIENT_STATE_EDITOR_ACTIVE"
CASE CMHDZ_ARCADE_CLIENT_STATE_RESULT_SCREEN RETURN "CMHDZ_ARCADE_CLIENT_STATE_RESULT_SCREEN"
CASE CMHDZ_ARCADE_CLIENT_STATE_GAME_OVER RETURN "CMHDZ_ARCADE_CLIENT_STATE_GAME_OVER"
CASE CMHDZ_ARCADE_CLIENT_STATE_OUTRO_MOVIE RETURN "CMHDZ_ARCADE_CLIENT_STATE_OUTRO_MOVIE"
CASE CMHDZ_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD RETURN "CMHDZ_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD"
CASE CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD RETURN "CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD"
CASE CMHDZ_ARCADE_CLIENT_STATE_CLEANUP RETURN "CMHDZ_ARCADE_CLIENT_STATE_CLEANUP"
CASE NUM_CMHDZ_ARCADE_CLIENT_STATE RETURN "NUM_CMHDZ_ARCADE_CLIENT_STATE"
ENDSWITCH
RETURN "CMHDZ_ARCADE_CLIENT_STATE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_ARCADE_CLIENT_SUBSTATE_TO_STRING(CMHDZ_ARCADE_CLIENT_SUBSTATE eType)
SWITCH (eType)
CASE CMHDZ_ARCADE_CLIENT_SUBSTATE_INIT RETURN "CMHDZ_ARCADE_CLIENT_SUBSTATE_INIT"
CASE CMHDZ_ARCADE_CLIENT_SUBSTATE_ACTIVE RETURN "CMHDZ_ARCADE_CLIENT_SUBSTATE_ACTIVE"
CASE CMHDZ_ARCADE_CLIENT_SUBSTATE_CLEANUP RETURN "CMHDZ_ARCADE_CLIENT_SUBSTATE_CLEANUP"
CASE NUM_CMHDZ_ARCADE_CLIENT_SUBSTATE RETURN "NUM_CMHDZ_ARCADE_CLIENT_SUBSTATE"
ENDSWITCH
RETURN "CMHDZ_ARCADE_CLIENT_SUBSTATE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_ASSET_TYPES_TO_STRING(CMHDZ_ASSET_TYPES eType)
SWITCH (eType)
CASE CMHDZ_ASSET_INVALID RETURN "CMHDZ_ASSET_CMHDZ_ASSET_INVALID"
CASE CMHDZ_ASSET_CACTUS_1 RETURN "CMHDZ_ASSET_CACTUS_1"
CASE CMHDZ_ASSET_CACTUS_2 RETURN "CMHDZ_ASSET_CACTUS_2"
CASE CMHDZ_ASSET_CACTUS_3 RETURN "CMHDZ_ASSET_CACTUS_3"
CASE CMHDZ_ASSET_TRASHBAG_BIG RETURN "CMHDZ_ASSET_TRASHBAG_BIG"
CASE CMHDZ_ASSET_TRASHBAG_SMALL RETURN "CMHDZ_ASSET_TRASHBAG_SMALL"
CASE CMHDZ_ASSET_TRASHCAN_BIG_1 RETURN "CMHDZ_ASSET_TRASHCAN_BIG_1"
CASE CMHDZ_ASSET_TRASHCAN_BIG_2 RETURN "CMHDZ_ASSET_TRASHCAN_BIG_2"
CASE CMHDZ_ASSET_TRASHCAN_SMALL_1 RETURN "CMHDZ_ASSET_TRASHCAN_SMALL_1"
CASE CMHDZ_ASSET_TRASHCAN_SMALL_2 RETURN "CMHDZ_ASSET_TRASHCAN_SMALL_2"
CASE CMHDZ_ASSET_BUSH_1 RETURN "CMHDZ_ASSET_BUSH_1"
CASE CMHDZ_ASSET_BUSH_2 RETURN "CMHDZ_ASSET_BUSH_2"
CASE CMHDZ_ASSET_ROCK_SMALL RETURN "CMHDZ_ASSET_ROCK_SMALL"
CASE CMHDZ_ASSET_ROCK_LARGE RETURN "CMHDZ_ASSET_ROCK_LARGE"
CASE CMHDZ_ASSET_GRASS RETURN "CMHDZ_ASSET_GRASS"
CASE CMHDZ_ASSET_CITY_BUILDING_1 RETURN "CMHDZ_ASSET_CITY_BUILDING_1"
CASE CMHDZ_ASSET_CITY_BUILDING_2 RETURN "CMHDZ_ASSET_CITY_BUILDING_2"
CASE CMHDZ_ASSET_CITY_BUILDING_3 RETURN "CMHDZ_ASSET_CITY_BUILDING_3"
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_1 RETURN "CMHDZ_ASSET_SCRAPYARD_MD_VAN_1"
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_2 RETURN "CMHDZ_ASSET_SCRAPYARD_MD_VAN_2"
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_3 RETURN "CMHDZ_ASSET_SCRAPYARD_MD_VAN_3"
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_4 RETURN "CMHDZ_ASSET_SCRAPYARD_MD_VAN_4"
CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_1 RETURN "CMHDZ_ASSET_SCRAPYARD_MD_CAR_1"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_2 RETURN "CMHDZ_ASSET_SCRAPYARD_MD_CAR_2"
CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_3 RETURN "CMHDZ_ASSET_SCRAPYARD_MD_CAR_3"
CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_4 RETURN "CMHDZ_ASSET_SCRAPYARD_MD_CAR_4"
CASE CMHDZ_ASSET_THEMEPARK_BUILDING_1 RETURN "CMHDZ_ASSET_THEMEPARK_BUILDING_1"
CASE CMHDZ_ASSET_THEMEPARK_BUILDING_2 RETURN "CMHDZ_ASSET_THEMEPARK_BUILDING_2"
CASE CMHDZ_ASSET_THEMEPARK_BUILDING_3 RETURN "CMHDZ_ASSET_THEMEPARK_BUILDING_3"
CASE CMHDZ_ASSET_THEMEPARK_BUILDING_4 RETURN "CMHDZ_ASSET_THEMEPARK_BUILDING_4"
CASE CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_1 RETURN "CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_1"
CASE CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_2 RETURN "CMHDZ_ASSET_THEMEPARK_CLOWNBOARD_2"
CASE CMHDZ_ASSET_THEMEPARK_TREE_1 RETURN "CMHDZ_ASSET_THEMEPARK_TREE_1"
CASE CMHDZ_ASSET_THEMEPARK_TREE_2 RETURN "CMHDZ_ASSET_THEMEPARK_TREE_2"
CASE CMHDZ_ASSET_THEMEPARK_TREE_3 RETURN "CMHDZ_ASSET_THEMEPARK_TREE_3"
CASE CMHDZ_ASSET_THEMEPARK_TREE_4 RETURN "CMHDZ_ASSET_THEMEPARK_TREE_4"
CASE CMHDZ_ASSET_ASYLUM_MD_BED RETURN "CMHDZ_ASSET_ASYLUM_MD_BED"
CASE CMHDZ_ASSET_ASYLUM_MD_WHEELCHAIR RETURN "CMHDZ_ASSET_ASYLUM_MD_WHEELCHAIR"
CASE CMHDZ_ASSET_ASYLUM_MD_MATTRESS RETURN "CMHDZ_ASSET_ASYLUM_MD_MATTRESS"
CASE CMHDZ_ASSET_ASYLUM_LIGHT_1 RETURN "CMHDZ_ASSET_ASYLUM_LIGHT_1"
CASE CMHDZ_ASSET_ASYLUM_LIGHT_2 RETURN "CMHDZ_ASSET_ASYLUM_LIGHT_2"
CASE CMHDZ_ASSET_ASYLUM_BG_RADIATOR RETURN "CMHDZ_ASSET_ASYLUM_BG_RADIATOR"
CASE CMHDZ_ASSET_ASYLUM_BG_DOOR RETURN "CMHDZ_ASSET_ASYLUM_BG_DOOR"
CASE CMHDZ_ASSET_ASYLUM_GRAFFITI_1 RETURN "CMHDZ_ASSET_ASYLUM_GRAFFITI_1"
CASE CMHDZ_ASSET_ASYLUM_GRAFFITI_2 RETURN "CMHDZ_ASSET_ASYLUM_GRAFFITI_2"
CASE CMHDZ_ASSET_ASYLUM_GRAFFITI_3 RETURN "CMHDZ_ASSET_ASYLUM_GRAFFITI_3"
CASE CMHDZ_ASSET_FENCE RETURN "CMHDZ_ASSET_FENCE"
// CASE CMHDZ_ASSET_FENCE_SMALL RETURN "CMHDZ_ASSET_FENCE_SMALL"
CASE CMHDZ_ASSET_CACTUS_9 RETURN "CMHDZ_ASSET_CACTUS_9"
CASE CMHDZ_ASSET_SCRAPYARD_PROP_FENCE RETURN "CMHDZ_ASSET_SCRAPYARD_PROP_FENCE"
//CASE CMHDZ_ASSET_SCRAPYARD_BG_CARS RETURN "CMHDZ_ASSET_SCRAPYARD_BG_CARS"
CASE CMHDZ_ASSET_FOREGROUND_TRASH RETURN "CMHDZ_ASSET_FOREGROUND_TRASH"
CASE CMHDZ_ASSET_BARRIER RETURN "CMHDZ_ASSET_BARRIER"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_ASSET_BARRELS RETURN "CMHDZ_ASSET_BARRELS"
CASE CMHDZ_ASSET_MEATGRINDER_1 RETURN "CMHDZ_ASSET_MEATGRINDER_1"
CASE CMHDZ_ASSET_BODYBAG_1 RETURN "CMHDZ_ASSET_BODYBAG_1"
CASE CMHDZ_ASSET_BODYBAG_2 RETURN "CMHDZ_ASSET_BODYBAG_2"
CASE CMHDZ_ASSET_BODYBAG_3 RETURN "CMHDZ_ASSET_BODYBAG_3"
CASE CMHDZ_ASSET_BODYBAG_FLOOR_1 RETURN "CMHDZ_ASSET_BODYBAG_FLOOR_1"
CASE CMHDZ_ASSET_BODYBAG_FLOOR_3 RETURN "CMHDZ_ASSET_BODYBAG_FLOOR_3"
CASE CMHDZ_ASSET_PIG RETURN "CMHDZ_ASSET_PIG"
CASE CMHDZ_ASSET_PIG_BATCH RETURN "CMHDZ_ASSET_PIG_BATCH"
CASE CMHDZ_ASSET_WATER_TOWER RETURN "CMHDZ_ASSET_WATER_TOWER"
// CASE CMHDZ_ASSET_SPECIAL_TNT_CRATE RETURN "CMHDZ_ASSET_SPECIAL_TNT_CRATE"
CASE CMHDZ_ASSET_SPECIAL_TNT_BARREL_1 RETURN "CMHDZ_ASSET_SPECIAL_TNT_BARREL_1"
CASE CMHDZ_ASSET_SPECIAL_TNT_BARREL_2 RETURN "CMHDZ_ASSET_SPECIAL_TNT_BARREL_2"
CASE CMHDZ_ASSET_MEATHOOK RETURN "CMHDZ_ASSET_MEATHOOK"
CASE CMHDZ_ASSET_DOOR_1 RETURN "CMHDZ_ASSET_DOOR_1"
CASE CMHDZ_ASSET_DOOR_2 RETURN "CMHDZ_ASSET_DOOR_2"
CASE CMHDZ_ASSET_WINDOW RETURN "CMHDZ_ASSET_WINDOW"
CASE CMHDZ_ASSET_OVERHEAD_LIGHT RETURN "CMHDZ_ASSET_OVERHEAD_LIGHT"
CASE NUM_CMHDZ_ASSET_TYPES RETURN "CMHDZ_ASSET_MAX_ASSETS"
ENDSWITCH
RETURN "TYPES_INVALID"
ENDFUNC
FUNC STRING CMHDZ_AUDIO_EFFECT_TO_STRING(CMHDZ_AUDIO_EFFECT eType)
SWITCH (eType)
CASE CMHDZ_AUDIO_EFFECT_GET_READY RETURN "CMHDZ_AUDIO_EFFECT_GET_READY"
CASE CMHDZ_AUDIO_EFFECT_DRAW RETURN "CMHDZ_AUDIO_EFFECT_DRAW"
CASE CMHDZ_AUDIO_EFFECT_SELECT_STAGE RETURN "CMHDZ_AUDIO_EFFECT_SELECT_STAGE"
CASE CMHDZ_AUDIO_EFFECT_SCREEN_LOCKED RETURN "CMHDZ_AUDIO_EFFECT_SCREEN_LOCKED"
CASE CMHDZ_AUDIO_EFFECT_MENU_BACK RETURN "CMHDZ_AUDIO_EFFECT_MENU_BACK"
CASE CMHDZ_AUDIO_EFFECT_SWAP_WEAPON RETURN "CMHDZ_AUDIO_EFFECT_SWAP_WEAPON"
CASE CMHDZ_AUDIO_EFFECT_RELOAD RETURN "CMHDZ_AUDIO_EFFECT_RELOAD"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_BODY RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_BODY"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_PLAYER RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_PLAYER"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_METAL RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_METAL"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_BUSHES RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_BUSHES"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_ROCK RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_ROCK"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_MISS RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_MISS"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_OPTION RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_OPTION"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_START RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_START"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_GENERIC RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_GENERIC"
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_HEADSHOT RETURN "CMHDZ_AUDIO_EFFECT_BULLET_HIT_HEADSHOT"
CASE CMHDZ_AUDIO_EFFECT_REVOLVER_FIRE RETURN "CMHDZ_AUDIO_EFFECT_REVOLVER_FIRE"
CASE CMHDZ_AUDIO_EFFECT_REVOLVER_EMPTY RETURN "CMHDZ_AUDIO_EFFECT_REVOLVER_EMPTY"
CASE CMHDZ_AUDIO_EFFECT_RIFLE_FIRE RETURN "CMHDZ_AUDIO_EFFECT_RIFLE_FIRE"
CASE CMHDZ_AUDIO_EFFECT_RIFLE_EMPTY RETURN "CMHDZ_AUDIO_EFFECT_RIFLE_EMPTY"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_AUDIO_EFFECT_SHOTGUN_FIRE RETURN "CMHDZ_AUDIO_EFFECT_SHOTGUN_FIRE"
CASE CMHDZ_AUDIO_EFFECT_SHOTGUN_EMPTY RETURN "CMHDZ_AUDIO_EFFECT_SHOTGUN_EMPTY"
CASE CMHDZ_AUDIO_EFFECT_NAILGUN_FIRE RETURN "CMHDZ_AUDIO_EFFECT_NAILGUN_FIRE"
CASE CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_SINGLE RETURN "CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_SINGLE"
CASE CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE RETURN "CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE"
CASE CMHDZ_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE RETURN "CMHDZ_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_DEAD RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_DEAD"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_LOW RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_LOW"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_HIGH RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_HIGH"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_INJURED RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_GLOAT RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_ATTACK RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_PAIN RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_DEAD RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_B_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_INJURED RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_B_INJURED"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_GLOAT RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_B_GLOAT"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_ATTACK RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_B_ATTACK"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_PAIN RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_B_PAIN"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_DEAD RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_C_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_INJURED RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_C_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_GLOAT RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_C_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_ATTACK RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_C_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_PAIN RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_C_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_DEAD RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_D_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_INJURED RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_D_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_GLOAT RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_D_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_ATTACK RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_D_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_PAIN RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_D_DEAD"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_AIM RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_AIM"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_FIRE RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_FIRE"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_AUDIO_EFFECT_ENEMY_CRIT_WARNING RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_CRIT_WARNING"
CASE CMHDZ_AUDIO_EFFECT_ENEMY_THROW_DYNAMITE RETURN "CMHDZ_AUDIO_EFFECT_ENEMY_THROW_DYNAMITE"
CASE CMHDZ_AUDIO_EFFECT_RESULTS_SCORE_UPDATE RETURN "CMHDZ_AUDIO_EFFECT_RESULTS_SCORE_UPDATE"
CASE CMHDZ_AUDIO_EFFECT_EXP_GENERIC RETURN "CMHDZ_AUDIO_EFFECT_EXP_GENERIC"
CASE CMHDZ_AUDIO_EFFECT_EXP_DYNAMITE RETURN "CMHDZ_AUDIO_EFFECT_EXP_DYNAMITE"
CASE CMHDZ_AUDIO_EFFECT_BUNNYGIRL_APPEAR RETURN "CMHDZ_AUDIO_EFFECT_BUNNYGIRL_APPEAR"
CASE CMHDZ_AUDIO_EFFECT_BUNNYGIRL_PAIN RETURN "CMHDZ_AUDIO_EFFECT_BUNNYGIRL_PAIN"
CASE CMHDZ_AUDIO_EFFECT_BUNNYGIRL_DEATH RETURN "CMHDZ_AUDIO_EFFECT_BUNNYGIRL_DEATH"
CASE CMHDZ_AUDIO_EFFECT_BUNNYGIRL_MISSED RETURN "CMHDZ_AUDIO_EFFECT_BUNNYGIRL_MISSED"
CASE CMHDZ_AUDIO_EFFECT_MONKEY_APPEAR RETURN "CMHDZ_AUDIO_EFFECT_MONKEY_APPEAR"
CASE CMHDZ_AUDIO_EFFECT_MONKEY_PAIN RETURN "CMHDZ_AUDIO_EFFECT_MONKEY_PAIN"
CASE CMHDZ_AUDIO_EFFECT_MONKEY_DEATH RETURN "CMHDZ_AUDIO_EFFECT_MONKEY_DEATH"
CASE CMHDZ_AUDIO_EFFECT_MONKEY_MISSED RETURN "CMHDZ_AUDIO_EFFECT_MONKEY_MISSED"
CASE CMHDZ_AUDIO_EFFECT_RAT_APPEAR RETURN "CMHDZ_AUDIO_EFFECT_RAT_APPEAR"
CASE CMHDZ_AUDIO_EFFECT_RAT_DEATH RETURN "CMHDZ_AUDIO_EFFECT_RAT_DEATH"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_THROW RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_THROW"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_HIT RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_HIT"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_THROW RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_THROW"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_HIT RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_HIT"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_THROW RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_THROW"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_HIT RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_HIT"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_AUDIO_EFFECT_PICKUP_HEALTH RETURN "CMHDZ_AUDIO_EFFECT_PICKUP_HEALTH"
CASE CMHDZ_AUDIO_EFFECT_PICKUP_BUFF RETURN "CMHDZ_AUDIO_EFFECT_PICKUP_BUFF"
CASE CMHDZ_AUDIO_EFFECT_PICKUP_CASH RETURN "CMHDZ_AUDIO_EFFECT_PICKUP_CASH"
CASE CMHDZ_AUDIO_EFFECT_PICKUP_TAPE RETURN "CMHDZ_AUDIO_EFFECT_PICKUP_TAPE"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_RELOAD RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_RELOAD"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SHOOT_HEADSHOT RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_SHOOT_HEADSHOT"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_BAD RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_BAD"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_AVERAGE RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_AVERAGE"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_GOOD RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_GOOD"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_AMAZING RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_AMAZING"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_COMPLETE_LEVEL RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_COMPLETE_LEVEL"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_DEATH RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_DEATH"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_RESULTS_DEAD RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_RESULTS_DEAD"
CASE CMHDZ_AUDIO_EFFECT_PLAYER_FINISH_GAME RETURN "CMHDZ_AUDIO_EFFECT_PLAYER_FINISH_GAME"
CASE CMHDZ_AUDIO_EFFECT_MAX RETURN "CMHDZ_AUDIO_EFFECT_MAX"
ENDSWITCH
RETURN "CMHDZ_AUDIO_EFFECT_INVALID"
ENDFUNC
FUNC STRING CMHDZ_AUDIO_SCENE_TO_STRING(CMHDZ_AUDIO_SCENE eType)
SWITCH (eType)
CASE CMHDZ_AUDIO_SCENE_MENUS RETURN "CMHDZ_AUDIO_SCENE_MENUS"
CASE CMHDZ_AUDIO_SCENE_GAMEPLAY RETURN "CMHDZ_AUDIO_SCENE_GAMEPLAY"
CASE CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE RETURN "CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE"
ENDSWITCH
RETURN "CMHDZ_AUDIO_SCENE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_CHALLENGES_TO_STRING(CMHDZ_CHALLENGES eType)
SWITCH (eType)
CASE CMHDZ_CHALLENGE_FACES_OF_DEATH_PLATINUM RETURN "CMHDZ_CHALLENGE_FACES_OF_DEATH_PLATINUM"
CASE CMHDZ_CHALLENGE_TRAINED_TO_KILL RETURN "CMHDZ_CHALLENGE_TRAINED_TO_KILL"
CASE CMHDZ_CHALLENGE_STRAIGHT_TO_VIDEO RETURN "CMHDZ_CHALLENGE_STRAIGHT_TO_VIDEO"
CASE CMHDZ_CHALLENGE_FACES_OF_DEATH_BRONZE RETURN "CMHDZ_CHALLENGE_FACES_OF_DEATH_BRONZE"
CASE CMHDZ_CHALLENGE_FACES_OF_DEATH_SILVER RETURN "CMHDZ_CHALLENGE_FACES_OF_DEATH_SILVER"
CASE CMHDZ_CHALLENGE_FACES_OF_DEATH_GOLD RETURN "CMHDZ_CHALLENGE_FACES_OF_DEATH_GOLD"
ENDSWITCH
RETURN "CMHDZ_CHALLENGES_INVALID"
ENDFUNC
FUNC STRING CMHDZ_COVER_DATA_BITS_TO_STRING(CMHDZ_COVER_DATA_BITS eType)
SWITCH (eType)
CASE CMHDZ_COVER_DATA_BITS_NONE RETURN "CMHDZ_COVER_DATA_BITS_NONE"
CASE CMHDZ_COVER_DATA_BITS_SPAWNED_PICKUP RETURN "CMHDZ_COVER_DATA_BITS_SPAWNED_PICKUP"
CASE CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER RETURN "CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER"
CASE CMHDZ_COVER_DATA_BITS_IS_ANIMATED RETURN "CMHDZ_COVER_DATA_BITS_IS_ANIMATED"
CASE CMHDZ_COVER_DATA_BITS_IS_FAR_BG RETURN "CMHDZ_COVER_DATA_BITS_IS_FAR_BG"
CASE CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN RETURN "CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN"
ENDSWITCH
RETURN "CMHDZ_COVER_DATA_BITS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_DAMAGE_PLAYER_TYPES_TO_STRING(CMHDZ_DAMAGE_PLAYER_TYPES eType)
SWITCH (eType)
CASE CMHDZ_DAMAGE_PLAYER_TYPE_BULLET RETURN "CMHDZ_DAMAGE_PLAYER_TYPE_BULLET"
CASE CMHDZ_DAMAGE_PLAYER_TYPE_DYNAMITE RETURN "CMHDZ_DAMAGE_PLAYER_TYPE_DYNAMITE"
CASE CMHDZ_DAMAGE_PLAYER_TYPE_SLASH RETURN "CMHDZ_DAMAGE_PLAYER_TYPE_SLASH"
ENDSWITCH
RETURN "CMHDZ_DAMAGE_PLAYER_TYPES_INVALID"
ENDFUNC
FUNC STRING CMHDZ_ENEMY_DATA_BITS_TO_STRING(CMHDZ_ENEMY_DATA_BITS eType)
SWITCH (eType)
CASE CMHDZ_ENEMY_DATA_BITS_NONE RETURN "CMHDZ_ENEMY_DATA_BITS_NONE"
CASE CMHDZ_ENEMY_DATA_BITS_REVERSE RETURN "CMHDZ_ENEMY_DATA_BITS_REVERSE"
CASE CMHDZ_ENEMY_DATA_BITS_IS_POPUP RETURN "CMHDZ_ENEMY_DATA_BITS_IS_POPUP"
CASE CMHDZ_ENEMY_DATA_BITS_PLAYED_AIM_AUDIO RETURN "CMHDZ_ENEMY_DATA_BITS_PLAYED_AIM_AUDIO"
CASE CMHDZ_ENEMY_DATA_BITS_PLAYED_WARN_AUDIO RETURN "CMHDZ_ENEMY_DATA_BITS_PLAYED_WARN_AUDIO"
CASE CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY RETURN "CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY"
CASE CMHDZ_ENEMY_DATA_BITS_SHOT_AT_LEAST_ONCE RETURN "CMHDZ_ENEMY_DATA_BITS_SHOT_AT_LEAST_ONCE"
CASE CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE RETURN "CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE"
CASE CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN RETURN "CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN"
ENDSWITCH
RETURN "CMHDZ_ENEMY_DATA_BITS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_ENEMY_STATE_TO_STRING(CMHDZ_ENEMY_STATE eType)
SWITCH (eType)
CASE CMHDZ_ENEMY_STATE_WAITING RETURN "CMHDZ_ENEMY_STATE_WAITING"
CASE CMHDZ_ENEMY_STATE_ACTIVE RETURN "CMHDZ_ENEMY_STATE_ACTIVE"
CASE CMHDZ_ENEMY_STATE_ATTACKING RETURN "CMHDZ_ENEMY_STATE_ATTACKING"
CASE CMHDZ_ENEMY_STATE_DYING RETURN "CMHDZ_ENEMY_STATE_DYING"
CASE CMHDZ_ENEMY_STATE_INACTIVE RETURN "CMHDZ_ENEMY_STATE_INACTIVE"
ENDSWITCH
RETURN "CMHDZ_ENEMY_STATE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_ENEMY_TYPES_TO_STRING(CMHDZ_ENEMY_TYPES eType)
SWITCH (eType)
CASE CMHDZ_ENEMY_INVALID RETURN "CMHDZ_ENEMY_INVALID"
CASE CMHDZ_ENEMY_1 RETURN "CMHDZ_ENEMY_1"
CASE CMHDZ_ENEMY_2 RETURN "CMHDZ_ENEMY_2"
CASE CMHDZ_ENEMY_3 RETURN "CMHDZ_ENEMY_3"
CASE CMHDZ_ENEMY_4 RETURN "CMHDZ_ENEMY_4"
CASE CMHDZ_ENEMY_5 RETURN "CMHDZ_ENEMY_5"
CASE CMHDZ_FOREGROUND_ENEMY_T1_1 RETURN "CMHDZ_FOREGROUND_ENEMY_T1_1"
CASE CMHDZ_FOREGROUND_ENEMY_T1_2 RETURN "CMHDZ_FOREGROUND_ENEMY_T1_2"
CASE CMHDZ_FOREGROUND_ENEMY_T2_1 RETURN "CMHDZ_FOREGROUND_ENEMY_T2_1"
CASE CMHDZ_FOREGROUND_ENEMY_T2_2 RETURN "CMHDZ_FOREGROUND_ENEMY_T2_2"
CASE CMHDZ_FOREGROUND_ENEMY_T3_1 RETURN "CMHDZ_FOREGROUND_ENEMY_T3_1"
CASE CMHDZ_FOREGROUND_ENEMY_T3_2 RETURN "CMHDZ_FOREGROUND_ENEMY_T3_2"
CASE CMHDZ_FOREGROUND_ENEMY_T4_1 RETURN "CMHDZ_FOREGROUND_ENEMY_T4_1"
CASE CMHDZ_FOREGROUND_ENEMY_T4_2 RETURN "CMHDZ_FOREGROUND_ENEMY_T4_2"
CASE CMHDZ_FOREGROUND_ENEMY_T5_1 RETURN "CMHDZ_FOREGROUND_ENEMY_T5_1"
CASE CMHDZ_FOREGROUND_ENEMY_T5_2 RETURN "CMHDZ_FOREGROUND_ENEMY_T5_2"
CASE CMHDZ_THROWING_ENEMY_1 RETURN "CMHDZ_THROWING_ENEMY_1"
CASE CMHDZ_THROWING_ENEMY_2 RETURN "CMHDZ_THROWING_ENEMY_2"
CASE CMHDZ_THROWING_ENEMY_3 RETURN "CMHDZ_THROWING_ENEMY_3"
CASE CMHDZ_THROWING_ENEMY_4 RETURN "CMHDZ_THROWING_ENEMY_4"
CASE CMHDZ_THROWING_ENEMY_5 RETURN "CMHDZ_THROWING_ENEMY_5"
CASE CMHDZ_RARE_ENEMY_BUNNY RETURN "CASE CMHDZ_RARE_ENEMY_BUNNY"
CASE CMHDZ_RARE_ENEMY_MONKEY RETURN "CASE CMHDZ_RARE_ENEMY_MONKEY"
CASE CMHDZ_RARE_ENEMY_RAT RETURN "CASE CMHDZ_RARE_ENEMY_RAT"
ENDSWITCH
SWITCH (eType)
CASE NUM_CMHDZ_ENEMY_TYPES RETURN "NUM_CMHDZ_ENEMY_TYPES"
ENDSWITCH
RETURN "CMHDZ_ENEMY_TYPES_INVALID"
ENDFUNC
FUNC STRING CMHDZ_BOSS_DATA_BITS_TO_STRING(CMHDZ_BOSS_DATA_BITS eType)
SWITCH (eType)
CASE CMHDZ_BOSS_DATA_BITS_NONE RETURN "CMHDZ_BOSS_DATA_BITS_NONE"
CASE CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_1 RETURN "CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_1"
CASE CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_2 RETURN "CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_2"
ENDSWITCH
RETURN "CMHDZ_BOSS_DATA_BITS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_BOSS_STATE_TO_STRING(CMHDZ_BOSS_STATE state)
SWITCH state
CASE CMHDZ_BOSS_STATE_WAITING
RETURN "CMHDZ_BOSS_STATE_WAITING"
CASE CMHDZ_BOSS_STATE_WALKING
RETURN "CMHDZ_BOSS_STATE_WALKING"
CASE CMHDZ_BOSS_STATE_WALKING_INV
RETURN "CMHDZ_BOSS_STATE_WALKING_INV"
CASE CMHDZ_BOSS_STATE_THROWING
RETURN "CMHDZ_BOSS_STATE_THROWING"
CASE CMHDZ_BOSS_STATE_BACKUP
RETURN "CMHDZ_BOSS_STATE_BACKUP"
CASE CMHDZ_BOSS_STATE_FOREGROUND_POP_UP
RETURN "CMHDZ_BOSS_STATE_FOREGROUND_POP_UP"
CASE CMHDZ_BOSS_STATE_FOREGROUND_POP_DOWN
RETURN "CMHDZ_BOSS_STATE_FOREGROUND_POP_DOWN"
CASE CMHDZ_BOSS_STATE_FOREGROUND_PAIN
RETURN "CMHDZ_BOSS_STATE_FOREGROUND_PAIN"
CASE CMHDZ_BOSS_STATE_FOREGROUND_IDLE
RETURN "CMHDZ_BOSS_STATE_FOREGROUND_IDLE"
CASE CMHDZ_BOSS_STATE_BLOCKING
RETURN "CMHDZ_BOSS_STATE_BLOCKING"
CASE CMHDZ_BOSS_STATE_ATTACK_READY
RETURN "CMHDZ_BOSS_STATE_ATTACK_READY"
CASE CMHDZ_BOSS_STATE_ATTACKING
RETURN "CMHDZ_BOSS_STATE_ATTACKING"
CASE CMHDZ_BOSS_STATE_ATTACKING_COUNTER
RETURN "CMHDZ_BOSS_STATE_ATTACKING_COUNTER"
CASE CMHDZ_BOSS_STATE_STUNNED_BACKGROUND
RETURN "CMHDZ_BOSS_STATE_STUNNED_BACKGROUND"
CASE CMHDZ_BOSS_STATE_STUNNED_FOREGROUND
RETURN "CMHDZ_BOSS_STATE_STUNNED_FOREGROUND"
CASE CMHDZ_BOSS_STATE_PAIN
RETURN "CMHDZ_BOSS_STATE_PAIN"
CASE CMHDZ_BOSS_STATE_DYING
RETURN "CMHDZ_BOSS_STATE_DYING"
CASE CMHDZ_BOSS_STATE_FINAL
RETURN "CMHDZ_BOSS_STATE_FINAL"
CASE CMHDZ_BOSS_STATE_SPAWN_HELPERS_1
RETURN "CMHDZ_BOSS_STATE_SPAWN_HELPERS_1"
CASE CMHDZ_BOSS_STATE_SPAWN_HELPERS_2
RETURN "CMHDZ_BOSS_STATE_SPAWN_HELPERS_2"
CASE CMHDZ_BOSS_STATE_WAIT_FOR_ALL_ENEMIES_DEAD
RETURN "CMHDZ_BOSS_STATE_WAIT_FOR_ALL_ENEMIES_DEAD"
CASE CMHDZ_BOSS_STATE_INACTIVE
RETURN "CMHDZ_BOSS_STATE_INACTIVE"
ENDSWITCH
RETURN "CMHDZ_BOSS_STATE_INACTIVE"
ENDFUNC
FUNC STRING CMHDZ_BOSS_TYPES_TO_STRING(CMHDZ_ENEMY_TYPES eType)
SWITCH (eType)
ENDSWITCH
RETURN "CMHDZ_ENEMY_TYPES_INVALID"
ENDFUNC
FUNC STRING CMHDZ_FX_TYPE_TO_STRING(CMHDZ_FX_TYPE eType)
SWITCH (eType)
CASE CMHDZ_FX_EXPLOSION RETURN "CMHDZ_FX_EXPLOSION"
CASE CMHDZ_FX_ENEMY_SHOT RETURN "CMHDZ_FX_ENEMY_SHOT"
CASE CMHDZ_FX_IMPACT RETURN "CMHDZ_FX_IMPACT"
CASE CMHDZ_FX_ENEMY_TNT_EXP RETURN "CMHDZ_FX_ENEMY_TNT_EXP"
CASE CMHDZ_FX_LOOT_CRATE RETURN "CMHDZ_FX_LOOT_CRATE"
CASE CMHDZ_FX_BLOOD_SPLAT RETURN "CMHDZ_FX_BLOOD_SPLAT"
CASE CMHDZ_FX_BEARSY_FOREGROUND_ATTACKING_BLOOD RETURN "CMHDZ_FX_BEARSY_FOREGROUND_ATTACKING_BLOOD"
CASE CMHDZ_FX_BEARSY_FOREGROUND_PAIN_BLOOD RETURN "CMHDZ_FX_BEARSY_FOREGROUND_PAIN_BLOOD"
CASE CMHDZ_FX_BEARSY_FOREGROUND_SPARKS RETURN "CMHDZ_FX_BEARSY_FOREGROUND_SPARKS"
CASE CMHDZ_FX_SLASH_EFFECT RETURN "CMHDZ_FX_SLASH_EFFECT"
ENDSWITCH
RETURN "CMHDZ_FX_TYPE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_HELP_TEXT_BITS_TO_STRING(CMHDZ_HELP_TEXT_BITS eType)
SWITCH (eType)
// CASE CMHDZ_HELP_TEXT_BIT_SHOOT_AIM RETURN "CMHDZ_HELP_TEXT_BIT_SHOOT_AIM"
// CASE CMHDZ_HELP_TEXT_BIT_RELOAD RETURN "CMHDZ_HELP_TEXT_BIT_RELOAD"
// CASE CMHDZ_HELP_TEXT_BIT_HEADSHOT RETURN "CMHDZ_HELP_TEXT_BIT_HEADSHOT"
// CASE CMHDZ_HELP_TEXT_BIT_THROW RETURN "CMHDZ_HELP_TEXT_BIT_THROW"
// CASE CMHDZ_HELP_TEXT_BIT_MICROAIM RETURN "CMHDZ_HELP_TEXT_BIT_MICROAIM"
//
// CASE CMHDZ_HELP_TEXT_BIT_HEALTH RETURN "CMHDZ_HELP_TEXT_BIT_HEALTH"
//
// CASE CMHDZ_HELP_TEXT_BIT_BUFF RETURN "CMHDZ_HELP_TEXT_BIT_BUFF"
// CASE CMHDZ_HELP_TEXT_BIT_PILLS RETURN "CMHDZ_HELP_TEXT_BIT_PILLS"
//
// CASE CMHDZ_HELP_TEXT_BIT_CASH RETURN "CMHDZ_HELP_TEXT_BIT_CASH"
// CASE CMHDZ_HELP_TEXT_BIT_VIDEO RETURN "CMHDZ_HELP_TEXT_BIT_VIDEO"
//
// CASE CMHDZ_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT RETURN "CMHDZ_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT"
// CASE CMHDZ_HELP_TEXT_BIT_TRAINED_TO_KILL RETURN "CMHDZ_HELP_TEXT_BIT_TRAINED_TO_KILL"
// CASE CMHDZ_HELP_TEXT_BIT_STRAIGHT_TO_VIDEO RETURN "CMHDZ_HELP_TEXT_BIT_STRAIGHT_TO_VIDEO"
// CASE CMHDZ_HELP_TEXT_BIT_DIRECTOR RETURN "CMHDZ_HELP_TEXT_BIT_DIRECTOR"
//
// CASE CMHDZ_HELP_TEXT_BIT_MONKEY RETURN "CMHDZ_HELP_TEXT_BIT_MONKEY"
//
// CASE CMHDZ_HELP_TEXT_BIT_RIFLE RETURN "CMHDZ_HELP_TEXT_BIT_RIFLE"
// CASE CMHDZ_HELP_TEXT_BIT_SHOTGUN RETURN "CMHDZ_HELP_TEXT_BIT_SHOTGUN"
// CASE CMHDZ_HELP_TEXT_BIT_NAIL RETURN "CMHDZ_HELP_TEXT_BIT_NAIL"
//
// CASE CMHDZ_HELP_TEXT_BIT_MOLOTOV RETURN "CMHDZ_HELP_TEXT_BIT_MOLOTOV"
// CASE CMHDZ_HELP_TEXT_BIT_NAILBOMB RETURN "CMHDZ_HELP_TEXT_BIT_NAILBOMB"
//
// CASE CMHDZ_HELP_TEXT_BIT_DYNAMITE RETURN "CMHDZ_HELP_TEXT_BIT_DYNAMITE"
CASE CMHDZ_HELP_TEXT_BIT_BEARSY RETURN "CMHDZ_HELP_TEXT_BIT_BEARSY"
ENDSWITCH
RETURN "CMHDZ_HELP_TEXT_BITS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_HUD_CHAR_TO_STRING(CMHDZ_HUD_CHAR eType)
SWITCH (eType)
CASE CMHDZ_HUD_CHAR_INVALID RETURN "CMHDZ_HUD_CHAR_INVALID"
CASE CMHDZ_HUD_CHAR_SPACE RETURN "CMHDZ_HUD_CHAR_SPACE"
CASE CMHDZ_HUD_CHAR_0 RETURN "CMHDZ_HUD_CHAR_0"
CASE CMHDZ_HUD_CHAR_1 RETURN "CMHDZ_HUD_CHAR_1"
CASE CMHDZ_HUD_CHAR_2 RETURN "CMHDZ_HUD_CHAR_2"
CASE CMHDZ_HUD_CHAR_3 RETURN "CMHDZ_HUD_CHAR_3"
CASE CMHDZ_HUD_CHAR_4 RETURN "CMHDZ_HUD_CHAR_4"
CASE CMHDZ_HUD_CHAR_5 RETURN "CMHDZ_HUD_CHAR_5"
CASE CMHDZ_HUD_CHAR_6 RETURN "CMHDZ_HUD_CHAR_6"
CASE CMHDZ_HUD_CHAR_7 RETURN "CMHDZ_HUD_CHAR_7"
CASE CMHDZ_HUD_CHAR_8 RETURN "CMHDZ_HUD_CHAR_8"
CASE CMHDZ_HUD_CHAR_9 RETURN "CMHDZ_HUD_CHAR_9"
CASE CMHDZ_HUD_CHAR_A RETURN "CMHDZ_HUD_CHAR_A"
CASE CMHDZ_HUD_CHAR_B RETURN "CMHDZ_HUD_CHAR_B"
CASE CMHDZ_HUD_CHAR_C RETURN "CMHDZ_HUD_CHAR_C"
CASE CMHDZ_HUD_CHAR_D RETURN "CMHDZ_HUD_CHAR_D"
CASE CMHDZ_HUD_CHAR_E RETURN "CMHDZ_HUD_CHAR_E"
CASE CMHDZ_HUD_CHAR_F RETURN "CMHDZ_HUD_CHAR_F"
CASE CMHDZ_HUD_CHAR_G RETURN "CMHDZ_HUD_CHAR_G"
CASE CMHDZ_HUD_CHAR_H RETURN "CMHDZ_HUD_CHAR_H"
CASE CMHDZ_HUD_CHAR_I RETURN "CMHDZ_HUD_CHAR_I"
CASE CMHDZ_HUD_CHAR_J RETURN "CMHDZ_HUD_CHAR_J"
CASE CMHDZ_HUD_CHAR_K RETURN "CMHDZ_HUD_CHAR_K"
CASE CMHDZ_HUD_CHAR_L RETURN "CMHDZ_HUD_CHAR_L"
CASE CMHDZ_HUD_CHAR_M RETURN "CMHDZ_HUD_CHAR_M"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_HUD_CHAR_N RETURN "CMHDZ_HUD_CHAR_N"
CASE CMHDZ_HUD_CHAR_O RETURN "CMHDZ_HUD_CHAR_O"
CASE CMHDZ_HUD_CHAR_P RETURN "CMHDZ_HUD_CHAR_P"
CASE CMHDZ_HUD_CHAR_Q RETURN "CMHDZ_HUD_CHAR_Q"
CASE CMHDZ_HUD_CHAR_R RETURN "CMHDZ_HUD_CHAR_R"
CASE CMHDZ_HUD_CHAR_S RETURN "CMHDZ_HUD_CHAR_S"
CASE CMHDZ_HUD_CHAR_T RETURN "CMHDZ_HUD_CHAR_T"
CASE CMHDZ_HUD_CHAR_U RETURN "CMHDZ_HUD_CHAR_U"
CASE CMHDZ_HUD_CHAR_V RETURN "CMHDZ_HUD_CHAR_V"
CASE CMHDZ_HUD_CHAR_W RETURN "CMHDZ_HUD_CHAR_W"
CASE CMHDZ_HUD_CHAR_X RETURN "CMHDZ_HUD_CHAR_X"
CASE CMHDZ_HUD_CHAR_Y RETURN "CMHDZ_HUD_CHAR_Y"
CASE CMHDZ_HUD_CHAR_Z RETURN "CMHDZ_HUD_CHAR_Z"
CASE CMHDZ_HUD_CHAR_APOSTROPHE RETURN "CMHDZ_HUD_CHAR_APOSTROPHE"
CASE CMHDZ_HUD_CHAR_BACKSLASH RETURN "CMHDZ_HUD_CHAR_BACKSLASH"
CASE CMHDZ_HUD_CHAR_CLOSEBRACKET RETURN "CMHDZ_HUD_CHAR_CLOSEBRACKET"
CASE CMHDZ_HUD_CHAR_COLON RETURN "CMHDZ_HUD_CHAR_COLON"
CASE CMHDZ_HUD_CHAR_COMMA RETURN "CMHDZ_HUD_CHAR_COMMA"
CASE CMHDZ_HUD_CHAR_DOLLAR RETURN "CMHDZ_HUD_CHAR_DOLLAR"
CASE CMHDZ_HUD_CHAR_EXCLAMATION RETURN "CMHDZ_HUD_CHAR_EXCLAMATION"
CASE CMHDZ_HUD_CHAR_FULL_STOP RETURN "CMHDZ_HUD_CHAR_FULL_STOP"
CASE CMHDZ_HUD_CHAR_MINUS RETURN "CMHDZ_HUD_CHAR_MINUS"
CASE CMHDZ_HUD_CHAR_OPEN_BRACKET RETURN "CMHDZ_HUD_CHAR_OPEN_BRACKET"
CASE CMHDZ_HUD_CHAR_PLUS RETURN "CMHDZ_HUD_CHAR_PLUS"
CASE CMHDZ_HUD_CHAR_QUESTION RETURN "CMHDZ_HUD_CHAR_QUESTION"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_HUD_CHAR_SEMI_COLON RETURN "CMHDZ_HUD_CHAR_SEMI_COLON"
CASE CMHDZ_HUD_CHAR_SPEECH RETURN "CMHDZ_HUD_CHAR_SPEECH"
CASE CMHDZ_HUD_CHAR_STAR RETURN "CMHDZ_HUD_CHAR_STAR"
CASE NUM_CMHDZ_HUD_CHAR RETURN "NUM_CMHDZ_HUD_CHAR"
ENDSWITCH
RETURN "CMHDZ_HUD_CHAR_INVALID"
ENDFUNC
FUNC STRING CMHDZ_HUD_TEXTPIVOT_TO_STRING(CMHDZ_HUD_TEXTPIVOT eType)
SWITCH (eType)
CASE CMHDZ_HUD_TEXTPIVOT_LEFT RETURN "CMHDZ_HUD_TEXTPIVOT_LEFT"
CASE CMHDZ_HUD_TEXTPIVOT_CENTER RETURN "CMHDZ_HUD_TEXTPIVOT_CENTER"
CASE CMHDZ_HUD_TEXTPIVOT_RIGHT RETURN "CMHDZ_HUD_TEXTPIVOT_RIGHT"
CASE CMHDZ_HUD_TEXTPIVOT_USE_STORED RETURN "CMHDZ_HUD_TEXTPIVOT_USE_STORED"
ENDSWITCH
RETURN "CMHDZ_HUD_TEXTPIVOT_INVALID"
ENDFUNC
FUNC STRING CMHDZ_ITEM_DATA_BITS_TO_STRING(CMHDZ_ITEM_DATA_BITS eType)
SWITCH (eType)
CASE CMHDZ_ITEM_DATA_BITS_NONE RETURN "CMHDZ_ITEM_DATA_BITS_NONE"
CASE CMHDZ_ITEM_DATA_BITS_SPAWNED RETURN "CMHDZ_ITEM_DATA_BITS_SPAWNED"
CASE CMHDZ_ITEM_DATA_BITS_RENDERING RETURN "CMHDZ_ITEM_DATA_BITS_RENDERING"
CASE CMHDZ_ITEM_DATA_BITS_SHOT RETURN "CMHDZ_ITEM_DATA_BITS_SHOT"
ENDSWITCH
RETURN "CMHDZ_ITEM_DATA_BITS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_ITEM_TYPES_TO_STRING(CMHDZ_ITEM_TYPES eType)
SWITCH (eType)
CASE CMHDZ_ITEM_NONE RETURN "CMHDZ_ITEM_NONE"
CASE CMHDZ_ITEM_HEALTH RETURN "CMHDZ_ITEM_HEALTH"
CASE CMHDZ_ITEM_SHIELD RETURN "CMHDZ_ITEM_SHIELD"
CASE CMHDZ_ITEM_BUFF RETURN "CMHDZ_ITEM_BUFF"
CASE CMHDZ_ITEM_VIDEOTAPE RETURN "CMHDZ_ITEM_VIDEOTAPE"
// CASE CMHDZ_ITEM_REVOLVER_AMMO RETURN "CMHDZ_ITEM_REVOLVER_AMMO"
CASE CMHDZ_ITEM_NAIL_GUN_AMMO RETURN "CMHDZ_ITEM_NAIL_GUN_AMMO"
CASE CMHDZ_ITEM_RIFLE_AMMO RETURN "CMHDZ_ITEM_RIFLE_AMMO"
CASE CMHDZ_ITEM_SHOTGUN_AMMO RETURN "CMHDZ_ITEM_SHOTGUN_AMMO"
CASE CMHDZ_ITEM_MOLOTOV RETURN "CMHDZ_ITEM_MOLOTOV"
CASE CMHDZ_ITEM_NAILBOMB RETURN "CMHDZ_ITEM_NAILBOMB"
CASE CMHDZ_ITEM_BRICK RETURN "CMHDZ_ITEM_BRICK"
CASE CMHDZ_ITEM_DYNAMITE RETURN "CMHDZ_ITEM_DYNAMITE"
CASE NUM_CMHDZ_ITEM_TYPES RETURN "NUM_CMHDZ_ITEM_TYPES"
ENDSWITCH
RETURN "CMHDZ_ITEM_TYPES_INVALID"
ENDFUNC
FUNC STRING CMHDZ_LEVEL_SCREEN_TO_STRING(CMHDZ_LEVEL_SCREEN eType)
SWITCH (eType)
CASE CMHDZ_FADING_IN RETURN "CMHDZ_FADING_IN"
CASE CMHDZ_PLAY RETURN "CMHDZ_PLAY"
CASE CMHDZ_WAIT_FOR_DEAD RETURN "CMHDZ_WAIT_FOR_DEAD"
CASE CMHDZ_FADING_OUT RETURN "CMHDZ_FADING_OUT"
ENDSWITCH
RETURN "CMHDZ_LEVEL_SCREEN_INVALID"
ENDFUNC
FUNC STRING CMHDZ_LEVELS_TO_STRING(CMHDZ_LEVELS eType)
SWITCH (eType)
CASE CMHDZ_LEVEL_CITY RETURN "CMHDZ_LEVEL_CITY"
CASE CMHDZ_LEVEL_SCRAPYARD RETURN "CMHDZ_LEVEL_SCRAPYARD"
CASE CMHDZ_LEVEL_ASYLUM RETURN "CMHDZ_LEVEL_ASYLUM"
CASE CMHDZ_LEVEL_PARK RETURN "CMHDZ_LEVEL_PARK"
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE RETURN "CMHDZ_LEVEL_SLAUGHTERHOUSE"
CASE CMHDZ_MAX_LEVELS RETURN "CMHDZ_MAX_LEVELS"
ENDSWITCH
RETURN "CMHDZ_LEVELS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_LEVELS_BITSET_TO_STRING(CMHDZ_LEVELS_BITSET eType)
SWITCH (eType)
CASE CMHDZ_LEVELS_BIT_STOPPED RETURN "CMHDZ_LEVELS_BIT_STOPPED"
CASE CMHDZ_LEVELS_BIT_TOWN_LARGE_BUILDING_PASSED_BY1 RETURN "CMHDZ_LEVELS_BIT_TOWN_LARGE_BUILDING_PASSED_BY1"
CASE CMHDZ_LEVELS_BIT_REPLAYING_LEVEL RETURN "CMHDZ_LEVELS_BIT_REPLAYING_LEVEL"
CASE CMHDZ_LEVELS_BIT_USED_SPECIAL_WEAPON RETURN "CMHDZ_LEVELS_BIT_USED_SPECIAL_WEAPON"
CASE CMHDZ_LEVELS_BIT_DONE_RESULTS_SCREEN_AUDIO RETURN "CMHDZ_LEVELS_BIT_DONE_RESULTS_SCREEN_AUDIO"
CASE CMHDZ_LEVELS_BIT_ADDED_ON_ACCURACY_BONUS RETURN "CMHDZ_LEVELS_BIT_ADDED_ON_ACCURACY_BONUS"
CASE CMHDZ_LEVELS_BIT_PLAYED_DEATH_SCREEN_AUDIO RETURN "CMHDZ_LEVELS_BIT_PLAYED_DEATH_SCREEN_AUDIO"
CASE CMHDZ_LEVELS_BIT_PLAYED_RESULTS_SCORE_AUDIO RETURN "CMHDZ_LEVELS_BIT_PLAYED_RESULTS_SCORE_AUDIO"
CASE CMHDZ_LEVELS_BIT_PLAYED_ACCURACY_SCORE_AUDIO RETURN "CMHDZ_LEVELS_BIT_PLAYED_ACCURACY_SCORE_AUDIO"
CASE CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_MONKEY_KILL RETURN "CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_MONKEY_KILL"
CASE CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_BUNNY_KILL RETURN "CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_BUNNY_KILL"
ENDSWITCH
RETURN "CMHDZ_LEVELS_BITSET_INVALID"
ENDFUNC
FUNC STRING CMHDZ_MENU_OPTIONS_TO_STRING(CMHDZ_MENU_OPTIONS eType)
SWITCH (eType)
CASE CMHDZ_START RETURN "CMHDZ_START"
CASE CMHDZ_SCORES RETURN "CMHDZ_SCORES"
CASE CMHDZ_WANTED_1 RETURN "CMHDZ_WANTED_1"
CASE CMHDZ_WANTED_2 RETURN "CMHDZ_WANTED_2"
CASE CMHDZ_WANTED_3 RETURN "CMHDZ_WANTED_3"
CASE CMHDZ_WANTED_4 RETURN "CMHDZ_WANTED_4"
CASE CMHDZ_WANTED_5 RETURN "CMHDZ_WANTED_5"
CASE CMHDZ_REWIND RETURN "CMHDZ_REWIND"
CASE CMHDZ_EJECT RETURN "CMHDZ_EJECT"
ENDSWITCH
RETURN "CMHDZ_MENU_OPTIONS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_MUSIC_BITS_TO_STRING(CMHDZ_MUSIC_BITS eType)
SWITCH (eType)
CASE CMHDZ_MUSIC_BIT_STARTED_INTRO RETURN "CMHDZ_MUSIC_BIT_STARTED_INTRO"
CASE CMHDZ_MUSIC_BIT_STARTED_TITLE RETURN "CMHDZ_MUSIC_BIT_STARTED_TITLE"
//CASE CMHDZ_MUSIC_BIT_STARTED_LEVEL RETURN "CMHDZ_MUSIC_BIT_STARTED_LEVEL"
CASE CMHDZ_MUSIC_BIT_STOPPED RETURN "CMHDZ_MUSIC_BIT_STOPPED"
CASE CMHDZ_MUSIC_BIT_DEATH RETURN "CMHDZ_MUSIC_BIT_DEATH"
ENDSWITCH
RETURN "CMHDZ_MUSIC_BITS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_MUSIC_EVENTS_TO_STRING(CMHDZ_MUSIC_EVENTS eType)
SWITCH (eType)
CASE CMHDZ_MUSIC_EVENT_INVALID RETURN "CMHDZ_MUSIC_EVENT_INVALID"
CASE CMHDZ_MUSIC_EVENT_INTRO RETURN "CMHDZ_MUSIC_EVENT_INTRO"
CASE CMHDZ_MUSIC_EVENT_TITLE RETURN "CMHDZ_MUSIC_EVENT_TITLE"
CASE CMHDZ_MUSIC_EVENT_GOSPEL RETURN "CMHDZ_MUSIC_EVENT_GOSPEL"
CASE CMHDZ_MUSIC_EVENT_BUCKLE RETURN "CMHDZ_MUSIC_EVENT_BUCKLE"
CASE CMHDZ_MUSIC_EVENT_HILLBILLY RETURN "CMHDZ_MUSIC_EVENT_HILLBILLY"
CASE CMHDZ_MUSIC_EVENT_RUCKUS RETURN "CMHDZ_MUSIC_EVENT_RUCKUS"
CASE CMHDZ_MUSIC_EVENT_BARREL RETURN "CMHDZ_MUSIC_EVENT_BARREL"
CASE CMHDZ_MUSIC_EVENT_DEATH RETURN "CMHDZ_MUSIC_EVENT_DEATH"
CASE CMHDZ_MUSIC_EVENT_STOP RETURN "CMHDZ_MUSIC_EVENT_STOP"
ENDSWITCH
RETURN "CMHDZ_MUSIC_EVENTS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_PLAYER_BITSET_TO_STRING(CMHDZ_PLAYER_BITSET eType)
SWITCH (eType)
CASE CMHDZ_PLAYER_BIT_INVULNERABILE RETURN "CMHDZ_PLAYER_BIT_INVULNERABILE"
CASE CMHDZ_PLAYER_BIT_HIDE_RETICULE RETURN "CMHDZ_PLAYER_BIT_HIDE_RETICULE"
CASE CMHDZ_PLAYER_BIT_INIT_NEW_CHAIN RETURN "CMHDZ_PLAYER_BIT_INIT_NEW_CHAIN"
// CASE CMHDZ_PLAYER_BIT_NAILGUN_OVERHEAT RETURN "CMHDZ_PLAYER_BIT_NAILGUN_OVERHEAT"
// CASE CMHDZ_PLAYER_BIT_NAILGUN_STOPPED_SHOOTING RETURN "CMHDZ_PLAYER_BIT_NAILGUN_STOPPED_SHOOTING"
CASE CMHDZ_PLAYER_BIT_RELOADED_FIRST_BULLET RETURN "CMHDZ_PLAYER_BIT_RELOADED_FIRST_BULLET"
CASE CMHDZ_PLAYER_BIT_QUAD_DAMAGE RETURN "CMHDZ_PLAYER_BIT_QUAD_DAMAGE"
ENDSWITCH
RETURN "CMHDZ_PLAYER_BITSET_INVALID"
ENDFUNC
FUNC STRING CMHDZ_PLAYER_PED_ANIM_STATE_TO_STRING(CMHDZ_PLAYER_PED_ANIM_STATE eType)
SWITCH (eType)
CASE CMHDZ_PLAYER_PED_ANIM_IDLE RETURN "CMHDZ_PLAYER_PED_ANIM_IDLE"
CASE CMHDZ_PLAYER_PED_ANIM_IDLE_TO_AIM RETURN "CMHDZ_PLAYER_PED_ANIM_IDLE_TO_AIM"
CASE CMHDZ_PLAYER_PED_ANIM_AIM_IDLE RETURN "CMHDZ_PLAYER_PED_ANIM_AIM_IDLE"
CASE CMHDZ_PLAYER_PED_ANIM_PLAY_IDLE RETURN "CMHDZ_PLAYER_PED_ANIM_PLAY_IDLE"
CASE CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_LOSE_LIFE RETURN "CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_LOSE_LIFE"
CASE CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_SCREEN RETURN "CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_SCREEN"
CASE CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_GAME RETURN "CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_GAME"
ENDSWITCH
RETURN "CMHDZ_PLAYER_PED_ANIM_STATE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_PLAYER_WEAPON_TO_STRING(CMHDZ_PLAYER_WEAPON eType)
SWITCH (eType)
CASE CMHDZ_PLAYER_WEAPON_NONE RETURN "CMHDZ_PLAYER_WEAPON_NONE"
CASE CMHDZ_PLAYER_WEAPON_REVOLVER RETURN "CMHDZ_PLAYER_WEAPON_REVOLVER"
// CASE CMHDZ_PLAYER_WEAPON_REVOLVER RETURN "CMHDZ_PLAYER_WEAPON_REVOLVER"
CASE CMHDZ_PLAYER_WEAPON_RIFLE RETURN "CMHDZ_PLAYER_WEAPON_RIFLE"
CASE CMHDZ_PLAYER_WEAPON_SHOTGUN RETURN "CMHDZ_PLAYER_WEAPON_SHOTGUN"
CASE CMHDZ_PLAYER_WEAPON_NAILGUN RETURN "CMHDZ_PLAYER_WEAPON_NAILGUN"
CASE CMHDZ_PLAYER_WEAPON_MAX RETURN "CMHDZ_PLAYER_WEAPON_MAX"
ENDSWITCH
RETURN "CMHDZ_PLAYER_WEAPON_INVALID"
ENDFUNC
FUNC STRING CMHDZ_PLAYER_WEAPON_TYPE_TO_STRING(CMHDZ_PLAYER_WEAPON_TYPE eType)
SWITCH (eType)
CASE CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT RETURN "CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT"
CASE CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL RETURN "CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL"
CASE CMHDZ_PLAYER_WEAPON_TYPE_MAX RETURN "CMHDZ_PLAYER_WEAPON_TYPE_MAX"
ENDSWITCH
RETURN "CMHDZ_PLAYER_WEAPON_TYPE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_PROJECTILE_TYPES_TO_STRING(CMHDZ_PROJECTILE_TYPES eType)
SWITCH (eType)
CASE CMHDZ_PROJECTILE_NONE RETURN "CMHDZ_PROJECTILE_NONE"
CASE CMHDZ_PROJECTILE_DYNAMITE RETURN "CMHDZ_PROJECTILE_DYNAMITE"
CASE CMHDZ_PROJECTILE_MOLOTOV RETURN "CMHDZ_PROJECTILE_MOLOTOV"
CASE CMHDZ_PROJECTILE_BRICK RETURN "CMHDZ_PROJECTILE_BRICK"
CASE CMHDZ_PROJECTILE_NAILBOMB RETURN "CMHDZ_PROJECTILE_NAILBOMB"
CASE CMHDZ_PROJECTILE_BONE RETURN "CMHDZ_PROJECTILE_BONE"
CASE CMHDZ_PROJECTILE_JOWL RETURN "CMHDZ_PROJECTILE_JOWL"
CASE CMHDZ_PROJECTILE_LEG RETURN "CMHDZ_PROJECTILE_LEG"
CASE CMHDZ_PROJECTILE_TROTTER RETURN "CMHDZ_PROJECTILE_TROTTER"
CASE NUM_CMHDZ_PROJECTILE_TYPES RETURN "NUM_CMHDZ_PROJECTILE_TYPES"
ENDSWITCH
RETURN "CMHDZ_PROJECTILE_TYPES_INVALID"
ENDFUNC
FUNC STRING CMHDZ_PROJECTILE_STATE_TO_STRING(CMHDZ_PROJECTILE_STATE eType)
SWITCH (eType)
CASE CMHDZ_PROJECTILE_STATE_INACTIVE RETURN "CMHDZ_PROJECTILE_STATE_INACTIVE"
CASE CMHDZ_PROJECTILE_STATE_AIRBORNE RETURN "CMHDZ_PROJECTILE_STATE_AIRBORNE"
CASE CMHDZ_PROJECTILE_STATE_IMPACT RETURN "CMHDZ_PROJECTILE_STATE_IMPACT"
ENDSWITCH
RETURN "CMHDZ_PROJECTILE_STATE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_REPLAY_BITS_TO_STRING(CMHDZ_REPLAY_BITS eType)
SWITCH (eType)
CASE CMHDZ_REPLAY_BITS_NONE RETURN "CMHDZ_REPLAY_BITS_NONE"
CASE CMHDZ_REPLAY_BITS_WAS_PLAYBACK_ON RETURN "CMHDZ_REPLAY_BITS_WAS_PLAYBACK_ON"
CASE CMHDZ_REPLAY_BITS_WAS_RECORDING_ON RETURN "CMHDZ_REPLAY_BITS_WAS_RECORDING_ON"
CASE CMHDZ_REPLAY_BITS_IS_NEW_FRAME RETURN "CMHDZ_REPLAY_BITS_IS_NEW_FRAME"
CASE CMHDZ_REPLAY_BITS_IS_RECORD_FRAME RETURN "CMHDZ_REPLAY_BITS_IS_RECORD_FRAME"
CASE CMHDZ_REPLAY_BITS_IS_PLAYBACK RETURN "CMHDZ_REPLAY_BITS_IS_PLAYBACK"
CASE CMHDZ_REPLAY_BITS_IS_RECORDING RETURN "CMHDZ_REPLAY_BITS_IS_RECORDING"
ENDSWITCH
RETURN "CMHDZ_REPLAY_BITS_INVALID"
ENDFUNC
FUNC STRING CMHDZ_RESULT_SCREEN_STATE_TO_STRING(CMHDZ_RESULT_SCREEN_STATE eType)
SWITCH (eType)
CASE CMHDZ_RESULT_SCREEN_STATE_INIT RETURN "CMHDZ_RESULT_SCREEN_STATE_INIT"
CASE CMHDZ_RESULT_SCREEN_STATE_DEAD_SCREEN RETURN "CMHDZ_RESULT_SCREEN_STATE_DEAD_SCREEN"
CASE CMHDZ_RESULT_SCREEN_STATE_START_REWIND RETURN "CMHDZ_RESULT_SCREEN_STATE_START_REWIND"
CASE CMHDZ_RESULT_SCREEN_STATE_REWIND RETURN "CMHDZ_RESULT_SCREEN_STATE_REWIND"
CASE CMHDZ_RESULT_SCREEN_STATE_COMPLETE RETURN "CMHDZ_RESULT_SCREEN_STATE_COMPLETE"
CASE CMHDZ_RESULT_SCREEN_STATE_GOTO_LEADERBOARD RETURN "CMHDZ_RESULT_SCREEN_STATE_GOTO_LEADERBOARD"
CASE NUM_CMHDZ_RESULT_SCREEN_STATE RETURN "NUM_CMHDZ_RESULT_SCREEN_STATE"
ENDSWITCH
RETURN "CMHDZ_RESULT_SCREEN_STATE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_SCORE_TYPE_TO_STRING(CMHDZ_SCORE_TYPE eType)
SWITCH (eType)
CASE CMHDZ_SCORE_TYPE_ENEMY RETURN "CMHDZ_SCORE_TYPE_ENEMY"
CASE CMHDZ_SCORE_TYPE_ENEMY_HEADSHOT RETURN "CMHDZ_SCORE_TYPE_ENEMY_HEADSHOT"
CASE CMHDZ_SCORE_TYPE_SCENERY RETURN "CMHDZ_SCORE_TYPE_SCENERY"
CASE CMHDZ_SCORE_TYPE_ENEMY_EXPLOSION RETURN "CMHDZ_SCORE_TYPE_ENEMY_EXPLOSION"
CASE CMHDZ_SCORE_TYPE_ANIMAL RETURN "CMHDZ_SCORE_TYPE_ANIMAL"
CASE CMHDZ_SCORE_TYPE_TAPE RETURN "CMHDZ_SCORE_TYPE_TAPE"
CASE CMHDZ_SCORE_TYPE_CASH RETURN "CMHDZ_SCORE_TYPE_CASH"
ENDSWITCH
RETURN "CMHDZ_SCORE_TYPE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_SPRITE_TO_STRING(CMHDZ_SPRITE eType)
SWITCH (eType)
CASE CMHDZ_SPRITE_NONE RETURN "CMHDZ_SPRITE_NONE"
CASE CMHDZ_SPRITE_GANG_01_ATTACKING RETURN "CMHDZ_SPRITE_GANG_01_ATTACKING"
CASE CMHDZ_SPRITE_GANG_01_DEAD RETURN "CMHDZ_SPRITE_GANG_01_DEAD"
CASE CMHDZ_SPRITE_GANG_01_RUNNING_01 RETURN "CMHDZ_SPRITE_GANG_01_RUNNING_01"
CASE CMHDZ_SPRITE_GANG_01_RUNNING_02 RETURN "CMHDZ_SPRITE_GANG_01_RUNNING_02"
CASE CMHDZ_SPRITE_GANG_01_THROWING_01 RETURN "CMHDZ_SPRITE_GANG_01_THROWING_01"
CASE CMHDZ_SPRITE_GANG_01_THROWING_02 RETURN "CMHDZ_SPRITE_GANG_01_THROWING_02"
CASE CMHDZ_SPRITE_GANG_01_THROWING_03 RETURN "CMHDZ_SPRITE_GANG_01_THROWING_03"
CASE CMHDZ_SPRITE_GANG_01_THROWING_04 RETURN "CMHDZ_SPRITE_GANG_01_THROWING_04"
CASE CMHDZ_SPRITE_GANG_01_THROWING_05 RETURN "CMHDZ_SPRITE_GANG_01_THROWING_05"
CASE CMHDZ_SPRITE_GANG_01_HEADSHOT_01 RETURN "CMHDZ_SPRITE_GANG_01_HEADSHOT_01"
CASE CMHDZ_SPRITE_GANG_01_HEADSHOT_02 RETURN "CMHDZ_SPRITE_GANG_01_HEADSHOT_02"
CASE CMHDZ_SPRITE_GANG_01_HEADSHOT_03 RETURN "CMHDZ_SPRITE_GANG_01_HEADSHOT_03"
CASE CMHDZ_SPRITE_GANG_01_HEADSHOT_04 RETURN "CMHDZ_SPRITE_GANG_01_HEADSHOT_04"
CASE CMHDZ_SPRITE_GANG_01_HEADSHOT_05 RETURN "CMHDZ_SPRITE_GANG_01_HEADSHOT_05"
CASE CMHDZ_SPRITE_GANG_01_HEADSHOT_06 RETURN "CMHDZ_SPRITE_GANG_01_HEADSHOT_06"
CASE CMHDZ_SPRITE_GANG_01_HEADSHOT_07 RETURN "CMHDZ_SPRITE_GANG_01_HEADSHOT_07"
CASE CMHDZ_SPRITE_GANG_01_HEADSHOT_08 RETURN "CMHDZ_SPRITE_GANG_01_HEADSHOT_08"
CASE CMHDZ_SPRITE_GANG_01_HEADSHOT_09 RETURN "CMHDZ_SPRITE_GANG_01_HEADSHOT_09"
CASE CMHDZ_SPRITE_GANG_02_ATTACKING RETURN "CMHDZ_SPRITE_GANG_02_ATTACKING"
CASE CMHDZ_SPRITE_GANG_02_DEAD RETURN "CMHDZ_SPRITE_GANG_02_DEAD"
CASE CMHDZ_SPRITE_GANG_02_RUNNING_01 RETURN "CMHDZ_SPRITE_GANG_02_RUNNING_01"
CASE CMHDZ_SPRITE_GANG_02_RUNNING_02 RETURN "CMHDZ_SPRITE_GANG_02_RUNNING_02"
CASE CMHDZ_SPRITE_GANG_02_THROWING_01 RETURN "CMHDZ_SPRITE_GANG_02_THROWING_01"
CASE CMHDZ_SPRITE_GANG_02_THROWING_02 RETURN "CMHDZ_SPRITE_GANG_02_THROWING_02"
CASE CMHDZ_SPRITE_GANG_02_THROWING_03 RETURN "CMHDZ_SPRITE_GANG_02_THROWING_03"
CASE CMHDZ_SPRITE_GANG_02_THROWING_04 RETURN "CMHDZ_SPRITE_GANG_02_THROWING_04"
CASE CMHDZ_SPRITE_GANG_02_THROWING_05 RETURN "CMHDZ_SPRITE_GANG_02_THROWING_05"
CASE CMHDZ_SPRITE_GANG_02_HEADSHOT_01 RETURN "CMHDZ_SPRITE_GANG_02_HEADSHOT_01"
CASE CMHDZ_SPRITE_GANG_02_HEADSHOT_02 RETURN "CMHDZ_SPRITE_GANG_02_HEADSHOT_02"
CASE CMHDZ_SPRITE_GANG_02_HEADSHOT_03 RETURN "CMHDZ_SPRITE_GANG_02_HEADSHOT_03"
CASE CMHDZ_SPRITE_GANG_02_HEADSHOT_04 RETURN "CMHDZ_SPRITE_GANG_02_HEADSHOT_04"
CASE CMHDZ_SPRITE_GANG_02_HEADSHOT_05 RETURN "CMHDZ_SPRITE_GANG_02_HEADSHOT_05"
CASE CMHDZ_SPRITE_GANG_02_HEADSHOT_06 RETURN "CMHDZ_SPRITE_GANG_02_HEADSHOT_06"
CASE CMHDZ_SPRITE_GANG_02_HEADSHOT_07 RETURN "CMHDZ_SPRITE_GANG_02_HEADSHOT_07"
CASE CMHDZ_SPRITE_GANG_02_HEADSHOT_08 RETURN "CMHDZ_SPRITE_GANG_02_HEADSHOT_08"
CASE CMHDZ_SPRITE_GANG_02_HEADSHOT_09 RETURN "CMHDZ_SPRITE_GANG_02_HEADSHOT_09"
CASE CMHDZ_SPRITE_GANG_03_ATTACKING RETURN "CMHDZ_SPRITE_GANG_03_ATTACKING"
CASE CMHDZ_SPRITE_GANG_03_DEAD RETURN "CMHDZ_SPRITE_GANG_03_DEAD"
CASE CMHDZ_SPRITE_GANG_03_RUNNING_01 RETURN "CMHDZ_SPRITE_GANG_03_RUNNING_01"
CASE CMHDZ_SPRITE_GANG_03_RUNNING_02 RETURN "CMHDZ_SPRITE_GANG_03_RUNNING_02"
CASE CMHDZ_SPRITE_GANG_03_THROWING_01 RETURN "CMHDZ_SPRITE_GANG_03_THROWING_01"
CASE CMHDZ_SPRITE_GANG_03_THROWING_02 RETURN "CMHDZ_SPRITE_GANG_03_THROWING_02"
CASE CMHDZ_SPRITE_GANG_03_THROWING_03 RETURN "CMHDZ_SPRITE_GANG_03_THROWING_03"
CASE CMHDZ_SPRITE_GANG_03_THROWING_04 RETURN "CMHDZ_SPRITE_GANG_03_THROWING_04"
CASE CMHDZ_SPRITE_GANG_03_THROWING_05 RETURN "CMHDZ_SPRITE_GANG_03_THROWING_05"
CASE CMHDZ_SPRITE_GANG_03_HEADSHOT_01 RETURN "CMHDZ_SPRITE_GANG_03_HEADSHOT_01"
CASE CMHDZ_SPRITE_GANG_03_HEADSHOT_02 RETURN "CMHDZ_SPRITE_GANG_03_HEADSHOT_02"
CASE CMHDZ_SPRITE_GANG_03_HEADSHOT_03 RETURN "CMHDZ_SPRITE_GANG_03_HEADSHOT_03"
CASE CMHDZ_SPRITE_GANG_03_HEADSHOT_04 RETURN "CMHDZ_SPRITE_GANG_03_HEADSHOT_04"
CASE CMHDZ_SPRITE_GANG_03_HEADSHOT_05 RETURN "CMHDZ_SPRITE_GANG_03_HEADSHOT_05"
CASE CMHDZ_SPRITE_GANG_03_HEADSHOT_06 RETURN "CMHDZ_SPRITE_GANG_03_HEADSHOT_06"
CASE CMHDZ_SPRITE_GANG_03_HEADSHOT_07 RETURN "CMHDZ_SPRITE_GANG_03_HEADSHOT_07"
CASE CMHDZ_SPRITE_GANG_03_HEADSHOT_08 RETURN "CMHDZ_SPRITE_GANG_03_HEADSHOT_08"
CASE CMHDZ_SPRITE_GANG_03_HEADSHOT_09 RETURN "CMHDZ_SPRITE_GANG_03_HEADSHOT_09"
CASE CMHDZ_SPRITE_GANG_04_ATTACKING RETURN "CMHDZ_SPRITE_GANG_04_ATTACKING"
CASE CMHDZ_SPRITE_GANG_04_DEAD RETURN "CMHDZ_SPRITE_GANG_04_DEAD"
CASE CMHDZ_SPRITE_GANG_04_RUNNING_01 RETURN "CMHDZ_SPRITE_GANG_04_RUNNING_01"
CASE CMHDZ_SPRITE_GANG_04_RUNNING_02 RETURN "CMHDZ_SPRITE_GANG_04_RUNNING_02"
CASE CMHDZ_SPRITE_GANG_04_THROWING_01 RETURN "CMHDZ_SPRITE_GANG_04_THROWING_01"
CASE CMHDZ_SPRITE_GANG_04_THROWING_02 RETURN "CMHDZ_SPRITE_GANG_04_THROWING_02"
CASE CMHDZ_SPRITE_GANG_04_THROWING_03 RETURN "CMHDZ_SPRITE_GANG_04_THROWING_03"
CASE CMHDZ_SPRITE_GANG_04_THROWING_04 RETURN "CMHDZ_SPRITE_GANG_04_THROWING_04"
CASE CMHDZ_SPRITE_GANG_04_THROWING_05 RETURN "CMHDZ_SPRITE_GANG_04_THROWING_05"
CASE CMHDZ_SPRITE_GANG_04_HEADSHOT_01 RETURN "CMHDZ_SPRITE_GANG_04_HEADSHOT_01"
CASE CMHDZ_SPRITE_GANG_04_HEADSHOT_02 RETURN "CMHDZ_SPRITE_GANG_04_HEADSHOT_02"
CASE CMHDZ_SPRITE_GANG_04_HEADSHOT_03 RETURN "CMHDZ_SPRITE_GANG_04_HEADSHOT_03"
CASE CMHDZ_SPRITE_GANG_04_HEADSHOT_04 RETURN "CMHDZ_SPRITE_GANG_04_HEADSHOT_04"
CASE CMHDZ_SPRITE_GANG_04_HEADSHOT_05 RETURN "CMHDZ_SPRITE_GANG_04_HEADSHOT_05"
CASE CMHDZ_SPRITE_GANG_04_HEADSHOT_06 RETURN "CMHDZ_SPRITE_GANG_04_HEADSHOT_06"
CASE CMHDZ_SPRITE_GANG_04_HEADSHOT_07 RETURN "CMHDZ_SPRITE_GANG_04_HEADSHOT_07"
CASE CMHDZ_SPRITE_GANG_04_HEADSHOT_08 RETURN "CMHDZ_SPRITE_GANG_04_HEADSHOT_08"
CASE CMHDZ_SPRITE_GANG_04_HEADSHOT_09 RETURN "CMHDZ_SPRITE_GANG_04_HEADSHOT_09"
CASE CMHDZ_SPRITE_GANG_05_ATTACKING RETURN "CMHDZ_SPRITE_GANG_05_ATTACKING"
CASE CMHDZ_SPRITE_GANG_05_DEAD RETURN "CMHDZ_SPRITE_GANG_05_DEAD"
CASE CMHDZ_SPRITE_GANG_05_RUNNING_01 RETURN "CMHDZ_SPRITE_GANG_05_RUNNING_01"
CASE CMHDZ_SPRITE_GANG_05_RUNNING_02 RETURN "CMHDZ_SPRITE_GANG_05_RUNNING_02"
CASE CMHDZ_SPRITE_GANG_05_THROWING_01 RETURN "CMHDZ_SPRITE_GANG_05_THROWING_01"
CASE CMHDZ_SPRITE_GANG_05_THROWING_02 RETURN "CMHDZ_SPRITE_GANG_05_THROWING_02"
CASE CMHDZ_SPRITE_GANG_05_THROWING_03 RETURN "CMHDZ_SPRITE_GANG_05_THROWING_03"
CASE CMHDZ_SPRITE_GANG_05_THROWING_04 RETURN "CMHDZ_SPRITE_GANG_05_THROWING_04"
CASE CMHDZ_SPRITE_GANG_05_THROWING_05 RETURN "CMHDZ_SPRITE_GANG_05_THROWING_05"
CASE CMHDZ_SPRITE_GANG_05_HEADSHOT_01 RETURN "CMHDZ_SPRITE_GANG_05_HEADSHOT_01"
CASE CMHDZ_SPRITE_GANG_05_HEADSHOT_02 RETURN "CMHDZ_SPRITE_GANG_05_HEADSHOT_02"
CASE CMHDZ_SPRITE_GANG_05_HEADSHOT_03 RETURN "CMHDZ_SPRITE_GANG_05_HEADSHOT_03"
CASE CMHDZ_SPRITE_GANG_05_HEADSHOT_04 RETURN "CMHDZ_SPRITE_GANG_05_HEADSHOT_04"
CASE CMHDZ_SPRITE_GANG_05_HEADSHOT_05 RETURN "CMHDZ_SPRITE_GANG_05_HEADSHOT_05"
CASE CMHDZ_SPRITE_GANG_05_HEADSHOT_06 RETURN "CMHDZ_SPRITE_GANG_05_HEADSHOT_06"
CASE CMHDZ_SPRITE_GANG_05_HEADSHOT_07 RETURN "CMHDZ_SPRITE_GANG_05_HEADSHOT_07"
CASE CMHDZ_SPRITE_GANG_05_HEADSHOT_08 RETURN "CMHDZ_SPRITE_GANG_05_HEADSHOT_08"
CASE CMHDZ_SPRITE_GANG_05_HEADSHOT_09 RETURN "CMHDZ_SPRITE_GANG_05_HEADSHOT_09"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_01_A RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_01_A"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_01_A_ATTACK RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_01_A_ATTACK"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_01_B RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_01_B"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_01_DEAD RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_01_DEAD"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_01_HEADSHOT RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_01_HEADSHOT"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_02_A RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_02_A"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_02_B RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_02_B"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_02_DEAD RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_02_DEAD"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_02_HEADSHOT RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_02_HEADSHOT"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_03_A RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_03_A"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_03_B RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_03_B"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_03_DEAD RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_03_DEAD"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_03_HEADSHOT RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_03_HEADSHOT"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_04_B RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_04_B"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A_ATTACK RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A_ATTACK"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A_DEAD RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A_DEAD"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_04_B_DEAD RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_04_B_DEAD"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A_HEADSHOT RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_04_A_HEADSHOT"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_04_B_HEADSHOT RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_04_B_HEADSHOT"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_05_A RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_05_A"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_05_A_DEAD RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_05_A_DEAD"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B_DEAD RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B_DEAD"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_05_A_HEADSHOT RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_05_A_HEADSHOT"
CASE CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B_HEADSHOT RETURN "CMHDZ_SPRITE_FOREGROUND_ENEMY_05_B_HEADSHOT"
CASE CMHDZ_SPRITE_FG_ENEMY_GUNFIRE RETURN "CMHDZ_SPRITE_FG_ENEMY_GUNFIRE"
CASE CMHDZ_SPRITE_THROWING_DYNAMITE_LARGE_01 RETURN "CMHDZ_SPRITE_THROWING_DYNAMITE_LARGE_01"
CASE CMHDZ_SPRITE_THROWING_DYNAMITE_LARGE_02 RETURN "CMHDZ_SPRITE_THROWING_DYNAMITE_LARGE_02"
CASE CMHDZ_SPRITE_THROWING_DYNAMITE_MEDIUM_01 RETURN "CMHDZ_SPRITE_THROWING_DYNAMITE_MEDIUM_01"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_SPRITE_THROWING_DYNAMITE_MEDIUM_02 RETURN "CMHDZ_SPRITE_THROWING_DYNAMITE_MEDIUM_02"
CASE CMHDZ_SPRITE_THROWING_DYNAMITE_SMALL_01 RETURN "CMHDZ_SPRITE_THROWING_DYNAMITE_SMALL_01"
CASE CMHDZ_SPRITE_THROWING_DYNAMITE_SMALL_02 RETURN "CMHDZ_SPRITE_THROWING_DYNAMITE_SMALL_02"
CASE CMHDZ_SPRITE_THROWING_MOLOTOV_LARGE RETURN "CMHDZ_SPRITE_THROWING_MOLOTOV_LARGE"
CASE CMHDZ_SPRITE_THROWING_MOLOTOV_MEDIUM RETURN "CMHDZ_SPRITE_THROWING_MOLOTOV_MEDIUM"
CASE CMHDZ_SPRITE_THROWING_MOLOTOV_SMALL RETURN "CMHDZ_SPRITE_THROWING_MOLOTOV_SMALL"
CASE CMHDZ_SPRITE_THROWING_NAILBOMB_LARGE RETURN "CMHDZ_SPRITE_THROWING_NAILBOMB_LARGE"
CASE CMHDZ_SPRITE_THROWING_NAILBOMB_MEDIUM RETURN "CMHDZ_SPRITE_THROWING_NAILBOMB_MEDIUM"
CASE CMHDZ_SPRITE_THROWING_NAILBOMB_SMALL RETURN "CMHDZ_SPRITE_THROWING_NAILBOMB_SMALL"
CASE CMHDZ_SPRITE_THROWING_BRICK_LARGE RETURN "CMHDZ_SPRITE_THROWING_BRICK_LARGE"
CASE CMHDZ_SPRITE_THROWING_BRICK_MEDIUM RETURN "CMHDZ_SPRITE_THROWING_BRICK_MEDIUM"
CASE CMHDZ_SPRITE_THROWING_BRICK_SMALL RETURN "CMHDZ_SPRITE_THROWING_BRICK_SMALL"
CASE CMHDZ_SPRITE_THROWN_WEAPON_EXP_01 RETURN "CMHDZ_SPRITE_THROWN_WEAPON_EXP_01"
CASE CMHDZ_SPRITE_THROWN_WEAPON_EXP_02 RETURN "CMHDZ_SPRITE_THROWN_WEAPON_EXP_02"
CASE CMHDZ_SPRITE_TRASHBAG_BIG RETURN "CMHDZ_SPRITE_TRASHBAG_BIG"
CASE CMHDZ_SPRITE_TRASHBAG_SMALL RETURN "CMHDZ_SPRITE_TRASHBAG_SMALL"
CASE CMHDZ_SPRITE_TRASHCAN_BIG_01 RETURN "CMHDZ_SPRITE_TRASHCAN_BIG_01"
CASE CMHDZ_SPRITE_TRASHCAN_BIG_02 RETURN "CMHDZ_SPRITE_TRASHCAN_BIG_02"
CASE CMHDZ_SPRITE_TRASHCAN_SMALL_01 RETURN "CMHDZ_SPRITE_TRASHCAN_SMALL_01"
CASE CMHDZ_SPRITE_TRASHCAN_SMALL_02 RETURN "CMHDZ_SPRITE_TRASHCAN_SMALL_02"
ENDSWITCH
SWITCH (eType)
// CASE CMHDZ_SPRITE_ANIMALBONUS_SCORPION_01 RETURN "CMHDZ_SPRITE_ANIMALBONUS_SCORPION_01"
// CASE CMHDZ_SPRITE_ANIMALBONUS_SCORPION_02 RETURN "CMHDZ_SPRITE_ANIMALBONUS_SCORPION_02"
// CASE CMHDZ_SPRITE_BAT_01 RETURN "CMHDZ_SPRITE_BAT_01"
// CASE CMHDZ_SPRITE_BAT_02 RETURN "CMHDZ_SPRITE_BAT_02"
// CASE CMHDZ_SPRITE_EAGLE1 RETURN "CMHDZ_SPRITE_EAGLE1"
// CASE CMHDZ_SPRITE_EAGLE2 RETURN "CMHDZ_SPRITE_EAGLE2"
// CASE CMHDZ_SPRITE_LEVEL_03_FOREST_BEAR_01 RETURN "CMHDZ_SPRITE_LEVEL_03_FOREST_BEAR_01"
// CASE CMHDZ_SPRITE_LEVEL_03_FOREST_BEAR_02 RETURN "CMHDZ_SPRITE_LEVEL_03_FOREST_BEAR_02"
CASE CMHDZ_SPRITE_OUCH1 RETURN "CMHDZ_SPRITE_OUCH1"
// CASE CMHDZ_SPRITE_VULTURE_01 RETURN "CMHDZ_SPRITE_VULTURE_01"
// CASE CMHDZ_SPRITE_VULTURE_02 RETURN "CMHDZ_SPRITE_VULTURE_02"
CASE CMHDZ_SPRITE_FENCE RETURN "CMHDZ_SPRITE_FENCE"
// CASE CMHDZ_SPRITE_FENCE_SMALL RETURN "CMHDZ_SPRITE_FENCE_SMALL"
CASE CMHDZ_SPRITE_CITY_BUILDING_06 RETURN "CMHDZ_SPRITE_CITY_BUILDING_06"
CASE CMHDZ_SPRITE_CITY_BUILDING_07 RETURN "CMHDZ_SPRITE_CITY_BUILDING_07"
CASE CMHDZ_SPRITE_CITY_BUILDING_08 RETURN "CMHDZ_SPRITE_CITY_BUILDING_08"
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_01 RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_01"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_02 RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_02"
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_03 RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_03"
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_04 RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_MD_VAN_04"
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_01 RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_01"
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_02 RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_02"
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_03 RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_03"
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_04 RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_MD_CAR_04"
CASE CMHDZ_SPRITE_THEMEPARK_BUILDING_1 RETURN "CMHDZ_SPRITE_THEMEPARK_BUILDING_1"
CASE CMHDZ_SPRITE_THEMEPARK_BUILDING_2 RETURN "CMHDZ_SPRITE_THEMEPARK_BUILDING_2"
CASE CMHDZ_SPRITE_THEMEPARK_BUILDING_3 RETURN "CMHDZ_SPRITE_THEMEPARK_BUILDING_3"
CASE CMHDZ_SPRITE_THEMEPARK_BUILDING_4 RETURN "CMHDZ_SPRITE_THEMEPARK_BUILDING_4"
CASE CMHDZ_SPRITE_THEMEPARK_CLOWNBOARD_1 RETURN "CMHDZ_SPRITE_THEMEPARK_CLOWNBOARD_1"
CASE CMHDZ_SPRITE_THEMEPARK_CLOWNBOARD_2 RETURN "CMHDZ_SPRITE_THEMEPARK_CLOWNBOARD_2"
CASE CMHDZ_SPRITE_ASYLUM_PROP_MD_BED RETURN "CMHDZ_SPRITE_ASYLUM_PROP_MD_BED"
CASE CMHDZ_SPRITE_ASYLUM_PROP_MD_WHEELCHAIR RETURN "CMHDZ_SPRITE_ASYLUM_PROP_MD_WHEELCHAIR"
CASE CMHDZ_SPRITE_ASYLUM_PROP_MD_MATTRESS RETURN "CMHDZ_SPRITE_ASYLUM_PROP_MD_MATTRESS"
CASE CMHDZ_SPRITE_ASYLUM_PROP_LIGHT_STATE_1 RETURN "CMHDZ_SPRITE_ASYLUM_PROP_LIGHT_STATE_1"
CASE CMHDZ_SPRITE_ASYLUM_PROP_LIGHT_STATE_2 RETURN "CMHDZ_SPRITE_ASYLUM_PROP_LIGHT_STATE_2"
CASE CMHDZ_SPRITE_ROCKS RETURN "CMHDZ_SPRITE_ROCKS"
CASE CMHDZ_SPRITE_WATER_TANK RETURN "CMHDZ_SPRITE_WATER_TANK"
CASE CMHDZ_SPRITE_FLOOR_GRASS RETURN "CMHDZ_SPRITE_FLOOR_GRASS"
CASE CMHDZ_SPRITE_LEVEL_03_FOREST_ROCKS RETURN "CMHDZ_SPRITE_LEVEL_03_FOREST_ROCKS"
CASE CMHDZ_SPRITE_TREE_01 RETURN "CMHDZ_SPRITE_TREE_01"
CASE CMHDZ_SPRITE_TREE_02 RETURN "CMHDZ_SPRITE_TREE_02"
CASE CMHDZ_SPRITE_BARREL_HORIZONTAL RETURN "CMHDZ_SPRITE_BARREL_HORIZONTAL"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_ASSETS_10 RETURN "CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_ASSETS_10"
CASE CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_CAVE_TILE RETURN "CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_CAVE_TILE"
CASE CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_CAVE_TILE_02 RETURN "CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_CAVE_TILE_02"
CASE CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_MINECART RETURN "CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_MINECART"
CASE CMHDZ_SPRITE_THEMEPARK_MINECART_WHEEL_01 RETURN "CMHDZ_SPRITE_THEMEPARK_MINECART_WHEEL_01"
CASE CMHDZ_SPRITE_THEMEPARK_MINECART_WHEEL_02 RETURN "CMHDZ_SPRITE_THEMEPARK_MINECART_WHEEL_02"
CASE CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_ROCK RETURN "CMHDZ_SPRITE_LEVEL_04_GOLD_MINE_ROCK"
CASE CMHDZ_SPRITE_PROP_BARRELS RETURN "CMHDZ_SPRITE_PROP_BARRELS"
CASE CMHDZ_SPRITE_PROP_FOREGROUND_TRASH RETURN "CMHDZ_SPRITE_PROP_FOREGROUND_TRASH"
CASE CMHDZ_SPRITE_PROP_BARRIER RETURN "CMHDZ_SPRITE_PROP_BARRIER"
CASE CMHDZ_SPRITE_WOODENSTRUCTURE RETURN "CMHDZ_SPRITE_WOODENSTRUCTURE"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_PIG_01 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_PIG_01"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_PIG_02 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_PIG_02"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_01 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_01"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_02 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_02"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_03 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_03"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_01 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_01"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_02 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_02"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_03 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_03"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_04 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_FLOOR_BODYBAG_04"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_MEATGRINDER_01 RETURN "LEVEL_05_SLAUGHTERHOUSE_PROP_MEATGRINDER_01"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_DOOR_01 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_DOOR_01"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_DOOR_02 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_DOOR_02"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_WINDOW RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_PROP_WINDOW"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_01 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_01"
CASE CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_02 RETURN "CMHDZ_SPRITE_SLAUGHTERHOUSE_BODYBAG_02"
CASE CMHDZ_SPRITE_CACTUS_1 RETURN "CMHDZ_SPRITE_CACTUS_1"
CASE CMHDZ_SPRITE_CACTUS_2 RETURN "CMHDZ_SPRITE_CACTUS_2"
CASE CMHDZ_SPRITE_CACTUS_3 RETURN "CMHDZ_SPRITE_CACTUS_3"
CASE CMHDZ_SPRITE_PROP_BUSH_LARGE RETURN "CMHDZ_SPRITE_PROP_BUSH_LARGE"
CASE CMHDZ_SPRITE_PROP_BUSH_SMALL RETURN "CMHDZ_SPRITE_PROP_BUSH_SMALL"
CASE CMHDZ_SPRITE_PROP_CACTUS_07 RETURN "CMHDZ_SPRITE_PROP_CACTUS_07"
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_FENCE RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_FENCE"
CASE CMHDZ_SPRITE_SCRAPYARD_PROP_BG_CARS RETURN "CMHDZ_SPRITE_SCRAPYARD_PROP_BG_CARS"
CASE CMHDZ_SPRITE_PROP_ROCK_LARGE RETURN "CMHDZ_SPRITE_PROP_ROCK_LARGE"
CASE CMHDZ_SPRITE_PROP_ROCK_SMALL RETURN "CMHDZ_SPRITE_PROP_ROCK_SMALL"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_SPRITE_ITEM_HEALTH RETURN "CMHDZ_SPRITE_ITEM_HEALTH"
CASE CMHDZ_SPRITE_ITEM_SHIELD RETURN "CMHDZ_SPRITE_ITEM_SHIELD"
CASE CMHDZ_SPRITE_ITEM_BUFF RETURN "CMHDZ_SPRITE_ITEM_BUFF"
CASE CMHDZ_SPRITE_ITEM_ALCOHOL RETURN "CMHDZ_SPRITE_ITEM_ALCOHOL"
CASE CMHDZ_SPRITE_ITEM_GOLD_BARS RETURN "CMHDZ_SPRITE_ITEM_GOLD_BARS"
CASE CMHDZ_SPRITE_ITEM_QUAD_DAMAGE RETURN "CMHDZ_SPRITE_ITEM_QUAD_DAMAGE"
CASE CMHDZ_SPRITE_ITEM_VIDEOTAPE RETURN "CMHDZ_SPRITE_ITEM_VIDEOTAPE"
//CASE CMHDZ_SPRITE_ITEM_REVOLVER_AMMO RETURN "CMHDZ_SPRITE_ITEM_REVOLVER_AMMO"
CASE CMHDZ_SPRITE_ITEM_MACHINE_GUN_AMMO RETURN "CMHDZ_SPRITE_ITEM_MACHINE_GUN_AMMO"
CASE CMHDZ_SPRITE_ITEM_RIFLE_AMMO RETURN "CMHDZ_SPRITE_ITEM_RIFLE_AMMO"
CASE CMHDZ_SPRITE_ITEM_SHOTGUN_AMMO RETURN "CMHDZ_SPRITE_ITEM_SHOTGUN_AMMO"
CASE NUM_CMHDZ_SPRITE RETURN "NUM_CMHDZ_SPRITE"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_SPRITE_GORE_BACKGROUND_1 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_1"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_2 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_2"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_3 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_3"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_4 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_4"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_5 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_5"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_6 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_6"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_7 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_7"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_8 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_8"
//CASE CMHDZ_SPRITE_GORE_BACKGROUND_9 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_9"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_10 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_10"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_11 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_11"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_12 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_12"
CASE CMHDZ_SPRITE_GORE_BACKGROUND_13 RETURN "CMHDZ_SPRITE_GORE_BACKGROUND_13"
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_01 RETURN "CMHDZ_SPRITE_BEARSY_WALK_FRAME_01"
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_02 RETURN "CMHDZ_SPRITE_BEARSY_WALK_FRAME_02"
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_03 RETURN "CMHDZ_SPRITE_BEARSY_WALK_FRAME_03"
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_04 RETURN "CMHDZ_SPRITE_BEARSY_WALK_FRAME_04"
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_05 RETURN "CMHDZ_SPRITE_BEARSY_WALK_FRAME_05"
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_IDLE RETURN "CMHDZ_SPRITE_BEARSY_WALK_FRAME_IDLE"
CASE CMHDZ_SPRITE_BEARSY_THROWING_01 RETURN "CMHDZ_SPRITE_BEARSY_THROWING_01"
CASE CMHDZ_SPRITE_BEARSY_THROWING_02 RETURN "CMHDZ_SPRITE_BEARSY_THROWING_02"
CASE CMHDZ_SPRITE_BEARSY_THROWING_03 RETURN "CMHDZ_SPRITE_BEARSY_THROWING_03"
CASE CMHDZ_SPRITE_BEARSY_BACKGROUND_STAGGERED RETURN "CMHDZ_SPRITE_BEARSY_BACKGROUND_STAGGERED"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_STAGGERED RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_STAGGERED"
CASE CMHDZ_SPRITE_BEARSY_DEATH_01 RETURN "CMHDZ_SPRITE_BEARSY_DEATH_01"
CASE CMHDZ_SPRITE_BEARSY_DEATH_02 RETURN "CMHDZ_SPRITE_BEARSY_DEATH_02"
CASE CMHDZ_SPRITE_BEARSY_DEATH_PAIN_01 RETURN "CMHDZ_SPRITE_BEARSY_DEATH_PAIN_01"
CASE CMHDZ_SPRITE_BEARSY_DEATH_PAIN_02 RETURN "CMHDZ_SPRITE_BEARSY_DEATH_PAIN_02"
CASE CMHDZ_SPRITE_BEARSY_DEATH_PAIN_03 RETURN "CMHDZ_SPRITE_BEARSY_DEATH_PAIN_03"
CASE CMHDZ_SPRITE_BEARSY_DEATH_PAIN_04 RETURN "CMHDZ_SPRITE_BEARSY_DEATH_PAIN_04"
CASE CMHDZ_SPRITE_BEARSY_DEATH_PAIN_05 RETURN "CMHDZ_SPRITE_BEARSY_DEATH_PAIN_05"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_01 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_01"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_02 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_02"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_03 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_03"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_04 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_04"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_05 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_05"
CASE CMHDZ_SPRITE_BEARSY_BONE_HIT_01 RETURN "CMHDZ_SPRITE_BEARSY_BONE_HIT_01"
CASE CMHDZ_SPRITE_BEARSY_BONE_HIT_02 RETURN "CMHDZ_SPRITE_BEARSY_BONE_HIT_02"
CASE CMHDZ_SPRITE_BEARSY_BONE_LARGE_01 RETURN "CMHDZ_SPRITE_BEARSY_BONE_LARGE_01"
CASE CMHDZ_SPRITE_BEARSY_BONE_LARGE_02 RETURN "CMHDZ_SPRITE_BEARSY_BONE_LARGE_02"
CASE CMHDZ_SPRITE_BEARSY_BONE_MED_01 RETURN "CMHDZ_SPRITE_BEARSY_BONE_MED_01"
CASE CMHDZ_SPRITE_BEARSY_BONE_MED_02 RETURN "CMHDZ_SPRITE_BEARSY_BONE_MED_02"
CASE CMHDZ_SPRITE_BEARSY_BONE_SMALL_01 RETURN "CMHDZ_SPRITE_BEARSY_BONE_SMALL_01"
CASE CMHDZ_SPRITE_BEARSY_BONE_SMALL_02 RETURN "CMHDZ_SPRITE_BEARSY_BONE_SMALL_02"
CASE CMHDZ_SPRITE_BEARSY_JOWL_HIT_01 RETURN "CMHDZ_SPRITE_BEARSY_JOWL_HIT_01"
CASE CMHDZ_SPRITE_BEARSY_JOWL_HIT_02 RETURN "CMHDZ_SPRITE_BEARSY_JOWL_HIT_02"
CASE CMHDZ_SPRITE_BEARSY_JOWL_LARGE_01 RETURN "CMHDZ_SPRITE_BEARSY_JOWL_LARGE_01"
CASE CMHDZ_SPRITE_BEARSY_JOWL_LARGE_02 RETURN "CMHDZ_SPRITE_BEARSY_JOWL_LARGE_02"
CASE CMHDZ_SPRITE_BEARSY_JOWL_MED_01 RETURN "CMHDZ_SPRITE_BEARSY_JOWL_MED_01"
CASE CMHDZ_SPRITE_BEARSY_JOWL_MED_02 RETURN "CMHDZ_SPRITE_BEARSY_JOWL_MED_02"
CASE CMHDZ_SPRITE_BEARSY_JOWL_SMALL_01 RETURN "CMHDZ_SPRITE_BEARSY_JOWL_SMALL_01"
CASE CMHDZ_SPRITE_BEARSY_JOWL_SMALL_02 RETURN "CMHDZ_SPRITE_BEARSY_JOWL_SMALL_02"
CASE CMHDZ_SPRITE_BEARSY_LEG_HIT_01 RETURN "CMHDZ_SPRITE_BEARSY_LEG_HIT_01"
CASE CMHDZ_SPRITE_BEARSY_LEG_HIT_02 RETURN "CMHDZ_SPRITE_BEARSY_LEG_HIT_02"
CASE CMHDZ_SPRITE_BEARSY_LEG_LARGE_01 RETURN "CMHDZ_SPRITE_BEARSY_LEG_LARGE_01"
CASE CMHDZ_SPRITE_BEARSY_LEG_LARGE_02 RETURN "CMHDZ_SPRITE_BEARSY_LEG_LARGE_02"
CASE CMHDZ_SPRITE_BEARSY_LEG_MED_01 RETURN "CMHDZ_SPRITE_BEARSY_LEG_MED_01"
CASE CMHDZ_SPRITE_BEARSY_LEG_MED_02 RETURN "CMHDZ_SPRITE_BEARSY_LEG_MED_02"
CASE CMHDZ_SPRITE_BEARSY_LEG_SMALL_01 RETURN "CMHDZ_SPRITE_BEARSY_LEG_SMALL_01"
CASE CMHDZ_SPRITE_BEARSY_LEG_SMALL_02 RETURN "CMHDZ_SPRITE_BEARSY_LEG_SMALL_02"
CASE CMHDZ_SPRITE_BEARSY_TROTTER_HIT_01 RETURN "CMHDZ_SPRITE_BEARSY_TROTTER_HIT_01"
CASE CMHDZ_SPRITE_BEARSY_TROTTER_HIT_02 RETURN "CMHDZ_SPRITE_BEARSY_TROTTER_HIT_02"
CASE CMHDZ_SPRITE_BEARSY_TROTTER_LARGE_01 RETURN "CMHDZ_SPRITE_BEARSY_TROTTER_LARGE_01"
CASE CMHDZ_SPRITE_BEARSY_TROTTER_LARGE_02 RETURN "CMHDZ_SPRITE_BEARSY_TROTTER_LARGE_02"
CASE CMHDZ_SPRITE_BEARSY_TROTTER_MED_01 RETURN "CMHDZ_SPRITE_BEARSY_TROTTER_MED_01"
CASE CMHDZ_SPRITE_BEARSY_TROTTER_MED_02 RETURN "CMHDZ_SPRITE_BEARSY_TROTTER_MED_02"
CASE CMHDZ_SPRITE_BEARSY_TROTTER_SMALL_01 RETURN "CMHDZ_SPRITE_BEARSY_TROTTER_SMALL_01"
CASE CMHDZ_SPRITE_BEARSY_TROTTER_SMALL_02 RETURN "CMHDZ_SPRITE_BEARSY_TROTTER_SMALL_02"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_01 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_01"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_02 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_02"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_03 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_03"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_04 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_04"
//CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SCREEN_CRACK RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SCREEN_CRACK"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_01 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_01"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_02 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_02"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_03 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_03"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_04 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_04"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_05 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_05"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_01 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_01"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_02 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_02"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_03 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_03"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_04 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_04"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_05 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_05"
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_06 RETURN "CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_06"
CASE CMHDZ_SPRITE_SCREEN_DAMAGE_RIP RETURN "CMHDZ_SPRITE_SCREEN_DAMAGE_RIP"
CASE CMHDZ_SPRITE_SCREEN_DAMAGE_BLOOD_SPLATTER RETURN "CMHDZ_SPRITE_SCREEN_DAMAGE_BLOOD_SPLATTER"
//CASE CMHDZ_SPRITE_SCREEN_DAMAGE_BROKEN RETURN "CMHDZ_SPRITE_SCREEN_DAMAGE_BROKEN"
CASE CMHDZ_SPRITE_GANG_RARE_BUNNY_RUNNING_01 RETURN "CMHDZ_SPRITE_GANG_RARE_BUNNY_RUNNING_01"
CASE CMHDZ_SPRITE_GANG_RARE_BUNNY_RUNNING_02 RETURN "CMHDZ_SPRITE_GANG_RARE_BUNNY_RUNNING_02"
CASE CMHDZ_SPRITE_GANG_RARE_MONKEY_RUNNING_01 RETURN "CMHDZ_SPRITE_GANG_RARE_MONKEY_RUNNING_01"
CASE CMHDZ_SPRITE_GANG_RARE_MONKEY_RUNNING_02 RETURN "CMHDZ_SPRITE_GANG_RARE_MONKEY_RUNNING_02"
CASE CMHDZ_SPRITE_GANG_RARE_RAT_RUNNING_01 RETURN "CMHDZ_SPRITE_GANG_RARE_RAT_RUNNING_01"
CASE CMHDZ_SPRITE_GANG_RARE_RAT_RUNNING_02 RETURN "CMHDZ_SPRITE_GANG_RARE_RAT_RUNNING_02"
CASE CMHDZ_SPRITE_GANG_RARE_BUNNY_DEAD RETURN "CMHDZ_SPRITE_GANG_RARE_BUNNY_DEAD"
CASE CMHDZ_SPRITE_GANG_RARE_MONKEY_DEAD RETURN "CMHDZ_SPRITE_GANG_RARE_MONKEY_DEAD"
CASE NUM_CMHDZ_SPRITE RETURN "NUM_CMHDZ_SPRITE"
ENDSWITCH
RETURN "CMHDZ_SPRITE_INVALID"
ENDFUNC
FUNC STRING CMHDZ_TEXDICT_TO_STRING(CMHDZ_TEXDICT eType)
SWITCH (eType)
CASE CMHDZ_TEXDICT_INVALID RETURN "CMHDZ_TEXDICT_INVALID"
CASE CMHDZ_TEXDICT_BASE RETURN "CMHDZ_TEXDICT_BASE"
CASE CMHDZ_TEXDICT_TITLE RETURN "CMHDZ_TEXDICT_TITLE"
CASE CMHDZ_TEXDICT_HUD RETURN "CMHDZ_TEXDICT_HUD"
CASE CMHDZ_TEXDICT_FACADE RETURN "CMHDZ_TEXDICT_FACADE"
CASE CMHDZ_TEXDICT_LVLSELECT RETURN "CMHDZ_TEXDICT_LVLSELECT"
CASE CMHDZ_TEXDICT_LVLCOMP RETURN "CMHDZ_TEXDICT_LVLCOMP"
CASE CMHDZ_TEXDICT_LVL1 RETURN "CMHDZ_TEXDICT_LVL1"
CASE CMHDZ_TEXDICT_LVL2 RETURN "CMHDZ_TEXDICT_LVL2"
CASE CMHDZ_TEXDICT_LVL3 RETURN "CMHDZ_TEXDICT_LVL3"
CASE CMHDZ_TEXDICT_LVL4 RETURN "CMHDZ_TEXDICT_LVL4"
CASE CMHDZ_TEXDICT_LVL5 RETURN "CMHDZ_TEXDICT_LVL5"
CASE CMHDZ_TEXDICT_FG_ENEMY_A RETURN "CMHDZ_TEXDICT_FG_ENEMY_A"
CASE CMHDZ_TEXDICT_FG_ENEMY_B RETURN "CMHDZ_TEXDICT_FG_ENEMY_B"
CASE CMHDZ_TEXDICT_FG_ENEMY_C RETURN "CMHDZ_TEXDICT_FG_ENEMY_C"
CASE CMHDZ_TEXDICT_FG_ENEMY_D RETURN "CMHDZ_TEXDICT_FG_ENEMY_D"
CASE CMHDZ_TEXDICT_FG_ENEMY_E RETURN "CMHDZ_TEXDICT_FG_ENEMY_E"
//CASE CMHDZ_TEXDICT_FG_ENEMY_D RETURN "CMHDZ_TEXDICT_FG_ENEMY_D"
CASE CMHDZ_TEXDICT_FG_ENEMY_E_2 RETURN "CMHDZ_TEXDICT_FG_ENEMY_E_2"
CASE CMHDZ_TEXDICT_RESULTS RETURN "CMHDZ_TEXDICT_RESULTS"
CASE CMHDZ_TEXDICT_DEAD RETURN "CMHDZ_TEXDICT_DEAD"
CASE CMHDZ_TEXDICT_COMMON_PROPS RETURN "CMHDZ_TEXDICT_COMMON_PROPS"
CASE CMHDZ_TEXDICT_CH_GANG_A RETURN "CMHDZ_TEXDICT_CH_GANG_A"
CASE CMHDZ_TEXDICT_CH_GANG_B RETURN "CMHDZ_TEXDICT_CH_GANG_B"
CASE CMHDZ_TEXDICT_CH_GANG_C RETURN "CMHDZ_TEXDICT_CH_GANG_C"
CASE CMHDZ_TEXDICT_CH_GANG_D RETURN "CMHDZ_TEXDICT_CH_GANG_D"
CASE CMHDZ_TEXDICT_CH_GANG_E RETURN "CMHDZ_TEXDICT_CH_GANG_E"
CASE CMHDZ_TEXDICT_CH_GANG_RARE RETURN "CMHDZ_TEXDICT_CH_GANG_RARE"
ENDSWITCH
SWITCH (eType)
CASE CMHDZ_TEXDICT_CH_CITY RETURN "CMHDZ_TEXDICT_CH_CITY"
CASE CMHDZ_TEXDICT_CH_SCRAPYARD RETURN "CMHDZ_TEXDICT_CH_SCRAPYARD"
CASE CMHDZ_TEXDICT_CH_ASYLUM RETURN "CMHDZ_TEXDICT_CH_ASYLUM"
CASE CMHDZ_TEXDICT_CH_THEMEPARK RETURN "CMHDZ_TEXDICT_CH_THEMEPARK"
CASE CMHDZ_TEXDICT_CH_SLAUGHTERHOUSE RETURN "CMHDZ_TEXDICT_CH_SLAUGHTERHOUSE"
CASE NUM_CMHDZ_TEXTDICT RETURN "NUM_CMHDZ_TEXTDICT"
ENDSWITCH
RETURN "CMHDZ_TEXDICT_INVALID"
ENDFUNC
//#IF CMHDZ_CMDLINE_EDITOR_NEW
//#ENDIF
#ENDIF
//----------------------------------
// STRUCTS
//----------------------------------
STRUCT CMHDZ_COVER_MAP_DATA
CMHDZ_COVER_DATA_BITS eDataBits
CMHDZ_ASSET_TYPES eType
VECTOR_2D vSpriteInitialPos
VECTOR_2D vSpritePos
VECTOR_2D vSpriteSize
INT iCoverLane
FLOAT fActiveAtPoint
BOOL bFarBackground
BOOL bRemoveOffScreen
ENDSTRUCT
#IF IS_DEBUG_BUILD
PROC CMHDZ_COVER_MAP_DATA_SET_BIT_BY_BOOL(CMHDZ_COVER_MAP_DATA &dat, CMHDZ_COVER_DATA_BITS bit, BOOL bOn = TRUE)
IF (bOn)
SET_BITMASK_ENUM_AS_ENUM(dat.eDataBits, bit)
CDEBUG2LN(DEBUG_MINIGAME, "Cover bit to set: ", CMHDZ_COVER_DATA_BITS_TO_STRING(bit))
DEBUG_PRINTCALLSTACK()
ELSE
CLEAR_BITMASK_ENUM_AS_ENUM(dat.eDataBits, bit)
ENDIF
ENDPROC
#ENDIF
STRUCT CMHDZ_COVER_DATA
// These were replaced with the below bitset
// BOOL bRendering = FALSE
// BOOL bSpawnedPickup = FALSE
// BOOL bIsSpecialCover = FALSE
// BOOL bIsAnimated = FALSE
// BOOL bNeverRender = FALSE
CMHDZ_COVER_DATA_BITS eDataBits
//
INT iCoverLane
INT iHitCount
INT iDefaultFrameTimeCounter
INT iDefaultUpdateFrames
INT iSlowFrameTimeCounter
INT iSlowUpdateFrames
INT iSpriteAnimFrame
CMHDZ_ASSET_TYPES eType
VECTOR_2D vSpritePos
VECTOR_2D vSpriteInitialPos
VECTOR_2D vSpriteSize
FLOAT fCoverWidth
FLOAT fCoverHeight
FLOAT fActiveAtPoint
ENDSTRUCT
STRUCT PROJECTILE_DATA
INT iSlowFrameTimeCounter
INT iSlowUpdateFrames
INT iSpriteAnimFrame
INT iLane
INT iEnemyInstToHit = -1 // Enemy we hit with the projectile
CMHDZ_PROJECTILE_STATE eState
CMHDZ_PROJECTILE_TYPES eType
VECTOR_2D vSpritePos
VECTOR_2D vSpriteSize
ENDSTRUCT
STRUCT PROJECTILE_INFO
INT iReloadTimeMS = 2000
FLOAT fBlastRadius = 250.0
FLOAT fDamagePoints = 1.0
ENDSTRUCT
STRUCT BULLET_DATA
BOOL bShot
BOOL bHit
BOOL bHitObject
BOOL bPlayedAudio
INT iSpriteBlastAnimFrame
INT iSlowFrameTimeCounter
INT iSlowUpdateFrames
INT iTimeOfHit
VECTOR_2D vSpritePos
ENDSTRUCT
STRUCT CMHDZ_FX_DATA
BOOL bActive = FALSE
BOOL bFinished = FALSE
INT iSpriteBlastAnimFrame
// Slow frames
INT iSlowFrameTimeCounter
INT iSlowUpdateFrames
// Med frames
INT iMedFrameTimeCounter
INT iMedUpdateFrames
INT iLane = 0
CMHDZ_FX_TYPE eFXType
VECTOR_2D vSpritePos
//RGBA_COLOUR_STRUCT sFXColour
FLOAT fAlpha
ENDSTRUCT
STRUCT CMHDZ_EQUIPPED_WEAPON_DATA
INT iAmmoInClip
INT iTotalAmmo
INT iLastShotTime
INT iReloadSingleBulletTime
ENDSTRUCT
STRUCT CMHDZ_PLAYER_DATA
BOOL bHasJustShot
BOOL bCovering
BOOL bHoveringEnemy
BOOL bShouldShowReloadPrompt
INT iProjectileIndex
INT iLastShotTime
INT iLastProjectileTime = 0
INT iDeadTime = 0
INT iReloadPromptShowTime = 0
BOOL bDoneReloadEffect
BOOL bHeavyDamageState
CMHDZ_RETICLE_BITS eReticuleBits = CMHDZ_RETICLE_BITS_NONE
CMHDZ_PLAYER_WEAPON_TYPE weaponType = CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT
CMHDZ_PLAYER_WEAPON activeWeapon = CMHDZ_PLAYER_WEAPON_NONE
CMHDZ_PROJECTILE_TYPES projectileType = CMHDZ_PROJECTILE_BRICK // CMHDZ_PROJECTILE_NONE - Change this back later
CMHDZ_EQUIPPED_WEAPON_DATA weaponData[CMHDZ_PLAYER_WEAPON_TYPE_MAX]
BOOL bIsReloading[CMHDZ_PLAYER_WEAPON_TYPE_MAX]
// INT iAmmo = ciCMHDZ_PLAYER_START_AMMO
// INT iWeapon = 0
FLOAT fHitCountdown
INT iSuccessiveHits
INT iChainedScore
INT iScoreNoChain
INT iPreviousTargetScore
INT iPlayerBitset
INT iInvulnerableTimer
INT iHideReticuleTimer
INT iQuadDamageTimer
INT iNoAmmoTimer
INT iDamageScreen
FLOAT fRotation
FLOAT fHealth = 1.0
VECTOR_2D vSpriteInitReticlePos
VECTOR_2D vSpriteFinalReticlePos
BULLET_DATA sBulletData[ciCMHDZ_MAX_PROJECTILES]
PROJECTILE_DATA sThrownProjectile[ciCMHDZ_MAX_PLAYER_THROWN_PROJECTILES]
INT iThrownProjectilesAmmo
INT iNumberOfThrownProjectiles
INT iLastThrownProjectileTime
INT iThrownProjectileReloadDelay = 2000
ENDSTRUCT
STRUCT CMHDZ_ENEMY_MAP_DATA
CMHDZ_ENEMY_TYPES eEnemyType = 0
CMHDZ_ENEMY_DATA_BITS eDataBits
VECTOR_2D vSpritePos
VECTOR_2D vSize
FLOAT fStoppingPos
INT iLane
FLOAT fPointToAppear
INT iRenderAfterWarpCount
INT iStaticScreenPhase
ENDSTRUCT
STRUCT CMHDZ_ENEMY_DATA
CMHDZ_ENEMY_DATA_BITS eDataBits
//All of these have been replaced with the above bit set
//BOOL bReverse
//BOOL bIsPopup
//BOOL bThrownProjectile
//BOOL bPlayedAimAudio
//BOOL bPlayedCriticalWarningAudio
//BOOL bOuthouseAudio
//BOOL bAppearedOnscreen
//BOOL bWaitUntilLevelStationary
//BOOL bShotAtLeastOnce
CMHDZ_ENEMY_TYPES iEnemyType = CMHDZ_ENEMY_INVALID
CMHDZ_ENEMY_STATE eState = CMHDZ_ENEMY_STATE_INACTIVE
INT iDefaultFrameTimeCounter
INT iDefaultUpdateFrames
INT iSlowFrameTimeCounter
INT iSlowUpdateFrames
INT iSpriteAnimFrame
INT iHeadshotAnimFrame
INT iGoreAnimFrame
INT iHealth = 10
INT iEnemyFlashTimer
INT iTimeOfLastShot
FLOAT fAnimTimer
INT iPopUpTime
INT iEnemyLane
FLOAT fPointToAppear
INT iWarpedForMovingLevelCount
INT iRenderAfterWarpedCount = 0
FLOAT fStoppingX = 500.0
INT iStaticScreenPhase = 0 // If the screen is static, spawn enemy sets based on the numbers.
INT iEnemyVoiceID = 0
VECTOR_2D vSpritePos
VECTOR_2D vStartPos
VECTOR_2D vSize
ENDSTRUCT
//STRUCT CMHDZ_BOSS_PHASE_DATA
//
// CMHDZ_BOSS_STATE eStartingState
//
// FLOAT fStoppingX
// INT iTimeToThrow
// FLOAT fForegroundXAppear = 960.0
//
// FLOAT fIdleAttackTime = 1000.0
//
// INT iPopUpTime
// INT iPopDownTime
// INT iActiveLane
//
// CMHDZ_BOSS_DATA_BITS eDataBits
//
//ENDSTRUCT
CONST_FLOAT cfBOSS_MaxHealth 400.0
STRUCT CMHDZ_BOSS_DATA
FLOAT fHealth
FLOAT fDamageThreshold_1
FLOAT fDamageThreshold_2
FLOAT fDamageThreshold_3
INT iActiveLane = ciCMHDZ_LANE_FOREGROUND
// Timers
FLOAT fStateChangeTimer = 0.0
FLOAT fAnimTimer = 0.0
FLOAT fTimeToThrow = 0.0
// Has enemy been shot
BOOL bShotThisFrame = FALSE
CMHDZ_BOSS_STATE eCurrentBossState = CMHDZ_BOSS_STATE_INACTIVE
CMHDZ_BOSS_DATA_BITS eDataBits
//CMHDZ_BOSS_PHASE_DATA eBossPhases[5]
// Animation controller
CMHDZ_SPRITE sStartingSprite
CMHDZ_SPRITE eActiveSprite
INT iAnimFrame
// Positional data
VECTOR_2D vSpritePos
VECTOR_2D vScale
RGBA_COLOUR_STRUCT rgbaColor
ENDSTRUCT
STRUCT CMHDZ_ITEM_MAP_DATA
CMHDZ_ITEM_TYPES eItemType = CMHDZ_ITEM_HEALTH
VECTOR_2D vSpritePos
INT iLane
INT iRenderAfterWarpCount
INT iMinScreen
INT iAttackReadyTimer = 500
FLOAT fForceScale = 1.0
ENDSTRUCT
STRUCT CMHDZ_ITEM_DATA
BOOL bRendering = FALSE
BOOL bShot = FALSE
CMHDZ_ITEM_TYPES eItemType = CMHDZ_ITEM_HEALTH
INT iLane = 0
INT iRenderAfterWarpCount
INT iWarpCount
INT iMinScreen
FLOAT fInitialXPos
VECTOR_2D vSpritePos
VECTOR_2D vSize
ENDSTRUCT
STRUCT CMHDZ_MENU_OPTION_DATA
CMHDZ_ARCADE_CLIENT_STATE eClientState = CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN
CMHDZ_MENU_OPTIONS eMenuOption
VECTOR_2D vSpritePos
//VECTOR_2D vSize
ENDSTRUCT
STRUCT CMHDZ_BACKGROUND_SPRITE
//BOOL bRendering = FALSE
VECTOR_2D vSpritePos
VECTOR_2D vSpriteSize
STRING sSprite
INT iLane
ENDSTRUCT
STRUCT CMHDZ_PLAYER_WEAPON_DATA
INT iClipSize
INT iMaxAmmo
INT iMaxEnemyImpacts
INT iMinTimeBetweenShots
INT iMinTimeReloadSingleBullet
INT iMinDamagePerShot
FLOAT fSpreadModifier
ENDSTRUCT
STRUCT ARCADE_GAMES_LEADERBOARD_STRUCT
INT iInitials = 0
INT iScore = -1
INT iPlayer = -1
ENDSTRUCT
STRUCT ARCADE_GAMES_LEADERBOARD_DATA
ARCADE_GAMES_LEADERBOARD_STRUCT sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS]
CASINO_ARCADE_GAME eGame
BOOL bLeaderboardReceived
BOOL bEditing = FALSE
BOOL bCheated = FALSE
INT iLastLeaderboardRequest = -HIGHEST_INT
INT iLocalLbdPos = -1
INT iCurrentInitial = 0
INT iInitials = 0
INT iLbdInitialProfanityToken = 0
INT iTickTimer = 0
INT iMylastLbScore
#IF IS_DEBUG_BUILD
BOOL bForceDefaultLeaderboard
BOOL bDebugTestServerSort
#ENDIF
ENDSTRUCT
#IF IS_DEBUG_BUILD
STRUCT CMHDZ_DEBUG_STATE_WIDGET
BOOL bDebugChangeState
TEXT_WIDGET_ID twCurrentState
TEXT_WIDGET_ID twDesiredState
INT iDesiredStateSelector = 0 // required to prevent assert
ENDSTRUCT
STRUCT CMHDZ_ITEM_SELECTOR_WIDGET
INT iSelectedIndex
CMHDZ_ITEM_DATA sReadOnlyData
TEXT_WIDGET_ID txtType
ENDSTRUCT
STRUCT CMHDZ_COVER_SELECTOR_WIDGET
INT iSelectedIndex
CMHDZ_COVER_DATA sReadOnlyData
TEXT_WIDGET_ID txtType
INT iDataBitsSet
BOOL bRendering = FALSE
BOOL bSpawnedPickup = FALSE
BOOL bIsSpecialCover = FALSE
BOOL bIsAnimated = FALSE
BOOL bNeverRender = FALSE
ENDSTRUCT
//#ENDIF
//
//#IF CMHDZ_CMDLINE_EDITOR_NEW
STRUCT CMHDZ_EDITOR
BOOL bEditorActive
BOOL bMenuActive = TRUE
BOOL bRebuildMenu = TRUE
INT iPlayMenuUpdateClock
BOOL bShowMiniMap
VECTOR_2D vMiniMapPos
VECTOR_2D vMiniMapSize
VECTOR_2D vReticuleOldPos
VECTOR_2D vReticulePos
VECTOR_2D vReticuleDelta
INT iReticuleOverType
INT iReticuleOverIndex[4]
BOOL bShowEntityIndicies[4]
BOOL bPlayStage = FALSE
INT iEditMode = CMHDZ_EDITOR_MODE_LEVEL
INT iSelectedData = -1
INT iNewUnitData = 0
INT iActiveLevel
CONTROL_ACTION ctrlPlace = INPUT_FRONTEND_ACCEPT
CONTROL_ACTION ctrlPick = INPUT_SCRIPT_RB
CONTROL_ACTION ctrlToggleMap = INPUT_SCRIPT_RT
CONTROL_ACTION ctrlToggleMenu = INPUT_SCRIPT_LT
KEY_NUMBER ctrlPlace_PC = KEY_E
KEY_NUMBER ctrlPick_PC = KEY_Q
KEY_NUMBER ctrlToggleMap_PC = KEY_M
KEY_NUMBER ctrlToggleMenu_PC = KEY_P
INT iDirectionDebounceTime = 0
INT iMenuCurrentSelection
INT iMenuMaxSelection
CMHDZ_ENEMY_MAP_DATA sEnemyMapData[ciCMHDZ_MAX_ENEMIES]
CMHDZ_COVER_MAP_DATA sCoverMapData[ciCMHDZ_MAX_COVER]
CMHDZ_ITEM_MAP_DATA sItemMapData[ciCMHDZ_MAX_ITEMS]
ENDSTRUCT
#ENDIF
STRUCT CMHDZ_ARCADE_DATA
#IF IS_DEBUG_BUILD
WIDGET_GROUP_ID widgetGroupExample
BOOL bDebugCreatedWidgets
BOOL bDebugPause
INT iMyScores[CMHDZ_MAX_LEVELS]
CMHDZ_DEBUG_STATE_WIDGET sClientStateWidget
CMHDZ_DEBUG_STATE_WIDGET sPlayerProjectileWidget
#IF CMHDZ_CMDLINE_EDITOR_NEW
CMHDZ_EDITOR sEditor
#ENDIF
FLOAT fDebugFloat
FLOAT fTexturePosX[4]
FLOAT fTexturePosY[4]
FLOAT fTextureScale[4]
FLOAT fDebugEntityCornerX[2]
FLOAT fDebugEntityCornerY[2]
// FLOAT fDebugEntityWorldSpaceX
// FLOAT fDebugEntityWorldSpaceY
FLOAT fDebugReticuleEntityTLDiffX
FLOAT fDebugReticuleEntityTLDiffY
FLOAT fDebugEntityWorldX
FLOAT fDebugEntityWorldY
FLOAT fDebugEntityScale
// FLOAT fDebugStickX
// FLOAT fDebugStickY
// FLOAT fDebugMouseX
// FLOAT fDebugMouseY
FLOAT fReticuleSpriteDist
FLOAT fEntityStoppingX
FLOAT fDebugFloatValue
INT iDebugTotalScreens
INT iDebugAnimFrame
INT iDebugIntegerValue
INT iStaggeredDebugCount
INT iDebugEntityId
INT iDebugEntityState
INT iDebugLane
INT iDebugType
// INT iDebugCoverScreen
INT iDebugEnemiesRemaining
INT iEntityEdit
INT iDebugPickupScreen
INT iDebugTimer
INT iDebugCover
INT iDebugForegroundEnemy
INT iDebugMiddleEnemy
INT iDebugBackgroundEnemy
INT iDebugFrameCount
INT iDebugFACES_OF_DEATH
FLOAT fDebugTotalFrameTime
BOOL bDebugEnablePickup
BOOL bDebugOutputAliveEnemies
BOOL bStopMovingLevel
BOOL bDisableFacade
BOOL bEnableCoverHover
BOOL bEnableEnemyHover
BOOL bDebugShiftPropsLeft
BOOL bDebugShiftPropsRight
BOOL bDebugHideForegroundProps
BOOL bDebugEnableEdit
BOOL bDebugInitEdit
BOOL bDebugFinaliseEdit
BOOL bDebugAwardDeadeye
BOOL bDebugAwardFACES_OF_DEATH
BOOL bDebugAwardSetFACES_OF_DEATH
BOOL bDebugAwardSTV
BOOL bDebugAwardComplete
BOOL bDebugAwardTrophy
BOOL bClearAwardStats
BOOL bDebugLaunchDynamite
BOOL bDebugClearDynamite
BOOL bDebugSetPlayerProjectile
BOOL bDebugLaunchPlayerProjectile
BOOL bDebugClearPlayerProjectile
TEXT_WIDGET_ID twDebugPlayerProjectileType
INT iDebugPlayerProjectileType
BOOL bDebugInvunerablePlayer
BOOL bDebugEnableQuadDamage
BOOL bDrawDebugRect
BOOL bDebugRectCenterMode
VECTOR_2D vDebugRect[2]
INT iDebugStackSize
TEXT_WIDGET_ID twDebugId
INT iAssertCounter
#ENDIF
BOOL bFadingOut = FALSE
BOOL bLevelsCompleted[CMHDZ_MAX_LEVELS]
INT iLastMenuInput = 0
INT iExplosionIndex = 0
INT iCurrentActiveEnemies[ciCMHDZ_MAX_LANES]
INT iTimeSinceEnemyActive[ciCMHDZ_MAX_LANES]
INT iFade = 0
INT iTotalNumberOfEnemiesSpawned = 0
INT iTotalNumberOfEnemies = 0
INT iTotalNumberOfEnemiesKilledForScreen = 0
INT iNumberOfBackgroundElementsDrawn = 0
INT iNumberOfCoverDrawn = 0
INT iNumberOfBackgroundElements = 0
INT iNumberOfEnemies = 0
INT iNumberOfThrownEnemyProjectiles = 0
INT iNumberOfHostages = 0
INT iNumberOfProps = 0
INT iNumberOfItems = 0
INT iNumberOfMenuOptions = 0
INT iNumberOfStages = 0
INT iLocalLevelRunningTime
INT iResultsScreenTimer
INT iTotalTimePlayed
INT iTimer
INT iRivalPart
INT iStaggeredOnScreenViableCoverCount
INT iHelpTextBitset = 0
INT iLevelBitset[CMHDZ_MAX_LEVELS]
INT iTotalLevelShots[CMHDZ_MAX_LEVELS]
INT iTotalLevelEnemyHits[CMHDZ_MAX_LEVELS]
INT iTotalLevelEnemyHeadShots[CMHDZ_MAX_LEVELS]
INT iTotalPowerupsCollected[CMHDZ_MAX_LEVELS]
INT iDirectorAudioBits // Controls Director audio bits
INT iChallengesBitsetForTelemetry
INT iCurrentScreen
INT iLastScreenToStopOn
FLOAT fOverallLevelProgression = 0.0
INT iStaticScreenPhase = 0
INT iNumberOfViableOnScreenCoverPoints
INT iViableOnScreenEnemyCoverPoints[ciCMHDZ_MAX_SUITABLE_HIDE_BEHIND_COVER]
CMHDZ_ARCADE_CLIENT_STATE eClientState
RGBA_COLOUR_STRUCT rgbaBlack
RGBA_COLOUR_STRUCT rgbaSprite
RGBA_COLOUR_STRUCT rgbaWhite
RGBA_COLOUR_STRUCT rgbaRed
RGBA_COLOUR_STRUCT rgbaRedText
RGBA_COLOUR_STRUCT rgbaEnemyShot
RGBA_COLOUR_STRUCT rgbaGreen
RGBA_COLOUR_STRUCT rgbaBlue
RGBA_COLOUR_STRUCT rgbaSpriteUsedBullet
RGBA_COLOUR_STRUCT rgbaYellow
RGBA_COLOUR_STRUCT rgbaWhiteSafe
CMHDZ_LEVELS eCurrentLevel = CMHDZ_LEVEL_SCRAPYARD
CMHDZ_LEVEL_SCREEN eLevelState = CMHDZ_FADING_IN
// CMHDZ_MENU_OPTIONS eCurrentTitleOption = CMHDZ_START
PROJECTILE_INFO sProjectileInfo[NUM_CMHDZ_PROJECTILE_TYPES]
CMHDZ_PLAYER_DATA sPlayerData[ciCMHDZ_MAX_PLAYERS]
CMHDZ_COVER_DATA sCoverData[ciCMHDZ_MAX_COVER]
CMHDZ_FX_DATA sFXData[ciCMHDZ_MAX_FX]
INT iBackgroundDataRenderingBits[2]
INT iBackgroundTilesDataRenderingBits
CMHDZ_BACKGROUND_SPRITE sBackgroundTilesData[ciCMHDZ_MAX_BACKGROUND_TILES]
CMHDZ_BACKGROUND_SPRITE sBackgroundData[ciCMHDZ_MAX_BACKGROUND_ELEMS]
CMHDZ_ENEMY_DATA sEnemyData[CICMHDZ_MAX_ENEMIES]
CMHDZ_ITEM_DATA sItemData[ciCMHDZ_MAX_ITEMS]
PROJECTILE_DATA sEnemyProjectiles[ciCMHDZ_MAX_ENEMY_PROJECTILES]
CMHDZ_MENU_OPTION_DATA sMenuOptionsData[ciCMHDZ_MAX_MENU_OPTIONS]
SCRIPT_CONTROL_HOLD_TIMER sControlTimer
SCRIPT_CONTROL_HOLD_TIMER sPcQuitTimer
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeAnimData
BOOL bDoneReactionAnim
CMHDZ_PLAYER_PED_ANIM_STATE ePlayerPedAnimState = CMHDZ_PLAYER_PED_ANIM_IDLE
//INT iBearAttackTime
INT iIdleAnimCount
BOOL bPlayedWinningAnim
BOOL bWonTrophyThisSession
BOOL bPlayedOutroAudio
BOOL bPlayedOutro
BINK_MOVIE_ID bmIdCmhdzIntro
BINK_MOVIE_ID bmIdCmhdzOutro
CMHDZ_RESULT_SCREEN_STATE eResultState
INT iResultsScreenTimeout
INT iReturnToMenuTimeout
INT iMusicBitset
INT iSoundId[CMHDZ_AUDIO_EFFECT_MAX]
//INT iEffectFlashDurationTimer
//FLOAT fTotalTimeTaken
INT iEffectFlashAlpha
FLOAT fEffectFlashAlpha
BOOL bEffectHitmaxAlpha
BOOL bFlipBackground
FLOAT fBackgroundSpeedMult = 1.0
FLOAT fCurrentTimeStep
ARCADE_GAMES_LEADERBOARD_DATA sLbData
CMHDZ_HUD_TEXTPIVOT eTextPivot
VECTOR_2D vTextScale
CMHDZ_BOSS_DATA sBossData
// Only need a V mod
// VECTOR_2D vU_ScanMod
// VECTOR_2D vV_ScanMod
FLOAT fSyncOffsetX
FLOAT fSyncOffsetY
// Sound glitching
FLOAT fSoundGlitchLevel // Final level used for sound playback
FLOAT fSoundGlitchAdditional // Additional effects applied.
// Sound cooldown
FLOAT fDirectorVoiceCooldown
FLOAT fEnemyVoiceCooldown
// Local timers
FLOAT fPowerRunTimer
BOOL bSkipLeaderboard
ENDSTRUCT
CMHDZ_ARCADE_DATA sCMHDZData
#IF IS_DEBUG_BUILD
FUNC VECTOR_2D GET_DEBUG_TEXTURE_POS(INT iDebugTexture)
RETURN INIT_VECTOR_2D(sCMHDZData.fTexturePosX[iDebugTexture], sCMHDZData.fTexturePosY[iDebugTexture])
ENDFUNC
FUNC FLOAT GET_DEBUG_TEXTURE_SCALE(INT iDebugTexture)
RETURN sCMHDZData.fTextureScale[iDebugTexture]
ENDFUNC
FUNC INT CMHDZ_GET_DEBUG_INTEGER()
RETURN sCMHDZData.iDebugIntegerValue
ENDFUNC
FUNC FLOAT CMHDZ_GET_DEBUG_FLOAT()
RETURN sCMHDZData.fDebugFloatValue
ENDFUNC
#ENDIF
///////////////////////////////
/// MULTIPLAYER DATA ///
///////////////////////////////
STRUCT CMHDZ_PART_DATA
INT iHiScoreForLevel[CMHDZ_MAX_LEVELS]
INT iCurrentScoreForLevel[CMHDZ_MAX_LEVELS]
FLOAT fStarRatingForLevel[CMHDZ_MAX_LEVELS]
ENDSTRUCT
// Everyone can read this data, only the server can update it.
STRUCT CMHDZ_SERVER_BROADCAST_DATA
INT iServerGameState
INT iNumPlayers
INT iServerBitset
INT iMatchId
INT iSortLbForPart
CMHDZ_PART_DATA sPlayerScores[2]
ARCADE_GAMES_LEADERBOARD_STRUCT sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS]
BOOL bLeaderboardRecieved = FALSE
ENDSTRUCT
CMHDZ_SERVER_BROADCAST_DATA cmhdzServerBd
CONST_INT ciCMHDZ_MAX_MP_PLAYERS 2
ENUM CMHDZ_PLAYER_BD_BITS
CMHDZ_PLAYER_BD_BIT_EDITING_LEADERBOARD = 0
ENDENUM
STRUCT CMHDZ_PLAYER_BROADCAST_DATA
INT iGameState
INT iPlayerBitset
INT iPlayerScore[CMHDZ_MAX_LEVELS]
INT iPlayerHiScore[CMHDZ_MAX_LEVELS]
FLOAT fPlayerStarRating[CMHDZ_MAX_LEVELS]
INT iLeaderboardInitials
INT iLeaderboardScore = 0
ENDSTRUCT
CMHDZ_PLAYER_BROADCAST_DATA playerBd[2]
ENUM CMHDZ_SERVER_BITS
CMHDZ_SERVER_BIT_TWO_PLAYERS_JOINED = 0,
CMHDZ_SERVER_BIT_SOMEONE_EDITING_LEADERBOARD,
CMHDZ_SERVER_BIT_SORTED_LEADERBOARD
ENDENUM
/// PURPOSE:
/// Given a rectangle as topleft corner and size work out the center
/// PARAMS:
/// tlx - top left x
/// tly - top left y
/// w - width
/// h - height
/// RETURNS:
/// Center as vector 2D
FUNC VECTOR_2D CMHDZ_GET_CENTER_FROM_CORNER_RECT(FLOAT tlx, FLOAT tly, FLOAT w, FLOAT h)
RETURN INIT_VECTOR_2D(tlx + (w / 2.0), tly + (h / 2.0))
ENDFUNC
PROC SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(ENUM_TO_INT &eBitField, ENUM_TO_INT eBitMask, BOOL bOn = TRUE)
IF (bOn)
eBitField = eBitField | eBitMask
ELSE
eBitField -= eBitField & eBitMask
ENDIF
ENDPROC
FUNC BOOL CMHDZ_IS_POSITION_IN_BOX(VECTOR_2D vPos, VECTOR_2D vBoxCenter, VECTOR_2D vBoxSize)
FLOAT x1, x2, y1, y2
x1 = vBoxCenter.x - (vBoxSize.x/2)
y1 = vBoxCenter.y - (vBoxSize.y/2)
x2 = vBoxCenter.x + (vBoxSize.x/2)
y2 = vBoxCenter.y + (vBoxSize.y/2)
RETURN (vPos.X > x1 AND vPos.x < x2) AND (vPos.y > y1 AND vPos.Y < y2)
ENDFUNC
FUNC VECTOR_2D CMHDZ_GET_ORIGIN_FOR_SCREEN(INT iScreen)
RETURN INIT_VECTOR_2D((iScreen - 1) * (cfBASE_SCREEN_WIDTH / 2.0), 0)
ENDFUNC
FUNC INT CMHDZ_GET_SCREEN_FOR_X_POSITION(FLOAT xCoord)
RETURN (FLOOR((xCoord * 2.0) / cfBASE_SCREEN_WIDTH) % 4) + 1
ENDFUNC
FUNC STRING CMHDZ_GET_TEXTURE_DICT_NAME(CMHDZ_TEXDICT eDict)
SWITCH (eDict)
CASE CMHDZ_TEXDICT_INVALID RETURN ""
CASE NUM_CMHDZ_TEXTDICT RETURN ""
CASE CMHDZ_TEXDICT_BASE RETURN "MPCamhedzCommonProps"
CASE CMHDZ_TEXDICT_TITLE RETURN "MPCamhedzTitles"
CASE CMHDZ_TEXDICT_HUD RETURN "MPCamhedzCommonProps"
CASE CMHDZ_TEXDICT_FACADE RETURN "MPCamhedzDeadScreen"
CASE CMHDZ_TEXDICT_LVLSELECT RETURN "MPCamhedzTitles"
CASE CMHDZ_TEXDICT_LVLCOMP RETURN "MPCamhedzTitles"
CASE CMHDZ_TEXDICT_LVL1 RETURN "MPCamhedzLevel01City"
CASE CMHDZ_TEXDICT_LVL2 RETURN "MPCamhedzLevel02Scrapyard"
CASE CMHDZ_TEXDICT_LVL3 RETURN "MPCamhedzLevel03Asylum"
CASE CMHDZ_TEXDICT_LVL4 RETURN "MPCamhedzLevel04Themepark"
CASE CMHDZ_TEXDICT_LVL5 RETURN "MPCamhedzLevel05Slaughterhouse"
CASE CMHDZ_TEXDICT_COMMON_PROPS RETURN "MPCamhedzCommonProps"
CASE CMHDZ_TEXDICT_RESULTS RETURN "MPCamhedzResults"
CASE CMHDZ_TEXDICT_FG_ENEMY_A RETURN "MPCamhedzEnemyFGA"
CASE CMHDZ_TEXDICT_FG_ENEMY_B RETURN "MPCamhedzEnemyFGB"
CASE CMHDZ_TEXDICT_FG_ENEMY_C RETURN "MPCamhedzEnemyFGC"
CASE CMHDZ_TEXDICT_FG_ENEMY_D RETURN "MPCamhedzEnemyFGD"
//CASE CMHDZ_TEXDICT_FG_ENEMY_D RETURN "MPCamhedzEnemyFGD_2"
CASE CMHDZ_TEXDICT_FG_ENEMY_E RETURN "MPCamhedzEnemyFGE"
CASE CMHDZ_TEXDICT_FG_ENEMY_E_2 RETURN "MPCamhedzEnemyFGE_2"
CASE CMHDZ_TEXDICT_CH_GANG_A RETURN "MPCamhedzEnemyGangA"
CASE CMHDZ_TEXDICT_CH_GANG_B RETURN "MPCamhedzEnemyGangB"
CASE CMHDZ_TEXDICT_CH_GANG_C RETURN "MPCamhedzEnemyGangC"
CASE CMHDZ_TEXDICT_CH_GANG_D RETURN "MPCamhedzEnemyGangD"
CASE CMHDZ_TEXDICT_CH_GANG_E RETURN "MPCamhedzEnemyGangE"
CASE CMHDZ_TEXDICT_CH_GANG_RARE RETURN "MPCamhedzEnemy_Hostages"
CASE CMHDZ_TEXDICT_CH_CITY RETURN "MPCamhedzLevel01City"
CASE CMHDZ_TEXDICT_CH_SCRAPYARD RETURN "MPCamhedzLevel02Scrapyard"
CASE CMHDZ_TEXDICT_CH_ASYLUM RETURN "MPCamhedzLevel03Asylum"
CASE CMHDZ_TEXDICT_CH_THEMEPARK RETURN "MPCamhedzLevel04Themepark"
CASE CMHDZ_TEXDICT_CH_SLAUGHTERHOUSE RETURN "MPCamhedzLevel05Slaughterhouse"
CASE CMHDZ_TEXDICT_CH_VHSFONT RETURN "MPCamhedzVHSFont"
CASE CMHDZ_TEXDICT_CH_TITLES RETURN "MPCamhedzTitles"
CASE CMHDZ_TEXDICT_CH_RESULTS RETURN "MPCamhedzResults"
CASE CMHDZ_TEXDICT_CH_DAMAGE RETURN "MPCamhedzDamageEffects"
CASE CMHDZ_TEXDICT_BACKGROUND_GORE RETURN "MPCamhedzGore"
CASE CMHDZ_TEXDICT_BEARSY RETURN "MPCamhedzBearsy"
CASE CMHDZ_TEXDICT_BEARSY_THROWING RETURN "MPCamhedzBearsy_Throwing"
CASE CMHDZ_TEXDICT_BEARSY_EFFECTS RETURN "MPCamhedzBearsy_Effects"
CASE CMHDZ_TEXDICT_BEARSY_FOREGROUND RETURN "MPCamhedzBearsy_Foreground"
CASE CMHDZ_TEXDICT_BEARSY_FOREGROUND_ATTACK RETURN "MPCamhedzBearsy_ForegroundAttack"
CASE CMHDZ_TEXDICT_BEARSY_DEATH RETURN "MPCamhedzBearsy_Death"
CASE CMHDZ_TEXDICT_BEARSY_BONE RETURN "MPCamhedzBearsy_Projectile_Bone"
CASE CMHDZ_TEXDICT_BEARSY_JOWL RETURN "MPCamhedzBearsy_Projectile_Bone"
CASE CMHDZ_TEXDICT_BEARSY_LEG RETURN "MPCamhedzBearsy_Projectile_Bone"
CASE CMHDZ_TEXDICT_BEARSY_TROTTER RETURN "MPCamhedzBearsy_Projectile_Bone"
CASE CMHDZ_TEXDICT_ENEMY_BURNING RETURN "MPCamhedzBurning"
CASE CMHDZ_TEXDICT_RETICLE_TYPES RETURN "MPCamhedzReticle"
// CASE CMHDZ_TEXDICT_HOSTAGES RETURN "MPCamhedzEnemyGangA"
CASE CMHDZ_TEXDICT_DEAD RETURN "MPCamhedzResults"
ENDSWITCH
RETURN "UNKNOWN DICT - CHECK CASES"
ENDFUNC
FUNC BOOL CMHDZ_LOAD_TEXDICT(CMHDZ_TEXDICT eDict)
STRING sName = CMHDZ_GET_TEXTURE_DICT_NAME(eDict)
IF IS_STRING_NULL_OR_EMPTY(sName)
RETURN FALSE
ENDIF
REQUEST_STREAMED_TEXTURE_DICT(sName)
IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED(sName)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] CMHDZ_LOAD_TEXDICT - Loading:", sName)
RETURN FALSE
ENDIF
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] CMHDZ_LOAD_TEXDICT - Loaded:", sName)
RETURN TRUE
ENDFUNC
PROC CMHDZ_RELEASE_TEXDICT(CMHDZ_TEXDICT eDict)
STRING sName = CMHDZ_GET_TEXTURE_DICT_NAME(eDict)
IF IS_STRING_NULL_OR_EMPTY(sName)
EXIT
ENDIF
// IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED(sName)
// EXIT
// ENDIF
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] CMHDZ_RELEASE_TEXDICT - Released:", sName)
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED(sName)
ENDPROC
FUNC BOOL CMHDZ_LOAD_ALL_TEXTURE_DICTS()
CMHDZ_TEXDICT dict
REPEAT NUM_CMHDZ_TEXTDICT dict
IF (dict != CMHDZ_TEXDICT_INVALID)
AND (dict != NUM_CMHDZ_TEXTDICT)
AND NOT CMHDZ_LOAD_TEXDICT(dict)
//CDEBUG2LN(DEBUG_MINIGAME, "CMHDZ_LOAD_ALL_TEXTURE_DICTS - Loading Tex Dic: ", CMHDZ_GET_TEXTURE_DICT_NAME(dict))
RETURN FALSE
ENDIF
ENDREPEAT
RETURN TRUE
ENDFUNC
PROC CMHDZ_RELEASE_ALL_TEXTURE_DICTS()
CMHDZ_TEXDICT dict
REPEAT NUM_CMHDZ_TEXTDICT dict
IF (dict != CMHDZ_TEXDICT_INVALID)
AND (dict != NUM_CMHDZ_TEXTDICT)
CMHDZ_RELEASE_TEXDICT(dict)
ENDIF
ENDREPEAT
ENDPROC
// TODO (LOW): CMHDZ_GET_ENUM_FROM_TEXTURE_DICT_NAME Needs updating
FUNC CMHDZ_TEXDICT CMHDZ_GET_ENUM_FROM_TEXTURE_DICT_NAME(STRING sName)
IF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersCommon")
RETURN CMHDZ_TEXDICT_BASE
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersTitle")
RETURN CMHDZ_TEXDICT_TITLE
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersHud")
RETURN CMHDZ_TEXDICT_HUD
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersFacade")
RETURN CMHDZ_TEXDICT_FACADE
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersLevels")
RETURN CMHDZ_TEXDICT_LVLSELECT
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersLevelsComp")
RETURN CMHDZ_TEXDICT_LVLCOMP
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersLevel1")
RETURN CMHDZ_TEXDICT_LVL1
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersLevel2")
RETURN CMHDZ_TEXDICT_LVL2
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersLevel3")
RETURN CMHDZ_TEXDICT_LVL3
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersLevel4")
RETURN CMHDZ_TEXDICT_LVL4
ELIF ARE_STRINGS_EQUAL(sName, "MPCamhedzLevel05Slaughterhouse")
RETURN CMHDZ_TEXDICT_LVL5
ELIF ARE_STRINGS_EQUAL(sName, "MPCamhedzEnemyFGA")
RETURN CMHDZ_TEXDICT_FG_ENEMY_A
ELIF ARE_STRINGS_EQUAL(sName, "MPCamhedzEnemyFGB")
RETURN CMHDZ_TEXDICT_FG_ENEMY_B
ELIF ARE_STRINGS_EQUAL(sName, "MPCamhedzEnemyFGC")
RETURN CMHDZ_TEXDICT_FG_ENEMY_C
ELIF ARE_STRINGS_EQUAL(sName, "MPCamhedzEnemyFGD")
RETURN CMHDZ_TEXDICT_FG_ENEMY_D
ELIF ARE_STRINGS_EQUAL(sName, "MPCamhedzEnemyFGE")
RETURN CMHDZ_TEXDICT_FG_ENEMY_E
ELIF ARE_STRINGS_EQUAL(sName, "MPCamhedzEnemyFGD_2")
RETURN CMHDZ_TEXDICT_FG_ENEMY_D
ELIF ARE_STRINGS_EQUAL(sName, "MPCamhedzEnemyFGE_2")
RETURN CMHDZ_TEXDICT_FG_ENEMY_E_2
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersProps")
RETURN CMHDZ_TEXDICT_COMMON_PROPS
ELIF ARE_STRINGS_EQUAL(sName, "MPCamhedzResults")
RETURN CMHDZ_TEXDICT_RESULTS
ELIF ARE_STRINGS_EQUAL(sName, "MPLastGunslingersDead")
RETURN CMHDZ_TEXDICT_DEAD
ENDIF
RETURN CMHDZ_TEXDICT_INVALID
ENDFUNC
//========== BITMASKS FOR IN-GAME OBJECTS ==========
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Player Bits
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNC BOOL CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BITSET eBit)
RETURN IS_BIT_SET(sCMHDZData.sPlayerData[0].iPlayerBitset, ENUM_TO_INT(eBit))
ENDFUNC
PROC CMHDZ_SET_PLAYER_BIT(CMHDZ_PLAYER_BITSET eBit)
IF NOT CMHDZ_IS_PLAYER_BIT_SET(eBit)
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_SET_PLAYER_BIT] {DSW} Set bit ", CMHDZ_PLAYER_BITSET_TO_STRING(eBit))
#ENDIF
SET_BIT(sCMHDZData.sPlayerData[0].iPlayerBitset, ENUM_TO_INT(eBit))
ENDIF
ENDPROC
PROC CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BITSET eBit)
IF CMHDZ_IS_PLAYER_BIT_SET(eBit)
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_CLEAR_PLAYER_BIT] {DSW} Set bit ", CMHDZ_PLAYER_BITSET_TO_STRING(eBit))
#ENDIF
CLEAR_BIT(sCMHDZData.sPlayerData[0].iPlayerBitset, ENUM_TO_INT(eBit))
ENDIF
ENDPROC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Cover Bits
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PROC CMHDZ_COVER_MAP_DATA_SET_BITMASK(CMHDZ_COVER_MAP_DATA &dat, CMHDZ_COVER_DATA_BITS bit)
SET_BITMASK_ENUM_AS_ENUM(dat.eDataBits, bit)
ENDPROC
PROC CMHDZ_COVER_MAP_DATA_CLEAR_BITMASK(CMHDZ_COVER_MAP_DATA &dat, CMHDZ_COVER_DATA_BITS bit)
CLEAR_BITMASK_ENUM_AS_ENUM(dat.eDataBits, bit)
ENDPROC
FUNC BOOL CMHDZ_COVER_MAP_DATA_IS_BITMASK_SET(CMHDZ_COVER_MAP_DATA &dat, CMHDZ_COVER_DATA_BITS bit)
RETURN IS_BITMASK_ENUM_AS_ENUM_SET(dat.eDataBits, bit)
ENDFUNC
#ENDIF
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Enemy Bits
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PROC CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(INT iEnemy, CMHDZ_ENEMY_DATA_BITS bit, BOOL bOn = TRUE)
IF (bOn)
SET_BITMASK_ENUM_AS_ENUM(sCMHDZData.sEnemyData[iEnemy].eDataBits, bit)
ELSE
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sEnemyData[iEnemy].eDataBits, bit)
ENDIF
ENDPROC
PROC CMHDZ_ENEMY_DATA_SET_BITMASK(INT iEnemy, CMHDZ_ENEMY_DATA_BITS bit)
SET_BITMASK_ENUM_AS_ENUM(sCMHDZData.sEnemyData[iEnemy].eDataBits, bit)
ENDPROC
PROC CMHDZ_ENEMY_DATA_CLEAR_BITMASK(INT iEnemy, CMHDZ_ENEMY_DATA_BITS bit)
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sEnemyData[iEnemy].eDataBits, bit)
ENDPROC
FUNC BOOL CMHDZ_ENEMY_DATA_IS_BITMASK_SET(INT iEnemy, CMHDZ_ENEMY_DATA_BITS bit)
RETURN IS_BITMASK_ENUM_AS_ENUM_SET(sCMHDZData.sEnemyData[iEnemy].eDataBits, bit)
ENDFUNC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Level Bits
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNC BOOL CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(CMHDZ_LEVELS eLevel, CMHDZ_LEVELS_BITSET eBit)
RETURN IS_BIT_SET(sCMHDZData.iLevelBitset[ENUM_TO_INT(eLevel)], ENUM_TO_INT(eBit))
ENDFUNC
FUNC BOOL CMHDZ_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BITSET eBit)
RETURN CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(sCMHDZData.eCurrentLevel, eBit)
ENDFUNC
PROC CMHDZ_SET_LEVEL_BIT_FOR_LEVEL(CMHDZ_LEVELS eLevel, CMHDZ_LEVELS_BITSET eBit)
IF NOT CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(eLevel, eBit)
// #IF IS_DEBUG_BUILD
// STRING sBit = CMHDZ_LEVELS_BITSET_TO_STRING(eBit)
// STRING sLevel = CMHDZ_LEVELS_TO_STRING(eLevel)
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_SET_LEVEL_BIT_FOR_LEVEL] {DSW} Set bit ", sBit, " For Level ", sLevel)
// #ENDIF
SET_BIT(sCMHDZData.iLevelBitset[ENUM_TO_INT(eLevel)], ENUM_TO_INT(eBit))
ENDIF
ENDPROC
PROC CMHDZ_SET_LEVEL_BIT_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BITSET eBit)
CMHDZ_SET_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, eBit)
ENDPROC
//========== MUSIC EVENTS ==========
FUNC CMHDZ_MUSIC_EVENTS CMHDZ_GET_MUSIC_EVENT_FOR_LEVEL(CMHDZ_LEVELS eLevel)
SWITCH eLevel
CASE CMHDZ_LEVEL_CITY RETURN CMHDZ_MUSIC_EVENT_GOSPEL
CASE CMHDZ_LEVEL_SCRAPYARD RETURN CMHDZ_MUSIC_EVENT_BUCKLE
CASE CMHDZ_LEVEL_ASYLUM RETURN CMHDZ_MUSIC_EVENT_HILLBILLY
CASE CMHDZ_LEVEL_PARK RETURN CMHDZ_MUSIC_EVENT_RUCKUS
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE RETURN CMHDZ_MUSIC_EVENT_BARREL
ENDSWITCH
RETURN CMHDZ_MUSIC_EVENT_INVALID
ENDFUNC
FUNC STRING CMHDZ_GET_MUSIC_EVENT_FROM_ENUM(CMHDZ_MUSIC_EVENTS eEvent)
SWITCH eEvent
CASE CMHDZ_MUSIC_EVENT_INTRO RETURN "ARCADE_CamH_INTRO_OS"
CASE CMHDZ_MUSIC_EVENT_TITLE RETURN "ARCADE_CamH_TITLE_CARD"
CASE CMHDZ_MUSIC_EVENT_GOSPEL RETURN "ARCADE_CamH_TRACK_1"
CASE CMHDZ_MUSIC_EVENT_BUCKLE RETURN "ARCADE_CamH_TRACK_2"
CASE CMHDZ_MUSIC_EVENT_HILLBILLY RETURN "ARCADE_CamH_TRACK_4"
CASE CMHDZ_MUSIC_EVENT_RUCKUS RETURN "ARCADE_CamH_TRACK_6"
CASE CMHDZ_MUSIC_EVENT_BARREL RETURN "ARCADE_CamH_TRACK_9"
CASE CMHDZ_MUSIC_EVENT_STOP RETURN "ARCADE_CamH_STOP"
CASE CMHDZ_MUSIC_EVENT_DEATH RETURN "ARCADE_CamH_DEATH_OS"
CASE CMHDZ_MUSIC_EVENT_HIT RETURN "ARCADE_CamH_PLAYER_HIT"
CASE CMHDZ_MUSIC_EVENT_HIT_ALT RETURN "ARCADE_CamH_PLAYER_HIT_ALT"
CASE CMHDZ_MUSIC_EVENT_FINAL_BOSS RETURN "ARCADE_CamH_FINAL_BOSS"
CASE CMHDZ_MUSIC_EVENT_FINAL_BOSS_DEFEATED RETURN "ARCADE_CamH_FINAL_BOSS_DEFEATED"
ENDSWITCH
RETURN "UNKNOWN"
ENDFUNC
PROC CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENTS eEvent)
TEXT_LABEL_31 tl31MusicEvent = CMHDZ_GET_MUSIC_EVENT_FROM_ENUM(eEvent)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [CMHDZ_TRIGGER_MUSIC_EVENT] {DSW} Event: ", tl31MusicEvent)
TRIGGER_MUSIC_EVENT(tl31MusicEvent)
ENDPROC
PROC CMHDZ_TRIGGER_MUSIC_EVENT_HIT_RANDOM()
INT iRand = GET_RANDOM_INT_IN_RANGE(0,3)
TEXT_LABEL_31 tl31MusicEvent = "ARCADE_CamH_PLAYER_HIT"
SWITCH iRand
CASE 0
CASE 1
tl31MusicEvent = "ARCADE_CamH_PLAYER_HIT"
BREAK
CASE 2
tl31MusicEvent = "ARCADE_CamH_PLAYER_HIT_ALT"
BREAK
ENDSWITCH
//TEXT_LABEL_31 tl31MusicEvent = CMHDZ_GET_MUSIC_EVENT_FROM_ENUM(eEvent)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [CMHDZ_TRIGGER_MUSIC_EVENT] {DSW} Event: ", tl31MusicEvent)
TRIGGER_MUSIC_EVENT(tl31MusicEvent)
ENDPROC
PROC CMHDZ_PREPARE_MUSIC_EVENT(CMHDZ_MUSIC_EVENTS eEvent)
TEXT_LABEL_31 tl31MusicEvent = CMHDZ_GET_MUSIC_EVENT_FROM_ENUM(eEvent)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [CMHDZ_PREPARE_MUSIC_EVENT] {DSW} Event: ", tl31MusicEvent)
PREPARE_MUSIC_EVENT(tl31MusicEvent)
ENDPROC
PROC CMHDZ_CANCEL_MUSIC_EVENT(CMHDZ_MUSIC_EVENTS eEvent)
TEXT_LABEL_31 tl31MusicEvent = CMHDZ_GET_MUSIC_EVENT_FROM_ENUM(eEvent)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [CMHDZ_CANCEL_MUSIC_EVENT] {DSW} Event: ", tl31MusicEvent)
IF CANCEL_MUSIC_EVENT(tl31MusicEvent)
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [CMHDZ_CANCEL_MUSIC_EVENT] {BAZ} Event: ", tl31MusicEvent)
ENDIF
ENDPROC
//PROC CMHDZ_CANCEL_MUSIC_EVENT(CMHDZ_MUSIC_EVENTS eEvent)
// TEXT_LABEL_31 tl31MusicEvent = CMHDZ_GET_MUSIC_EVENT_FROM_ENUM(eEvent)
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [CMHDZ_PREPARE_MUSIC_EVENT] {DSW} Event: ", tl31MusicEvent)
// PREPARE_MUSIC_EVENT(tl31MusicEvent)
//ENDPROC
PROC CMHDZ_GET_AUDIO_STRINGS_FROM_ENUM(CMHDZ_AUDIO_EFFECT eSound, TEXT_LABEL_31 &tl31SoundName, TEXT_LABEL_63 &tl63SoundSetName)
SWITCH eSound
CASE CMHDZ_AUDIO_EFFECT_GET_READY tl31SoundName = "VO_Get_Ready" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DRAW tl31SoundName = "VO_Draw" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_SELECT_STAGE tl31SoundName = "Select_Stage" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_RELOAD tl31SoundName = "VO_Reload" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_SCREEN_LOCKED tl31SoundName = "Select_Stage_Failed" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_MENU_BACK tl31SoundName = "Menu_Back" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_MENU_CONTINUE tl31SoundName = "Death_Screen_Continue" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_MUSIC_TRANSITION tl31SoundName = "Music_Transition_Glitch" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_LEVEL_BACKGROUND_LOOP tl31SoundName = "Level_Background_Loop" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_MISS tl31SoundName = "Shoot_Miss" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_OPTION tl31SoundName = "Shoot_Option" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_START tl31SoundName = "Press_Start" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_RESULTS_SCORE_UPDATE tl31SoundName = "Calculate_Score_Total" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_GENERIC tl31SoundName = "Hit_Generic" tl63SoundSetName = "DLC_Tuner_AM_CH_Bullet_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_BODY tl31SoundName = "Hit_Body" tl63SoundSetName = "DLC_Tuner_AM_CH_Bullet_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_PLAYER tl31SoundName = "Hit_Player" tl63SoundSetName = "DLC_Tuner_AM_CH_Bullet_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_METAL tl31SoundName = "Hit_Metal" tl63SoundSetName = "DLC_Tuner_AM_CH_Bullet_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_BUSHES tl31SoundName = "Hit_Bushes" tl63SoundSetName = "DLC_Tuner_AM_CH_Bullet_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_ROCK tl31SoundName = "Hit_Rock" tl63SoundSetName = "DLC_Tuner_AM_CH_Bullet_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_HEADSHOT tl31SoundName = "Hit_Headshot" tl63SoundSetName = "DLC_Tuner_AM_CH_Bullet_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_BEARSY tl31SoundName = "Hit_Bearsy" tl63SoundSetName = "DLC_Tuner_AM_CH_Bullet_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BULLET_HIT_BEARSY_DEFLECT tl31SoundName = "Hit_Bearsy_Deflect" tl63SoundSetName = "DLC_Tuner_AM_CH_Bullet_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_SWAP_WEAPON tl31SoundName = "Weapon_Change" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_REVOLVER_FIRE tl31SoundName = "Gun_Revolver_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_REVOLVER_EMPTY tl31SoundName = "Gun_Revolver_Dry_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_FIRST tl31SoundName = "Gun_Revolver_Reload_First" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_SINGLE tl31SoundName = "Gun_Revolver_Reload" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_LAST tl31SoundName = "Gun_Revolver_Reload_Last" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_RIFLE_FIRE tl31SoundName = "Gun_Assault_Rifle_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_RIFLE_EMPTY tl31SoundName = "Gun_Assault_Rifle_Dry_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
// CASE CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD tl31SoundName = "Rifle_Reload" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE tl31SoundName = "Gun_Assault_Rifle_Reload" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_LAST tl31SoundName = "Gun_Assault_Rifle_Reload_Last" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_SHOTGUN_FIRE tl31SoundName = "Gun_Shotgun_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_SHOTGUN_EMPTY tl31SoundName = "Gun_Shotgun_Dry_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
// CASE CMHDZ_AUDIO_EFFECT_SHOTGUN_RELOAD tl31SoundName = "Shotgun_Reload" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE tl31SoundName = "Gun_Shotgun_Reload" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_NAILGUN_FIRE tl31SoundName = "Gun_Nailgun_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_NAILGUN_RELOAD_SINGLE tl31SoundName = "Gun_Nailgun_Reload" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_THROW tl31SoundName = "Thrown_Brick" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_HIT tl31SoundName = "Thrown_Brick_Hit" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_THROW tl31SoundName = "Thrown_Nailbomb" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_HIT tl31SoundName = "Thrown_Nailbomb_Hit" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_THROW tl31SoundName = "Thrown_Molotov" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_HIT tl31SoundName = "Thrown_Molotov_Hit" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Weapon_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_DEAD tl31SoundName = "Death" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW tl31SoundName = "Pain_Near_Death" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_LOW tl31SoundName = "Pain_High" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM tl31SoundName = "Pain_Med" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_HIGH tl31SoundName = "Pain_Low" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD tl31SoundName = "Death" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_GLOAT tl31SoundName = "Attack_Success" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_A_01_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_ATTACK tl31SoundName = "Attack" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_A_01_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_PAIN tl31SoundName = "Pain" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_A_INJURED tl31SoundName = "Hurt" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_A_01_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_DEAD tl31SoundName = "Death" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_GLOAT tl31SoundName = "Attack_Success" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_B_02_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_ATTACK tl31SoundName = "Attack" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_B_02_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_PAIN tl31SoundName = "Pain" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_B_INJURED tl31SoundName = "Hurt" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_B_02_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_DEAD tl31SoundName = "Death" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_GLOAT tl31SoundName = "Attack_Success" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_C_03_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_ATTACK tl31SoundName = "Attack" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_C_03_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_PAIN tl31SoundName = "Pain" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_C_INJURED tl31SoundName = "Hurt" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_C_03_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_DEAD tl31SoundName = "Death" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_GLOAT tl31SoundName = "Attack_Success" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_D_04_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_ATTACK tl31SoundName = "Attack" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_D_04_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_PAIN tl31SoundName = "Pain" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_D_INJURED tl31SoundName = "Hurt" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_D_04_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_E_DEAD tl31SoundName = "Death" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_E_GLOAT tl31SoundName = "Attack_Success" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_E_05_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_E_ATTACK tl31SoundName = "Attack" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_E_05_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_E_PAIN tl31SoundName = "Pain" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_E_INJURED tl31SoundName = "Hurt" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_E_05_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_AIM tl31SoundName = "Rifle_Aim" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_FIRE tl31SoundName = "Rifle_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_SHOTGUN_AIM tl31SoundName = "Gun_Shotgun_Aim" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_SHOTGUN_FIRE tl31SoundName = "Gun_Shotgun_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_REVOLVER_AIM tl31SoundName = "Pistol_Aim" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_REVOLVER_FIRE tl31SoundName = "Pistol_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Melee_Bat_Metal_Swing tl31SoundName = "Melee_Bat_Metal_Swing" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Melee_Crowbar_Swing tl31SoundName = "Melee_Crowbar_Swing" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Melee_Bat_Wood_Swing tl31SoundName = "Melee_Bat_Wood_Swing" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Melee_Machete_Swing tl31SoundName = "Melee_Machete_Swing" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Melee_Bat_Metal_Hit tl31SoundName = "Melee_Bat_Metal_Hit" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Melee_Crowbar_Hit tl31SoundName = "Melee_Crowbar_Hit" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Melee_Bat_Wood_Hit tl31SoundName = "Melee_Bat_Wood_Hit" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Melee_Machete_Hit tl31SoundName = "Melee_Machete_Hit" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_CRIT_WARNING tl31SoundName = "Critical_Hit_Warn" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_THROW_DYNAMITE tl31SoundName = "Dynamite_Throw" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_DEAD tl31SoundName = "Death" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_PAIN tl31SoundName = "Pain" tl63SoundSetName = "DLC_TUNER_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_ON_FIRE tl31SoundName = "On_Fire" tl63SoundSetName = "DLC_Tuner_AM_CH_Enemy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_EXP_GENERIC tl31SoundName = "Generic" tl63SoundSetName = "DLC_Tuner_AM_CH_Explosion_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_EXP_DYNAMITE tl31SoundName = "Dynamite" tl63SoundSetName = "DLC_Tuner_AM_CH_Explosion_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BUNNYGIRL_APPEAR tl31SoundName = "Bunny_Appear" tl63SoundSetName = "DLC_TUNER_AM_CH_Hostage_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BUNNYGIRL_PAIN tl31SoundName = "Bunny_Pain" tl63SoundSetName = "DLC_TUNER_AM_CH_Hostage_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BUNNYGIRL_DEATH tl31SoundName = "Bunny_Die" tl63SoundSetName = "DLC_TUNER_AM_CH_Hostage_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BUNNYGIRL_MISSED tl31SoundName = "Bunny_Escape" tl63SoundSetName = "DLC_TUNER_AM_CH_Hostage_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_MONKEY_APPEAR tl31SoundName = "Monkey_Appear" tl63SoundSetName = "DLC_TUNER_AM_CH_Hostage_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_MONKEY_PAIN tl31SoundName = "Monkey_Pain" tl63SoundSetName = "DLC_TUNER_AM_CH_Hostage_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_MONKEY_DEATH tl31SoundName = "Monkey_Die" tl63SoundSetName = "DLC_TUNER_AM_CH_Hostage_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_MONKEY_MISSED tl31SoundName = "Monkey_Missed" tl63SoundSetName = "DLC_TUNER_AM_CH_Hostage_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_RAT_APPEAR tl31SoundName = "Rat_Appear" tl63SoundSetName = "DLC_TUNER_AM_CH_Animal_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_RAT_DEATH tl31SoundName = "Rat_Die" tl63SoundSetName = "DLC_TUNER_AM_CH_Animal_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_RAT_IDLE_LOOP tl31SoundName = "Rat_Idle_Loop" tl63SoundSetName = "DLC_TUNER_AM_CH_Animal_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_APPEAR tl31SoundName = "Vocal_Appear" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_ATTACK tl31SoundName = "Vocal_Attack" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_PAIN tl31SoundName = "Vocal_Pain" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_HIDE tl31SoundName = "Vocal_Hide" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_REVEAL tl31SoundName = "Vocal_Reveal" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_DIE tl31SoundName = "Vocal_Die" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_CHAINSAW_LOOP tl31SoundName = "Chainsaw_Idle_Loop" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_CHAINSAW_ATTACK tl31SoundName = "Chainsaw_Attack" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_MEAT_THROW tl31SoundName = "Throw_Meat" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_BEARSY_MEAT_IMPACT tl31SoundName = "Throw_Meat_Impact" tl63SoundSetName = "DLC_TUNER_AM_CH_Bearsy_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PICKUP_BUFF tl31SoundName = "Invulnerable_Loop" tl63SoundSetName = "DLC_Tuner_AM_CH_Pickup_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PICKUP_SHIELD tl31SoundName = "Damage_Boost_Loop" tl63SoundSetName = "DLC_Tuner_AM_CH_Pickup_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PICKUP_HEALTH tl31SoundName = "Health" tl63SoundSetName = "DLC_Tuner_AM_CH_Pickup_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PICKUP_CASH tl31SoundName = "Cash" tl63SoundSetName = "DLC_Tuner_AM_CH_Pickup_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PICKUP_TAPE tl31SoundName = "Tape" tl63SoundSetName = "DLC_Tuner_AM_CH_Pickup_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_RELOAD tl31SoundName = "Reload" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SHOOT_HEADSHOT tl31SoundName = "Headshot" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL tl31SoundName = "Shoot_Critter" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
// CASE CMHDZ_AUDIO_EFFECT_PLAYER_AWARD_STV tl31SoundName = "Award_Pistols_at_dawn" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
// CASE CMHDZ_AUDIO_EFFECT_PLAYER_AWARD_TTK tl31SoundName = "Award_Deadeye" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_BAD tl31SoundName = "Level_Complete_Bad" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_AVERAGE tl31SoundName = "Level_Complete_Average" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_GOOD tl31SoundName = "Level_Complete_Good" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_AMAZING tl31SoundName = "Level_Complete_Amazing" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_COMPLETE_LEVEL tl31SoundName = "Beat_Level" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_DEATH tl31SoundName = "Death" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_RESULTS_DEAD tl31SoundName = "Dead_Text" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_PLAYER_FINISH_GAME tl31SoundName = "Finish_Game" tl63SoundSetName = "DLC_Tuner_AM_CH_Player_Speech_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Asylum tl31SoundName = "Level_Select_Asylum" tl63SoundSetName = "DLC_Tuner_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Junkyard tl31SoundName = "Level_Select_Junkyard" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Slaughterhouse tl31SoundName = "Level_Select_Slaughterhouse" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Slums tl31SoundName = "Level_Select_Slums" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Theme_Park tl31SoundName = "Level_Select_Theme_Park" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Get_Ready tl31SoundName = "Get_Ready" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Start tl31SoundName = "Level_Start" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Complete_Level tl31SoundName = "Complete_Level" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Quit tl31SoundName = "Quit" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Restart_Level tl31SoundName = "Restart_Level" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_First_Enemy_Appear tl31SoundName = "First_Enemy_Appear" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill tl31SoundName = "Enemy_Kill" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill_Headshot tl31SoundName = "Enemy_Kill_Headshot" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill_Nailgun tl31SoundName = "Enemy_Kill_Nailgun" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak tl31SoundName = "Kill_Streak" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Long tl31SoundName = "Kill_Streak_Long" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Extreme tl31SoundName = "Kill_Streak_Extreme" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Damage tl31SoundName = "Player_Damage" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Near_Death tl31SoundName = "Player_Near_Death" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Death tl31SoundName = "Player_Death" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Inactive tl31SoundName = "Player_Inactive" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Reload tl31SoundName = "Reload" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_AR tl31SoundName = "Weapon_AR" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_MV tl31SoundName = "Weapon_MV" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_NB tl31SoundName = "Weapon_NB" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_SG tl31SoundName = "Weapon_SG" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_Rnd tl31SoundName = "Weapon_Rnd" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Cash tl31SoundName = "Collectable_Cash" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Damage tl31SoundName = "Collectable_Damage" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Health tl31SoundName = "Collectable_Health" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Invulnerable tl31SoundName = "Collectable_Invulnerable" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Rnd_Neg tl31SoundName = "Collectable_Rnd_Neg" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Rnd_Pos tl31SoundName = "Collectable_Rnd_Pos" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Run_Out tl31SoundName = "Collectable_Run_Out" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Tape tl31SoundName = "Collectable_Tape" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_FOD tl31SoundName = "Award_FOD" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_STV tl31SoundName = "Award_STV" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_MSMD tl31SoundName = "Award_MSMD" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TTK tl31SoundName = "Award_TTK" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TD tl31SoundName = "Award_TD" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Score_Ok tl31SoundName = "Score_Ok" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Score_Good tl31SoundName = "Score_Good" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Monkey_Kill tl31SoundName = "Monkey_Kill" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Bunny_Kill tl31SoundName = "Bunny_Kill" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Critter_Kill tl31SoundName = "Critter_Kill" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Props_Destroyed tl31SoundName = "Props_Destroyed" tl63SoundSetName = "DLC_TUNER_AM_CH_Director_VO_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_REWIND_START tl31SoundName = "Rewind_Start" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_REWIND_LOOP tl31SoundName = "Rewind_Loop_Only" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_REWIND_STOP tl31SoundName = "Rewind_End" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Logo_Appear tl31SoundName = "Logo_Appear" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Shoot_Option tl31SoundName = "Shoot_Option" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Score_Letter_Change tl31SoundName = "Score_Letter_Change" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Score_Letter_Select tl31SoundName = "Score_Letter_Select" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
CASE CMHDZ_AUDIO_EFFECT_Score_Entered tl31SoundName = "Score_Entered" tl63SoundSetName = "DLC_Tuner_AM_CH_Frontend_Sounds" BREAK
ENDSWITCH
ENDPROC
FUNC BOOL CMHDZ_HAS_SOUND_FINISHED(CMHDZ_AUDIO_EFFECT effect)
// IF sCMHDZData.iSoundId[effect] = -1
// RETURN TRUE
// ENDIF
RETURN HAS_SOUND_FINISHED(sCMHDZData.iSoundId[effect])
ENDFUNC
FUNC BOOL CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT effect)
IF sCMHDZData.iSoundId[effect] = -1
RETURN FALSE
ELSE
RETURN TRUE
ENDIF
ENDFUNC
//PROC CMHDZ_PLAY_SOUND_FRONT_END(CMHDZ_AUDIO_EFFECT effect)
// TEXT_LABEL_23 tl23Sound
// TEXT_LABEL_63 tl63Bank
// CMHDZ_GET_AUDIO_STRINGS_FROM_ENUM(effect,tl23Sound, tl63Bank)
//
// #IF IS_DEBUG_BUILD
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_FRONT_END] Sound: ", tl23Sound, " Bank: ",tl63Bank)
// DEBUG_PRINTCALLSTACK()
// #ENDIF
//
// IF sCMHDZData.iSoundId[effect] = -1
// sCMHDZData.iSoundId[effect] = GET_SOUND_ID()
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_FRONT_END] Got sound ID")
// ENDIF
//
// PLAY_SOUND_FRONTEND(sCMHDZData.iSoundId[effect], tl23Sound, tl63Bank, FALSE)
// SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",0.5)
//ENDPROC
PROC CMHDZ_PLAY_SOUND(CMHDZ_AUDIO_EFFECT effect, VECTOR_2D v2Pos)
TEXT_LABEL_31 tl31Sound
TEXT_LABEL_63 tl63Bank
CMHDZ_GET_AUDIO_STRINGS_FROM_ENUM(effect,tl31Sound, tl63Bank)
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Sound: ", tl31Sound, " Bank: ",tl63Bank)
DEBUG_PRINTCALLSTACK()
#ENDIF
IF sCMHDZData.iSoundId[effect] = -1
sCMHDZData.iSoundId[effect] = GET_SOUND_ID()
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Got sound ID: ", sCMHDZData.iSoundId[effect])
ENDIF
PLAY_SOUND_FRONTEND(sCMHDZData.iSoundId[effect], tl31Sound, tl63Bank, FALSE)
IF v2Pos.x != 0.0
VECTOR_2D v2Screen = ARCADE_CABINET_CONVERT_TO_VECTOR_2D_TO_SCREENSPACE(v2Pos)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",v2Screen.x)
ELSE
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",0.5)
ENDIF
ENDPROC
PROC CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT effect, VECTOR_2D v2Pos)
TEXT_LABEL_31 tl31Sound
TEXT_LABEL_63 tl63Bank
CMHDZ_GET_AUDIO_STRINGS_FROM_ENUM(effect,tl31Sound, tl63Bank)
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Sound: ", tl31Sound, " Bank: ",tl63Bank)
DEBUG_PRINTCALLSTACK()
#ENDIF
IF sCMHDZData.iSoundId[effect] = -1
sCMHDZData.iSoundId[effect] = GET_SOUND_ID()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Got sound ID")
ENDIF
PLAY_SOUND_FRONTEND(sCMHDZData.iSoundId[effect], tl31Sound, tl63Bank, FALSE)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"GlitchLevel",sCMHDZData.fSoundGlitchLevel)
IF v2Pos.x != 0.0
VECTOR_2D v2Screen = ARCADE_CABINET_CONVERT_TO_VECTOR_2D_TO_SCREENSPACE(v2Pos)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",v2Screen.x)
ELSE
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",0.5)
ENDIF
RELEASE_SOUND_ID(sCMHDZData.iSoundId[effect])
sCMHDZData.iSoundId[effect] = -1
ENDPROC
PROC CMHDZ_PLAY_ENEMY_TYPE_SOUND_AND_RELEASE(CMHDZ_ENEMY_TYPES enemyType, CMHDZ_AUDIO_EFFECT effect, VECTOR_2D v2Pos, INT iEnemyVoiceID)
TEXT_LABEL_31 tl31Sound
TEXT_LABEL_63 tl63SoundSet
INT iEnemySet = 0
// // Don't progress if there's a cooldown
// IF sCMHDZData.fEnemyVoiceCooldown > 0.0
// sCMHDZData.fEnemyVoiceCooldown -= (0.0+@1000)
// EXIT
// ENDIF
SWITCH enemyType
CASE CMHDZ_ENEMY_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_2
CASE CMHDZ_THROWING_ENEMY_1
iEnemySet = 0
BREAK
CASE CMHDZ_ENEMY_2
CASE CMHDZ_FOREGROUND_ENEMY_T2_1
CASE CMHDZ_FOREGROUND_ENEMY_T2_2
CASE CMHDZ_THROWING_ENEMY_2
iEnemySet = 1
BREAK
CASE CMHDZ_ENEMY_3
CASE CMHDZ_FOREGROUND_ENEMY_T3_1
CASE CMHDZ_FOREGROUND_ENEMY_T3_2
CASE CMHDZ_THROWING_ENEMY_3
iEnemySet = 2
BREAK
CASE CMHDZ_ENEMY_4
CASE CMHDZ_FOREGROUND_ENEMY_T4_1
CASE CMHDZ_FOREGROUND_ENEMY_T4_2
CASE CMHDZ_THROWING_ENEMY_4
iEnemySet = 3
BREAK
CASE CMHDZ_ENEMY_5
CASE CMHDZ_FOREGROUND_ENEMY_T5_1
CASE CMHDZ_FOREGROUND_ENEMY_T5_2
CASE CMHDZ_THROWING_ENEMY_5
iEnemySet = 4
BREAK
ENDSWITCH
SWITCH effect
CASE CMHDZ_AUDIO_EFFECT_ENEMY_INJURED
SWITCH enemyType
CASE CMHDZ_ENEMY_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_2
CASE CMHDZ_THROWING_ENEMY_1
effect = CMHDZ_AUDIO_EFFECT_ENEMY_A_INJURED
BREAK
CASE CMHDZ_ENEMY_2
CASE CMHDZ_FOREGROUND_ENEMY_T2_1
CASE CMHDZ_FOREGROUND_ENEMY_T2_2
CASE CMHDZ_THROWING_ENEMY_2
effect = CMHDZ_AUDIO_EFFECT_ENEMY_B_INJURED
BREAK
CASE CMHDZ_ENEMY_3
CASE CMHDZ_FOREGROUND_ENEMY_T3_1
CASE CMHDZ_FOREGROUND_ENEMY_T3_2
CASE CMHDZ_THROWING_ENEMY_3
effect = CMHDZ_AUDIO_EFFECT_ENEMY_C_INJURED
BREAK
CASE CMHDZ_ENEMY_4
CASE CMHDZ_FOREGROUND_ENEMY_T4_1
CASE CMHDZ_FOREGROUND_ENEMY_T4_2
CASE CMHDZ_THROWING_ENEMY_4
effect = CMHDZ_AUDIO_EFFECT_ENEMY_D_INJURED
BREAK
CASE CMHDZ_ENEMY_5
CASE CMHDZ_FOREGROUND_ENEMY_T5_1
CASE CMHDZ_FOREGROUND_ENEMY_T5_2
CASE CMHDZ_THROWING_ENEMY_5
effect = CMHDZ_AUDIO_EFFECT_ENEMY_E_INJURED
BREAK
ENDSWITCH
BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_ATTACK
SWITCH enemyType
CASE CMHDZ_ENEMY_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_2
CASE CMHDZ_THROWING_ENEMY_1
effect = CMHDZ_AUDIO_EFFECT_ENEMY_A_ATTACK
BREAK
CASE CMHDZ_ENEMY_2
CASE CMHDZ_FOREGROUND_ENEMY_T2_1
CASE CMHDZ_FOREGROUND_ENEMY_T2_2
CASE CMHDZ_THROWING_ENEMY_2
effect = CMHDZ_AUDIO_EFFECT_ENEMY_B_ATTACK
BREAK
CASE CMHDZ_ENEMY_3
CASE CMHDZ_FOREGROUND_ENEMY_T3_1
CASE CMHDZ_FOREGROUND_ENEMY_T3_2
CASE CMHDZ_THROWING_ENEMY_3
effect = CMHDZ_AUDIO_EFFECT_ENEMY_C_ATTACK
BREAK
CASE CMHDZ_ENEMY_4
CASE CMHDZ_FOREGROUND_ENEMY_T4_1
CASE CMHDZ_FOREGROUND_ENEMY_T4_2
CASE CMHDZ_THROWING_ENEMY_4
effect = CMHDZ_AUDIO_EFFECT_ENEMY_D_ATTACK
BREAK
CASE CMHDZ_ENEMY_5
CASE CMHDZ_FOREGROUND_ENEMY_T5_1
CASE CMHDZ_FOREGROUND_ENEMY_T5_2
CASE CMHDZ_THROWING_ENEMY_5
effect = CMHDZ_AUDIO_EFFECT_ENEMY_E_ATTACK
BREAK
ENDSWITCH
BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_DEAD
SWITCH enemyType
CASE CMHDZ_ENEMY_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_2
CASE CMHDZ_THROWING_ENEMY_1
effect = CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD
BREAK
CASE CMHDZ_ENEMY_2
CASE CMHDZ_FOREGROUND_ENEMY_T2_1
CASE CMHDZ_FOREGROUND_ENEMY_T2_2
CASE CMHDZ_THROWING_ENEMY_2
effect = CMHDZ_AUDIO_EFFECT_ENEMY_B_DEAD
BREAK
CASE CMHDZ_ENEMY_3
CASE CMHDZ_FOREGROUND_ENEMY_T3_1
CASE CMHDZ_FOREGROUND_ENEMY_T3_2
CASE CMHDZ_THROWING_ENEMY_3
effect = CMHDZ_AUDIO_EFFECT_ENEMY_C_DEAD
BREAK
CASE CMHDZ_ENEMY_4
CASE CMHDZ_FOREGROUND_ENEMY_T4_1
CASE CMHDZ_FOREGROUND_ENEMY_T4_2
CASE CMHDZ_THROWING_ENEMY_4
effect = CMHDZ_AUDIO_EFFECT_ENEMY_D_DEAD
BREAK
CASE CMHDZ_ENEMY_5
CASE CMHDZ_FOREGROUND_ENEMY_T5_1
CASE CMHDZ_FOREGROUND_ENEMY_T5_2
CASE CMHDZ_THROWING_ENEMY_5
effect = CMHDZ_AUDIO_EFFECT_ENEMY_E_DEAD
BREAK
ENDSWITCH
BREAK
CASE CMHDZ_AUDIO_EFFECT_ENEMY_GLOAT
SWITCH enemyType
CASE CMHDZ_ENEMY_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_2
CASE CMHDZ_THROWING_ENEMY_1
effect = CMHDZ_AUDIO_EFFECT_ENEMY_A_GLOAT
BREAK
CASE CMHDZ_ENEMY_2
CASE CMHDZ_FOREGROUND_ENEMY_T2_1
CASE CMHDZ_FOREGROUND_ENEMY_T2_2
CASE CMHDZ_THROWING_ENEMY_2
effect = CMHDZ_AUDIO_EFFECT_ENEMY_B_GLOAT
BREAK
CASE CMHDZ_ENEMY_3
CASE CMHDZ_FOREGROUND_ENEMY_T3_1
CASE CMHDZ_FOREGROUND_ENEMY_T3_2
CASE CMHDZ_THROWING_ENEMY_3
effect = CMHDZ_AUDIO_EFFECT_ENEMY_C_GLOAT
BREAK
CASE CMHDZ_ENEMY_4
CASE CMHDZ_FOREGROUND_ENEMY_T4_1
CASE CMHDZ_FOREGROUND_ENEMY_T4_2
CASE CMHDZ_THROWING_ENEMY_4
effect = CMHDZ_AUDIO_EFFECT_ENEMY_D_GLOAT
BREAK
CASE CMHDZ_ENEMY_5
CASE CMHDZ_FOREGROUND_ENEMY_T5_1
CASE CMHDZ_FOREGROUND_ENEMY_T5_2
CASE CMHDZ_THROWING_ENEMY_5
effect = CMHDZ_AUDIO_EFFECT_ENEMY_E_GLOAT
BREAK
ENDSWITCH
BREAK
// CASE CMHDZ_AUDIO_EFFECT_ENEMY_PAIN
//
// SWITCH enemyType
// CASE CMHDZ_ENEMY_1
// CASE CMHDZ_FOREGROUND_ENEMY_T1_1
// CASE CMHDZ_FOREGROUND_ENEMY_T1_2
// CASE CMHDZ_THROWING_ENEMY_1
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_A_PAIN
// BREAK
//
// CASE CMHDZ_ENEMY_2
// CASE CMHDZ_FOREGROUND_ENEMY_T2_1
// CASE CMHDZ_FOREGROUND_ENEMY_T2_2
// CASE CMHDZ_THROWING_ENEMY_2
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_B_PAIN
// BREAK
//
// CASE CMHDZ_ENEMY_3
// CASE CMHDZ_FOREGROUND_ENEMY_T3_1
// CASE CMHDZ_FOREGROUND_ENEMY_T3_2
// CASE CMHDZ_THROWING_ENEMY_3
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_C_PAIN
// BREAK
//
// CASE CMHDZ_ENEMY_4
// CASE CMHDZ_FOREGROUND_ENEMY_T4_1
// CASE CMHDZ_FOREGROUND_ENEMY_T4_2
// CASE CMHDZ_THROWING_ENEMY_4
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_D_PAIN
// BREAK
//
// CASE CMHDZ_ENEMY_5
// CASE CMHDZ_FOREGROUND_ENEMY_T5_1
// CASE CMHDZ_FOREGROUND_ENEMY_T5_2
// CASE CMHDZ_THROWING_ENEMY_5
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_E_PAIN
// BREAK
// ENDSWITCH
BREAK
// CASE CMHDZ_AUDIO_EFFECT_ENEMY_ON_FIRE
//
// SWITCH enemyType
// CASE CMHDZ_ENEMY_1
// CASE CMHDZ_FOREGROUND_ENEMY_T1_1
// CASE CMHDZ_FOREGROUND_ENEMY_T1_2
// CASE CMHDZ_THROWING_ENEMY_1
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_A_ON_FIRE
// BREAK
//
// CASE CMHDZ_ENEMY_2
// CASE CMHDZ_FOREGROUND_ENEMY_T2_1
// CASE CMHDZ_FOREGROUND_ENEMY_T2_2
// CASE CMHDZ_THROWING_ENEMY_2
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_B_ON_FIRE
// BREAK
//
// CASE CMHDZ_ENEMY_3
// CASE CMHDZ_FOREGROUND_ENEMY_T3_1
// CASE CMHDZ_FOREGROUND_ENEMY_T3_2
// CASE CMHDZ_THROWING_ENEMY_3
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_C_ON_FIRE
// BREAK
//
// CASE CMHDZ_ENEMY_4
// CASE CMHDZ_FOREGROUND_ENEMY_T4_1
// CASE CMHDZ_FOREGROUND_ENEMY_T4_2
// CASE CMHDZ_THROWING_ENEMY_4
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_D_ON_FIRE
// BREAK
//
// CASE CMHDZ_ENEMY_5
// CASE CMHDZ_FOREGROUND_ENEMY_T5_1
// CASE CMHDZ_FOREGROUND_ENEMY_T5_2
// CASE CMHDZ_THROWING_ENEMY_5
// effect = CMHDZ_AUDIO_EFFECT_ENEMY_E_ON_FIRE
// BREAK
// ENDSWITCH
//
// BREAK
ENDSWITCH
//CMHDZ_PLAY_SOUND_AND_RELEASE(effect, v2Pos)
CMHDZ_GET_AUDIO_STRINGS_FROM_ENUM(effect,tl31Sound, tl63SoundSet)
IF effect != CMHDZ_AUDIO_EFFECT_ENEMY_ON_FIRE // Exemptions
AND effect != CMHDZ_AUDIO_EFFECT_ENEMY_DEAD // Exemptions
AND effect != CMHDZ_AUDIO_EFFECT_ENEMY_PAIN // Exemptions
SWITCH iEnemySet
CASE 0
tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_A"
BREAK
CASE 1
tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_B"
BREAK
CASE 2
tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_C"
BREAK
CASE 3
tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_D"
BREAK
CASE 4
tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_E"
BREAK
ENDSWITCH
// Add the random sound ID
SWITCH iEnemyVoiceID
CASE 0
tl63SoundSet += "_01_Sounds"
BREAK
CASE 1
tl63SoundSet += "_02_Sounds"
BREAK
CASE 2
tl63SoundSet += "_03_Sounds"
BREAK
CASE 3
tl63SoundSet += "_04_Sounds"
BREAK
CASE 4
tl63SoundSet += "_05_Sounds"
BREAK
ENDSWITCH
ENDIF
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Sound: ", tl31Sound, " Bank: ",tl63Bank)
DEBUG_PRINTCALLSTACK()
#ENDIF
IF sCMHDZData.iSoundId[effect] = -1
sCMHDZData.iSoundId[effect] = GET_SOUND_ID()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Got sound ID")
ENDIF
// sCMHDZData.fEnemyVoiceCooldown = ciCMHDZ_ENEMY_SOUND_COOLDOWN
PLAY_SOUND_FRONTEND(sCMHDZData.iSoundId[effect], tl31Sound, tl63SoundSet, FALSE)
IF v2Pos.x != 0.0
VECTOR_2D v2Screen = ARCADE_CABINET_CONVERT_TO_VECTOR_2D_TO_SCREENSPACE(v2Pos)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",v2Screen.x)
ELSE
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",0.5)
ENDIF
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ][BAZ] CMHDZ_PLAY_ENEMY_TYPE_SOUND_AND_RELEASE enemy generated soundset tl63SoundSet: ", tl63SoundSet)
RELEASE_SOUND_ID(sCMHDZData.iSoundId[effect])
sCMHDZData.iSoundId[effect] = -1
ENDPROC
PROC CMHDZ_PLAY_ENEMY_WEAPON_MELEE_SWING_SOUND_AND_RELEASE(CMHDZ_ENEMY_TYPES enemyType, VECTOR_2D v2Pos)
CMHDZ_AUDIO_EFFECT effect = CMHDZ_AUDIO_EFFECT_MAX
TEXT_LABEL_31 tl31Sound
TEXT_LABEL_63 tl63SoundSet
SWITCH enemyType
CASE CMHDZ_FOREGROUND_ENEMY_T1_1
effect = CMHDZ_AUDIO_EFFECT_Melee_Bat_Metal_Swing
BREAK
CASE CMHDZ_FOREGROUND_ENEMY_T2_1
effect = CMHDZ_AUDIO_EFFECT_Melee_Machete_Swing
BREAK
CASE CMHDZ_FOREGROUND_ENEMY_T4_1
effect = CMHDZ_AUDIO_EFFECT_Melee_Crowbar_Swing
BREAK
CASE CMHDZ_FOREGROUND_ENEMY_T5_2
effect = CMHDZ_AUDIO_EFFECT_Melee_Bat_Wood_Swing
BREAK
ENDSWITCH
// Audio effect Exit
IF effect = CMHDZ_AUDIO_EFFECT_MAX
EXIT
ENDIF
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Sound: ", tl31Sound, " Bank: ",tl63Bank)
DEBUG_PRINTCALLSTACK()
#ENDIF
IF sCMHDZData.iSoundId[effect] = -1
sCMHDZData.iSoundId[effect] = GET_SOUND_ID()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Got sound ID")
ENDIF
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_PLAY_ENEMY_WEAPON_ATTACK_SOUND_AND_RELEASE - tl63SoundSet: ", tl63SoundSet)
PLAY_SOUND_FRONTEND(sCMHDZData.iSoundId[effect], tl31Sound, tl63SoundSet, FALSE)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"GlitchLevel",sCMHDZData.fSoundGlitchLevel)
IF v2Pos.x != 0.0
VECTOR_2D v2Screen = ARCADE_CABINET_CONVERT_TO_VECTOR_2D_TO_SCREENSPACE(v2Pos)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",v2Screen.x)
ELSE
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",0.5)
ENDIF
RELEASE_SOUND_ID(sCMHDZData.iSoundId[effect])
sCMHDZData.iSoundId[effect] = -1
ENDPROC
PROC CMHDZ_PLAY_ENEMY_WEAPON_ATTACK_SOUND_AND_RELEASE(CMHDZ_ENEMY_TYPES enemyType, VECTOR_2D v2Pos)
CMHDZ_AUDIO_EFFECT effect = CMHDZ_AUDIO_EFFECT_MAX
TEXT_LABEL_31 tl31Sound
TEXT_LABEL_63 tl63SoundSet
SWITCH enemyType
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
effect = CMHDZ_AUDIO_EFFECT_ENEMY_THROW_DYNAMITE
BREAK
CASE CMHDZ_ENEMY_1
CASE CMHDZ_ENEMY_2
CASE CMHDZ_ENEMY_4
CASE CMHDZ_ENEMY_5
effect = CMHDZ_AUDIO_EFFECT_ENEMY_SHOTGUN_FIRE
BREAK
CASE CMHDZ_ENEMY_3
CASE CMHDZ_FOREGROUND_ENEMY_T3_2
effect = CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_FIRE
BREAK
CASE CMHDZ_FOREGROUND_ENEMY_T1_2
CASE CMHDZ_FOREGROUND_ENEMY_T2_2
CASE CMHDZ_FOREGROUND_ENEMY_T3_1
CASE CMHDZ_FOREGROUND_ENEMY_T4_2
CASE CMHDZ_FOREGROUND_ENEMY_T5_1
effect = CMHDZ_AUDIO_EFFECT_ENEMY_REVOLVER_FIRE
BREAK
CASE CMHDZ_FOREGROUND_ENEMY_T1_1
effect = CMHDZ_AUDIO_EFFECT_Melee_Bat_Metal_Hit
BREAK
CASE CMHDZ_FOREGROUND_ENEMY_T2_1
effect = CMHDZ_AUDIO_EFFECT_Melee_Machete_Hit
BREAK
CASE CMHDZ_FOREGROUND_ENEMY_T4_1
effect = CMHDZ_AUDIO_EFFECT_Melee_Crowbar_Hit
BREAK
CASE CMHDZ_FOREGROUND_ENEMY_T5_2
effect = CMHDZ_AUDIO_EFFECT_Melee_Bat_Wood_Hit
BREAK
ENDSWITCH
IF effect = CMHDZ_AUDIO_EFFECT_MAX
EXIT
ENDIF
CMHDZ_GET_AUDIO_STRINGS_FROM_ENUM(effect,tl31Sound, tl63SoundSet)
// SWITCH iEnemySet
// CASE 0
// tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_A"
// BREAK
//
// CASE 1
// tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_B"
// BREAK
//
// CASE 2
// tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_C"
// BREAK
//
// CASE 3
// tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_D"
// BREAK
//
// CASE 4
// tl63SoundSet = "DLC_TUNER_AM_CH_Enemy_Speech_Gang_E"
// BREAK
// ENDSWITCH
//
// // Add the random sound ID
// SWITCH iEnemyVoiceID
// CASE 0
// tl63SoundSet += "_01_Sounds"
// BREAK
//
// CASE 1
// tl63SoundSet += "_02_Sounds"
// BREAK
//
// CASE 2
// tl63SoundSet += "_03_Sounds"
// BREAK
//
// CASE 3
// tl63SoundSet += "_04_Sounds"
// BREAK
//
// CASE 4
// tl63SoundSet += "_05_Sounds"
// BREAK
// ENDSWITCH
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Sound: ", tl31Sound, " Bank: ",tl63Bank)
DEBUG_PRINTCALLSTACK()
#ENDIF
IF sCMHDZData.iSoundId[effect] = -1
sCMHDZData.iSoundId[effect] = GET_SOUND_ID()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Got sound ID")
ENDIF
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_PLAY_ENEMY_WEAPON_ATTACK_SOUND_AND_RELEASE - tl63SoundSet: ", tl63SoundSet)
PLAY_SOUND_FRONTEND(sCMHDZData.iSoundId[effect], tl31Sound, tl63SoundSet, FALSE)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"GlitchLevel",sCMHDZData.fSoundGlitchLevel)
IF v2Pos.x != 0.0
VECTOR_2D v2Screen = ARCADE_CABINET_CONVERT_TO_VECTOR_2D_TO_SCREENSPACE(v2Pos)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",v2Screen.x)
ELSE
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",0.5)
ENDIF
RELEASE_SOUND_ID(sCMHDZData.iSoundId[effect])
sCMHDZData.iSoundId[effect] = -1
ENDPROC
PROC CMHDZ_PLAY_ENEMY_WEAPON_READY_SOUND_AND_RELEASE(CMHDZ_ENEMY_TYPES enemyType, VECTOR_2D v2Pos)
TEXT_LABEL_31 tl31Sound
TEXT_LABEL_63 tl63Bank
CMHDZ_AUDIO_EFFECT effect = CMHDZ_AUDIO_EFFECT_MAX
SWITCH enemyType
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
effect = CMHDZ_AUDIO_EFFECT_ENEMY_CRIT_WARNING
BREAK
CASE CMHDZ_ENEMY_1
CASE CMHDZ_ENEMY_2
CASE CMHDZ_ENEMY_4
CASE CMHDZ_ENEMY_5
effect = CMHDZ_AUDIO_EFFECT_ENEMY_SHOTGUN_AIM
BREAK
CASE CMHDZ_ENEMY_3
CASE CMHDZ_FOREGROUND_ENEMY_T3_2
effect = CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_AIM
BREAK
CASE CMHDZ_FOREGROUND_ENEMY_T1_2
CASE CMHDZ_FOREGROUND_ENEMY_T2_2
CASE CMHDZ_FOREGROUND_ENEMY_T3_1
CASE CMHDZ_FOREGROUND_ENEMY_T4_2
CASE CMHDZ_FOREGROUND_ENEMY_T5_1
effect = CMHDZ_AUDIO_EFFECT_ENEMY_REVOLVER_AIM
BREAK
ENDSWITCH
IF effect = CMHDZ_AUDIO_EFFECT_MAX
EXIT
ENDIF
CMHDZ_GET_AUDIO_STRINGS_FROM_ENUM(effect,tl31Sound, tl63Bank)
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Sound: ", tl31Sound, " Bank: ",tl63Bank)
DEBUG_PRINTCALLSTACK()
#ENDIF
IF sCMHDZData.iSoundId[effect] = -1
sCMHDZData.iSoundId[effect] = GET_SOUND_ID()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_PLAY_SOUND_AND_RELEASE] Got sound ID")
ENDIF
PLAY_SOUND_FRONTEND(sCMHDZData.iSoundId[effect], tl31Sound, tl63Bank, FALSE)
IF v2Pos.x != 0.0
VECTOR_2D v2Screen = ARCADE_CABINET_CONVERT_TO_VECTOR_2D_TO_SCREENSPACE(v2Pos)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",v2Screen.x)
ELSE
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[effect],"Screen_Position",0.5)
ENDIF
RELEASE_SOUND_ID(sCMHDZData.iSoundId[effect])
sCMHDZData.iSoundId[effect] = -1
ENDPROC
PROC CMHDZ_PLAY_SOUND_NO_POSITION(CMHDZ_AUDIO_EFFECT effect)
CMHDZ_PLAY_SOUND(effect, INIT_VECTOR_2D(0.0, 0.0))
ENDPROC
PROC CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT effect)
CMHDZ_PLAY_SOUND_AND_RELEASE(effect, INIT_VECTOR_2D(0.0, 0.0))
ENDPROC
PROC CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT effect)
STOP_SOUND(sCMHDZData.iSoundId[effect])
RELEASE_SOUND_ID(sCMHDZData.iSoundId[effect])
sCMHDZData.iSoundId[effect] = -1
ENDPROC
PROC CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT effect)
IF effect < CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Asylum
OR effect >= CMHDZ_AUDIO_EFFECT_MAX // All director dialogue at the end of the list.
ASSERTLN("[CMHDZ][BAZ] CMHDZ_PLAY_DIRECTOR_DIALOGUE - Dialogue out of intended range")
EXIT
ENDIF
// IF (sCMHDZData.fDirectorVoiceCooldown > 0.0)
// sCMHDZData.fDirectorVoiceCooldown -= (0.0+@1000)
// EXIT
// ENDIF
INT i = ENUM_TO_INT(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Asylum)
REPEAT CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TD i
IF NOT CMHDZ_HAS_SOUND_FINISHED(INT_TO_ENUM(CMHDZ_AUDIO_EFFECT, i))
CMHDZ_STOP_SOUND(INT_TO_ENUM(CMHDZ_AUDIO_EFFECT, i))
//EXIT
ENDIF
ENDREPEAT
//sCMHDZData.fDirectorVoiceCooldown = ciCMHDZ_DIRECTOR_SOUND_COOLDOWN
CMHDZ_PLAY_SOUND_AND_RELEASE(effect, INIT_VECTOR_2D(0.0, 0.0))
ENDPROC
PROC CMHDZ_PLAY_DIRECTOR_DIALOGUE_NO_RELEASE(CMHDZ_AUDIO_EFFECT effect)
IF effect < CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Asylum
OR effect >= CMHDZ_AUDIO_EFFECT_MAX // All director dialogue at the end of the list.
ASSERTLN("[CMHDZ][BAZ] CMHDZ_PLAY_DIRECTOR_DIALOGUE - Dialogue out of intended range")
EXIT
ENDIF
// IF (sCMHDZData.fDirectorVoiceCooldown > 0.0)
// sCMHDZData.fDirectorVoiceCooldown -= (0.0+@1000)
// EXIT
// ENDIF
INT i = ENUM_TO_INT(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Asylum)
REPEAT CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TD i
IF NOT CMHDZ_HAS_SOUND_FINISHED(INT_TO_ENUM(CMHDZ_AUDIO_EFFECT, i))
CMHDZ_STOP_SOUND(INT_TO_ENUM(CMHDZ_AUDIO_EFFECT, i))
//EXIT
ENDIF
ENDREPEAT
//sCMHDZData.fDirectorVoiceCooldown = ciCMHDZ_DIRECTOR_SOUND_COOLDOWN
CMHDZ_PLAY_SOUND(effect, INIT_VECTOR_2D(0.0, 0.0))
ENDPROC
PROC CMHDZ_HANDLE_DIRECTOR_ONE_OFF_DIALOGUE(CMHDZ_AUDIO_EFFECT effect)
INT i = ENUM_TO_INT(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Asylum)
REPEAT CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TD i
IF NOT CMHDZ_HAS_SOUND_FINISHED(INT_TO_ENUM(CMHDZ_AUDIO_EFFECT, i))
CMHDZ_STOP_SOUND(INT_TO_ENUM(CMHDZ_AUDIO_EFFECT, i))
//EXIT
ENDIF
ENDREPEAT
IF effect = CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Start
IF IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Level_Start_TRIGGER)
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Level_Start_PLAYED)
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Start)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Level_Start_PLAYED)
ENDIF
ENDIF
EXIT
ENDIF
SWITCH effect
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_First_Enemy_Appear
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_First_Enemy_Appear_PLAYED)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_First_Enemy_Appear)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_First_Enemy_Appear_PLAYED)
ENDIF
BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Enemy_Kill_PLAYED)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_First_Enemy_Appear_PLAYED)
ENDIF
BREAK
// CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill_Headshot
// IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Enemy_Kill_Headshot_PLAYED)
// SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Enemy_Kill_Headshot_PLAYED)
// ENDIF
// BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill_Nailgun
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Enemy_Kill_Nailgun_PLAYED)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill_Nailgun)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Enemy_Kill_Nailgun_PLAYED)
ENDIF
BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Kill_Streak_PLAYED)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Kill_Streak_PLAYED)
ENDIF
BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Extreme
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Kill_Streak_Extreme_PLAYED)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Extreme)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Kill_Streak_Extreme_PLAYED)
ENDIF
BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Long
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Kill_Streak_Long_PLAYED)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Long)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Kill_Streak_Long_PLAYED)
ENDIF
BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Damage
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Player_Damage_Played)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Damage)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Player_Damage_PLAYED)
ENDIF
BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Near_Death
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Player_Near_Death_Played)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Near_Death)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Player_Near_Death_PLAYED)
ENDIF
BREAK
CASE CMHDZ_AUDIO_EFFECT_DIRECTOR_Props_Destroyed
IF NOT IS_BITMASK_AS_ENUM_SET(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Props_Destroyed_Played)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Props_Destroyed)
SET_BITMASK_AS_ENUM(sCMHDZData.iDirectorAudioBits, CMHDZ_DIRECTOR_BITS_Props_Destroyed_Played)
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC CMHDZ_PLAY_BONUS_APPEAR_AUDIO(INT iEnemy)
SWITCH sCMHDZData.sEnemyData[iEnemy].iEnemyType
CASE CMHDZ_RARE_ENEMY_BUNNY
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BUNNYGIRL_APPEAR, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
BREAK
CASE CMHDZ_RARE_ENEMY_MONKEY
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_MONKEY_APPEAR, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
BREAK
CASE CMHDZ_RARE_ENEMY_RAT
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_RAT_APPEAR, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
BREAK
ENDSWITCH
ENDPROC
PROC CMHDZ_PLAY_BONUS_PAIN_AUDIO(INT iEnemy)
SWITCH sCMHDZData.sEnemyData[iEnemy].iEnemyType
CASE CMHDZ_RARE_ENEMY_BUNNY
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BUNNYGIRL_PAIN, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
BREAK
CASE CMHDZ_RARE_ENEMY_MONKEY
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_MONKEY_PAIN, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
BREAK
ENDSWITCH
ENDPROC
PROC CMHDZ_PLAY_BONUS_DEATH_AUDIO(INT iEnemy)
SWITCH sCMHDZData.sEnemyData[iEnemy].iEnemyType
CASE CMHDZ_RARE_ENEMY_BUNNY
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BUNNYGIRL_DEATH, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Bunny_Kill)
CMHDZ_SET_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_BUNNY_KILL)
BREAK
CASE CMHDZ_RARE_ENEMY_MONKEY
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_MONKEY_DEATH, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Monkey_Kill)
CMHDZ_SET_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_MONKEY_KILL)
BREAK
CASE CMHDZ_RARE_ENEMY_RAT
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_RAT_DEATH, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Critter_Kill)
BREAK
ENDSWITCH
ENDPROC
PROC CMHDZ_PLAY_BONUS_MISSED_AUDIO(INT iEnemy)
SWITCH sCMHDZData.sEnemyData[iEnemy].iEnemyType
CASE CMHDZ_RARE_ENEMY_BUNNY
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BUNNYGIRL_MISSED, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
BREAK
CASE CMHDZ_RARE_ENEMY_MONKEY
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_MONKEY_MISSED, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
BREAK
ENDSWITCH
ENDPROC
PROC CMHDZ_PLAY_SOUND_LOOPING(CMHDZ_AUDIO_EFFECT effect, VECTOR_2D pos)
IF CMHDZ_HAS_SOUND_FINISHED(effect)
CMHDZ_PLAY_SOUND(effect, pos)
ENDIF
ENDPROC
PROC CMHDZ_PLAY_SOUND_LOOPING_NO_POSITION(CMHDZ_AUDIO_EFFECT effect)
IF CMHDZ_HAS_SOUND_FINISHED(effect)
CMHDZ_PLAY_SOUND(effect, INIT_VECTOR_2D(0.0, 0.0))
ENDIF
ENDPROC
PROC CMHDZ_HANDLE_LOOPING_AUDIO()
//-- Replaced with level select dialogue
//CMHDZ_HANDLE_DIRECTOR_ONE_OFF_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Start)
IF sCMHDZData.iFade = 0
IF (sCMHDZData.fSoundGlitchLevel > 0.0)
CMHDZ_PLAY_SOUND_LOOPING_NO_POSITION(CMHDZ_AUDIO_EFFECT_LEVEL_BACKGROUND_LOOP)
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[CMHDZ_AUDIO_EFFECT_LEVEL_BACKGROUND_LOOP],"GlitchLevel",sCMHDZData.fSoundGlitchLevel)
ELSE
SET_VARIABLE_ON_SOUND(sCMHDZData.iSoundId[CMHDZ_AUDIO_EFFECT_LEVEL_BACKGROUND_LOOP],"GlitchLevel",0.0)
ENDIF
ENDIF
// IF sCMHDZData.iSoundId[CMHDZ_AUDIO_EFFECT_DRAW] = -1
// IF CMHDZ_HAS_SOUND_FINISHED(CMHDZ_AUDIO_EFFECT_GET_READY)
// IF sCMHDZData.iDrawAudioTimer = 0
// sCMHDZData.iDrawAudioTimer = GET_GAME_TIMER()
// ELIF GET_GAME_TIMER() - sCMHDZData.iDrawAudioTimer > 250
// CMHDZ_PLAY_SOUND_NO_POSITION(CMHDZ_AUDIO_EFFECT_DRAW)
// ENDIF
// ENDIF
// ENDIF
ENDPROC
FUNC BOOL CMHDZ_HAVE_ALL_PLAYER_DAMAGE_AUDIO_EFFECTS_FINISHED()
RETURN (CMHDZ_HAS_SOUND_FINISHED(CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW)
AND CMHDZ_HAS_SOUND_FINISHED(CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_LOW)
AND CMHDZ_HAS_SOUND_FINISHED(CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM)
AND CMHDZ_HAS_SOUND_FINISHED(CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_HIGH))
ENDFUNC
PROC CMHDZ_PLAY_PLAYER_TAKE_DAMAGE_AUDIO(FLOAT fNewHealth)
IF fNewHealth <= 0.0
EXIT
ENDIF
IF CMHDZ_HAVE_ALL_PLAYER_DAMAGE_AUDIO_EFFECTS_FINISHED()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PLAY_PLAYER_TAKE_DAMAGE_AUDIO] {DSW} fNewHealth: ", fNewHealth)
IF fNewHealth >= 0.7
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_HIGH)
ELIF fNewHealth >= 0.5
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM)
ELIF fNewHealth >= 0.2
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_LOW)
ELIF fNewHealth > 0.0
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW)
ENDIF
ELSE
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PLAY_PLAYER_TAKE_DAMAGE_AUDIO] {DSW} Not playing as previous not finished. fNewHealth: ", fNewHealth)
ENDIF
// Director audio
IF fNewHealth < 0.7
CMHDZ_HANDLE_DIRECTOR_ONE_OFF_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Damage)
ENDIF
IF fNewHealth < 0.3
CMHDZ_HANDLE_DIRECTOR_ONE_OFF_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Near_Death)
ENDIF
ENDPROC
PROC CMHDZ_SET_CURRENT_TIMESTEP()
sCMHDZData.fCurrentTimeStep = (TO_FLOAT(ciBASE_FPS) / (1.0 / GET_FRAME_TIME()))
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_SET_CURRENT_TIMESTEP] fCurrentTimeStep: ", sCMHDZData.fCurrentTimeStep)
ENDPROC
FUNC FLOAT CMHDZ_GET_DEFAULT_TIMESTEP()
#IF IS_DEBUG_BUILD
IF (sCMHDZData.bDebugPause)
RETURN 0.0
ENDIF
#ENDIF
RETURN sCMHDZData.fCurrentTimeStep
ENDFUNC
FUNC FLOAT CMHDZ_GET_RETICULE_UPDATE()
RETURN sCMHDZData.fCurrentTimeStep
ENDFUNC
FUNC FLOAT CMHDZ_GET_DEFAULT_UPDATE()
RETURN cfCMHDZ_DEFAULT_PIXEL_UPDATE * CMHDZ_GET_DEFAULT_TIMESTEP()
ENDFUNC
FUNC FLOAT CMHDZ_GET_ENEMY_SHOOTING_UPDATE()
RETURN CMHDZ_GET_DEFAULT_UPDATE()
ENDFUNC
FUNC FLOAT CMHDZ_GET_ENEMY_DYING_UPDATE()
RETURN CMHDZ_GET_DEFAULT_UPDATE()
ENDFUNC
FUNC FLOAT CMHDZ_GET_ENEMY_WAITING_UPDATE()
RETURN CMHDZ_GET_DEFAULT_UPDATE()
ENDFUNC
FUNC FLOAT CMHDZ_GET_FX_UPDATE()
RETURN CMHDZ_GET_DEFAULT_UPDATE()
ENDFUNC
FUNC FLOAT CMHDZ_GET_PROJECTILE_UPDATE()
RETURN CMHDZ_GET_DEFAULT_UPDATE()
ENDFUNC
FUNC FLOAT CMHDZ_GET_BACKGROUND_TILE_UPDATE()
RETURN CMHDZ_GET_DEFAULT_UPDATE() * sCMHDZData.fBackgroundSpeedMult
ENDFUNC
FUNC FLOAT CMHDZ_GET_ITEM_UPDATE()
RETURN CMHDZ_GET_DEFAULT_UPDATE()
ENDFUNC
FUNC FLOAT CMHDZ_GET_CUSTOM_FAST_NEAR_BACKGROUND_ELEMENT_UPDATE()
RETURN CMHDZ_GET_DEFAULT_UPDATE() * sCMHDZData.fBackgroundSpeedMult
ENDFUNC
FUNC FLOAT CMHDZ_GET_GENERAL_UPDATE()
// FLOAT fDist = 4.0 * (30.0 / (1.0 / GET_FRAME_TIME()))
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_GET_GENERAL_UPDATE] Update: ", fDist)
RETURN CMHDZ_GET_DEFAULT_UPDATE()
ENDFUNC
FUNC FLOAT CMHDZ_GET_CLOUD_UPDATE()
RETURN 1.0 * CMHDZ_GET_DEFAULT_TIMESTEP() * sCMHDZData.fBackgroundSpeedMult
ENDFUNC
FUNC FLOAT CMHDZ_GET_BACKGROUND_ELEMENT_UPDATE()
RETURN 2.0 * CMHDZ_GET_DEFAULT_TIMESTEP() * sCMHDZData.fBackgroundSpeedMult
ENDFUNC
FUNC FLOAT CMHDZ_GET_CUSTOM_SLOW_NEAR_BACKGROUND_ELEMENT_UPDATE()
RETURN 2.5 * CMHDZ_GET_DEFAULT_TIMESTEP() * sCMHDZData.fBackgroundSpeedMult
ENDFUNC
FUNC FLOAT CMHDZ_GET_DEFAULT_NEAR_BACKGROUND_ELEMENT_UPDATE()
RETURN 3.0 * CMHDZ_GET_DEFAULT_TIMESTEP() * sCMHDZData.fBackgroundSpeedMult
ENDFUNC
FUNC FLOAT CMHDZ_GET_COVER_FOREGROUND_UPDATE()
RETURN 12.0 * CMHDZ_GET_DEFAULT_TIMESTEP()
ENDFUNC
FUNC FLOAT CMHDZ_GET_ENEMY_FOREGROUND_UPDATE(BOOL bReverse)
IF bReverse
RETURN 6.0 * CMHDZ_GET_DEFAULT_TIMESTEP()
ENDIF
RETURN 10.0 * CMHDZ_GET_DEFAULT_TIMESTEP()
ENDFUNC
FUNC FLOAT CMHDZ_GET_ENEMY_MIDDLE_UPDATE(BOOL bReverse)
IF bReverse
RETURN 11.0 * CMHDZ_GET_DEFAULT_TIMESTEP()
ENDIF
RETURN 15.0 * CMHDZ_GET_DEFAULT_TIMESTEP()
ENDFUNC
FUNC FLOAT CMHDZ_GET_ENEMY_BACKGROUND_UPDATE(BOOL bReverse)
IF bReverse
RETURN 16.0 * CMHDZ_GET_DEFAULT_TIMESTEP()
ENDIF
RETURN 20.0 * CMHDZ_GET_DEFAULT_TIMESTEP()
ENDFUNC
FUNC FLOAT CMHDZ_GET_BOSS_BACKGROUND_UPDATE(INT iFrameTime)
//RETURN ((150/iFrameTime) * CMHDZ_GET_ENEMY_BACKGROUND_UPDATE(FALSE))
RETURN ((150/iFrameTime) * (sCMHDZData.fCurrentTimeStep*12.0))
ENDFUNC
FUNC FLOAT CMHDZ_GET_BOSS_MIDDLE_UPDATE(INT iFrameTime)
RETURN ((150/iFrameTime) * (sCMHDZData.fCurrentTimeStep*16.0))
ENDFUNC
FUNC BOOL CMHDZ_IS_ENEMY_TYPE_THROWING_ENEMY(CMHDZ_ENEMY_TYPES eType)
SWITCH (eType)
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
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_IS_ENEMY_TYPE_FOREGROUND_ENEMY(CMHDZ_ENEMY_TYPES eType)
SWITCH (eType)
CASE CMHDZ_FOREGROUND_ENEMY_T1_1
CASE CMHDZ_FOREGROUND_ENEMY_T1_2
CASE CMHDZ_FOREGROUND_ENEMY_T2_1
CASE CMHDZ_FOREGROUND_ENEMY_T2_2
CASE CMHDZ_FOREGROUND_ENEMY_T3_1
CASE CMHDZ_FOREGROUND_ENEMY_T3_2
CASE CMHDZ_FOREGROUND_ENEMY_T4_1
CASE CMHDZ_FOREGROUND_ENEMY_T4_2
CASE CMHDZ_FOREGROUND_ENEMY_T5_1
CASE CMHDZ_FOREGROUND_ENEMY_T5_2
// CASE CMHDZ_FOREGROUND_ENEMY_BEAR
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
PROC CMHDZ_BACKGROUND_TILES_DATA_SET_RENDERING(INT iData, BOOL bRender)
IF (bRender)
SET_BIT(sCMHDZData.iBackgroundTilesDataRenderingBits, iData)
ELSE
CLEAR_BIT(sCMHDZData.iBackgroundTilesDataRenderingBits, iData)
ENDIF
ENDPROC
FUNC BOOL CMHDZ_BACKGROUND_TILES_DATA_IS_RENDERING(INT iData)
RETURN IS_BIT_SET(sCMHDZData.iBackgroundTilesDataRenderingBits, iData)
ENDFUNC
PROC CMHDZ_BACKGROUND_DATA_SET_RENDERING(INT iData, BOOL bRender)
INT ind = iData / 32
INT iBit = iData % 32
IF (bRender)
SET_BIT(sCMHDZData.iBackgroundDataRenderingBits[ind], iBit)
ELSE
CLEAR_BIT(sCMHDZData.iBackgroundDataRenderingBits[ind], iBit)
ENDIF
ENDPROC
FUNC BOOL CMHDZ_BACKGROUND_DATA_IS_RENDERING(INT iData)
INT ind = iData / 32
INT iBit = iData % 32
RETURN IS_BIT_SET(sCMHDZData.iBackgroundDataRenderingBits[ind], iBit)
ENDFUNC
PROC CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(INT iCover, CMHDZ_COVER_DATA_BITS bit, BOOL bOn = TRUE)
IF (bOn)
SET_BITMASK_ENUM_AS_ENUM(sCMHDZData.sCoverData[iCover].eDataBits, bit)
ELSE
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sCoverData[iCover].eDataBits, bit)
ENDIF
ENDPROC
PROC CMHDZ_COVER_DATA_SET_BITMASK(INT iCover, CMHDZ_COVER_DATA_BITS bit)
SET_BITMASK_ENUM_AS_ENUM(sCMHDZData.sCoverData[iCover].eDataBits, bit)
ENDPROC
PROC CMHDZ_COVER_DATA_CLEAR_BITMASK(INT iCover, CMHDZ_COVER_DATA_BITS bit)
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sCoverData[iCover].eDataBits, bit)
ENDPROC
FUNC BOOL CMHDZ_COVER_DATA_IS_BITMASK_SET(INT iCover, CMHDZ_COVER_DATA_BITS bit)
RETURN IS_BITMASK_ENUM_AS_ENUM_SET(sCMHDZData.sCoverData[iCover].eDataBits, bit)
ENDFUNC
PROC CMHDZ_SET_RESULT_SCREEN_STATE(CMHDZ_RESULT_SCREEN_STATE st)
sCMHDZData.eResultState = st
// //CPRINTLN(DEBUG_MINIGAME, "CMHDZ_SET_RESULT_SCREEN_STATE SET TO:", CMHDZ_RESULT_SCREEN_STATE_TO_STRING(st))
ENDPROC
PROC CMHDZ_INIT_COLOUR_STRUCTS()
INIT_RGBA_STRUCT(sCMHDZData.rgbaBlack, 0, 0, 0, 255)
INIT_RGBA_STRUCT(sCMHDZData.rgbaRed, 132, 36, 52, 155)
INIT_RGBA_STRUCT(sCMHDZData.rgbaRedText, 255, 0, 0, 255)
INIT_RGBA_STRUCT(sCMHDZData.rgbaEnemyShot, 200, 30, 30, 255)
INIT_RGBA_STRUCT(sCMHDZData.rgbaSprite, 255, 255, 255, 255)
INIT_RGBA_STRUCT(sCMHDZData.rgbaWhite, 255, 255, 255, 255)
INIT_RGBA_STRUCT(sCMHDZData.rgbaWhiteSafe, 210, 200, 200, 255)
INIT_RGBA_STRUCT(sCMHDZData.rgbaGreen, 0, 255,0, 255)
INIT_RGBA_STRUCT(sCMHDZData.rgbaBlue, 0, 0, 255, 255)
INIT_RGBA_STRUCT(sCMHDZData.rgbaYellow, 255, 255,0, 255)
INIT_RGBA_STRUCT(sCMHDZData.rgbaSpriteUsedBullet, 255, 255, 255, 100)
ENDPROC
PROC CMHDZ_INIT_GLOBALS()
sCMHDZData.vTextScale = INIT_VECTOR_2D(1, 1)
ENDPROC
// Items
PROC CMHDZ_ADD_MENU_OPTION_TO_LIST(VECTOR_2D vPos, CMHDZ_MENU_OPTIONS eOption, CMHDZ_ARCADE_CLIENT_STATE eScreen)
sCMHDZData.sMenuOptionsData[sCMHDZData.iNumberOfMenuOptions].vSpritePos = vPos
//sCMHDZData.sMenuOptionsData[sCMHDZData.iNumberOfMenuOptions].vSize = vSize
sCMHDZData.sMenuOptionsData[sCMHDZData.iNumberOfMenuOptions].eMenuOption = eOption
sCMHDZData.sMenuOptionsData[sCMHDZData.iNumberOfMenuOptions].eClientState = eScreen
sCMHDZData.iNumberOfMenuOptions ++
ENDPROC
PROC CMHDZ_INIT_MENU_OPTIONS()
CMHDZ_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, (cfBASE_SCREEN_HEIGHT/6*4) + 60), CMHDZ_START, CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN)
CMHDZ_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, (cfBASE_SCREEN_HEIGHT/6*4) + 130), CMHDZ_SCORES, CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN)
CMHDZ_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*3, cfBASE_SCREEN_HEIGHT/8*3), CMHDZ_WANTED_1, CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU)
CMHDZ_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*5, cfBASE_SCREEN_HEIGHT/8*3), CMHDZ_WANTED_2, CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU)
CMHDZ_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*7, cfBASE_SCREEN_HEIGHT/8*3), CMHDZ_WANTED_3, CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU)
CMHDZ_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*4, cfBASE_SCREEN_HEIGHT/8*6), CMHDZ_WANTED_4, CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU)
CMHDZ_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*6, cfBASE_SCREEN_HEIGHT/8*6), CMHDZ_WANTED_5, CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU)
CMHDZ_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D((cfBASE_SCREEN_WIDTH/2.0), (cfBASE_SCREEN_HEIGHT * 0.5) + 120), CMHDZ_REWIND, CMHDZ_ARCADE_CLIENT_STATE_GAME_OVER)
CMHDZ_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D((cfBASE_SCREEN_WIDTH/2.0), (cfBASE_SCREEN_HEIGHT * 0.5) + 190), CMHDZ_EJECT, CMHDZ_ARCADE_CLIENT_STATE_GAME_OVER)
ENDPROC
PROC CMHDZ_INIT_MENU()
CMHDZ_INIT_MENU_OPTIONS()
sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_CITY
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos = INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, (cfBASE_SCREEN_HEIGHT/2)+244)
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos = INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, (cfBASE_SCREEN_HEIGHT/2)+244)
sCMHDZData.sControlTimer.control = FRONTEND_CONTROL
sCMHDZData.sControlTimer.action = INPUT_FRONTEND_CANCEL //INPUT_SCRIPT_RRIGHT
sCMHDZData.sPcQuitTimer.control = FRONTEND_CONTROL
sCMHDZData.sPcQuitTimer.action = INPUT_FRONTEND_DELETE
ENDPROC
PROC CMHDZ_INIT_BOSS_STRUCT()
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_INIT_BOSS_STRUCT - Running this frame")
sCMHDZData.sBossData.eCurrentBossState = CMHDZ_BOSS_STATE_INACTIVE
sCMHDZData.sBossData.fAnimTimer = 0.0
sCMHDZData.sBossData.fHealth = cfBOSS_MaxHealth
sCMHDZData.sBossData.fStateChangeTimer = 0.0
sCMHDZData.sBossData.fTimeToThrow = GET_RANDOM_FLOAT_IN_RANGE(1800.0, 3000.0)
sCMHDZData.sBossData.iAnimFrame = 0
sCMHDZData.sBossData.vSpritePos = INIT_VECTOR_2D(960, (1080.0 + 300.0))
sCMHDZData.sBossData.vScale = INIT_VECTOR_2D(300, 400)
INIT_RGBA_STRUCT(sCMHDZData.sBossData.rgbaColor, 255, 255, 255)
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_1)
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_2)
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_REVERSE)
ENDPROC
FUNC BOOL CMHDZ_IS_POSITION_OVER_MENU_OPTION(VECTOR_2D vPos, CMHDZ_MENU_OPTIONS eOption)
FLOAT x1, x2, y1, y2
FLOAT fSizeX = 72.0
FLOAT fSizeY = 30.0
SWITCH eOption
CASE CMHDZ_WANTED_1
CASE CMHDZ_WANTED_2
CASE CMHDZ_WANTED_3
CASE CMHDZ_WANTED_4
CASE CMHDZ_WANTED_5
fSizeX = (276/2.0)
fSizeY = (376/2.0)
BREAK
ENDSWITCH
x1 = sCMHDZData.sMenuOptionsData[eOption].vSpritePos.x - fSizeX
y1 = sCMHDZData.sMenuOptionsData[eOption].vSpritePos.y - fSizeY
x2 = sCMHDZData.sMenuOptionsData[eOption].vSpritePos.x + fSizeX
y2 = sCMHDZData.sMenuOptionsData[eOption].vSpritePos.y + fSizeY
RETURN (vPos.X > x1 AND vPos.x < x2) AND (vPos.y > y1 AND vPos.Y < y2)
ENDFUNC
PROC CMHDZ_SET_PLAYER_NO_CHAIN_SCORE(INT iValue)
sCMHDZData.sPlayerData[0].iScoreNoChain = iValue
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SET_PLAYER_NO_CHAIN_SCORE] Value: ", iValue)
ENDPROC
PROC CMHDZ_RESET_PLAYER_CHAINED_SCORE()
sCMHDZData.sPlayerData[0].iChainedScore = 0
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_RESET_PLAYER_CHAINED_SCORE] Called")
ENDPROC
FUNC INT CMHDZ_GET_PLAYER_NO_CHAIN_SCORE()
RETURN sCMHDZData.sPlayerData[0].iScoreNoChain
ENDFUNC
PROC CMHDZ_SET_PREVIOUS_TARGET_SCORE(INT iValue)
sCMHDZData.sPlayerData[0].iPreviousTargetScore = iValue
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SET_PREVIOUS_TARGET_SCORE] Value: ", iValue)
ENDPROC
FUNC INT CMHDZ_GET_PREVIOUS_TARGET_SCORE()
RETURN sCMHDZData.sPlayerData[0].iPreviousTargetScore
ENDFUNC
FUNC CMHDZ_LEVELS CMHDZ_GET_CURRENT_LEVEL()
RETURN sCMHDZData.eCurrentLevel
ENDFUNC
FUNC INT CMHDZ_GET_CURRENT_LEVEL_AS_INT()
RETURN ENUM_TO_INT(CMHDZ_GET_CURRENT_LEVEL())
ENDFUNC
PROC CMHDZ_RESET_PLAYER_SUCCESSIVE_HITS()
sCMHDZData.sPlayerData[0].iSuccessiveHits = 0
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_RESET_PLAYER_SUCCESSIVE_HITS] Called")
CMHDZ_RESET_PLAYER_CHAINED_SCORE()
CMHDZ_SET_PLAYER_NO_CHAIN_SCORE(playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[CMHDZ_GET_CURRENT_LEVEL_AS_INT()])
ENDPROC
PROC CMHDZ_INIT_PLAYERS()
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos = INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2.0, cfBASE_SCREEN_HEIGHT/2.0) // INIT_VECTOR_2D(300, 500)
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos = INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2.0, cfBASE_SCREEN_HEIGHT/2.0) // INIT_VECTOR_2D(300, 500)
sCMHDZData.sPlayerData[0].iPlayerBitset = 0
sCMHDZData.sPlayerData[0].iInvulnerableTimer = 0
sCMHDZData.sPlayerData[0].iQuadDamageTimer = 0
sCMHDZData.sPlayerData[0].iHideReticuleTimer = 0
sCMHDZData.sPlayerData[0].iDeadTime = 0
sCMHDZData.sPlayerData[0].iNoAmmoTimer = 0
sCMHDZData.sPlayerData[0].iDamageScreen = 0
CDEBUG2LN(DEBUG_MINIGAME, "CMHDZ_INIT_PLAYERS - sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.X = ", sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.x)
CMHDZ_RESET_PLAYER_SUCCESSIVE_HITS()
ENDPROC
FUNC VECTOR_2D CMHDZ_GET_PLAYER_RETICULE_POSITON()
RETURN INIT_VECTOR_2D(sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x, sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y)
ENDFUNC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Player weapons
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNC CMHDZ_PLAYER_WEAPON GET_PLAYER_DEFAULT_WEAPON()
RETURN CMHDZ_PLAYER_WEAPON_REVOLVER
ENDFUNC
FUNC CMHDZ_PLAYER_WEAPON CMHDZ_GET_PLAYER_SPECIAL_WEAPON()
RETURN sCMHDZData.sPlayerData[0].activeWeapon
ENDFUNC
FUNC BOOL CMHDZ_DOES_PLAYER_HAVE_SPECIAL_WEAPON()
RETURN CMHDZ_GET_PLAYER_SPECIAL_WEAPON() != CMHDZ_PLAYER_WEAPON_NONE
ENDFUNC
FUNC CMHDZ_PLAYER_WEAPON CMHDZ_GET_PLAYER_CURRENT_WEAPON()
IF CMHDZ_DOES_PLAYER_HAVE_SPECIAL_WEAPON()
RETURN CMHDZ_GET_PLAYER_SPECIAL_WEAPON()
ENDIF
RETURN GET_PLAYER_DEFAULT_WEAPON()
ENDFUNC
FUNC CMHDZ_PLAYER_WEAPON_DATA CMHDZ_GET_PLAYER_WEAPON_DATA(CMHDZ_PLAYER_WEAPON weapon)
CMHDZ_PLAYER_WEAPON_DATA data
SWITCH weapon
CASE CMHDZ_PLAYER_WEAPON_NONE
data.iClipSize = 0 // Amount of ammo in clip
data.iMaxAmmo = 0 // Max amount of ammo
data.iMaxEnemyImpacts = 0 // Maximum number of enemies that can be hit with one shot
data.fSpreadModifier = 0.0 // A way to indicate the 'spread' of the weapon. E.g. Shotgun has large spread
data.iMinTimeBetweenShots = 0
data.iMinTimeReloadSingleBullet = 0
data.iMinDamagePerShot = 0
BREAK
CASE CMHDZ_PLAYER_WEAPON_REVOLVER
data.iClipSize = 6
data.iMaxAmmo = ciCMHDZ_PLAYER_START_AMMO
data.iMaxEnemyImpacts = 1
data.fSpreadModifier = 1.0
// Add controller compensation for the bullet spread
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
data.fSpreadModifier = 1.0
ELSE
data.fSpreadModifier = 135.0
ENDIF
data.iMinTimeBetweenShots = 5
data.iMinDamagePerShot = 7
data.iMinTimeReloadSingleBullet = 100
BREAK
CASE CMHDZ_PLAYER_WEAPON_SHOTGUN
data.iClipSize = 4
data.iMaxAmmo = 20
data.iMaxEnemyImpacts = 5
//data.fSpreadModifier = 350.0
// Add controller compensation for the bullet spread
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
data.fSpreadModifier = 125.0
ELSE
data.fSpreadModifier = 175.0
ENDIF
data.iMinTimeBetweenShots = 600
data.iMinDamagePerShot = 20
data.iMinTimeReloadSingleBullet = 250
BREAK
CASE CMHDZ_PLAYER_WEAPON_NAILGUN
data.iClipSize = 60
data.iMaxAmmo = 60 // Anything over 99 is 'infinite'
data.iMaxEnemyImpacts = 1
//data.fSpreadModifier = 1.0
// Add controller compensation for the bullet spread
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
data.fSpreadModifier = 1.0
ELSE
data.fSpreadModifier = 130.0
ENDIF
data.iMinTimeBetweenShots = 0
data.iMinDamagePerShot = 5
BREAK
CASE CMHDZ_PLAYER_WEAPON_RIFLE
data.iClipSize = 5
data.iMaxAmmo = 25 // Anything over 99 is 'infinite'
data.iMaxEnemyImpacts = 1
//data.fSpreadModifier = 1.0
// Add controller compensation for the bullet spread
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
data.fSpreadModifier = 1.0
ELSE
data.fSpreadModifier = 120.0
ENDIF
data.iMinTimeBetweenShots = 0
data.iMinDamagePerShot = 15
data.iMinTimeReloadSingleBullet = 200
BREAK
DEFAULT
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_GET_PLAYER_WEAPON_DATA] ************* NO WEAPON DATA weapon: ", CMHDZ_PLAYER_WEAPON_TO_STRING(weapon), " Int: ", ENUM_TO_INT(weapon))
#ENDIF
BREAK
ENDSWITCH
RETURN data
ENDFUNC
FUNC INT CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_WEAPON_TYPE(CMHDZ_PLAYER_WEAPON_TYPE type)
INT iAmmo = sCMHDZData.sPlayerData[0].weaponData[type].iAmmoInClip
RETURN iAmmo
ENDFUNC
FUNC INT CMHDZ_GET_PLAYER_TOTAL_AMMO_FOR_WEAPON_TYPE(CMHDZ_PLAYER_WEAPON_TYPE type, BOOL bIncludeClip = FALSE)
INT iTotal = sCMHDZData.sPlayerData[0].weaponData[type].iTotalAmmo
IF bIncludeClip
iTotal += CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_WEAPON_TYPE(type)
ENDIF
RETURN iTotal
ENDFUNC
FUNC INT GET_PLAYER_TOTAL_AMMO_FOR_ALL_WEAPON_TYPES()
INT i, iTotal
REPEAT CMHDZ_PLAYER_WEAPON_TYPE_MAX i
iTotal += CMHDZ_GET_PLAYER_TOTAL_AMMO_FOR_WEAPON_TYPE(INT_TO_ENUM(CMHDZ_PLAYER_WEAPON_TYPE, i))
ENDREPEAT
RETURN iTotal
ENDFUNC
FUNC BOOL CMHDZ_DOES_PLAYER_WEAPON_HAVE_INFINITE_AMMO(CMHDZ_PLAYER_WEAPON weapon)
// debug hack so I can test game in edit mode
#IF IS_DEBUG_BUILD
#IF CMHDZ_CMDLINE_EDITOR_NEW
IF (sCMHDZData.sEditor.bPlayStage)
RETURN TRUE
ENDIF
#ENDIF
#ENDIF
IF weapon = CMHDZ_PLAYER_WEAPON_REVOLVER
RETURN TRUE
ENDIF
// IF weapon = CMHDZ_PLAYER_WEAPON_NAILGUN
// RETURN TRUE
// ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_DOES_PLAYER_CURRENT_WEAPON_HAVE_INFINITE_AMMO()
RETURN CMHDZ_DOES_PLAYER_WEAPON_HAVE_INFINITE_AMMO(CMHDZ_GET_PLAYER_CURRENT_WEAPON())
ENDFUNC
FUNC INT CMHDZ_GET_PLAYER_CURRENT_WEAPON_CLIP_SIZE()
CMHDZ_PLAYER_WEAPON weapon = CMHDZ_GET_PLAYER_CURRENT_WEAPON()
CMHDZ_PLAYER_WEAPON_DATA data = CMHDZ_GET_PLAYER_WEAPON_DATA(weapon)
RETURN data.iClipSize
ENDFUNC
FUNC INT CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON()
RETURN CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_WEAPON_TYPE(sCMHDZData.sPlayerData[0].weaponType)
ENDFUNC
FUNC INT CMHDZ_GET_PLAYER_TOTAL_AMMO_IN_CURRENT_WEAPON(BOOL bIncludeInClip = FALSE)
RETURN CMHDZ_GET_PLAYER_TOTAL_AMMO_FOR_WEAPON_TYPE(sCMHDZData.sPlayerData[0].weaponType, bIncludeInClip)
ENDFUNC
PROC CMHDZ_STOP_LOOPING_WEAPON_AUDIO()
CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT_RIFLE_FIRE)
CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT_RAT_IDLE_LOOP)
ENDPROC
PROC CMHDZ_HANDLE_PLAYER_SHOOTING_AUDIO(BOOL bInMenu = FALSE)
IF bInMenu
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_Shoot_Option)
EXIT
ENDIF
CMHDZ_PLAYER_WEAPON weapon = CMHDZ_GET_PLAYER_CURRENT_WEAPON()
INT iAmmoInClip = CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON()
IF iAmmoInClip > 0
SWITCH weapon
CASE CMHDZ_PLAYER_WEAPON_REVOLVER
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_REVOLVER_FIRE)
BREAK
CASE CMHDZ_PLAYER_WEAPON_RIFLE
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_RIFLE_FIRE)
BREAK
CASE CMHDZ_PLAYER_WEAPON_SHOTGUN
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SHOTGUN_FIRE)
BREAK
CASE CMHDZ_PLAYER_WEAPON_NAILGUN
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_NAILGUN_FIRE)
BREAK
ENDSWITCH
ELSE // Weapon empty
SWITCH weapon
CASE CMHDZ_PLAYER_WEAPON_REVOLVER
// IF CMHDZ_HAS_SOUND_FINISHED(CMHDZ_AUDIO_EFFECT_REVOLVER_EMPTY)
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_REVOLVER_EMPTY)
// ENDIF
BREAK
CASE CMHDZ_PLAYER_WEAPON_RIFLE
// IF CMHDZ_HAS_SOUND_FINISHED(CMHDZ_AUDIO_EFFECT_RIFLE_EMPTY)
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_RIFLE_EMPTY)
// ENDIF
BREAK
CASE CMHDZ_PLAYER_WEAPON_SHOTGUN
// IF CMHDZ_HAS_SOUND_FINISHED(CMHDZ_AUDIO_EFFECT_SHOTGUN_EMPTY)
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SHOTGUN_EMPTY)
// ENDIF
BREAK
ENDSWITCH
ENDIF
ENDPROC
PROC CMHDZ_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO(BOOL bIsFirst, BOOL bIsSingle, BOOL bIsLast)
CMHDZ_PLAYER_WEAPON weapon = CMHDZ_GET_PLAYER_CURRENT_WEAPON()
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO] Weapon: ", CMHDZ_PLAYER_WEAPON_TO_STRING(weapon), " bIsFirst: ", bIsFirst, " bIsSingle: ", bIsSingle, " bIsLast: ", bIsLast)
#ENDIF
SWITCH weapon
CASE CMHDZ_PLAYER_WEAPON_REVOLVER
IF bIsFirst
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_FIRST)
ELIF bIsSingle
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_SINGLE)
ELIF bIsLast
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_REVOLVER_RELOAD_LAST)
ENDIF
BREAK
CASE CMHDZ_PLAYER_WEAPON_RIFLE
IF bIsFirst
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE)
ELIF bIsSingle
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE)
ELIF bIsLast
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_LAST)
ENDIF
BREAK
CASE CMHDZ_PLAYER_WEAPON_SHOTGUN
IF bIsFirst
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE)
ELIF bIsSingle
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE)
ELIF bIsLast
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE)
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC CMHDZ_REDUCE_PLAYER_AMMO_IN_CLIP(INT iAmount = 1)
CMHDZ_PLAYER_WEAPON_TYPE type = sCMHDZData.sPlayerData[0].weaponType
sCMHDZData.sPlayerData[0].weaponData[type].iAmmoInClip -= iAmount
IF sCMHDZData.sPlayerData[0].weaponData[type].iAmmoInClip < 0
sCMHDZData.sPlayerData[0].weaponData[type].iAmmoInClip = 0
ENDIF
IF CMHDZ_DOES_PLAYER_CURRENT_WEAPON_HAVE_INFINITE_AMMO()
EXIT
ENDIF
sCMHDZData.sPlayerData[0].weaponData[type].iTotalAmmo -= iAmount
IF sCMHDZData.sPlayerData[0].weaponData[type].iTotalAmmo <= 0
// IF sCMHDZData.sPlayerData[0].activeWeapon != CMHDZ_PLAYER_WEAPON_REVOLVER
// CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Reload)
// ENDIF
IF sCMHDZData.sPlayerData[0].weaponData[type].iTotalAmmo < 0
sCMHDZData.sPlayerData[0].weaponData[type].iTotalAmmo = 0
ENDIF
ENDIF
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_REDUCE_PLAYER_AMMO_IN_CLIP] {DSW} Weapon type: ", ENUM_TO_INT(type), " Ammo in clip now: ", sCMHDZData.sPlayerData[0].weaponData[type].iAmmoInClip, " Ammo remaining: ",sCMHDZData.sPlayerData[0].weaponData[type].iTotalAmmo)
ENDPROC
PROC CMHDZ_SET_CURRENT_PLAYER_WEAPON_AMMO(INT iClip, INT iWeapon)
CMHDZ_PLAYER_WEAPON_TYPE weaponType = sCMHDZData.sPlayerData[0].weaponType
sCMHDZData.sPlayerData[0].weaponData[weaponType].iAmmoInClip = iClip
sCMHDZData.sPlayerData[0].weaponData[weaponType].iTotalAmmo = iWeapon
//CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_SET_CURRENT_PLAYER_WEAPON_AMMO] Set ammo in clip: ", iClip, " In weapon: ", iWeapon)
ENDPROC
//PROC CMHDZ_SET_SHOULD_SHOW_RELOAD_PROMPT()
// sCMHDZData.sPlayerData[0].bShouldShowReloadPrompt = TRUE
//ENDPROC
FUNC BOOL CMHDZ_IS_PLAYER_SHOOTING()
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
RETURN (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_ATTACK))
ENDIF
RETURN (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT)
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT))
ENDFUNC
FUNC BOOL CMHDZ_IS_PLAYER_HOLDING_SHOOT()
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
RETURN (IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_ATTACK))
ENDIF
RETURN (IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT)
OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT))
ENDFUNC
FUNC BOOL CMHDZ_IS_PLAYER_THROWING()
IF NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
RETURN IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_LB)
ELSE // Using keyboard
IF IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_DUCK)
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_SPRINT)
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_PHONE)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_SHOULD_SHOW_RELOAD_PROMPT()
IF CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() > 0
IF sCMHDZData.sPlayerData[0].bShouldShowReloadPrompt
sCMHDZData.sPlayerData[0].bShouldShowReloadPrompt = FALSE
sCMHDZData.sPlayerData[0].bDoneReloadEffect = FALSE
sCMHDZData.sPlayerData[0].iReloadPromptShowTime = 0
ENDIF
RETURN FALSE
ELSE
//
//
// IF CMHDZ_IS_PLAYER_SHOOTING()
// IF sCMHDZData.sPlayerData[0].iReloadPromptShowTime = 0
// sCMHDZData.sPlayerData[0].iReloadPromptShowTime = GET_GAME_TIMER()
// RETURN FALSE
// ENDIF
//
// IF GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].iReloadPromptShowTime > 100
sCMHDZData.sPlayerData[0].bShouldShowReloadPrompt = TRUE
IF NOT sCMHDZData.sPlayerData[0].bDoneReloadEffect
// CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_RELOAD)
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_RELOAD)
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Reload)
sCMHDZData.sPlayerData[0].bDoneReloadEffect = TRUE
ENDIF
// ENDIF
ENDIF
RETURN sCMHDZData.sPlayerData[0].bShouldShowReloadPrompt
ENDFUNC
/// PURPOSE:
/// Some weapons have infinite ammo
/// RETURNS:
///
FUNC BOOL CMHDZ_CAN_PLAYER_CURRNT_WEAPON_BE_RELOADED()
CMHDZ_PLAYER_WEAPON weapon = CMHDZ_GET_PLAYER_CURRENT_WEAPON()
SWITCH weapon
CASE CMHDZ_PLAYER_WEAPON_NONE
//CASE CMHDZ_PLAYER_WEAPON_NAILGUN
RETURN FALSE
ENDSWITCH
CMHDZ_PLAYER_WEAPON_DATA data = CMHDZ_GET_PLAYER_WEAPON_DATA(weapon)
INT iAmmoInClip = CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON()
IF iAmmoInClip = data.iClipSize
//-- Clip full
RETURN FALSE
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL CMHDZ_DOES_PLAYER_NEED_TO_RELOAD()
RETURN CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() = 0
ENDFUNC
PROC CMHDZ_RELOAD_PLAYER_WEAPON()
CMHDZ_PLAYER_WEAPON_TYPE weaponType = sCMHDZData.sPlayerData[0].weaponType
//
// IF NOT CMHDZ_CAN_PLAYER_CURRNT_WEAPON_BE_RELOADED()
// IF sCMHDZData.sPlayerData[0].bIsReloading[weaponType]
// sCMHDZData.sPlayerData[0].bIsReloading[weaponType] = FALSE
// ENDIF
// EXIT
// ENDIF
CMHDZ_PLAYER_WEAPON weapon = CMHDZ_GET_PLAYER_CURRENT_WEAPON()
CMHDZ_PLAYER_WEAPON_DATA data = CMHDZ_GET_PLAYER_WEAPON_DATA(weapon)
BOOL bPlayFirst
IF sCMHDZData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime = 0
OR GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime >= data.iMinTimeReloadSingleBullet
INT iAmmoInClip = CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON()
INT iTotalAmmo = CMHDZ_GET_PLAYER_TOTAL_AMMO_IN_CURRENT_WEAPON(FALSE)
INT iBulletsToAdd = 1 // data.iClipSize - iAmmoInClip
IF iAmmoInClip < iTotalAmmo
IF iBulletsToAdd > iTotalAmmo
iBulletsToAdd = iTotalAmmo
ENDIF
// CMHDZ_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO()
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_RELOAD_PLAYER_WEAPON] Weapon: ", CMHDZ_PLAYER_WEAPON_TO_STRING(weapon), "In clip: ", iAmmoInClip, " Weapon size: ", data.iClipSize)
#ENDIF
bPlayFirst = (iAmmoInClip < data.iClipSize - 2) AND NOT CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_RELOADED_FIRST_BULLET)
CMHDZ_SET_CURRENT_PLAYER_WEAPON_AMMO(iAmmoInClip+iBulletsToAdd, iTotalAmmo)
IF bPlayFirst
//- -First bullet in clip (but not also last)
CMHDZ_SET_PLAYER_BIT(CMHDZ_PLAYER_BIT_RELOADED_FIRST_BULLET)
CMHDZ_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO(TRUE, FALSE, FALSE)
ELIF CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() = data.iClipSize
//-- Last bullet in clip
CMHDZ_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO(FALSE, FALSE, TRUE)
ELSE
CMHDZ_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO(FALSE, TRUE, FALSE)
ENDIF
sCMHDZData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime = GET_GAME_TIMER()
ENDIF
ENDIF
ENDPROC
PROC CMHDZ_SET_PLAYER_WEAPON_TYPE(CMHDZ_PLAYER_WEAPON_TYPE type)
#IF IS_DEBUG_BUILD
// STRING sOld = CMHDZ_PLAYER_WEAPON_TYPE_TO_STRING(sCMHDZData.sPlayerData[0].weaponType)
// STRING sNew = CMHDZ_PLAYER_WEAPON_TYPE_TO_STRING(type)
//CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_SET_PLAYER_WEAPON_TYPE] Setting weapon type ", sOld, " -> ", sNew)
#ENDIF
sCMHDZData.sPlayerData[0].weaponType = type
ENDPROC
PROC CMHDZ_INIT_PLAYER_SPECIAL_WEAPON()
CMHDZ_PLAYER_WEAPON weapon = sCMHDZData.sPlayerData[0].activeWeapon
CMHDZ_PLAYER_WEAPON_DATA data = CMHDZ_GET_PLAYER_WEAPON_DATA(weapon)
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL].iAmmoInClip = data.iClipSize
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL].iTotalAmmo = data.iMaxAmmo
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL].iLastShotTime = 0
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL].iReloadSingleBulletTime = 0
sCMHDZData.sPlayerData[0].bIsReloading[CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL] = FALSE
ENDPROC
PROC CMHDZ_SET_PLAYER_SPECIAL_WEAPON(CMHDZ_PLAYER_WEAPON weapon, BOOL bSwapToSpecial = TRUE)
// #IF IS_DEBUG_BUILD
// STRING sOld = CMHDZ_PLAYER_WEAPON_TO_STRING(sCMHDZData.sPlayerData[0].activeWeapon)
// STRING sNew = CMHDZ_PLAYER_WEAPON_TO_STRING(weapon)
// //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_SET_PLAYER_SPECIAL_WEAPON] Setting special weapon ", sOld, " -> ", sNew, " Swap? ", bSwapToSpecial)
// #ENDIF
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT].iLastShotTime = 0
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT].iReloadSingleBulletTime = 0
sCMHDZData.sPlayerData[0].activeWeapon = weapon
IF bSwapToSpecial
CMHDZ_SET_PLAYER_WEAPON_TYPE(CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL)
CMHDZ_INIT_PLAYER_SPECIAL_WEAPON()
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SWAP_WEAPON)
CMHDZ_SET_LEVEL_BIT_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_USED_SPECIAL_WEAPON)
ENDIF
ENDPROC
PROC CMHDZ_INIT_PLAYER_WEAPON()
sCMHDZData.sPlayerData[0].weaponType = CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT
sCMHDZData.sPlayerData[0].activeWeapon = CMHDZ_PLAYER_WEAPON_NONE
CMHDZ_PLAYER_WEAPON_DATA data = CMHDZ_GET_PLAYER_WEAPON_DATA(CMHDZ_PLAYER_WEAPON_REVOLVER)
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT].iAmmoInClip = data.iClipSize
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT].iReloadSingleBulletTime = 0
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT].iTotalAmmo = ciCMHDZ_PLAYER_START_AMMO
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT].iLastShotTime = 0
sCMHDZData.sPlayerData[0].bIsReloading[CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT] = FALSE
CMHDZ_SET_PLAYER_SPECIAL_WEAPON(CMHDZ_PLAYER_WEAPON_NONE, FALSE)
CMHDZ_INIT_PLAYER_SPECIAL_WEAPON()
ENDPROC
FUNC INT CMHDZ_GET_RIVAL_PLAYER_PART_ID()
RETURN sCMHDZData.iRivalPart
ENDFUNC
PROC CMHDZ_INIT_PLAY_VARIABLES()
sCMHDZData.eLevelState = CMHDZ_PLAY
ENDPROC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Level / Hi scores
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNC INT CMHDZ_GET_TOTAL_SHOTS_FIRED_IN_LEVEL(CMHDZ_LEVELS eLevel)
RETURN sCMHDZData.iTotalLevelShots[eLevel]
ENDFUNC
FUNC INT CMHDZ_GET_TOTAL_SHOTS_FIRED_IN_ALL_LEVELS()
INT iTotal
INT i
REPEAT CMHDZ_MAX_LEVELS i
iTotal += CMHDZ_GET_TOTAL_SHOTS_FIRED_IN_LEVEL(INT_TO_ENUM(CMHDZ_LEVELS, i))
ENDREPEAT
RETURN iTotal
ENDFUNC
FUNC INT CMHDZ_GET_CURRENT_LEVEL_SCREEN()
RETURN sCMHDZData.iCurrentScreen
ENDFUNC
PROC CMHDZ_INCREASE_SHOT_FIRED_FOR_CURRENT_LEVEL()
IF CMHDZ_GET_PLAYER_SPECIAL_WEAPON() = CMHDZ_PLAYER_WEAPON_NAILGUN
IF (sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL].iAmmoInClip %6) = 0
sCMHDZData.iTotalLevelShots[CMHDZ_GET_CURRENT_LEVEL()]++
ENDIF
EXIT
ENDIF
sCMHDZData.iTotalLevelShots[CMHDZ_GET_CURRENT_LEVEL()]++
ENDPROC
FUNC INT CMHDZ_GET_TOTAL_SHOTS_FIRED_IN_CURRENT_LEVEL()
RETURN sCMHDZData.iTotalLevelShots[CMHDZ_GET_CURRENT_LEVEL()]
ENDFUNC
FUNC INT CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_LEVEL(CMHDZ_LEVELS eLevel)
RETURN sCMHDZData.iTotalLevelEnemyHits[eLevel]
ENDFUNC
PROC CMHDZ_INCREASE_ENEMY_HIT_COUNT_FOR_CURRENT_LEVEL(BOOL bHitEnemy)
IF CMHDZ_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_STOPPED)
sCMHDZData.iTotalNumberOfEnemiesKilledForScreen++
ENDIF
IF bHitEnemy
EXIT
ENDIF
sCMHDZData.iTotalLevelEnemyHits[CMHDZ_GET_CURRENT_LEVEL()]++
ENDPROC
FUNC INT CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_CURRENT_LEVEL()
RETURN CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL())
ENDFUNC
FUNC INT CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_ALL_LEVELS()
INT iTotal
INT i
REPEAT CMHDZ_MAX_LEVELS i
iTotal += CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_LEVEL(INT_TO_ENUM(CMHDZ_LEVELS, i))
ENDREPEAT
RETURN iTotal
ENDFUNC
PROC CMHDZ_INCREASE_ENEMY_HEADSHOT_COUNT_FOR_CURRENT_LEVEL()
sCMHDZData.iTotalLevelEnemyHeadShots[CMHDZ_GET_CURRENT_LEVEL()]++
ENDPROC
FUNC INT CMHDZ_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_LEVEL(CMHDZ_LEVELS eLevel)
RETURN sCMHDZData.iTotalPowerupsCollected[eLevel]
ENDFUNC
FUNC INT CMHDZ_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_CURRENT_LEVEL()
RETURN CMHDZ_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL())
ENDFUNC
FUNC INT CMHDZ_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_ALL_LEVELS()
INT iTotal
INT i
REPEAT CMHDZ_MAX_LEVELS i
iTotal += CMHDZ_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_LEVEL(INT_TO_ENUM(CMHDZ_LEVELS, i))
ENDREPEAT
RETURN iTotal
ENDFUNC
PROC CMHDZ_INCREASE_POWERUPS_COLLECTED_FOR_CURRENT_LEVEL()
sCMHDZData.iTotalPowerupsCollected[CMHDZ_GET_CURRENT_LEVEL()]++
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_INCREASE_POWERUPS_COLLECTED_FOR_CURRENT_LEVEL] Powerups collected now: ",sCMHDZData.iTotalPowerupsCollected[CMHDZ_GET_CURRENT_LEVEL()], " level: ", CMHDZ_LEVELS_TO_STRING(sCMHDZData.eCurrentLevel))
#ENDIF
ENDPROC
FUNC FLOAT CMHDZ_GET_PLAYER_ACCURACY_FOR_LEVEL(CMHDZ_LEVELS level)
FLOAT fNumberOfShots = TO_FLOAT(CMHDZ_GET_TOTAL_SHOTS_FIRED_IN_LEVEL(level))
FLOAT fEnemiesShot = TO_FLOAT(CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_LEVEL(level))
FLOAT fTotalHits = fEnemiesShot
IF (fTotalHits > fNumberOfShots)
fTotalHits = fNumberOfShots
ENDIF
RETURN 100.0 * (fTotalHits / fNumberOfSHots)
ENDFUNC
FUNC FLOAT CMHDZ_GET_PLAYER_ACCURACY_FOR_CURRENT_LEVEL()
FLOAT fNumberOfShots = TO_FLOAT(CMHDZ_GET_TOTAL_SHOTS_FIRED_IN_CURRENT_LEVEL())
FLOAT fEnemiesShot = TO_FLOAT(CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_CURRENT_LEVEL())
FLOAT fTotalHits = fEnemiesShot
IF (fTotalHits > fNumberOfShots)
fTotalHits = fNumberOfShots
ENDIF
RETURN 100.0 * (fTotalHits / fNumberOfSHots)
ENDFUNC
FUNC FLOAT CMHDZ_GET_PLAYER_ACCURACY_FOR_ALL_LEVELS()
FLOAT fTotalShots = TO_FLOAT(CMHDZ_GET_TOTAL_SHOTS_FIRED_IN_ALL_LEVELS())
FLOAT fTotalEnemyHits = TO_FLOAT(CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_ALL_LEVELS())
FLOAT fAccuracy = 100.0 * (fTotalEnemyHits) / fTotalShots
IF (fAccuracy > 100)
fAccuracy = 100.0
ENDIF
RETURN fAccuracy
ENDFUNC
FUNC INT CMHDZ_GET_PLAYER_SUCESSIVE_HITS()
RETURN sCMHDZData.sPlayerData[0].iSuccessiveHits
ENDFUNC
PROC CMHDZ_INCREASE_PLAYER_SUCCESSIVE_HITS()
sCMHDZData.sPlayerData[0].iSuccessiveHits += 1
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_INCREASE_PLAYER_SUCCESSIVE_HITS] Score mulitplier now: ", sCMHDZData.sPlayerData[0].iSuccessiveHits)
ENDPROC
PROC CMHDZ_INCREASE_PLAYER_CHAINED_SCORE(INT iScore)
sCMHDZData.sPlayerData[0].iChainedScore += iScore
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_INCREASE_PLAYER_CHAINED_SCORE] Chained score now: ", sCMHDZData.sPlayerData[0].iChainedScore, " Chained Shots: ",CMHDZ_GET_PLAYER_SUCESSIVE_HITS() - 1 )
DEBUG_PRINTCALLSTACK()
ENDPROC
FUNC INT CMHDZ_GET_PLAYER_CHAINED_SCORE()
RETURN sCMHDZData.sPlayerData[0].iChainedScore
ENDFUNC
FUNC INT CMHDZ_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(INT iLevel)
RETURN playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iLevel]
ENDFUNC
FUNC INT CMHDZ_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(INT iLevel)
RETURN playerBd[PARTICIPANT_ID_TO_INT()].iPlayerHiScore[iLevel]
ENDFUNC
FUNC FLOAT CMHDZ_GET_LOCAL_PLAYER_STAR_RATING_FOR_LEVEL(INT iLevel)
RETURN playerBd[PARTICIPANT_ID_TO_INT()].fPlayerStarRating[iLevel]
ENDFUNC
FUNC BOOL CMHDZ_IS_STAR_RATING_5_FOR_ALL_LEVELS()
INT i
FOR i = 0 TO (ENUM_TO_INT(CMHDZ_MAX_LEVELS) - 1)
IF CMHDZ_GET_LOCAL_PLAYER_STAR_RATING_FOR_LEVEL(i) < 5.0
RETURN FALSE
ENDIF
ENDFOR
RETURN TRUE
ENDFUNC
FUNC INT CMHDZ_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(INT iPart, INT iLevel)
RETURN cmhdzServerBd.sPlayerScores[iPart].iHiScoreForLevel[iLevel]
RETURN 0
ENDFUNC
FUNC INT CMHDZ_GET_RIVAL_HI_SCORE_FOR_LEVEL(INT iLevel)
RETURN cmhdzServerBd.sPlayerScores[sCMHDZData.iRivalPart].iHiScoreForLevel[iLevel]
ENDFUNC
FUNC INT CMHDZ_GET_RIVAL_SCORE_FOR_LEVEL(INT iLevel)
RETURN cmhdzServerBd.sPlayerScores[sCMHDZData.iRivalPart].iCurrentScoreForLevel[iLevel]
ENDFUNC
FUNC FLOAT CMHDZ_GET_RIVAL_STAR_RATING_FOR_LEVEL(INT iLevel)
RETURN cmhdzServerBd.sPlayerScores[sCMHDZData.iRivalPart].fStarRatingForLevel[iLevel]
ENDFUNC
FUNC INT CMHDZ_GET_LOCAL_PLAYER_HI_SCORE_FOR_ALL_LEVELS()
INT i, iScore
REPEAT CMHDZ_MAX_LEVELS i
iScore += CMHDZ_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(i)
ENDREPEAT
RETURN iScore
ENDFUNC
FUNC INT CMHDZ_GET_LOCAL_PLAYER_HI_SCORE()
RETURN CMHDZ_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL_AS_INT())
ENDFUNC
FUNC INT GET_LOCAL_PLAYER_SCORE()
INT iCurrentLevel = CMHDZ_GET_CURRENT_LEVEL_AS_INT()
RETURN CMHDZ_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(iCurrentLevel)
ENDFUNC
FUNC INT CMHDZ_GET_PARTICIPANT_WITH_HIGHEST_HI_SCORE_FOR_CURRENT_LEVEL()
INT iCurrentLevel = CMHDZ_GET_CURRENT_LEVEL_AS_INT()
INT iRivalHiScore = CMHDZ_GET_RIVAL_HI_SCORE_FOR_LEVEL(iCurrentLevel)
INT iMyHiScore = cmhdzServerBd.sPlayerScores[PARTICIPANT_ID_TO_INT()].iHiScoreForLevel[iCurrentLevel]
IF iRivalHiScore > iMyHiScore
RETURN CMHDZ_GET_RIVAL_PLAYER_PART_ID()
ENDIF
RETURN PARTICIPANT_ID_TO_INT()
ENDFUNC
FUNC INT CMHDZ_GET_LOCAL_PLAYER_TOTAL_SCORE()
INT i, iScore
REPEAT CMHDZ_MAX_LEVELS i
iScore += CMHDZ_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(i)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_GET_LOCAL_PLAYER_TOTAL_SCORE] Hi Score for level ", i, ": ", CMHDZ_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(i), " Total so far: ", iScore)
ENDREPEAT
RETURN iScore
ENDFUNC
FUNC INT CMHDZ_GET_SCORE_FOR_TYPE(CMHDZ_SCORE_TYPE score)
SWITCH score
CASE CMHDZ_SCORE_TYPE_ENEMY RETURN 100
CASE CMHDZ_SCORE_TYPE_ENEMY_HEADSHOT RETURN 150
CASE CMHDZ_SCORE_TYPE_ANIMAL RETURN 250
CASE CMHDZ_SCORE_TYPE_SCENERY RETURN 10
CASE CMHDZ_SCORE_TYPE_ENEMY_EXPLOSION RETURN 100
CASE CMHDZ_SCORE_TYPE_CASH RETURN 1000
CASE CMHDZ_SCORE_TYPE_TAPE RETURN 10000
CASE CMHDZ_SCORE_TYPE_BEARSY RETURN 5
CASE CMHDZ_SCORE_TYPE_BEARSY_KILL RETURN 10000
ENDSWITCH
//CDEBUG2LN(DEBUG_MINIGAME, "[GET_SCORE_FOR_TYPE] {DSW} Unknown score type")
RETURN 0
ENDFUNC
FUNC INT CMHDZ_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL(INT iPart, INT iLevel)
IF NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(iPart))
RETURN playerBd[iPart].iPlayerHiScore[iLevel]
ENDIF
RETURN 0
ENDFUNC
FUNC INT CMHDZ_GET_PARTICIPANT_SCORE_FOR_LEVEL(INT iPart, INT iLevel)
IF NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(iPart))
RETURN playerBd[iPart].iPlayerScore[iLevel]
ENDIF
RETURN 0
ENDFUNC
PROC CMHDZ_RESET_LOCAL_PLAYER_SCORE_FOR_LEVEL(INT iLevel)
IF playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iLevel] != 0
playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iLevel] = 0
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_RESET_LOCAL_PLAYER_SCORE_FOR_LEVEL] {DSW} Called for level ", iLevel)
DEBUG_PRINTCALLSTACK()
#ENDIF
ENDIF
ENDPROC
PROC CMHDZ_RESET_LOCAL_PLAYER_SCORE_FOR_CURRENT_LEVEL()
CMHDZ_RESET_LOCAL_PLAYER_SCORE_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL_AS_INT())
ENDPROC
PROC CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE(CMHDZ_SCORE_TYPE score)
INT iScoreToAdd = CMHDZ_GET_SCORE_FOR_TYPE(score)
INT iCurrentLevel = CMHDZ_GET_CURRENT_LEVEL_AS_INT()
//INT iChainBonus = 0
CMHDZ_INCREASE_PLAYER_SUCCESSIVE_HITS()
INT iHits = CMHDZ_GET_PLAYER_SUCESSIVE_HITS()
FLOAT fScoreMultiplier = 0.0
IF iHits > 1
fScoreMultiplier = TO_FLOAT(iHits) / 10.0
ENDIF
CMHDZ_INCREASE_PLAYER_CHAINED_SCORE(iScoreToAdd)
INT iChainedScore = CMHDZ_GET_PLAYER_CHAINED_SCORE()
// Director dialogue triggers.
IF iHits = 10
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak)
ENDIF
IF iHits = 15
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Long)
ENDIF
IF iHits = 25
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Kill_Streak_Extreme)
ENDIF
IF iHits = 1
playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel] += iScoreToAdd
CMHDZ_SET_PREVIOUS_TARGET_SCORE(iScoreToAdd)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE] {dsw} No Chain. New score: ", playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel])
CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_INIT_NEW_CHAIN)
ELSE
IF NOT CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_INIT_NEW_CHAIN)
CMHDZ_SET_PLAYER_BIT(CMHDZ_PLAYER_BIT_INIT_NEW_CHAIN)
CMHDZ_SET_PLAYER_NO_CHAIN_SCORE(playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel] - CMHDZ_GET_PREVIOUS_TARGET_SCORE())
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE] New Chain started, storing score: ", CMHDZ_GET_PLAYER_NO_CHAIN_SCORE())
ENDIF
iScoreToAdd = iChainedScore + ROUND(TO_FLOAT(iChainedScore) * fScoreMultiplier)
playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel] = CMHDZ_GET_PLAYER_NO_CHAIN_SCORE() + iScoreToAdd
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE] {dsw} New amount to add: ", iScoreToAdd, " Chained score: ", iChainedScore, " After multi applied: ", (iChainedScore * fScoreMultiplier), " New score: ", playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel])
ENDIF
IF CMHDZ_GET_LOCAL_PLAYER_HI_SCORE() < playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel]
playerBd[PARTICIPANT_ID_TO_INT()].iPlayerHiScore[iCurrentLevel] = playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel]
endif
ENDPROC
FUNC BOOL CMHDZ_IS_LOCAL_PLAYER_IN_LEFT_HAND_CABINET()
RETURN GET_ARCADE_CABINET_LOCATE_PLAYER_SLOT_PLAYER_IS_IN(PLAYER_ID()) <= 0
ENDFUNC
FUNC INT CMHDZ_GET_RED_PLAYER_SCORE_FOR_LEVEL(INT iLevel)
IF GET_ARCADE_CABINET_LOCATE_PLAYER_SLOT_PLAYER_IS_IN(PLAYER_ID()) <= 0
RETURN CMHDZ_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(iLevel)
ELSE
RETURN CMHDZ_GET_RIVAL_SCORE_FOR_LEVEL(iLevel)
ENDIF
RETURN 0
ENDFUNC
FUNC INT CMHDZ_GET_RED_PLAYER_HI_SCORE_FOR_LEVEL_FROM_HOST(INT iLevel)
IF GET_ARCADE_CABINET_LOCATE_PLAYER_SLOT_PLAYER_IS_IN(PLAYER_ID()) <= 0
RETURN CMHDZ_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(PARTICIPANT_ID_TO_INT(), iLevel)
ELSE
RETURN CMHDZ_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(sCMHDZData.iRivalPart, iLevel)
ENDIF
RETURN 0
ENDFUNC
FUNC INT CMHDZ_GET_BLUE_PLAYER_SCORE_FOR_LEVEL(INT iLevel)
IF GET_ARCADE_CABINET_LOCATE_PLAYER_SLOT_PLAYER_IS_IN(PLAYER_ID()) = 1
RETURN CMHDZ_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(iLevel)
ELSE
RETURN CMHDZ_GET_RIVAL_SCORE_FOR_LEVEL(iLevel)
ENDIF
RETURN 0
ENDFUNC
FUNC INT CMHDZ_GET_BLUE_PLAYER_HI_SCORE_FOR_LEVEL_FROM_HOST(INT iLevel)
IF GET_ARCADE_CABINET_LOCATE_PLAYER_SLOT_PLAYER_IS_IN(PLAYER_ID()) = 1
RETURN CMHDZ_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(PARTICIPANT_ID_TO_INT(), iLevel)
ELSE
RETURN CMHDZ_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(sCMHDZData.iRivalPart, iLevel)
ENDIF
RETURN 0
ENDFUNC
FUNC INT CMHDZ_GET_RED_PLAYER_HI_SCORE_FOR_ALL_LEVELS_FROM_HOST()
INT i, iScore
REPEAT CMHDZ_MAX_LEVELS i
iScore += CMHDZ_GET_RED_PLAYER_HI_SCORE_FOR_LEVEL_FROM_HOST(i)
ENDREPEAT
RETURN iScore
ENDFUNC
FUNC INT CMHDZ_GET_BLUE_PLAYER_HI_SCORE_FOR_ALL_LEVELS_FROM_HOST()
INT i, iScore
REPEAT CMHDZ_MAX_LEVELS i
iScore += CMHDZ_GET_BLUE_PLAYER_HI_SCORE_FOR_LEVEL_FROM_HOST(i)
ENDREPEAT
RETURN iScore
ENDFUNC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Levels Util
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNC FLOAT CMHDZ_GET_LOCAL_PLAYER_HEALTH()
#IF IS_DEBUG_BUILD
IF GET_COMMANDLINE_PARAM_EXISTS("sc_BadlandsNoDeath") OR (CMHDZ_CMDLINE_NO_DEATH = 1)
RETURN 1.0
ENDIF
#ENDIF
RETURN sCMHDZData.sPlayerData[0].fHealth
ENDFUNC
PROC CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(CMHDZ_LEVELS eLevel, CMHDZ_LEVELS_BITSET eBit)
IF CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(eLevel, eBit)
// #IF IS_DEBUG_BUILD
// STRING sBit = CMHDZ_LEVELS_BITSET_TO_STRING(eBit)
// STRING sLevel = CMHDZ_LEVELS_TO_STRING(eLevel)
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL] {DSW} Set bit ", sBit, " For Level ", sLevel)
// #ENDIF
CLEAR_BIT(sCMHDZData.iLevelBitset[ENUM_TO_INT(sCMHDZData.eCurrentLevel)], ENUM_TO_INT(eBit))
ENDIF
ENDPROC
FUNC BOOL CMHDZ_IS_LEVEL_STOPPED()
RETURN CMHDZ_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_STOPPED)
ENDFUNC
FUNC BOOL CMHDZ_IS_LEADERBOARD_ACTIVE()
IF (sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD)
OR (sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_MOVING_LEVEL()
#IF IS_DEBUG_BUILD
IF sCMHDZData.bStopMovingLevel OR sCMHDZData.bDebugPause
RETURN FALSE
ENDIF
#ENDIF
IF CMHDZ_GET_LOCAL_PLAYER_HEALTH() <= 0.0
RETURN FALSE
ENDIF
IF CMHDZ_IS_LEADERBOARD_ACTIVE()
RETURN FALSE
ENDIF
IF NOT CMHDZ_IS_LEVEL_STOPPED()
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_COVER_UTIL_IS_TYPE_LARGE_BUILDING(CMHDZ_ASSET_TYPES eCover)
SWITCH eCover
CASE CMHDZ_ASSET_CITY_BUILDING_1
CASE CMHDZ_ASSET_CITY_BUILDING_2
CASE CMHDZ_ASSET_CITY_BUILDING_3
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_1
CASE CMHDZ_ASSET_THEMEPARK_BUILDING_3
CASE CMHDZ_ASSET_THEMEPARK_BUILDING_4
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_COVER_UTIL_IS_TYPE_SMALL_BUILDING(CMHDZ_ASSET_TYPES eCover)
SWITCH eCover
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_2
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_3
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_4
CASE CMHDZ_ASSET_THEMEPARK_BUILDING_1
CASE CMHDZ_ASSET_THEMEPARK_BUILDING_2
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC INT CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVELS eLevel)
SWITCH eLevel
CASE CMHDZ_LEVEL_CITY
RETURN 7
CASE CMHDZ_LEVEL_SCRAPYARD
RETURN 6
CASE CMHDZ_LEVEL_ASYLUM
RETURN 7
CASE CMHDZ_LEVEL_PARK
RETURN 9
BREAK
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE
RETURN 8
BREAK
ENDSWITCH
RETURN 0
ENDFUNC
FUNC INT CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL()
RETURN CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(sCMHDZData.eCurrentLevel)
ENDFUNC
FUNC BOOL CMHDZ_IS_LEVEL_SCREEN_STATIONARY(CMHDZ_LEVELS eLevel, INT iScreen)
IF (iScreen >= sCMHDZData.iLastScreenToStopOn)
RETURN TRUE
ENDIF
//RETURN sCMHDZData.sStageEndData[iScreen].bStationary
SWITCH eLevel
// CASE CMHDZ_LEVEL_CITY
// SWITCH iScreen
// CASE 5
// RETURN TRUE
// ENDSWITCH
// BREAK
CASE CMHDZ_LEVEL_SCRAPYARD
SWITCH iScreen
CASE 2 // Testing. Needs to be changed later.
RETURN TRUE
ENDSWITCH
BREAK
//
CASE CMHDZ_LEVEL_ASYLUM
SWITCH iScreen
CASE 4 //(1855/cfCMHDZ_SCREEN_LENGTH)
RETURN TRUE
ENDSWITCH
BREAK
// CASE CMHDZ_LEVEL_PARK
// SWITCH iScreen
// CASE 5
// //CASE 12
// RETURN TRUE
// ENDSWITCH
// BREAK
//
// CASE CMHDZ_LEVEL_SLAUGHTERHOUSE
// SWITCH iScreen
// CASE 5
// //CASE 16
// RETURN TRUE
// ENDSWITCH
// BREAK
ENDSWITCH
RETURN (iScreen >= CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(eLevel))
ENDFUNC
FUNC BOOL CMHDZ_IS_CURRENT_LEVEL_SCREEN_STATIONARY()
CMHDZ_LEVELS level = sCMHDZData.eCurrentLevel
INT iScreen = sCMHDZData.iCurrentScreen
RETURN CMHDZ_IS_LEVEL_SCREEN_STATIONARY(level, iScreen)
ENDFUNC
/// PURPOSE:
/// Define the static screen phases for each stationary point.
/// RETURNS:
/// Always return 1 more than all the phases
FUNC INT CMHDZ_GET_STATIC_SCREEN_PHASE_COUNT()
IF CMHDZ_IS_LEVEL_SCREEN_STATIONARY(sCMHDZData.eCurrentLevel, sCMHDZData.iCurrentScreen)
SWITCH sCMHDZData.eCurrentLevel
CASE CMHDZ_LEVEL_CITY
RETURN 4
CASE CMHDZ_LEVEL_SCRAPYARD
RETURN 4
CASE CMHDZ_LEVEL_ASYLUM
SWITCH sCMHDZData.iCurrentScreen
CASE 3
RETURN 4
ENDSWITCH
RETURN 4 // Final screen
BREAK
CASE CMHDZ_LEVEL_PARK
RETURN 6
BREAK
ENDSWITCH
RETURN 3
ENDIF
RETURN 0
ENDFUNC
FUNC BOOL CMHDZ_IS_MOVING_LEVEL_ABOUT_TO_STOP()
IF CMHDZ_IS_LEVEL_SCREEN_STATIONARY(sCMHDZData.eCurrentLevel, sCMHDZData.iCurrentScreen + 1)
OR CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL() = (sCMHDZData.iCurrentScreen + 3)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC CMHDZ_RESET_SCREEN_TO_STOP_ON()
sCMHDZData.iLastScreenToStopOn = CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL()
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_RESET_SCREEN_TO_STOP_ON] Called. last screen to stop on: ", sCMHDZData.iLastScreenToStopOn, " Callstack...")
DEBUG_PRINTCALLSTACK()
#ENDIF
ENDPROC
FUNC BOOL CMHDZ_IS_LEVEL_COMPLETED(CMHDZ_LEVELS level)
RETURN sCMHDZData.bLevelsCompleted[ENUM_TO_INT(level)]
ENDFUNC
FUNC BOOL CMHDZ_ARE_FIRST_FOUR_LEVELS_COMPLETE()
IF NOT CMHDZ_IS_LEVEL_COMPLETED(CMHDZ_LEVEL_CITY)
OR NOT CMHDZ_IS_LEVEL_COMPLETED(CMHDZ_LEVEL_SCRAPYARD)
OR NOT CMHDZ_IS_LEVEL_COMPLETED(CMHDZ_LEVEL_PARK)
OR NOT CMHDZ_IS_LEVEL_COMPLETED(CMHDZ_LEVEL_ASYLUM)
RETURN FALSE
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL CMHDZ_ARE_ALL_LEVELS_COMPLETE()
INT i
REPEAT CMHDZ_MAX_LEVELS i
IF NOT CMHDZ_IS_LEVEL_COMPLETED(INT_TO_ENUM(CMHDZ_LEVELS, i))
RETURN FALSE
ENDIF
ENDREPEAT
RETURN TRUE
ENDFUNC
FUNC BOOL CMHDZ_WAS_ANY_LEVEL_REPLAYED()
INT i
REPEAT CMHDZ_MAX_LEVELS i
IF CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL(), CMHDZ_LEVELS_BIT_REPLAYING_LEVEL)
#IF IS_DEBUG_BUILD
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_INCREASE_CURRENT_LEVEL_SCREEN] {DSW} This level was replayed: ", CMHDZ_LEVELS_TO_STRING(sCMHDZData.eCurrentLevel))
#ENDIF
RETURN TRUE
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_WAS_A_SPECIAL_WEAPON_USED_ON_ANY_LEVEL()
INT i
REPEAT CMHDZ_MAX_LEVELS i
IF CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(INT_TO_ENUM(CMHDZ_LEVELS, i), CMHDZ_LEVELS_BIT_USED_SPECIAL_WEAPON)
#IF IS_DEBUG_BUILD
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_WAS_A_SPECIAL_WEAPON_USED_ON_ANY_LEVEL] {DSW} Special weapon was used on level: ", CMHDZ_LEVELS_TO_STRING(sCMHDZData.eCurrentLevel))
#ENDIF
RETURN TRUE
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL IS_LEVEL_UNLOCKED(CMHDZ_LEVELS level)
#IF IS_DEBUG_BUILD
IF GET_COMMANDLINE_PARAM_EXISTS("sc_BadlandsUnlockLvls") OR (CMHDZ_CMDLINE_UNLOCK_ALL_LEVELS = 1)
RETURN TRUE
ENDIF
#ENDIF
SWITCH level
CASE CMHDZ_LEVEL_CITY
CASE CMHDZ_LEVEL_SCRAPYARD
RETURN TRUE
BREAK
CASE CMHDZ_LEVEL_ASYLUM
RETURN TRUE
// IF sCMHDZData.bLevelsCompleted[0]
// OR sCMHDZData.bLevelsCompleted[1]
// RETURN TRUE
// ENDIF
BREAK
CASE CMHDZ_LEVEL_PARK
// IF sCMHDZData.bLevelsCompleted[1]
// OR sCMHDZData.bLevelsCompleted[2]
RETURN TRUE
// ENDIF
BREAK
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE
IF sCMHDZData.bLevelsCompleted[0]
AND sCMHDZData.bLevelsCompleted[1]
AND sCMHDZData.bLevelsCompleted[2]
AND sCMHDZData.bLevelsCompleted[3]
RETURN TRUE
ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_IS_MENU_OPTION_UNLOCKED(CMHDZ_MENU_OPTIONS option)
SWITCH option
CASE CMHDZ_WANTED_3
RETURN IS_LEVEL_UNLOCKED(CMHDZ_LEVEL_ASYLUM)
CASE CMHDZ_WANTED_4
RETURN IS_LEVEL_UNLOCKED(CMHDZ_LEVEL_PARK)
CASE CMHDZ_WANTED_5
RETURN IS_LEVEL_UNLOCKED(CMHDZ_LEVEL_SLAUGHTERHOUSE)
ENDSWITCH
RETURN TRUE
ENDFUNC
PROC CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_STATE eNewState)
//#IF IS_DEBUG_BUILD
// STRING sCurrentState = CMHDZ_PLAYER_PED_ANIM_STATE_TO_STRING(sCMHDZData.ePlayerPedAnimState)
// STRING sNewState = CMHDZ_PLAYER_PED_ANIM_STATE_TO_STRING(eNewState)
//
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {BAZ} [CMHDZ_PROCESS_PLAYER_PED_ANIMS] CMHDZ_SET_PLAYER_PED_ANIM_STATE: ", sCurrentState, " -> ", sNewState )
//#ENDIF
sCMHDZData.ePlayerPedAnimState = eNewState
ENDPROC
FUNC INT CMHDZ_GET_NUMBER_OF_PLAYERS()
RETURN cmhdzServerBd.iNumPlayers
ENDFUNC
PROC CMHDZ_STORE_RIVAL_PLAYER_PART_ID()
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {BAZ} [CMHDZ_STORE_LOCAL_PLAYER_PART_ID] :", PARTICIPANT_ID_TO_INT())
IF PARTICIPANT_ID_TO_INT() = 0
//IF CMHDZ_IS_LOCAL_PLAYER_IN_LEFT_HAND_CABINET()
sCMHDZData.iRivalPart = 1
ELSE
sCMHDZData.iRivalPart = 0
ENDIF
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {BAZ} [CMHDZ_STORE_RIVAL_PLAYER_PART_ID] :", sCMHDZData.iRivalPart)
ENDPROC
PROC CMHDZ_INIT_SOUND()
INT i
REPEAT CMHDZ_AUDIO_EFFECT_MAX i
sCMHDZData.iSoundId[i] = -1
ENDREPEAT
ENDPROC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Audio scenes
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PROC CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE scene)
SWITCH scene
CASE CMHDZ_AUDIO_SCENE_MENUS
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_AUDIO_SCENE] [CMHDZ_START_AUDIO_SCENE] Starting scene CMHDZ_AUDIO_SCENE_MENUS / dlc_ch_am_CamH_in_menus_scene")
START_AUDIO_SCENE("DLC_Tuner_AM_ch_in_menus_scene")
BREAK
CASE CMHDZ_AUDIO_SCENE_GAMEPLAY
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_AUDIO_SCENE] [CMHDZ_START_AUDIO_SCENE] Starting scene CMHDZ_AUDIO_SCENE_GAMEPLAY / dlc_ch_am_CamH_in_gameplay_scene")
START_AUDIO_SCENE("DLC_Tuner_AM_ch_in_gameplay_scene")
BREAK
CASE CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_AUDIO_SCENE] [CMHDZ_START_AUDIO_SCENE] Starting scene CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE / dlc_ch_badlands_revenge_powerup_active_scene")
START_AUDIO_SCENE("DLC_Tuner_AM_ch_powerup_active_scene")
BREAK
#IF IS_DEBUG_BUILD
CASE CMHDZ_AUDIO_SCENE_FORCE_MACHINE
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {BAZ} [CMHDZ_AUDIO_SCENE] [CMHDZ_START_AUDIO_SCENE] Starting scene CMHDZ_AUDIO_SCENE_FORCE_MACHINE / dlc_ch_arcade_machine_in_use_scene")
START_AUDIO_SCENE("dlc_ch_arcade_machine_in_use_scene")
BREAK
#ENDIF
ENDSWITCH
ENDPROC
PROC CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE scene)
SWITCH scene
CASE CMHDZ_AUDIO_SCENE_MENUS
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_AUDIO_SCENE] [CMHDZ_STOP_AUDIO_SCENE] Stopping scene CMHDZ_AUDIO_SCENE_MENUS / dlc_ch_am_CamH_in_menus_scene")
STOP_AUDIO_SCENE("DLC_Tuner_AM_ch_in_menus_scene")
BREAK
CASE CMHDZ_AUDIO_SCENE_GAMEPLAY
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_AUDIO_SCENE] [CMHDZ_STOP_AUDIO_SCENE] Stopping scene CMHDZ_AUDIO_SCENE_GAMEPLAY / dlc_ch_am_CamH_in_gameplay_scene")
STOP_AUDIO_SCENE("DLC_Tuner_AM_ch_in_gameplay_scene")
BREAK
CASE CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_AUDIO_SCENE] [CMHDZ_STOP_AUDIO_SCENE] Stopping scene CMHDZ_AUDIO_SCENE_GAMEPLAY / dlc_ch_am_CamH_in_gameplay_scene")
STOP_AUDIO_SCENE("DLC_Tuner_AM_ch_powerup_active_scene")
BREAK
ENDSWITCH
ENDPROC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Help Text
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNC BOOL CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BITS eHelp)
RETURN IS_BIT_SET(sCMHDZData.iHelpTextBitset, ENUM_TO_INT(eHelp))
ENDFUNC
PROC CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BITS eHelp)
IF NOT CMHDZ_IS_HELP_TEXT_BIT_SET(eHelp)
// #IF IS_DEBUG_BUILD
// STRING sHelp = CMHDZ_HELP_TEXT_BITS_TO_STRING(eHelp)
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SET_HELP_TEXT_BIT] Setting bit ", sHelp)
// #ENDIF
SET_BIT(sCMHDZData.iHelpTextBitset, ENUM_TO_INT(eHelp))
ENDIF
ENDPROC
PROC CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BITS eHelp)
IF CMHDZ_IS_HELP_TEXT_BIT_SET(eHelp)
// #IF IS_DEBUG_BUILD
// STRING sHelp = CMHDZ_HELP_TEXT_BITS_TO_STRING(eHelp)
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_CLEAR_HELP_TEXT_BIT] Clearing bit ", sHelp)
// #ENDIF
CLEAR_BIT(sCMHDZData.iHelpTextBitset, ENUM_TO_INT(eHelp))
ENDIF
ENDPROC
FUNC FLOAT CMHDZ_GET_TTK_AWARD_TARGET_ACCURACY()
RETURN TO_FLOAT(g_sMptunables.iARCADE_CMHDZ_TTK_SCORE)
ENDFUNC
FUNC INT CMHDZ_GET_FACES_OF_DEATH_AWARD_BRONZE_TARGET_SCORE()
RETURN g_sMptunables.iARCADE_CMHDZ_FACES_OF_DEATH_BRONZE_SCORE
// RETURN 5
ENDFUNC
FUNC INT CMHDZ_GET_FACES_OF_DEATH_AWARD_SILVER_TARGET_SCORE()
RETURN g_sMptunables.iARCADE_CMHDZ_FACES_OF_DEATH_SILVER_SCORE
// RETURN 10
ENDFUNC
FUNC INT CMHDZ_GET_FACES_OF_DEATH_AWARD_GOLD_TARGET_SCORE()
RETURN g_sMptunables.iARCADE_CMHDZ_FACES_OF_DEATH_GOLD_SCORE
// RETURN 20
ENDFUNC
FUNC INT CMHDZ_GET_FACES_OF_DEATH_AWARD_PLATINUM_TARGET_SCORE()
RETURN g_sMptunables.iARCADE_CMHDZ_FACES_OF_DEATH_PLATINUM_SCORE
//RETURN 30
// RETURN CMHDZ_FACES_OF_DEATH_AWARD_PLATINUM_TARGET_SCORE
ENDFUNC
PROC CMHDZ_MAINTAIN_HELP_TEXT()
// IF sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN
// OR sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU
//ARCADE_GAMES_HELP_TEXT_PRINT_FOREVER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_BEARSY)
// Stop help dump
// IF sAGHelpText.bDisplayingHelp
// EXIT
// ENDIF
IF sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_PLAYING
// Don't process if the timer isn't 0.
IF(sAGHelpText.iCurrentHelpTextExpiry - NATIVE_TO_INT(GET_NETWORK_TIME())) > 0.0
EXIT
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_SHOOT_AIM)
//-- Aim / shoot
//ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_AIM_SHOOT)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_HELP_HOW_TO_FIRE)
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_SHOOT_AIM) // PLay after main controls are done.
EXIT
ENDIF
//-- Reload
IF NOT CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_RELOAD)
AND sCMHDZData.sPlayerData[0].bShouldShowReloadPrompt
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_RELOAD)
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_RELOAD)
EXIT
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_THROW)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_THROWING_WEAPONS)
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_THROW) // PLay after main controls are done.
EXIT
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_HEADSHOT)
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT) // PLay after main controls are done.
EXIT
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_DYNAMITE)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_DYNAMITE)
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_DYNAMITE) // PLay after main controls are done.
EXIT
ENDIF
// Only fire microaim help if screen is static.
IF NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_MICROAIM)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_MICRO_AIM_EXPLANATION)
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_MICROAIM) // PLay after main controls are done.
EXIT
ENDIF
ENDIF
// POWER UPS
// Weapons
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_SHOTGUN)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_WEAPON_SHOTGUN)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_WEAPON_SHOTGUN)
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_RIFLE)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_WEAPON_RIFLE)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_WEAPON_RIFLE)
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_NAIL)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_WEAPON_NAIL)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_WEAPON_NAIL)
ENDIF
// Projectiles
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_MOLOTOV)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_THROWING_MOLOTOV)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_THROWING_MOLOTOV)
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_NAILBOMB)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_THROWING_NAILBOMB)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_THROWING_NAILBOMB)
ENDIF
// Powerups
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_PAINKILLERS)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_PAINKILLER)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_PAINKILLER)
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_PILLS)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_PILLS)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_PILLS)
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_BUFF)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_BUFF)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_BUFF)
ENDIF
// Pickups
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_CASH)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_CASH)
ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_CASH, CMHDZ_GET_SCORE_FOR_TYPE(CMHDZ_SCORE_TYPE_CASH))
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_VIDEO)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_VIDEO)
ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_POWER_VIDEO, CMHDZ_GET_SCORE_FOR_TYPE(CMHDZ_SCORE_TYPE_TAPE))
ENDIF
// Final boss
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_BEARSY)
AND NOT IS_ARRAYED_BIT_ENUM_SET(sAGHelpText.iHelpTextBitset, ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_BEARSY)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_BEARSY)
ENDIF
ENDIF
// Awards
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_STRAIGHT_TO_VIDEO)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_STV)
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_STRAIGHT_TO_VIDEO)
EXIT
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_TRAINED_TO_KILL)
ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_TTK, ROUND(CMHDZ_GET_TTK_AWARD_TARGET_ACCURACY()))
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_TRAINED_TO_KILL)
EXIT
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_MONKEY)
ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_MONKEY)
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_MONKEY)
EXIT
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_FOD_GOLD)
ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_FOD, CMHDZ_GET_FACES_OF_DEATH_AWARD_GOLD_TARGET_SCORE())
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_FOD_GOLD)
EXIT
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_FOD_SILVER)
ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_FOD, CMHDZ_GET_FACES_OF_DEATH_AWARD_SILVER_TARGET_SCORE())
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_FOD_SILVER)
EXIT
ENDIF
IF CMHDZ_IS_HELP_TEXT_BIT_SET(CMHDZ_HELP_TEXT_BIT_FOD_BRONZE)
ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_FOD, CMHDZ_GET_FACES_OF_DEATH_AWARD_BRONZE_TARGET_SCORE())
CMHDZ_CLEAR_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_FOD_BRONZE)
EXIT
ENDIF
ENDPROC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Awards
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PROC CMHDZ_AWARD_TRAINED_TO_KILL()
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_TRAINED_TO_KILL, TRUE)
SET_BIT(sCMHDZData.iChallengesBitsetForTelemetry, ENUM_TO_INT(CMHDZ_CHALLENGE_TRAINED_TO_KILL))
CMHDZ_PLAY_DIRECTOR_DIALOGUE_NO_RELEASE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TTK)
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_CAMHEDZ_TTK)
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_TRAINED_TO_KILL)
//SCRIPT_ASSERT("[CMHDZ][BAZ] CMHDZ_AWARD_TRAINED_TO_KILL")
ENDPROC
PROC CMHDZ_AWARD_STRAIGHT_TO_VIDEO()
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_STRAIGHT_TO_VIDEO, TRUE)
SET_BIT(sCMHDZData.iChallengesBitsetForTelemetry, ENUM_TO_INT(CMHDZ_CHALLENGE_STRAIGHT_TO_VIDEO))
IF NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TTK)
CMHDZ_PLAY_DIRECTOR_DIALOGUE_NO_RELEASE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_STV)
ENDIF
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_CAMHEDZ_STV)
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_STRAIGHT_TO_VIDEO)
//SCRIPT_ASSERT("[CMHDZ][BAZ] CMHDZ_AWARD_STRAIGHT_TO_VIDEO")
ENDPROC
PROC CMHDZ_AWARD_FACES_OF_DEATH(INT iValue, BOOL bWonPlatinum)
//SCRIPT_ASSERT("[CMHDZ][BAZ] CMHDZ_AWARD_FACES_OF_DEATH")
SET_MP_INT_CHARACTER_AWARD(MP_AWARD_FACES_OF_DEATH,iValue)
IF bWonPlatinum
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_CAMHEDZ_FOD)
IF NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_STV)
AND NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TTK)
CMHDZ_PLAY_DIRECTOR_DIALOGUE_NO_RELEASE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_FOD)
ENDIF
ENDIF
ENDPROC
PROC CMHDZ_AWARD_MONKEY_C_MONKEY_DIE()
//SCRIPT_ASSERT("[CMHDZ][BAZ] CMHDZ_AWARD_MONKEY_C_MONKEY_DIE")
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_MONKEY_C_MONKEY_DO, TRUE)
IF NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_FOD)
AND NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_STV)
AND NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TTK)
CMHDZ_PLAY_DIRECTOR_DIALOGUE_NO_RELEASE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_MSMD)
ENDIF
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_MONKEY)
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_CAMHEDZ_MCM)
ENDPROC
PROC CMHDZ_AWARD_THE_DIRECTOR()
//SCRIPT_ASSERT("[CMHDZ][BAZ] CMHDZ_AWARD_THE_DIRECTOR")
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_CAMHEDZ_TD)
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_DIRECTOR, TRUE)
IF NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_MSMD)
AND NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_FOD)
AND NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_STV)
AND NOT CMHDZ_HAS_SOUND_BEEN_TRIGGERED(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TTK)
CMHDZ_PLAY_DIRECTOR_DIALOGUE_NO_RELEASE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Award_TD)
ENDIF
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_DIRECTOR)
ENDPROC
PROC CMHDZ_MAINTAIN_PLAYER_AWARDS()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Called...")
//-- Kev says the rp is handled at his side
BOOL bMonkeyAwarded = FALSE
BOOL bTrainedToKillAwarded = FALSE
BOOL bStraightToVideoAwarded = FALSE
BOOL bTheDirectorAwarded = FALSE
BOOL bFacesOfDeathAwarded = FALSE
//-- SET_MP_INT_CHARACTER_AWARD(MP_AWARD_FACES_OF_DEATH) // // Kill X Eagles across all levels of Light Gun Game.
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Check MP_AWARD_FACES_OF_DEATH:")
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Bronze target: ", CMHDZ_GET_FACES_OF_DEATH_AWARD_BRONZE_TARGET_SCORE())
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Silver target: ", CMHDZ_GET_FACES_OF_DEATH_AWARD_SILVER_TARGET_SCORE())
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Gold target: ", CMHDZ_GET_FACES_OF_DEATH_AWARD_GOLD_TARGET_SCORE())
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Platinum target: ", CMHDZ_GET_FACES_OF_DEATH_AWARD_PLATINUM_TARGET_SCORE())
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Birds killed: ", iBirdsShot)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Stat value: ", iFACES_OF_DEATH)
BOOL bCanAwardGold, bAwardGold
BOOL bCanAwardSilver, bAwardSilver
BOOL bCanAwardBronze, bAwardBronze
FLOAT fAccuracy = CMHDZ_GET_PLAYER_ACCURACY_FOR_ALL_LEVELS()
FLOAT fTargetAccuracy = CMHDZ_GET_TTK_AWARD_TARGET_ACCURACY()
IF NOT GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_TRAINED_TO_KILL)
//IF CMHDZ_ARE_ALL_LEVELS_COMPLETE()
IF NOT CMHDZ_WAS_ANY_LEVEL_REPLAYED()
IF fAccuracy > fTargetAccuracy
CMHDZ_AWARD_TRAINED_TO_KILL()
//bTrainedToKillAwarded = TRUE
//CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_TRAINED_TO_KILL)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] {DSW} Awarding MP_AWARD_DEADEYE fAccuracy: ", fAccuracy)
ELSE
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_DEADEYE as accuracy:", fAccuracy)
ENDIF
ELSE
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_DEADEYE as a level was replayed")
ENDIF
// ELSE
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_DEADEYE as not CMHDZ_ARE_ALL_LEVELS_COMPLETE")
// ENDIF
ENDIF
bTrainedToKillAwarded = GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_TRAINED_TO_KILL)
//-- Complete Light Gun Game using only pistols.
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS]")
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Check MP_AWARD_PISTOLSATDAWN:")
IF NOT GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_STRAIGHT_TO_VIDEO)
IF CMHDZ_ARE_ALL_LEVELS_COMPLETE()
IF NOT CMHDZ_WAS_ANY_LEVEL_REPLAYED()
IF NOT CMHDZ_WAS_A_SPECIAL_WEAPON_USED_ON_ANY_LEVEL()
CMHDZ_AWARD_STRAIGHT_TO_VIDEO()
//CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_STRAIGHT_TO_VIDEO)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] {DSW} Awarding MP_AWARD_PISTOLSATDAWN. ")
ELSE
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_PISTOLSATDAWN as CMHDZ_WAS_A_SPECIAL_WEAPON_USED_ON_ANY_LEVEL")
ENDIF
ELSE
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_PISTOLSATDAWN as CMHDZ_WAS_ANY_LEVEL_REPLAYED")
ENDIF
ELSE
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_PISTOLSATDAWN as not CMHDZ_ARE_ALL_LEVELS_COMPLETE")
ENDIF
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Already awarded MP_AWARD_PISTOLSATDAWN")
ENDIF
bStraightToVideoAwarded = GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_STRAIGHT_TO_VIDEO)
// Faces of Death
INT iHeadshotCount
iHeadshotCount += sCMHDZData.iTotalLevelEnemyHeadShots[CMHDZ_LEVEL_CITY]
iHeadshotCount += sCMHDZData.iTotalLevelEnemyHeadShots[CMHDZ_LEVEL_SCRAPYARD]
iHeadshotCount += sCMHDZData.iTotalLevelEnemyHeadShots[CMHDZ_LEVEL_ASYLUM]
iHeadshotCount += sCMHDZData.iTotalLevelEnemyHeadShots[CMHDZ_LEVEL_PARK]
iHeadshotCount += sCMHDZData.iTotalLevelEnemyHeadShots[CMHDZ_LEVEL_SLAUGHTERHOUSE]
INT iFODOldValue = GET_MP_INT_CHARACTER_AWARD(MP_AWARD_FACES_OF_DEATH)
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] FACES_OF_DEATH new total: ", iHeadshotCount, " Old: ",iFODOldValue)
IF iHeadshotCount > iFODOldValue
IF iHeadshotCount >= CMHDZ_GET_FACES_OF_DEATH_AWARD_PLATINUM_TARGET_SCORE()
SET_BIT(sCMHDZData.iChallengesBitsetForTelemetry, ENUM_TO_INT(CMHDZ_CHALLENGE_FACES_OF_DEATH_PLATINUM))
CMHDZ_AWARD_FACES_OF_DEATH(iHeadshotCount, TRUE)
ELSE
//-- Can only give an award if the old toltal was below the threshhold score for that award
IF iFODOldValue < CMHDZ_GET_FACES_OF_DEATH_AWARD_GOLD_TARGET_SCORE()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Sharshooter: bCanAwardGold set")
bCanAwardGold = TRUE
ENDIF
IF iFODOldValue < CMHDZ_GET_FACES_OF_DEATH_AWARD_SILVER_TARGET_SCORE()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Sharshooter: bCanAwardSilver set")
bCanAwardSilver = TRUE
ENDIF
IF iFODOldValue < CMHDZ_GET_FACES_OF_DEATH_AWARD_BRONZE_TARGET_SCORE()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Sharshooter: bCanAwardBronze Set")
bCanAwardBronze = TRUE
ENDIF
IF bCanAwardGold
IF iHeadshotCount >= CMHDZ_GET_FACES_OF_DEATH_AWARD_GOLD_TARGET_SCORE()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Sharshooter: bAwardGold set")
bAwardGold = TRUE
ENDIF
ENDIF
IF bCanAwardSilver
IF iHeadshotCount >= CMHDZ_GET_FACES_OF_DEATH_AWARD_SILVER_TARGET_SCORE()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Sharshooter: bAwardSilver set")
bAwardSilver = TRUE
ENDIF
ENDIF
IF bCanAwardBronze
IF iHeadshotCount >= CMHDZ_GET_FACES_OF_DEATH_AWARD_BRONZE_TARGET_SCORE()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Sharshooter: bAwardBronze set")
bAwardBronze = TRUE
ENDIF
ENDIF
IF bAwardGold
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_FOD_GOLD)
SET_BIT(sCMHDZData.iChallengesBitsetForTelemetry, ENUM_TO_INT(CMHDZ_CHALLENGE_FACES_OF_DEATH_GOLD))
ELIF bAwardSilver
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_FOD_SILVER)
SET_BIT(sCMHDZData.iChallengesBitsetForTelemetry, ENUM_TO_INT(CMHDZ_CHALLENGE_FACES_OF_DEATH_SILVER))
ELIF bAwardBronze
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_FOD_BRONZE)
SET_BIT(sCMHDZData.iChallengesBitsetForTelemetry, ENUM_TO_INT(CMHDZ_CHALLENGE_FACES_OF_DEATH_BRONZE))
ENDIF
CMHDZ_AWARD_FACES_OF_DEATH(iHeadshotCount, FALSE)
ENDIF
ENDIF
// Passed the platinum threshold.
IF GET_MP_INT_CHARACTER_AWARD(MP_AWARD_FACES_OF_DEATH) > CMHDZ_GET_FACES_OF_DEATH_AWARD_PLATINUM_TARGET_SCORE()
bFacesOfDeathAwarded = TRUE
ENDIF
// IF NOT GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_FACES_OF_DEATH)
// GET_MP_INT_CHARACTER_AWARD(MP_AWARD_FACES_OF_DEATH)
// ENDIF
IF CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(CMHDZ_LEVEL_CITY, CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_MONKEY_KILL)
AND CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(CMHDZ_LEVEL_SCRAPYARD, CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_BUNNY_KILL)
AND CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(CMHDZ_LEVEL_ASYLUM, CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_BUNNY_KILL)
AND CMHDZ_IS_LEVEL_BIT_SET_FOR_LEVEL(CMHDZ_LEVEL_PARK, CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_MONKEY_KILL)
IF NOT GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_MONKEY_C_MONKEY_DO)
CMHDZ_AWARD_MONKEY_C_MONKEY_DIE()
SET_BIT(sCMHDZData.iChallengesBitsetForTelemetry, ENUM_TO_INT(CMHDZ_CHALLENGE_MONKEY_C_MONKEY_DIE))
ENDIF
ENDIF
// Check reward
bMonkeyAwarded = GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_MONKEY_C_MONKEY_DO)
// The Director
IF CMHDZ_IS_STAR_RATING_5_FOR_ALL_LEVELS()
IF NOT GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_DIRECTOR)
CMHDZ_AWARD_THE_DIRECTOR()
SET_BIT(sCMHDZData.iChallengesBitsetForTelemetry, ENUM_TO_INT(CMHDZ_CHALLENGE_THE_DIRECTOR))
ENDIF
ENDIF
bTheDirectorAwarded = GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_DIRECTOR)
//-- T-shirt / trophy for completing everything
BOOL bOwnsPenthouse
IF bStraightToVideoAwarded
AND bTrainedToKillAwarded
AND bTheDirectorAwarded
AND bMonkeyAwarded
AND bFacesOfDeathAwarded
bOwnsPenthouse = DOES_PLAYER_OWN_A_CASINO_APARTMENT(PLAYER_ID())
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_MAINTAIN_PLAYER_AWARDS] Everything achieved, unlocking final t-shirt / trophy. Penthouse? ", bOwnsPenthouse)
IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_AWARD_BEARSY_MASK)
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TROPHY_HELP(ARCADE_GAME_TROPHY_CAMHEDZ, bOwnsPenthouse)
SET_PACKED_STAT_BOOL(PACKED_MP_AWARD_BEARSY_MASK, TRUE)
ENDIF
sCMHDZData.bWonTrophyThisSession = TRUE
ENDIF
ENDPROC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Util
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNC BOOL CMHDZ_SHOULD_REMOVE_COVER_WHEN_OFF_SCREEN(INT iCover)
UNUSED_PARAMETER(iCover)
//CMHDZ_ASSET_TYPES eType = sCMHDZData.sCoverData[iCover].eType
// Delete if from repeat if we're near the end of the loop
IF sCMHDZData.iCurrentScreen + 2 >= CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL()
RETURN TRUE
ENDIF
IF IS_BITMASK_ENUM_AS_ENUM_SET(sCMHDZData.sCoverData[iCover].eDataBits, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN)
RETURN TRUE
ENDIF
SWITCH sCMHDZData.sCoverData[iCover].eType
// CASE CMHDZ_ASSET_OUTHOUSE
CASE CMHDZ_ASSET_PIG
IF sCMHDZData.sCoverData[iCover].iHitCount > 0
RETURN TRUE
ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_COVER_UTIL_IS_TYPE_BUILDING(CMHDZ_ASSET_TYPES eCover)
RETURN (CMHDZ_COVER_UTIL_IS_TYPE_LARGE_BUILDING(eCover) OR CMHDZ_COVER_UTIL_IS_TYPE_SMALL_BUILDING(eCover))
ENDFUNC
FUNC BOOL CMHDZ_COVER_UTIL_SHOULD_CHECK_FOR_PED_BEHIND_TYPE(CMHDZ_ASSET_TYPES eCover)
SWITCH eCover
CASE CMHDZ_ASSET_PIG
CASE CMHDZ_ASSET_WATER_TOWER
CASE CMHDZ_ASSET_CITY_BUILDING_1
CASE CMHDZ_ASSET_CITY_BUILDING_2
CASE CMHDZ_ASSET_CITY_BUILDING_3
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_1
CASE CMHDZ_ASSET_THEMEPARK_TREE_1
CASE CMHDZ_ASSET_THEMEPARK_TREE_2
CASE CMHDZ_ASSET_THEMEPARK_TREE_3
CASE CMHDZ_ASSET_THEMEPARK_TREE_4
CASE CMHDZ_ASSET_BARRIER
CASE CMHDZ_ASSET_MEATGRINDER_1
CASE CMHDZ_ASSET_MEATGRINDER_2
CASE CMHDZ_ASSET_BODYBAG_3
CASE CMHDZ_ASSET_BODYBAG_2
CASE CMHDZ_ASSET_BODYBAG_1
// CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_2
// CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_3
// CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_4
// CASE CMHDZ_ASSET_THEMEPARK_BUILDING_1
RETURN TRUE
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC FLOAT CMHDZ_COVER_UTIL_GET_TYPE_SCALE_FOR_LANE(CMHDZ_ASSET_TYPES eType, INT iLane)
FLOAT fScale = 1.0
UNUSED_PARAMETER(eType)
SWITCH iLane
CASE ciCMHDZ_LANE_BACKGROUND
fScale = 0.75
BREAK
CASE ciCMHDZ_LANE_FOREGROUND
fScale = 2.5
BREAK
CASE ciCMHDZ_LANE_POPUP_RHS
CASE ciCMHDZ_LANE_POPUP_LHS
fScale = 0.75
BREAK
ENDSWITCH
RETURN fScale
ENDFUNC
PROC SET_ENEMY_NEW_STOPPING_POINT_AFTER_BLOCKED_COVER(INT iEnemy, INT iBlockingCover)
FLOAT fCoverWidth = sCMHDZData.sCoverData[iBlockingCover].fCoverWidth
FLOAT fNewXOffset
//FLOAT fScale
// FLOAT fTemp1
//FLOAT fTemp2
// FLOAT fEnemyX = sCMHDZData.sEnemyData[iEnemy].vSpritePos.x
// FLOAT fEnemyWidth = sCMHDZData.sEnemyData[iEnemy].vSize.x
INT iLane = sCMHDZData.sEnemyData[iEnemy].iEnemyLane
BOOL bReverse = CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_REVERSE)
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [SET_ENEMY_NEW_STOPPING_POINT_AFTER_BLOCKED_COVER] {dsw} ")
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [SET_ENEMY_NEW_STOPPING_POINT_AFTER_BLOCKED_COVER] {dsw} Enemy: ",iEnemy, " Old Stopping pos: ", sCMHDZData.sEnemyData[iEnemy].fStoppingX, " Lane: ",sCMHDZData.sEnemyData[iEnemy].iEnemyLane, " Type:", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType)," Blocked by cover. ", iBlockingCover, " Cover Type: ", CMHDZ_ASSET_TYPES_TO_STRING(sCMHDZData.sCoverData[iBlockingCover].eType), " Width / 2: ", (fCoverWidth/2.0))
#ENDIF
SWITCH CMHDZ_GET_CURRENT_LEVEL()
CASE CMHDZ_LEVEL_ASYLUM
fNewXOffset = cfBASE_SCREEN_WIDTH
IF NOT bReverse
sCMHDZData.sEnemyData[iEnemy].fStoppingX -= fNewXOffset
ELSE
sCMHDZData.sEnemyData[iEnemy].fStoppingX += fNewXOffset
ENDIF
BREAK
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE
IF iLane = ciCMHDZ_LANE_BACKGROUND
IF bReverse
sCMHDZData.sEnemyData[iEnemy].fStoppingX += 16.0 //(fEnemyX - fTemp2) - fEnemyWidth
ELSE
sCMHDZData.sEnemyData[iEnemy].fStoppingX -= 20.0 //(fTemp1 - fEnemyX) + fEnemyWidth
ENDIF
ELIF iLane = ciCMHDZ_LANE_MIDDLE
IF bReverse
sCMHDZData.sEnemyData[iEnemy].fStoppingX += 11.0 //(fEnemyX - fTemp2) - fEnemyWidth
ELSE
sCMHDZData.sEnemyData[iEnemy].fStoppingX -= 15.0 //(fTemp1 - fEnemyX) + fEnemyWidth
ENDIF
ENDIF
BREAK
DEFAULT
fNewXOffset = fCoverWidth * 0.75
IF NOT bReverse
sCMHDZData.sEnemyData[iEnemy].fStoppingX -= fNewXOffset
ELSE
sCMHDZData.sEnemyData[iEnemy].fStoppingX += fNewXOffset
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [SET_ENEMY_NEW_STOPPING_POINT_AFTER_BLOCKED_COVER] {dsw} Reverse: ", bReverse, " New stopping pos: ", sCMHDZData.sEnemyData[iEnemy].fStoppingX, " Current Pos: ", sCMHDZData.sEnemyData[iEnemy].vSpritePos.x)
#ENDIF
ENDPROC
FUNC BOOL CMHDZ_IS_COORD_BLOCKED_BY_COVER(INT iLane, FLOAT fXCoord, INT &iBlockingCover)
INT i
#IF IS_DEBUG_BUILD
// FLOAT fTemp1, fTemp2
#ENDIF
FLOAT fScale
REPEAT ciCMHDZ_MAX_COVER i
IF sCMHDZData.sCoverData[i].iCoverLane = iLane
IF CMHDZ_COVER_UTIL_SHOULD_CHECK_FOR_PED_BEHIND_TYPE(sCMHDZData.sCoverData[i].eType)
fScale = CMHDZ_COVER_UTIL_GET_TYPE_SCALE_FOR_LANE(sCMHDZData.sCoverData[i].eType, iLane)
#IF IS_DEBUG_BUILD
IF sCMHDZData.sCoverData[i].eType = CMHDZ_ASSET_PIG
// fTemp1 = sCMHDZData.sCoverData[i].vSpritePos.x + ((sCMHDZData.sCoverData[i].fCoverWidth * fScale) / 2.0)
// fTemp2 = sCMHDZData.sCoverData[i].vSpritePos.x - ((sCMHDZData.sCoverData[i].fCoverWidth * fScale) / 2.0)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_IS_COORD_BLOCKED_BY_COVER] Checking PIG ", i, " Lane: ", iLane, " Pos: ", sCMHDZData.sCoverData[i].vSpritePos.x, " +Width/2: ", fTemp1, " -Width/2: ", fTemp2, " Compare with ", fXCoord)
ELIF sCMHDZData.sCoverData[i].eType = CMHDZ_ASSET_THEMEPARK_TREE_2
// fTemp1 = sCMHDZData.sCoverData[i].vSpritePos.x + ((sCMHDZData.sCoverData[i].fCoverWidth * fScale) / 2.0)
// fTemp2 = sCMHDZData.sCoverData[i].vSpritePos.x - ((sCMHDZData.sCoverData[i].fCoverWidth * fScale) / 2.0)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_IS_COORD_BLOCKED_BY_COVER] Checking TREE2 ", i, " Lane: ", iLane, " Pos: ", sCMHDZData.sCoverData[i].vSpritePos.x, " +Width/2: ", fTemp1, " -Width/2: ", fTemp2, " Compare with ", fXCoord)
ENDIF
#ENDIF
FLOAT fMaxCover = sCMHDZData.sCoverData[i].vSpritePos.x + ((sCMHDZData.sCoverData[i].fCoverWidth * fScale) / 2.0)
FLOAT fMinCover = sCMHDZData.sCoverData[i].vSpritePos.x - ((sCMHDZData.sCoverData[i].fCoverWidth * fScale) / 2.0)
IF fXCoord >= fMinCover AND fXCoord <= fMaxCover
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_IS_COORD_BLOCKED_BY_COVER] {DSW} X Coord ", fXCoord, " Lane: ", iLane, " Blocked by cover ", i, " Type: ", CMHDZ_ASSET_TYPES_TO_STRING(sCMHDZData.sCoverData[i].eType), " Cover X pos:", sCMHDZData.sCoverData[i].vSpritePos.x, " Width / 2: ", ((sCMHDZData.sCoverData[i].fCoverWidth * fScale) / 2.0))
#ENDIF
iBlockingCover = i
RETURN TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
ELSE
IF sCMHDZData.sCoverData[i].eType = CMHDZ_ASSET_PIG
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_IS_COORD_BLOCKED_BY_COVER] Not Checking CMHDZ_ASSET_PIG", i, " as cover lane ", sCMHDZData.sCoverData[i].iCoverLane, " <> ", iLane)
ELIF sCMHDZData.sCoverData[i].eType = CMHDZ_ASSET_THEMEPARK_TREE_2
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_IS_COORD_BLOCKED_BY_COVER] Not Checking TREE2", i, " as cover lane ", sCMHDZData.sCoverData[i].iCoverLane, " <> ", iLane)
ENDIF
#ENDIF
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_COVER_UTIL_IS_TYPE_SUITABLE_FOR_COVER(CMHDZ_ASSET_TYPES eType)
SWITCH eType
CASE CMHDZ_ASSET_BARRELS
CASE CMHDZ_ASSET_FENCE
CASE CMHDZ_ASSET_ROCK_SMALL
CASE CMHDZ_ASSET_ROCK_LARGE
CASE CMHDZ_ASSET_BUSH_2
CASE CMHDZ_ASSET_SPECIAL_TNT_BARREL_1
CASE CMHDZ_ASSET_FOREGROUND_TRASH
RETURN TRUE
BREAK
CASE CMHDZ_ASSET_MEATGRINDER_1
CASE CMHDZ_ASSET_MEATGRINDER_2
RETURN TRUE
BREAK
CASE CMHDZ_ASSET_BUSH_1
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_IS_POSITION_ON_SCREEN(VECTOR_2D vPos, FLOAT fTolerance = 0.0)
FLOAT fMinOnScreen = cfLEFT_SCREEN_LIMIT + fTolerance
FLOAT fMaxOnScreen = cfRIGHT_SCREEN_LIMIT - fTolerance
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_IS_POSITION_ON_SCREEN] ")
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_IS_POSITION_ON_SCREEN] fMinOnScreen: ",fMinOnScreen, " fMaxOnScreen: ", fMaxOnScreen)
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_IS_POSITION_ON_SCREEN] vPos.x : ", vPos.x )
RETURN (vPos.x > fMinOnScreen AND vPos.x < fMaxOnScreen)
ENDFUNC
FUNC BOOL CMHDZ_IS_COVER_ON_SCREEN(INT iCover, FLOAT fTolerance = 0.0)
RETURN CMHDZ_IS_POSITION_ON_SCREEN(sCMHDZData.sCoverData[iCover].vSpritePos, fTolerance)
ENDFUNC
FUNC BOOL CMHDZ_IS_ENEMY_ON_SCREEN(INT iEnemy, FLOAT fTolerance = 0.0)
RETURN CMHDZ_IS_POSITION_ON_SCREEN(sCMHDZData.sEnemyData[iEnemy].vSpritePos, fTolerance)
ENDFUNC
/// PURPOSE:
/// As the enemy ped passes scenery, check if the scenery can be used as 'cover'
/// PARAMS:
/// iCover -
/// iEnemy -
/// RETURNS:
///
FUNC BOOL CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE(INT iCover, INT iEnemy)
IF sCMHDZData.sEnemyData[iEnemy].iEnemyLane = ciCMHDZ_LANE_FOREGROUND
RETURN FALSE
ENDIF
IF CMHDZ_COVER_DATA_IS_BITMASK_SET(iCover, CMHDZ_COVER_DATA_BITS_IS_FAR_BG)
RETURN FALSE
ENDIF
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " Cover: ", iCover)
CMHDZ_ASSET_TYPES eCover = sCMHDZData.sCoverData[iCover].eType
//-- Can't use cover that's in a different lane
IF sCMHDZData.sEnemyData[iEnemy].iEnemyLane != sCMHDZData.sCoverData[iCOver].iCoverLane
////CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", CMHDZ_ASSET_TYPES_TO_STRING(eCover), " Lane doesn't match. Enemy Lane: ", sCMHDZData.sEnemyData[iEnemy].iEnemyLane, " Cover Lane :", sCMHDZData.sCoverData[iCOver].iCoverLane)
RETURN FALSE
ENDIF
//-- Some cover types not suitable for cover
IF NOT CMHDZ_COVER_UTIL_IS_TYPE_SUITABLE_FOR_COVER(eCover)
////CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", CMHDZ_ASSET_TYPES_TO_STRING(eCover), " Type not suitable for cover ")
RETURN FALSE
ENDIF
VECTOR_2D vEnemy = sCMHDZData.sEnemyData[iEnemy].vSpritePos
VECTOR_2D vCover = sCMHDZData.sCoverData[iCover].vSpritePos
FLOAT fCoverWidth = sCMHDZData.sCoverData[iCover].fCoverWidth
FLOAT fMaxCover
FLOAT fMinCover
FLOAT fScale = CMHDZ_COVER_UTIL_GET_TYPE_SCALE_FOR_LANE(eCover, sCMHDZData.sCoverData[iCOver].iCoverLane)
fCoverWidth *= fScale
FLOAT fYDiff = ABSF(vEnemy.y - vCover.y)
IF NOT CMHDZ_IS_COVER_ON_SCREEN(iCover)
////CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", CMHDZ_ASSET_TYPES_TO_STRING(eCover), " Cover not on screen")
RETURN FALSE
ENDIF
BOOL bFromLeft = CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_REVERSE)
//-- Don't stop too close to cover that's just appeared / about to leave the screen
IF bFromLeft
IF vCover.x < cfBASE_SCREEN_WIDTH / 3.0
////CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", CMHDZ_ASSET_TYPES_TO_STRING(eCover), " as enemy coming from left and cover < cfBASE_SCREEN_WIDTH / 3")
RETURN FALSE
ENDIF
ELSE
IF vCover.x > cfRIGHT_SCREEN_LIMIT - 100
////CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", CMHDZ_ASSET_TYPES_TO_STRING(eCover), " as enemy coming from right and cover nearly at RHS")
RETURN FALSE
ENDIF
ENDIF
//-- Cover in the same lane should have a similar Y position to enemies in the same lane. Occasionally doesn't, mainly for draw-order reasons,
//-- so don't use any cover where there is a large difference in the y position
IF fYDiff > 175.0
////CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", CMHDZ_ASSET_TYPES_TO_STRING(eCover), " Y Diff too great: ", fYDiff)
RETURN FALSE
ENDIF
//-- Check if we're actually passing any cover
fMaxCover = (vCover.x + ( fCoverWidth / 2.0) )// + 10.0
fMinCover = (vCover.x - ( fCoverWidth / 2.0 ))// - 10.0
IF vEnemy.x > fMinCover
AND vEnemy.x < fMaxCover
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] [CMHDZ_HANDLE_ENEMIES] Enemy ", iEnemy, " Stopping to use cover ", iCover, " Cover type: ", CMHDZ_ASSET_TYPES_TO_STRING(eCover), " Enemy pos: ", sCMHDZData.sEnemyData[iEnemy].vSpritePos.x)
#ENDIF
RETURN TRUE
ELSE
////CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", CMHDZ_ASSET_TYPES_TO_STRING(eCover), " Xpos not sufficient. Enemy x: ", vEnemy.x, " Cover Min: ", fMinCover, " Cover Max: ", fMaxCover)
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL CMHDZ_SHOULD_COUNT_ENEMY_AS_ALIVE(INT iEnemy)
IF sCMHDZData.sEnemyData[iEnemy].eState != CMHDZ_ENEMY_STATE_INACTIVE
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC INT CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_SCREEN()
INT i, iCount
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES - 1
// IF CMHDZ_SHOULD_COUNT_ENEMY_AS_ALIVE(i)
// CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_SCREEN - Enemy Alive position X", sCMHDZData.sEnemyData[i].vSpritePos.x)
// ENDIF
IF sCMHDZData.sEnemyData[i].fPointToAppear <= sCMHDZData.fOverallLevelProgression
//AND sCMHDZData.sEnemyData[i].fPointToAppear >= sCMHDZData.fOverallLevelProgression + ((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2)
AND CMHDZ_SHOULD_COUNT_ENEMY_AS_ALIVE(i)
iCount ++
ENDIF
ENDFOR
RETURN iCount
ENDFUNC
FUNC INT CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_LEVEL()
INT i, iCount
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES - 1
IF CMHDZ_SHOULD_COUNT_ENEMY_AS_ALIVE(i)
iCount ++
ENDIF
ENDFOR
RETURN iCount
ENDFUNC
FUNC INT CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_SCREEN()
INT i, iCount
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES - 1
IF CMHDZ_SHOULD_COUNT_ENEMY_AS_ALIVE(i)
AND sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.sEnemyData[i].fPointToAppear / cfCMHDZ_SCREEN_LENGTH)
AND CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)
iCount ++
ENDIF
IF sCMHDZData.iCurrentScreen >= CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL() - 1
AND CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ][BAZ] CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_SCREEN - ", iCount)
ENDIF
ENDFOR
// Adding 1 for if Boss enemy is alive
IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_SLAUGHTERHOUSE
AND sCMHDZData.sBossData.eCurrentBossState != CMHDZ_BOSS_STATE_FINAL
AND sCMHDZData.iCurrentScreen >= CMHDZ_GET_FINAL_SCREEN_IN_LEVEL(CMHDZ_LEVEL_SLAUGHTERHOUSE)
iCount ++
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ][BAZ] CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_SCREEN - Adding Boss iCount: ", iCount)
ENDIF
RETURN iCount
ENDFUNC
FUNC INT CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_PHASE()
IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_SLAUGHTERHOUSE
AND CMHDZ_GET_CURRENT_LEVEL_SCREEN() >= CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL()
AND sCMHDZData.sBossData.eCurrentBossState != CMHDZ_BOSS_STATE_WAIT_FOR_ALL_ENEMIES_DEAD
RETURN 1
ENDIF
INT i, iCount
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES - 1
IF sCMHDZData.sEnemyData[i].iStaticScreenPhase > 0
AND sCMHDZData.iStaticScreenPhase = sCMHDZData.sEnemyData[i].iStaticScreenPhase
AND sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.sEnemyData[i].fPointToAppear / cfCMHDZ_SCREEN_LENGTH)
AND CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)
AND CMHDZ_SHOULD_COUNT_ENEMY_AS_ALIVE(i)
iCount ++
ENDIF
ENDFOR
IF iCount > 0
CDEBUG2LN(DEBUG_MINIGAME, "CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_PHASE - iCount: ", iCount)
ENDIF
RETURN iCount
ENDFUNC
FUNC FLOAT CMHDZ_GET_ENEMY_TYPE_SCALE_FOR_LANE(INT iLane)
FLOAT fScale = 1.0
IF iLane = ciCMHDZ_LANE_BACKGROUND
fScale = 0.9
ELIF iLane = ciCMHDZ_LANE_MIDDLE
fScale = 1.2
ELIF iLane = ciCMHDZ_LANE_FOREGROUND
fScale = 1.2
ELIF iLane = ciCMHDZ_LANE_POPUP_RHS
OR iLane = ciCMHDZ_LANE_POPUP_LHS
fScale = 0.9
ENDIF
RETURN fScale
ENDFUNC
PROC CMHDZ_KILL_ALL_ENEMIES_IN_RANGE(VECTOR_2D vPos, FLOAT fMaxDist = 250.0)
INT i
VECTOR_2D vEnemyPos
FLOAT fXDist
FLOAT fYDist
FLOAT fDist2
BOOL bKilledEnemy
REPEAT ciCMHDZ_MAX_ENEMIES i
IF sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING
// IF sCMHDZData.sEnemyData[i].iEnemyType != CMHDZ_OUTHOUSE_ENEMY
vEnemyPos = sCMHDZData.sEnemyData[i].vSpritePos
fXDist = vEnemyPos.x - vPos.x
fYDist = vEnemyPos.y - vPos.y
fDist2 = (fXDist * fXDist) + (fYDist * fYDist)
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_KILL_ALL_ENEMIES_IN_RANGE] {DSW} Checking Enemy ", i, " Dist: ", SQRT(fDist2))
IF (fDist2 <= (fMaxDist * fMaxDist))
// IF vEnemyPos.x >= x1 AND vEnemyPos.y >= y1
// IF vEnemyPos.x <= x2 AND vEnemyPos.y <= y2
sCMHDZData.sEnemyData[i].iHealth = 0
sCMHDZData.sEnemyData[i].fAnimTimer = 0.0
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_DYING_BURNING // If the projectile type is a Molotov
CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE(CMHDZ_SCORE_TYPE_ENEMY_EXPLOSION)
bKilledEnemy = TRUE
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_KILL_ALL_ENEMIES_IN_RANGE] {dsw} Enemy ", i, " set as Dying as killed by explosion. Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType))
#ENDIF
// ENDIF
ENDIF
// ENDIF
ENDIF
ENDREPEAT
// Just one to avoid sound clipping
IF bKilledEnemy
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_ENEMY_ON_FIRE)
ENDIF
ENDPROC
PROC CMHDZ_KILL_ALL_ENEMIES_IN_RANGE_NO_SCORE(VECTOR_2D vPos, FLOAT fMaxDist = 2000.0)
INT i
VECTOR_2D vEnemyPos
FLOAT fXDist
FLOAT fYDist
FLOAT fDist2
REPEAT ciCMHDZ_MAX_ENEMIES i
IF sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING
// IF sCMHDZData.sEnemyData[i].iEnemyType != CMHDZ_OUTHOUSE_ENEMY
vEnemyPos = sCMHDZData.sEnemyData[i].vSpritePos
fXDist = vEnemyPos.x - vPos.x
fYDist = vEnemyPos.y - vPos.y
fDist2 = (fXDist * fXDist) + (fYDist * fYDist)
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_KILL_ALL_ENEMIES_IN_RANGE] {DSW} Checking Enemy ", i, " Dist: ", SQRT(fDist2))
IF (fDist2 <= (fMaxDist * fMaxDist))
// IF vEnemyPos.x >= x1 AND vEnemyPos.y >= y1
// IF vEnemyPos.x <= x2 AND vEnemyPos.y <= y2
sCMHDZData.sEnemyData[i].iHealth = 0
sCMHDZData.sEnemyData[i].fAnimTimer = 0.0
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_DYING // If the projectile type is a Molotov
//CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE(CMHDZ_SCORE_TYPE_ENEMY_EXPLOSION)
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_KILL_ALL_ENEMIES_IN_RANGE] {dsw} Enemy ", i, " set as Dying as killed by explosion. Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType))
#ENDIF
// ENDIF
ENDIF
// ENDIF
ENDIF
ENDREPEAT
ENDPROC
PROC CMHDZ_STUN_ENEMIES_IN_RANGE(VECTOR_2D vPos, FLOAT fMaxDist = 250.0)
INT i
VECTOR_2D vEnemyPos
FLOAT fXDist
FLOAT fYDist
FLOAT fDist2
REPEAT ciCMHDZ_MAX_ENEMIES i
IF sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING
// IF sCMHDZData.sEnemyData[i].iEnemyType != CMHDZ_OUTHOUSE_ENEMY
vEnemyPos = sCMHDZData.sEnemyData[i].vSpritePos
fXDist = vEnemyPos.x - vPos.x
fYDist = vEnemyPos.y - vPos.y
fDist2 = (fXDist * fXDist) + (fYDist * fYDist)
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_KILL_ALL_ENEMIES_IN_RANGE] {DSW} Checking Enemy ", i, " Dist: ", SQRT(fDist2))
IF (fDist2 <= (fMaxDist * fMaxDist))
AND sCMHDZData.sEnemyData[i].iHealth > 0
IF sCMHDZData.sEnemyData[i].iEnemyLane != ciCMHDZ_LANE_POPUP_LHS
AND sCMHDZData.sEnemyData[i].iEnemyLane != ciCMHDZ_LANE_POPUP_RHS
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_STUNNED // If the projectile type is a Nailbomb
sCMHDZData.sEnemyData[i].fAnimTimer = 4000.0
CMHDZ_PLAY_ENEMY_TYPE_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[i].iEnemyType, CMHDZ_AUDIO_EFFECT_ENEMY_INJURED, sCMHDZData.sEnemyData[i].vSpritePos, sCMHDZData.sEnemyData[i].iEnemyVoiceID)
ELSE // Just kill popup enemies
sCMHDZData.sEnemyData[i].iHealth = 0
sCMHDZData.sEnemyData[i].fAnimTimer = 0.0
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_DYING // If the projectile type is a Molotov
CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE(CMHDZ_SCORE_TYPE_ENEMY)
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDPROC
FUNC INT CMHDZ_GET_CLOSEST_PROP_TO_COORD(VECTOR_2D vCoord)
FLOAT distanceX, distanceY, fDistance
FLOAT fDistanceToCheck = 120.0
FLOAT fClosest = 99999999.0
INT iClosest = -1
INT i
REPEAT ciCMHDZ_MAX_COVER i
distanceX = vCoord.x - sCMHDZData.sCoverData[i].vSpritePos.x
distanceY = vCoord.y - sCMHDZData.sCoverData[i].vSpritePos.y
fDistance = SQRT(distanceX * distanceX + distanceY * distanceY)
IF fDistance <= fDistanceToCheck
IF fDistance <= fClosest
fClosest = fDistance
iClosest = i
ENDIF
ENDIF
ENDREPEAT
RETURN iClosest
ENDFUNC
FUNC BOOL CMHDZ_IS_PLAYER_PLAYING()
RETURN sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_PLAYING
ENDFUNC
FUNC FLOAT CMHDZ_GET_PLAYER_DAMAGE_FOR_TYPE(CMHDZ_DAMAGE_PLAYER_TYPES eType)
SWITCH eType
CASE CMHDZ_DAMAGE_PLAYER_TYPE_BULLET RETURN 0.1
CASE CMHDZ_DAMAGE_PLAYER_TYPE_DYNAMITE RETURN 0.3
CASE CMHDZ_DAMAGE_PLAYER_TYPE_SLASH RETURN 0.2
ENDSWITCH
RETURN 0.0
ENDFUNC
PROC CMHDZ_DAMAGE_PLAYER(CMHDZ_DAMAGE_PLAYER_TYPES eType, FLOAT fModifier = 1.0)
#IF IS_DEBUG_BUILD
IF (sCMHDZData.bDebugInvunerablePlayer)
sCMHDZData.fSyncOffsetY = 0.0
EXIT
ENDIF
#ENDIF
// No damage if in Tutorial stage
IF CMHDZ_IS_LEADERBOARD_ACTIVE()
EXIT
ENDIF
IF CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_INVULNERABILE)
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_DAMAGE_PLAYER] Not Damaging as CMHDZ_PLAYER_BIT_INVULNERABILE is set")
#ENDIF
EXIT
ENDIF
// Already being damaged. Don't process.
IF eType = CMHDZ_DAMAGE_PLAYER_TYPE_BULLET
AND sCMHDZData.sPlayerData[0].fHitCountdown > 0
EXIT
ENDIF
// Reset score combo
IF CMHDZ_GET_PLAYER_SUCESSIVE_HITS() != 1
CMHDZ_RESET_PLAYER_SUCCESSIVE_HITS()
ENDIF
FLOAT fDamage = CMHDZ_GET_PLAYER_DAMAGE_FOR_TYPE(eType)
#IF IS_DEBUG_BUILD
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_DAMAGE_PLAYER] Called. Type: ", CMHDZ_DAMAGE_PLAYER_TYPES_TO_STRING(eType), " Damage: ", fDamage, " Modifier: ", fModifier)
#ENDIF
fDamage *= fModifier
sCMHDZData.sPlayerData[0].fHealth = CLAMP(sCMHDZData.sPlayerData[0].fHealth - fDamage, 0.0, 1.0)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_DAMAGE_PLAYER] New health: ", sCMHDZData.sPlayerData[0].fHealth)
//-- Play audio for player taking damage
IF sCMHDZData.sPlayerData[0].fHealth > 0.0
CMHDZ_PLAY_PLAYER_TAKE_DAMAGE_AUDIO(sCMHDZData.sPlayerData[0].fHealth)
ENDIF
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_MUSIC_TRANSITION)
// Play music event for getting hit
CMHDZ_TRIGGER_MUSIC_EVENT_HIT_RANDOM()
// Will likely need decreasing in final.
SWITCH eType
CASE CMHDZ_DAMAGE_PLAYER_TYPE_BULLET
sCMHDZData.sPlayerData[0].fHitCountdown = 100.0
sCMHDZData.fSyncOffsetY = 80.0
BREAK
CASE CMHDZ_DAMAGE_PLAYER_TYPE_DYNAMITE
sCMHDZData.sPlayerData[0].fHitCountdown = 150.0
sCMHDZData.fSyncOffsetY = 200.0
sCMHDZData.sPlayerData[0].bHeavyDamageState = TRUE
BREAK
CASE CMHDZ_DAMAGE_PLAYER_TYPE_SLASH
sCMHDZData.sPlayerData[0].fHitCountdown = 100.0
sCMHDZData.fSyncOffsetY = 200.0
sCMHDZData.sPlayerData[0].bHeavyDamageState = TRUE
BREAK
ENDSWITCH
IF sCMHDZData.sPlayerData[0].fHealth = 0
sCMHDZData.sPlayerData[0].fHitCountdown = 1000.0
// ELSE
// sCMHDZData.sPlayerData[0].fHitCountdown = 200.0
ENDIF
ENDPROC
FUNC BOOL CMHDZ_SHOULD_SKIP_LEADERBOARD()
// url:bugstar:6153380 - [R4062] Arcade Games - Badlands Revenge II - A UGC restricted sub account can view the high score initials posted by another player (and vice versa)
IF NOT IS_ACCOUNT_OVER_17_FOR_UGC()
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SHOULD_SKIP_LEADERBOARD] True - IS_ACCOUNT_OVER_17_FOR_UGC")
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC CMHDZ_SEND_TELEMETRY()
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
EXIT
ENDIF
// url:bugstar:6118446 - Telemetry - Script - Please add a new metric that triggers at the end of the new arcade game[Badlands Revenge II] added for Casino Heist
STRUCT_ARCADE_CABINET sTelemetry
INT i
sTelemetry.gameType = HASH("ARCADE_CABINET_SE_CAMHEDZ")
sTelemetry.matchId = cmhdzServerBd.iMatchId
IF PLAYER_ID() != INVALID_PLAYER_INDEX()
SWITCH GET_SIMPLE_INTERIOR_TYPE_LOCAL_PLAYER_IS_IN()
CASE SIMPLE_INTERIOR_TYPE_ARCADE
sTelemetry.location = HASH("SIMPLE_INTERIOR_TYPE_ARCADE")
BREAK
CASE SIMPLE_INTERIOR_TYPE_AUTO_SHOP
sTelemetry.location = HASH("SIMPLE_INTERIOR_TYPE_AUTO_SHOP")
BREAK
#IF FEATURE_FIXER
#IF FEATURE_MUSIC_STUDIO
CASE SIMPLE_INTERIOR_TYPE_MUSIC_STUDIO
sTelemetry.location = HASH("SIMPLE_INTERIOR_TYPE_MUSIC_STUDIO")
BREAK
#ENDIF
#ENDIF
DEFAULT
CDEBUG1LN(DEBUG_MINIGAME, "[[CMHDZ_ARCADE] [CMHDZ_SEND_TELEMETRY] not in valid arcade location, setting sRoadArcadeTelemetry.location = 0")
sTelemetry.location = 0
BREAK
ENDSWITCH
ELSE
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [CMHDZ_SEND_TELEMETRY] Invalid Player ID, setting sTelemetry.location = 0")
sTelemetry.location = 0
ENDIF
IF IS_BIT_SET(cmhdzServerBd.iServerBitset, ENUM_TO_INT(CMHDZ_SERVER_BIT_TWO_PLAYERS_JOINED))
sTelemetry.numPlayers = 2
ELSE
sTelemetry.numPlayers = 1
ENDIF
IF CMHDZ_ARE_ALL_LEVELS_COMPLETE()
sTelemetry.level = 5
ELSE
REPEAT CMHDZ_MAX_LEVELS i
IF CMHDZ_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(i) = 0
sTelemetry.level = i - 1
IF sTelemetry.level < 1
sTelemetry.level = 1
ENDIF
BREAKLOOP
ENDIF
ENDREPEAT
ENDIF
sTelemetry.kills = CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_ALL_LEVELS() //+ CMHDZ_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_ALL_LEVELS()
sTelemetry.timePlayed = GET_GAME_TIMER() - sCMHDZData.iTotalTimePlayed
sTelemetry.score = CMHDZ_GET_LOCAL_PLAYER_HI_SCORE_FOR_ALL_LEVELS()
// CMHDZ_CHALLENGE_FACES_OF_DEATH = 0
// CMHDZ_CHALLENGE_TRAINED_TO_KILL,
// CMHDZ_CHALLENGE_STRAIGHT_TO_VIDEO
sTelemetry.challenges = sCMHDZData.iChallengesBitsetForTelemetry
sTelemetry.powerUps = CMHDZ_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_ALL_LEVELS()
IF sCMHDZData.bWonTrophyThisSession
sTelemetry.reward = ARCADE_GAME_GET_TROPHY_ID_FOR_TELEMETRY(ARCADE_GAME_TROPHY_CAMHEDZ)
ELSE
sTelemetry.reward = 0
ENDIf
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY]")
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.gameType: ", sTelemetry.gameType)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.matchId: ", sTelemetry.matchId)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.numPlayers: ", sTelemetry.numPlayers)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.level: ", sTelemetry.level)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.kills: ", sTelemetry.kills)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.timePlayed: ", sTelemetry.timePlayed)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.score: ", sTelemetry.score)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.challenges: ", sTelemetry.score)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.powerUps: ", sTelemetry.powerUps)
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_SEND_TELEMETRY] sTelemetry.reward: ", sTelemetry.reward)
PLAYSTATS_ARCADE_CABINET(sTelemetry)
ENDPROC
// Boss Control
FUNC VECTOR_2D CMHDZ_BOSS_GET_SPRITE_SIZES(CMHDZ_SPRITE eSprite)
SWITCH eSprite
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_01
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_02
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_03
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_04
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_05
CASE CMHDZ_SPRITE_BEARSY_WALK_FRAME_IDLE
CASE CMHDZ_SPRITE_BEARSY_THROWING_01
CASE CMHDZ_SPRITE_BEARSY_THROWING_02
CASE CMHDZ_SPRITE_BEARSY_THROWING_03
CASE CMHDZ_SPRITE_BEARSY_BACKGROUND_STAGGERED
RETURN INIT_VECTOR_2D(340, 544)
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_01
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_02
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_03
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_04
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_IDLE_05
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_STAGGERED
RETURN INIT_VECTOR_2D(708, 600)
CASE CMHDZ_SPRITE_BEARSY_DEATH_01
CASE CMHDZ_SPRITE_BEARSY_DEATH_02
RETURN INIT_VECTOR_2D(900, 600)
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_01
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_02
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_03
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_04
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_05
RETURN INIT_VECTOR_2D(708, 784)
CASE CMHDZ_SPRITE_BEARSY_FORE_PAIN_1
CASE CMHDZ_SPRITE_BEARSY_FORE_PAIN_2
CASE CMHDZ_SPRITE_BEARSY_FORE_PAIN_3
CASE CMHDZ_SPRITE_BEARSY_FORE_PAIN_4
CASE CMHDZ_SPRITE_BEARSY_FORE_PAIN_5
CASE CMHDZ_SPRITE_BEARSY_FORE_PAIN_6
RETURN INIT_VECTOR_2D(708, 784)
CASE CMHDZ_SPRITE_BEARSY_BONE_HIT_01
CASE CMHDZ_SPRITE_BEARSY_BONE_HIT_02
CASE CMHDZ_SPRITE_BEARSY_LEG_HIT_01
CASE CMHDZ_SPRITE_BEARSY_LEG_HIT_02
CASE CMHDZ_SPRITE_BEARSY_TROTTER_HIT_01
CASE CMHDZ_SPRITE_BEARSY_TROTTER_HIT_02
RETURN INIT_VECTOR_2D(520, 504)
CASE CMHDZ_SPRITE_BEARSY_BONE_LARGE_01
CASE CMHDZ_SPRITE_BEARSY_BONE_LARGE_02
CASE CMHDZ_SPRITE_BEARSY_LEG_LARGE_01
CASE CMHDZ_SPRITE_BEARSY_LEG_LARGE_02
CASE CMHDZ_SPRITE_BEARSY_TROTTER_LARGE_01
CASE CMHDZ_SPRITE_BEARSY_TROTTER_LARGE_02
RETURN INIT_VECTOR_2D(472, 452)
CASE CMHDZ_SPRITE_BEARSY_BONE_MED_01
CASE CMHDZ_SPRITE_BEARSY_BONE_MED_02
CASE CMHDZ_SPRITE_BEARSY_LEG_MED_01
CASE CMHDZ_SPRITE_BEARSY_LEG_MED_02
CASE CMHDZ_SPRITE_BEARSY_TROTTER_MED_01
CASE CMHDZ_SPRITE_BEARSY_TROTTER_MED_02
RETURN INIT_VECTOR_2D(316, 304)
CASE CMHDZ_SPRITE_BEARSY_BONE_SMALL_01
CASE CMHDZ_SPRITE_BEARSY_BONE_SMALL_02
CASE CMHDZ_SPRITE_BEARSY_LEG_SMALL_01
CASE CMHDZ_SPRITE_BEARSY_LEG_SMALL_02
CASE CMHDZ_SPRITE_BEARSY_TROTTER_SMALL_01
CASE CMHDZ_SPRITE_BEARSY_TROTTER_SMALL_02
RETURN INIT_VECTOR_2D(212, 204)
CASE CMHDZ_SPRITE_BEARSY_JOWL_HIT_01
CASE CMHDZ_SPRITE_BEARSY_JOWL_HIT_02
RETURN INIT_VECTOR_2D(560, 644)
CASE CMHDZ_SPRITE_BEARSY_JOWL_LARGE_01
CASE CMHDZ_SPRITE_BEARSY_JOWL_LARGE_02
RETURN INIT_VECTOR_2D(472,556)
CASE CMHDZ_SPRITE_BEARSY_JOWL_MED_01
CASE CMHDZ_SPRITE_BEARSY_JOWL_MED_02
RETURN INIT_VECTOR_2D(316, 360)
CASE CMHDZ_SPRITE_BEARSY_JOWL_SMALL_01
CASE CMHDZ_SPRITE_BEARSY_JOWL_SMALL_02
RETURN INIT_VECTOR_2D(212, 240)
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_01
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_02
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_03
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_BLOOD_04
RETURN INIT_VECTOR_2D(268, 84)
//CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SCREEN_CRACK
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_01
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_02
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_03
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_04
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_ATTACKING_SPARKS_05
RETURN INIT_VECTOR_2D(508, 196)
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_01
RETURN INIT_VECTOR_2D(356, 256)
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_02
RETURN INIT_VECTOR_2D(356, 488)
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_03
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_04
RETURN INIT_VECTOR_2D(356, 212)
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_05
RETURN INIT_VECTOR_2D(356, 204)
CASE CMHDZ_SPRITE_BEARSY_FOREGROUND_BLOOD_06
RETURN INIT_VECTOR_2D(356, 140)
CASE CMHDZ_SPRITE_SCREEN_DAMAGE_RIP
RETURN INIT_VECTOR_2D(264, 532)
CASE CMHDZ_SPRITE_SCREEN_DAMAGE_BLOOD_SPLATTER
RETURN INIT_VECTOR_2D(792, 800)
// CASE CMHDZ_SPRITE_SCREEN_DAMAGE_BROKEN
// RETURN INIT_VECTOR_2D(516, 472)
ENDSWITCH
RETURN INIT_VECTOR_2D(340, 544)
ENDFUNC
PROC CMHDZ_UPDATE_SOUND_GLITCH_LEVEL()
FLOAT fHealthLevel = 0.5 - (sCMHDZData.sPlayerData[0].fHealth/2.0)
IF sCMHDZData.iFade = 0
sCMHDZData.fSoundGlitchLevel = fHealthLevel + sCMHDZData.fSoundGlitchAdditional
ENDIF
IF sCMHDZData.fSoundGlitchLevel > 1.0
sCMHDZData.fSoundGlitchLevel = 1.0
ENDIF
IF sCMHDZData.fSoundGlitchLevel < 0.0
sCMHDZData.fSoundGlitchLevel = 0.0
ENDIF
sCMHDZData.fSoundGlitchAdditional = 0.0
ENDPROC
PROC CMHDZ_STOP_TITLE_INTRO_MOVIE(BINK_MOVIE_ID &bmID)
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ] [BAZ] CMHDZ_STOP_TITLE_INTRO_MOVIE")
STOP_BINK_MOVIE(bmID)
RELEASE_BINK_MOVIE(bmID)
ENDPROC
/// PURPOSE:
/// Ensures smooth trnasition from one bink video to another.
FUNC BOOL CMHDZ_DRAW_MOVIE_SEQUENCE(BINK_MOVIE_ID &bmID, FLOAT fRatioWidth, FLOAT fRatioHeight)
IF GET_BINK_MOVIE_TIME(bmID) >= 99.9
RETURN TRUE
ELSE
DRAW_BINK_MOVIE(bmID, cfSCREEN_CENTER, cfSCREEN_CENTER, fRatioWidth, fRatioHeight, 0.0, 255,255,255,255)
ENDIF
RETURN FALSE
ENDFUNC
PROC CMHDZ_START_MOVIE_FORCE(BINK_MOVIE_ID &bmID, STRING movieName)
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ][BAZ] CMHDZ_START_MOVIE_FORCE - Starting movie")
STOP_BINK_MOVIE(bmID)
RELEASE_BINK_MOVIE(bmID)
bmID = SET_BINK_MOVIE(movieName)
PLAY_BINK_MOVIE(bmID)
SET_BINK_SHOULD_SKIP(bmID, TRUE)
SET_BINK_MOVIE_AUDIO_FRONTEND(bmID, TRUE)
ENDPROC