USING "arcade_cabinet_minigame_common.sch" USING "arcade_games_help_text.sch" USING "arcade_games_help_text_flow.sch" USING "net_arcade_cabinet.sch" 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 cfTLG_DEFAULT_ANIM_FRAME_TIME 33.0 //30 FPS CONST_FLOAT cfTLG_SLOW_ANIM_FRAME_TIME 165.0 //15 FPS CONST_FLOAT cfTLG_FIB_SCREEN_WIDTH 1260.0 CONST_FLOAT cfTLG_FIB_SCREEN_HEIGHT 920.0 CONST_FLOAT cfTLG_ENEMY_SPRITE_WIDTH 116.0 CONST_FLOAT cfTLG_ENEMY_SPRITE_HEIGHT 196.0 CONST_FLOAT cfTLG_ENEMY_THROWING_SPRITE_WIDTH 124.0 CONST_FLOAT cfTLG_ENEMY_THROWING_SPRITE_HEIGHT 208.0 CONST_FLOAT cfTLG_ENEMY_DEAD_SPRITE_WIDTH 160.0 CONST_FLOAT cfTLG_ENEMY_DEAD_SPRITE_HEIGHT 200.0 CONST_FLOAT cfTLG_ENEMY_FOREGROUND_SPRITE_WIDTH 376.0 CONST_FLOAT cfTLG_ENEMY_FOREGROUND_SPRITE_HEIGHT 536.0 CONST_FLOAT cfTLG_ENEMY_FOREGROUND_DEAD_SPRITE_WIDTH 452.0 CONST_FLOAT cfTLG_ENEMY_FOREGROUND_DEAD_SPRITE_HEIGHT 540.0 CONST_FLOAT cfTLG_ENEMY_BEAR_SPRITE_WIDTH 660.0 CONST_FLOAT cfTLG_ENEMY_BEAR_SPRITE_HEIGHT 500.0 CONST_FLOAT cfTLG_ENEMY_BEAR_DEAD_SPRITE_WIDTH 768.0 CONST_FLOAT cfTLG_ENEMY_BEAR_DEAD_SPRITE_HEIGHT 504.0 CONST_FLOAT cfTLG_ENEMY_CART_SPRITE_WIDTH 536.0 CONST_FLOAT cfTLG_ENEMY_CART_SPRITE_HEIGHT 404.0 CONST_FLOAT cfTLG_HOSTAGE_M_SPRITE_WIDTH 160.0 CONST_FLOAT cfTLG_HOSTAGE_M_SPRITE_HEIGHT 200.0 CONST_FLOAT cfTLG_EAGLE_SPRITE_WIDTH 192.0 CONST_FLOAT cfTLG_EAGLE_SPRITE_HEIGHT 140.0 CONST_FLOAT cfTLG_VULTURE_SPRITE_WIDTH 192.0 CONST_FLOAT cfTLG_VULTURE_SPRITE_HEIGHT 140.0 CONST_FLOAT cfTLG_BAT_SPRITE_WIDTH 68.0 CONST_FLOAT cfTLG_BAT_SPRITE_HEIGHT 64.0 CONST_FLOAT cfTLG_MOUSE_SPRITE_WIDTH 140.0 CONST_FLOAT cfTLG_MOUSE_SPRITE_HEIGHT 64.0 CONST_FLOAT cfTLG_SCORPION_SPRITE_WIDTH 100.0 CONST_FLOAT cfTLG_SCORPION_SPRITE_HEIGHT 84.0 CONST_FLOAT cfTLG_CANYON_1_SPRITE_WIDTH 256.0 CONST_FLOAT cfTLG_CANYON_1_SPRITE_HEIGHT 144.0 CONST_FLOAT cfTLG_CANYON_2_SPRITE_WIDTH 420.0 CONST_FLOAT cfTLG_CANYON_2_SPRITE_HEIGHT 144.0 CONST_FLOAT cfTLG_CANYON_4_SPRITE_WIDTH 188.0 CONST_FLOAT cfTLG_CANYON_4_SPRITE_HEIGHT 52.0 CONST_FLOAT cfTLG_MOUNTAIN_1_SPRITE_WIDTH 1300.0 CONST_FLOAT cfTLG_MOUNTAIN_1_SPRITE_HEIGHT 112.0 CONST_FLOAT cfTLG_MOUNTAIN_1_SPRITE_X 788.125 CONST_FLOAT cfTLG_MOUNTAIN_1_SPRITE_Y 315.0 CONST_FLOAT cfTLG_MOUNTAIN_2_SPRITE_WIDTH 272.0 CONST_FLOAT cfTLG_MOUNTAIN_2_SPRITE_HEIGHT 112.0 CONST_FLOAT cfTLG_ROCK_TOP_SPRITE_WIDTH 284.0 CONST_FLOAT cfTLG_ROCK_TOP_SPRITE_HEIGHT 100.0 CONST_FLOAT cfTLG_WOODENSTRUCTURE_SPRITE_WIDTH 312.0 CONST_FLOAT cfTLG_WOODENSTRUCTURE_SPRITE_HEIGHT 304.0 CONST_FLOAT cfTLG_RAILWAY_SPRITE_WIDTH 284.0 CONST_FLOAT cfTLG_RAILWAY_SPRITE_HEIGHT 36.0 CONST_FLOAT cfTLG_GRAVEYARD_TREE_1_SPRITE_WIDTH 288.0 CONST_FLOAT cfTLG_GRAVEYARD_TREE_1_SPRITE_HEIGHT 264.0 CONST_FLOAT cfTLG_GRAVEYARD_TREE_2_SPRITE_WIDTH 212.0 CONST_FLOAT cfTLG_GRAVEYARD_TREE_2_SPRITE_HEIGHT 276.0 CONST_FLOAT cfTLG_GRAVEYARD_TREE_3_SPRITE_WIDTH 264.0 CONST_FLOAT cfTLG_GRAVEYARD_TREE_3_SPRITE_HEIGHT 244.0 CONST_FLOAT cfTLG_BACKGROUND_TOMBS_SPRITE_WIDTH 540.0 CONST_FLOAT cfTLG_BACKGROUND_TOMBS_SPRITE_HEIGHT 84.0 CONST_FLOAT cfTLG_CACTUS_1_SPRITE_WIDTH 168.0 CONST_FLOAT cfTLG_CACTUS_1_SPRITE_HEIGHT 288.0 CONST_FLOAT cfTLG_CACTUS_2_SPRITE_WIDTH 168.0 CONST_FLOAT cfTLG_CACTUS_2_SPRITE_HEIGHT 408.0 CONST_FLOAT cfTLG_CACTUS_3_SPRITE_WIDTH 120.0 CONST_FLOAT cfTLG_CACTUS_3_SPRITE_HEIGHT 540.0 CONST_FLOAT cfTLG_CACTUS_4_SPRITE_WIDTH 280.0 CONST_FLOAT cfTLG_CACTUS_4_SPRITE_HEIGHT 204.0 CONST_FLOAT cfTLG_CACTUS_5_SPRITE_WIDTH 148.0 CONST_FLOAT cfTLG_CACTUS_5_SPRITE_HEIGHT 128.0 CONST_FLOAT cfTLG_CACTUS_6_SPRITE_WIDTH 176.0 CONST_FLOAT cfTLG_CACTUS_6_SPRITE_HEIGHT 236.0 CONST_FLOAT cfTLG_CACTUS_7_SPRITE_WIDTH 212.0 CONST_FLOAT cfTLG_CACTUS_7_SPRITE_HEIGHT 236.0 CONST_FLOAT cfTLG_CACTUS_8_SPRITE_WIDTH 148.0 CONST_FLOAT cfTLG_CACTUS_8_SPRITE_HEIGHT 236.0 CONST_FLOAT cfTLG_CACTUS_9_SPRITE_WIDTH 112.0 CONST_FLOAT cfTLG_CACTUS_9_SPRITE_HEIGHT 236.0 CONST_FLOAT cfTLG_CACTUS_10_SPRITE_WIDTH 184.0 CONST_FLOAT cfTLG_CACTUS_10_SPRITE_HEIGHT 236.0 CONST_FLOAT cfTLG_CACTUS_11_SPRITE_WIDTH 176.0 CONST_FLOAT cfTLG_CACTUS_11_SPRITE_HEIGHT 212.0 CONST_FLOAT cfTLG_OUTHOUSE_1_SPRITE_WIDTH 216.0 CONST_FLOAT cfTLG_OUTHOUSE_1_SPRITE_HEIGHT 332.0 CONST_FLOAT cfTLG_CRATE_1_SPRITE_WIDTH 312.0 CONST_FLOAT cfTLG_CRATE_1_SPRITE_HEIGHT 184.0 CONST_FLOAT cfTLG_BUILDING_1_SPRITE_WIDTH 564.0 CONST_FLOAT cfTLG_BUILDING_1_SPRITE_HEIGHT 452.0 CONST_FLOAT cfTLG_BUILDING_2_SPRITE_WIDTH 412.0 CONST_FLOAT cfTLG_BUILDING_2_SPRITE_HEIGHT 400.0 CONST_FLOAT cfTLG_FENCE_SPRITE_WIDTH 376.0 CONST_FLOAT cfTLG_FENCE_SPRITE_HEIGHT 196.0 CONST_FLOAT cfTLG_FENCE_SMALL_SPRITE_WIDTH 92.0 CONST_FLOAT cfTLG_FENCE_SMALL_SPRITE_HEIGHT 24.0 CONST_FLOAT cfTLG_ROCKS_SPRITE_WIDTH 36.0 CONST_FLOAT cfTLG_ROCKS_SPRITE_HEIGHT 36.0 CONST_FLOAT cfTLG_FOREST_ROCKS_SPRITE_WIDTH 40.0 CONST_FLOAT cfTLG_FOREST_ROCKS_SPRITE_HEIGHT 40.0 CONST_FLOAT cfTLG_FOREST_TREE_1_SPRITE_WIDTH 472.0 CONST_FLOAT cfTLG_FOREST_TREE_1_SPRITE_HEIGHT 784.0 CONST_FLOAT cfTLG_FOREST_TREE_2_SPRITE_WIDTH 400.0 CONST_FLOAT cfTLG_FOREST_TREE_2_SPRITE_HEIGHT 656.0 CONST_FLOAT cfTLG_FOREST_GRASS_SPRITE_WIDTH 288.0 CONST_FLOAT cfTLG_FOREST_GRASS_SPRITE_HEIGHT 204.0 CONST_FLOAT cfTLG_FOREST_BUSH_SM_SPRITE_WIDTH 120.0 CONST_FLOAT cfTLG_FOREST_BUSH_SM_SPRITE_HEIGHT 80.0 CONST_FLOAT cfTLG_FOREST_BUSH_LG_SPRITE_WIDTH 212.0 CONST_FLOAT cfTLG_FOREST_BUSH_LG_SPRITE_HEIGHT 140.0 CONST_FLOAT cfTLG_ROCK_SMALL_SPRITE_WIDTH 164.0 CONST_FLOAT cfTLG_ROCK_SMALL_SPRITE_HEIGHT 92.0 CONST_FLOAT cfTLG_ROCK_LARGE_SPRITE_WIDTH 288.0 CONST_FLOAT cfTLG_ROCK_LARGE_SPRITE_HEIGHT 160.0 CONST_FLOAT cfTLG_STACKED_CRATES_1_SPRITE_WIDTH 300.0 CONST_FLOAT cfTLG_STACKED_CRATES_1_SPRITE_HEIGHT 312.0 CONST_FLOAT cfTLG_STACKED_CRATES_2_SPRITE_WIDTH 300.0 CONST_FLOAT cfTLG_STACKED_CRATES_2_SPRITE_HEIGHT 432.0 CONST_FLOAT cfTLG_BARRELS_SPRITE_WIDTH 236.0 CONST_FLOAT cfTLG_BARRELS_SPRITE_HEIGHT 184.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_1_SPRITE_WIDTH 208.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_1_SPRITE_HEIGHT 440.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_2_SPRITE_WIDTH 212.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_2_SPRITE_HEIGHT 344.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_3_SPRITE_WIDTH 128.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_3_SPRITE_HEIGHT 172.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_4_SPRITE_WIDTH 126.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_4_SPRITE_HEIGHT 172.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_5_SPRITE_WIDTH 132.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_5_SPRITE_HEIGHT 172.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_6_SPRITE_WIDTH 140.0 CONST_FLOAT cfTLG_GRAVEYARD_STONE_6_SPRITE_HEIGHT 140.0 CONST_FLOAT cfTLG_GRAVEYARD_TOMB_SPRITE_WIDTH 630.0 CONST_FLOAT cfTLG_GRAVEYARD_TOMB_SPRITE_HEIGHT 720.0 CONST_FLOAT cfTLG_GRAVEYARD_COFFIN_SPRITE_WIDTH 200.0 CONST_FLOAT cfTLG_GRAVEYARD_COFFIN_SPRITE_HEIGHT 248.0 CONST_FLOAT cfTLG_WATER_TOWER_SPRITE_WIDTH 360.0 CONST_FLOAT cfTLG_WATER_TOWER_SPRITE_HEIGHT 376.0 CONST_FLOAT cfTLG_TNT_CRATE_SPRITE_WIDTH 192.0 CONST_FLOAT cfTLG_TNT_CRATE_SPRITE_HEIGHT 124.0 CONST_FLOAT cfTLG_TNT_BARREL_1_SPRITE_WIDTH 140.0 CONST_FLOAT cfTLG_TNT_BARREL_1_SPRITE_HEIGHT 176.0 CONST_FLOAT cfTLG_TNT_BARREL_2_SPRITE_WIDTH 176.0 CONST_FLOAT cfTLG_TNT_BARREL_2_SPRITE_HEIGHT 140.0 CONST_FLOAT cfTLG_OUTHOUSE_SPECIAL_SPRITE_WIDTH 216.0 CONST_FLOAT cfTLG_OUTHOUSE_SPECIAL_SPRITE_HEIGHT 332.0 CONST_FLOAT cfTLG_COFFIN_ENEMY_SPRITE_WIDTH 200.0 CONST_FLOAT cfTLG_COFFIN_ENEMY_SPRITE_HEIGHT 248.0 CONST_FLOAT cfTLG_SPRITE_BULLET_1_WIDTH 30.0 CONST_FLOAT cfTLG_SPRITE_BULLET_1_HEIGHT 8.0 CONST_FLOAT cfTLG_SPRITE_IMPACT_WIDTH 96.0 CONST_FLOAT cfTLG_SPRITE_IMPACT_HEIGHT 96.0 CONST_FLOAT cfTLG_SPRITE_EXPLOSION_WIDTH 408.0 CONST_FLOAT cfTLG_SPRITE_EXPLOSION_HEIGHT 268.0 CONST_FLOAT cfTLG_SPRITE_ENEMY_SHOT_WIDTH 128.0 CONST_FLOAT cfTLG_SPRITE_ENEMY_SHOT_HEIGHT 128.0 CONST_FLOAT cfTLG_SPRITE_DAMAGE_WIDTH 504.0 CONST_FLOAT cfTLG_SPRITE_DAMAGE_HEIGHT 460.0 CONST_FLOAT cfTLG_SPRITE_BEAR_DAMAGE_WIDTH 392.0 CONST_FLOAT cfTLG_SPRITE_BEAR_DAMAGE_HEIGHT 612.0 CONST_FLOAT cfTLG_SPRITE_ENEMY_THROWN_EXPLOSION_SMALL_WIDTH 412.0 CONST_FLOAT cfTLG_SPRITE_ENEMY_THROWN_EXPLOSION_SMALL_HEIGHT 344.0 CONST_FLOAT cfTLG_SPRITE_ENEMY_THROWN_EXPLOSION_LARGE_WIDTH 572.0 CONST_FLOAT cfTLG_SPRITE_ENEMY_THROWN_EXPLOSION_LARGE_HEIGHT 504.0 CONST_FLOAT cfTLG_SPRITE_LOOT_CRATE_EXPLOSION_WIDTH 356.0 CONST_FLOAT cfTLG_SPRITE_LOOT_CRATE_EXPLOSION_HEIGHT 228.0 CONST_FLOAT cfTLG_SPRITE_FEATHERS_WIDTH 204.0 CONST_FLOAT cfTLG_SPRITE_FEATHERS_HEIGHT 116.0 CONST_INT ciTLG_DYNAMITE_SMALL_WIDTH 76 CONST_INT ciTLG_DYNAMITE_SMALL_HEIGHT 76 CONST_INT ciTLG_DYNAMITE_MEDIUM_WIDTH 128 CONST_INT ciTLG_DYNAMITE_MEDIUM_HEIGHT 128 CONST_INT ciTLG_DYNAMITE_LARGE_WIDTH 284 CONST_INT ciTLG_DYNAMITE_LARGE_HEIGHT 276 CONST_FLOAT cfTLG_SPRITE_MARKER_WIDTH 104.0 CONST_FLOAT cfTLG_SPRITE_MARKER_HEIGHT 104.0 CONST_FLOAT cfTLG_SPEECH_SPRITE_WIDTH 116.0 CONST_FLOAT cfTLG_SPEECH_SPRITE_HEIGHT 96.0 CONST_FLOAT cfTLG_ITEM_HEALTH_WIDTH 44.0 CONST_FLOAT cfTLG_ITEM_HEALTH_HEIGHT 92.0 CONST_FLOAT cfTLG_ITEM_SNAKE_OIL_WIDTH 44.0 CONST_FLOAT cfTLG_ITEM_SNAKE_OIL_HEIGHT 92.0 CONST_FLOAT cfTLG_ITEM_SHERIFF_WIDTH 84.0 CONST_FLOAT cfTLG_ITEM_SHERIFF_HEIGHT 96.0 CONST_FLOAT cfTLG_PICKUP_OUTHOUSE_OFFSET_X 16.75 CONST_FLOAT cfTLG_PICKUP_OUTHOUSE_OFFSET_Y 102.5 CONST_FLOAT cfTLG_PICKUP_COFFIN_OFFSET_X 21.375 CONST_FLOAT cfTLG_PICKUP_COFFIN_OFFSET_Y 77.0 CONST_FLOAT cfTLG_BCAKGROUND_TILE_WIDTH 276.0 CONST_FLOAT cfTLG_LEVEL1_CLOUD_X 754.000 CONST_FLOAT cfTLG_LEVEL1_CLOUD_Y 152.500 CONST_FLOAT cfTLG_LEVEL2_CLOUD_X 723.750 CONST_FLOAT cfTLG_LEVEL2_CLOUD_Y 193.750 CONST_FLOAT cfTLG_LEVEL2_CLOUD_GAP 100.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD_X 723.750 CONST_FLOAT cfTLG_LEVEL3_CLOUD_Y 193.750 CONST_FLOAT cfTLG_LEVEL3_CLOUD_GAP 100.0 CONST_FLOAT cfTLG_LEVEL1_CLOUD_WIDTH 1232.0 CONST_FLOAT cfTLG_LEVEL1_CLOUD_HEIGHT 136.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD1_WIDTH 188.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD1_HEIGHT 56.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD2_WIDTH 96.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD2_HEIGHT 32.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD3_WIDTH 112.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD3_HEIGHT 60.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD4_WIDTH 304.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD4_HEIGHT 60.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD5_WIDTH 252.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD5_HEIGHT 20.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD6_WIDTH 140.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD6_HEIGHT 44.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD7_WIDTH 128.0 CONST_FLOAT cfTLG_LEVEL2_CLOUD7_HEIGHT 44.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD1_WIDTH 188.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD1_HEIGHT 56.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD2_WIDTH 96.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD2_HEIGHT 32.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD3_WIDTH 112.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD3_HEIGHT 60.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD4_WIDTH 304.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD4_HEIGHT 60.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD5_WIDTH 252.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD5_HEIGHT 20.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD6_WIDTH 140.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD6_HEIGHT 44.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD7_WIDTH 128.0 CONST_FLOAT cfTLG_LEVEL3_CLOUD7_HEIGHT 44.0 CONST_FLOAT cfTLG_LEVEL3_BACKGROUND_TREES_WIDTH 276.0 CONST_FLOAT cfTLG_LEVEL3_BACKGROUND_TREES_HEIGHT 156.0 CONST_FLOAT cfTLG_LEVEL3_BACKGROUND_TREES_X 276.0 CONST_FLOAT cfTLG_LEVEL3_BACKGROUND_TREES_Y 290.0 CONST_FLOAT cfTLG_LEVEL4_BACKGROUND_SURFACE_WIDTH 276.0 CONST_FLOAT cfTLG_LEVEL4_BACKGROUND_SURFACE_HEIGHT 100.0 CONST_FLOAT cfTLG_LEVEL4_BACKGROUND_SURFACE_X 276.0 CONST_FLOAT cfTLG_LEVEL4_BACKGROUND_SURFACE_Y 263.125 CONST_FLOAT cfTLG_LEVEL4_BACKGROUND_ROCKS_WIDTH 276.0 CONST_FLOAT cfTLG_LEVEL4_BACKGROUND_ROCKS_HEIGHT 120.0 CONST_FLOAT cfTLG_LEVEL4_BACKGROUND_ROCKS_X 276.000 CONST_FLOAT cfTLG_LEVEL4_BACKGROUND_ROCKS_Y 306.375 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_CLOUDS_WIDTH 276.0 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_CLOUDS_HEIGHT 68.0 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_CLOUDS_X 276.0 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_CLOUDS_Y 163.875 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_FENCE_WIDTH 276.0 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_FENCE_HEIGHT 172.0 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_FENCE_X 276.0 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_FENCE_y 336.500 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_TREES_WIDTH 276.0 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_TREES_HEIGHT 220.0 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_TREES_X 276.0 CONST_FLOAT cfTLG_LEVEL5_BACKGROUND_TREES_Y 261.625 CONST_FLOAT cfTLG_BG_ENEMY_1_X_OFFSET -20.0 CONST_FLOAT cfTLG_BG_ENEMY_1_Y_OFFSET -30.0 CONST_FLOAT cfTLG_FG_ENEMY_1_X_OFFSET 30.0 CONST_FLOAT cfTLG_FG_ENEMY_1_Y_OFFSET 45.0 CONST_FLOAT cfTLG_SPRITE_POSTER_MENU_WIDTH 420.0 CONST_FLOAT cfTLG_SPRITE_POSTER_MENU_HEIGHT 520.0 CONST_FLOAT cfTLG_SPRITE_POSTER_SELECTION_WIDTH 500.0 CONST_FLOAT cfTLG_SPRITE_POSTER_SELECTION_HEIGHT 600.0 CONST_FLOAT cfTLG_SPRITE_STAR_ICON_WIDTH 44.0 CONST_FLOAT cfTLG_SPRITE_STAR_ICON_HEIGHT 48.0 CONST_FLOAT cfTLG_SPRITE_HUD_HP_WIDTH 216.0 CONST_FLOAT cfTLG_SPRITE_HUD_HP_HEIGHT 40.0 CONST_FLOAT cfTLG_SPRITE_HUD_AMMO_WIDTH 64.0 CONST_FLOAT cfTLG_SPRITE_HUD_AMMO_HEIGHT 64.0 CONST_FLOAT cfTLG_SPRITE_HUD_PISTOL_AMMO_SINGLE_WIDTH 24.0 CONST_FLOAT cfTLG_SPRITE_HUD_PISTOL_AMMO_SINGLE_HEIGHT 86.0 CONST_FLOAT cfTLG_SPRITE_HUD_RIFLE_AMMO_SINGLE_WIDTH 28.0 CONST_FLOAT cfTLG_SPRITE_HUD_RIFLE_AMMO_SINGLE_HEIGHT 96.0 CONST_FLOAT cfTLG_SPRITE_HUD_SHOTGUN_AMMO_SINGLE_WIDTH 28.0 CONST_FLOAT cfTLG_SPRITE_HUD_SHOTGUN_AMMO_SINGLE_HEIGHT 80.0 CONST_FLOAT cfTLG_SPRITE_HUD_PISTOL_AMMO_CLIP_WIDTH 96.0 CONST_FLOAT cfTLG_SPRITE_HUD_PISTOL_AMMO_CLIP_HEIGHT 96.0 CONST_FLOAT cfTLG_SPRITE_HUD_SHOTGUN_AMMO_CLIP_WIDTH 96.0 CONST_FLOAT cfTLG_SPRITE_HUD_SHOTGUN_AMMO_CLIP_HEIGHT 96.0 CONST_FLOAT cfTLG_SPRITE_HUD_RIFLE_AMMO_CLIP_WIDTH 96.0 CONST_FLOAT cfTLG_SPRITE_HUD_RIFLE_AMMO_CLIP_HEIGHT 96.0 CONST_FLOAT cfTLG_SPRITE_HUD_AMMO_QTY_WIDTH 44.0 CONST_FLOAT cfTLG_SPRITE_HUD_AMMO_QTY_HEIGHT 48.0 CONST_FLOAT cfTLG_SPRITE_HUD_DOLLAR_WIDTH 32.0 CONST_FLOAT cfTLG_SPRITE_HUD_DOLLAR_HEIGHT 36.0 CONST_FLOAT cfTLG_SPRITE_HUD_MONEY_QTY_WIDTH 32.0 CONST_FLOAT cfTLG_SPRITE_HUD_MONEY_QTY_HEIGHT 36.0 CONST_FLOAT cfTLG_SPRITE_HUD_COWBOY_TITLE_WIDTH 412.0 CONST_FLOAT cfTLG_SPRITE_HUD_COWBOY_TITLE_HEIGHT 640.0 CONST_FLOAT cfTLG_SPRITE_HUD_COWBOY_DEAD_WIDTH 516.0 CONST_FLOAT cfTLG_SPRITE_HUD_COWBOY_DEAD_HEIGHT 880.0 CONST_FLOAT cfTLG_SPRITE_HUD_DEAD_SCREEN_TEXT_WIDTH 280.0 CONST_FLOAT cfTLG_SPRITE_HUD_DEAD_SCREEN_TEXT_HEIGHT 228.0 CONST_FLOAT cfTLG_SPRITE_HUD_RESULT_TEXT_WIDTH 660.0 CONST_FLOAT cfTLG_SPRITE_HUD_RESULT_TEXT_HEIGHT 264.0 CONST_FLOAT cfTLG_SPRITE_HUD_LOGO_WIDTH 536.0 CONST_FLOAT cfTLG_SPRITE_HUD_LOGO_HEIGHT 276.0 CONST_FLOAT cfTLG_SPRITE_HUD_START_WIDTH 116.0 CONST_FLOAT cfTLG_SPRITE_HUD_START_HEIGHT 52.0 CONST_FLOAT cfTLG_SPRITE_HUD_LEADERBOARDS_WIDTH 280.0 CONST_FLOAT cfTLG_SPRITE_HUD_LEADERBOARDS_HEIGHT 52.0 CONST_FLOAT cfTLG_SPRITE_HUD_PIXTRO_LOGO_WIDTH 196.0 CONST_FLOAT cfTLG_SPRITE_HUD_PIXTRO_LOGO_HEIGHT 44.0 CONST_FLOAT cfTLG_SPRITE_HUD_RELOAD_PROMPT_X 948.0 CONST_FLOAT cfTLG_SPRITE_HUD_RELOAD_PROMPT_Y 540.375 CONST_FLOAT cfTLG_SPRITE_HUD_RELOAD_PROMPT_WIDTH 576.0 CONST_FLOAT cfTLG_SPRITE_HUD_RELOAD_PROMPT_HEIGHT 204.0 CONST_FLOAT cfTLG_SPRITE_HUD_NO_AMMO_PROMPT_X 960.0 CONST_FLOAT cfTLG_SPRITE_HUD_NO_AMMO_PROMPT_Y 540.375 CONST_FLOAT cfTLG_SPRITE_HUD_NO_AMMO_PROMPT_WIDTH 308.0 CONST_FLOAT cfTLG_SPRITE_HUD_NO_AMMO_PROMPT_HEIGHT 296.0 CONST_FLOAT cfTLG_SPRITE_FINAL_SCENE_POSTER_X 1280.000 CONST_FLOAT cfTLG_SPRITE_FINAL_SCENE_POSTER_Y 540.0 CONST_FLOAT cfTLG_SPRITE_FINAL_SCENE_POSTER_WIDTH 556.0 CONST_FLOAT cfTLG_SPRITE_FINAL_SCENE_POSTER_HEIGHT 836.0 CONST_FLOAT cfTLG_SPRITE_FINAL_SCENE_TEXT_X 670.000 CONST_FLOAT cfTLG_SPRITE_FINAL_SCENE_TEXT_Y 360.0 CONST_FLOAT cfTLG_SPRITE_FINAL_SCENE_TEXT_WIDTH 660.0 CONST_FLOAT cfTLG_SPRITE_FINAL_SCENE_TEXT_HEIGHT 360.000 CONST_FLOAT cfTLG_HP_X_POS 500.0 CONST_FLOAT cfTLG_HP_Y_POS 130.0 CONST_FLOAT cfTLG_GATLING_TEMP_BORDER_X_POS 447.375 CONST_FLOAT cfTLG_GATLING_TEMP_BORDER_Y_POS 174.750 CONST_FLOAT cfTLG_GATLING_TEMP_BORDER_WIDTH 108.0 CONST_FLOAT cfTLG_GATLING_TEMP_BORDER_HEIGHT 40.0 CONST_FLOAT cfTLG_AMMO_X_POS 420.0 CONST_FLOAT cfTLG_AMMO_Y_POS 180.0 CONST_FLOAT cfTLG_AMMO_QTY_1_X_POS 544.625// 475.0 CONST_FLOAT cfTLG_AMMO_QTY_1_Y_POS 174.875//180.0 CONST_FLOAT cfTLG_AMMO_QTY_2_X_POS 584.625 //515.0 CONST_FLOAT cfTLG_AMMO_QTY_2_Y_POS 174.875 // 180.0 CONST_FLOAT cfTLG_SINGLE_PISTOL_AMMO_0_X 510.125 CONST_FLOAT cfTLG_SINGLE_PISTOL_AMMO_0_Y 194.25 CONST_FLOAT cfTLG_SINGLE_PISTOL_AMMO_1_X 488.625 CONST_FLOAT cfTLG_SINGLE_PISTOL_AMMO_2_X 467.125 CONST_FLOAT cfTLG_SINGLE_PISTOL_AMMO_3_X 445.625 CONST_FLOAT cfTLG_SINGLE_PISTOL_AMMO_4_X 424.125 CONST_FLOAT cfTLG_SINGLE_PISTOL_AMMO_5_X 402.625 CONST_FLOAT cfTLG_GATLING_OVERHEAT_TIME_SECONDS 5.0 CONST_FLOAT cfTLG_GATLING_COOLDOWN_TIME_SECONDS 2.0 CONST_INT ciTLG_WAIT_FOR_DEAD_TIME 2000 //-- In-Game scores CONST_FLOAT cfTLG_SCORE_GAP_DOLLAR_FIRST_DIGIT_X 105.5 CONST_FLOAT cfTLG_SCORE_GAP_DOLLAR_TO_DOLLAR_X 282.5 CONST_FLOAT cfTLG_MY_HISCORE_DOLLAR_X_SIZE 28.0 CONST_FLOAT cfTLG_MY_HISCORE_DOLLAR_Y_SIZE 40.0 CONST_FLOAT cfTLG_MY_HISCORE_X_DIGIT_SIZE 32.0 CONST_FLOAT cfTLG_MY_HISCORE_Y_DIGIT_SIZE 36.0 CONST_FLOAT cfTLG_FONT_X_DIGIT_SIZE 32.0 CONST_FLOAT cfTLG_FONT_DIGIT_SIZE 36.0 CONST_FLOAT cfTLG_SCORE_WIN_X_SIZE 52.0 CONST_FLOAT cfTLG_SCORE_WIN_Y_SIZE 32.0 CONST_FLOAT cfTLG_SCORE_WIN_RED_X_POS 864.0 CONST_FLOAT cfTLG_SCORE_WIN_RED_Y_POS 130.0 CONST_FLOAT cfTLG_SCORE_WIN_BLUE_X_POS 1430.0 CONST_FLOAT cfTLG_SCORE_WIN_BLUE_Y_POS 130.0 CONST_FLOAT cfTLG_MY_SCORE_DOLLAR_X_POS 634.5 CONST_FLOAT cfTLG_MY_SCORE_DOLLAR_Y_POS 130.0 CONST_FLOAT cfTLG_MY_SCORE_X_POS 740.0 CONST_FLOAT cfTLG_MY_SCORE_Y_POS 130.0 CONST_FLOAT cfTLG_RED_SCORE_DOLLAR_X_POS 634.5 CONST_FLOAT cfTLG_RED_SCORE_DOLLAR_Y_POS 130.0 CONST_FLOAT cfTLG_RED_SCORE_X_POS 740.0 CONST_FLOAT cfTLG_RED_SCORE_Y_POS 130.0 CONST_FLOAT cfTLG_MY_HISCORE_DOLLAR_X_POS 917.0 CONST_FLOAT cfTLG_MY_HISCORE_DOLLAR_Y_POS 130.0 CONST_FLOAT cfTLG_MY_HISCORE_X_POS 1022.5 CONST_FLOAT cfTLG_MY_HISCORE_Y_POS 130.0 CONST_FLOAT cfTLG_BLUE_SCORE_DOLLAR_X_POS 1199.5 CONST_FLOAT cfTLG_BLUE_SCORE_DOLLAR_Y_POS 130.0 CONST_FLOAT cfTLG_BLUE_SCORE_X_POS 1305.0 CONST_FLOAT cfTLG_BLUE_SCORE_Y_POS 130.0 //-- Level select scores CONST_FLOAT cfTLG_LEVEL_SCORE_SCALE 0.5 //-- Solo play hi-scores on wanted poster positions CONST_FLOAT cfTLG_SOLO_LEVEL1_SCORE_X_POS 579.5 CONST_FLOAT cfTLG_SOLO_LEVEL1_SCORE_Y_POS 551.25 CONST_FLOAT cfTLG_SOLO_LEVEL2_SCORE_X_POS 965.75 CONST_FLOAT cfTLG_SOLO_LEVEL3_SCORE_X_POS 1348.125 CONST_FLOAT cfTLG_SOLO_LEVEL4_SCORE_X_POS 771.25 CONST_FLOAT cfTLG_SOLO_LEVEL4_SCORE_Y_POS 957.25 CONST_FLOAT cfTLG_SOLO_LEVEL5_SCORE_X_POS 1159.5 CONST_FLOAT cfTLG_RED_LEVEL1_HI_DOLLAR_X_POS 462.875 CONST_FLOAT cfTLG_RED_LEVEL1_HI_DOLLAR_Y_POS 551.250 CONST_FLOAT cfTLG_RED_LEVEL1_HI_SCORE_X_POS 475.875 CONST_FLOAT cfTLG_RED_LEVEL1_HI_SCORE_Y_POS 551.25 CONST_FLOAT cfTLG_RED_LEVEL1_WIN_X_POS 469.750 CONST_FLOAT cfTLG_RED_LEVEL1_WIN_Y_POS 533.250 CONST_FLOAT cfTLG_BLUE_LEVEL1_HI_DOLLAR_X_POS 462.875 CONST_FLOAT cfTLG_BLUE_LEVEL1_HI_DOLLAR_Y_POS 551.250 CONST_FLOAT cfTLG_BLUE_LEVEL1_HI_SCORE_X_POS 675.75 CONST_FLOAT cfTLG_BLUE_LEVEL1_HI_SCORE_Y_POS 551.25 CONST_FLOAT cfTLG_BLUE_LEVEL1_WIN_X_POS 671.0 CONST_FLOAT cfTLG_BLUE_LEVEL1_WIN_Y_POS 533.250 CONST_FLOAT cfTLG_RED_LEVEL2_HI_DOLLAR_X_POS 846.625 CONST_FLOAT cfTLG_RED_LEVEL2_HI_DOLLAR_Y_POS 551.250 CONST_FLOAT cfTLG_RED_LEVEL2_HI_SCORE_X_POS 860.375 CONST_FLOAT cfTLG_RED_LEVEL2_HI_SCORE_Y_POS 551.25 CONST_FLOAT cfTLG_RED_LEVEL2_WIN_X_POS 854.125 CONST_FLOAT cfTLG_BLUE_LEVEL2_HI_SCORE_X_POS 1062.375 CONST_FLOAT cfTLG_BLUE_LEVEL2_WIN_X_POS 1057.75 CONST_FLOAT cfTLG_RED_LEVEL3_HI_DOLLAR_X_POS 1231.87 CONST_FLOAT cfTLG_RED_LEVEL3_HI_DOLLAR_Y_POS 551.250 CONST_FLOAT cfTLG_RED_LEVEL3_HI_SCORE_X_POS 1245.62 CONST_FLOAT cfTLG_RED_LEVEL3_HI_SCORE_Y_POS 551.25 CONST_FLOAT cfTLG_RED_LEVEL3_WIN_X_POS 1238.625 CONST_FLOAT cfTLG_BLUE_LEVEL3_HI_SCORE_X_POS 1446.875 CONST_FLOAT cfTLG_BLUE_LEVEL3_HI_SCORE_Y_POS 551.25 CONST_FLOAT cfTLG_BLUE_LEVEL3_WIN_X_POS 1442.0 CONST_FLOAT cfTLG_RED_LEVEL4_HI_DOLLAR_X_POS 655.25 CONST_FLOAT cfTLG_RED_LEVEL4_HI_DOLLAR_Y_POS 957.0 CONST_FLOAT cfTLG_RED_LEVEL4_HI_SCORE_X_POS 669.0 CONST_FLOAT cfTLG_RED_LEVEL4_HI_SCORE_Y_POS 957.0 CONST_FLOAT cfTLG_RED_LEVEL4_WIN_X_POS 663.625 CONST_FLOAT cfTLG_RED_LEVEL4_WIN_Y_POS 938.625 CONST_FLOAT cfTLG_BLUE_LEVEL4_HI_SCORE_X_POS 868.5 CONST_FLOAT cfTLG_BLUE_LEVEL4_HI_SCORE_Y_POS 957.0 CONST_FLOAT cfTLG_BLUE_LEVEL4_WIN_X_POS 863.625 CONST_FLOAT cfTLG_RED_LEVEL5_HI_DOLLAR_X_POS 1039.625 CONST_FLOAT cfTLG_RED_LEVEL5_HI_DOLLAR_Y_POS 957.0 CONST_FLOAT cfTLG_RED_LEVEL5_HI_SCORE_X_POS 1053.375 CONST_FLOAT cfTLG_RED_LEVEL5_HI_SCORE_Y_POS 957.0 CONST_FLOAT cfTLG_RED_LEVEL5_WIN_X_POS 1046.5 CONST_FLOAT cfTLG_BLUE_LEVEL5_HI_SCORE_X_POS 1252.625 CONST_FLOAT cfTLG_BLUE_LEVEL5_HI_SCORE_Y_POS 957.0 CONST_FLOAT cfTLG_BLUE_LEVEL5_WIN_X_POS 1248.0 CONST_FLOAT cfTLG_LEVEL_RED_SCORE_DOLLAR_X_POS 486.375 CONST_FLOAT cfTLG_LEVEL_RED_SCORE_DOLLAR_Y_POS 130.0 CONST_FLOAT cfTLG_LEVEL_RED_HI_SCORE_X_POS 592.125 CONST_FLOAT cfTLG_LEVEL_RED_HI_SCORE_Y_POS 130.0 CONST_FLOAT cfTLG_LEVEL_BLUE_SCORE_DOLLAR_X_POS 1247.625 CONST_FLOAT cfTLG_LEVEL_BLUE_SCORE_DOLLAR_Y_POS 130.0 CONST_FLOAT cfTLG_LEVEL_BLUE_HI_SCORE_X_POS 1353.625 CONST_FLOAT cfTLG_LEVEL_BLUE_HI_SCORE_Y_POS 130.0 CONST_FLOAT cfTLG_LEVEL_SCORE_WIN_RED_X_POS 717.375 CONST_FLOAT cfTLG_LEVEL_SCORE_WIN_RED_Y_POS 130.0 CONST_FLOAT cfTLG_LEVEL_SCORE_WIN_BLUE_X_POS 1481.375 CONST_FLOAT cfTLG_LEVEL_SCORE_WIN_BLUE_Y_POS 130.0 //-- Results Screen - Level Complete CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_SCORE_POS_X 998.75 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_SCORE_POS_Y 577.125 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_SCORE_SIZE_X 116.0 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_SCORE_SIZE_Y 56.0 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_SCORE_DOLLAR_POS_X 1208.5 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_SCORE_VAL_POS_X 1238.125 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_SCORE_VAL_POS_Y 574.25 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_POS_X 1031.125 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_POS_Y 637.125 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_VAL_POS_X 1209.875 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_VAL_POS_Y 636.625 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_SIZE_X 184.0 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_SIZE_Y 56.0 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_PERCENT_SIZE_X 28.0 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_PERCENT_SIZE_Y 36.0 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_POS_X 1027.875 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_POS_Y 697.125 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_SIZE_X 176.0 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_SIZE_Y 56.0 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_SAVED_POS_X 1210.875 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_SAVED_POS_Y 695.25 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_DOLLAR_POS_X 1277.25 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_DOLLAR_POS_Y 695.75 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_BONUS_POS_X 1302.875 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_BONUS_POS_Y 695.25 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_MULTI_POS_X 1245.125 CONST_FLOAT cfTLG_RESULTS_SCREEN_COMPLETE_HOSTAGES_MULTI_POS_Y 695.625 //-- Results Screen - Player Killed CONST_FLOAT cfTLG_RESULTS_SCREEN_DEAD_SCORE_POS_X 559.875 CONST_FLOAT cfTLG_RESULTS_SCREEN_DEAD_SCORE_POS_Y 599.375 CONST_FLOAT cfTLG_RESULTS_SCREEN_DEAD_SCORE_DOLLAR_POS_X 717.125 CONST_FLOAT cfTLG_RESULTS_SCREEN_DEAD_SCORE_DOLLAR_POS_Y 599.125 CONST_FLOAT cfTLG_RESULTS_SCREEN_DEAD_SCORE_VAL_POS_X 744.750 CONST_FLOAT cfTLG_RESULTS_SCREEN_DEAD_SCORE_VAL_POS_Y 598.875 //-- Results Screen - Game Complete CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_SCORE_POS_X 530.625 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_SCORE_POS_Y 625.5 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_SCORE_DOLLAR_POS_X 719.625 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_SCORE_DOLLAR_POS_Y 624.75 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_SCORE_VAL_POS_X 749.25 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_SCORE_VAL_POS_Y 625.375 CONST_FLOAT cfTLG_RESULTS_GAME_SCREEN_COMPLETE_ACCURACY_POS_X 562.625 CONST_FLOAT cfTLG_RESULTS_GAME_SCREEN_COMPLETE_ACCURACY_POS_Y 684.125 CONST_FLOAT cfTLG_RESULTS_GAME_SCREEN_COMPLETE_ACCURACY_VAL_POS_X 721.250 CONST_FLOAT cfTLG_RESULTS_GAME_SCREEN_COMPLETE_ACCURACY_VAL_POS_Y 684.000 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_POS_X 558.000 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_POS_Y 742.750 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_SAVED_POS_X 721.250 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_SAVED_POS_Y 742.250 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_MULTI_POS_X 755.500 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_MULTI_POS_Y 742.850 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_DOLLAR_POS_X 787.625 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_DOLLAR_POS_Y 742.975 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_BONUS_POS_X 813.25 CONST_FLOAT cfTLG_RESULTS_SCREEN_GAME_COMPLETE_HOSTAGES_BONUS_POS_Y 742.475 CONST_FLOAT cfTLG_HEADSHOT_LANE0_MIN_Y 0.0 CONST_FLOAT cfTLG_HEADSHOT_LANE0_MAX_Y 63.0 CONST_FLOAT cfTLG_HEADSHOT_LANE1_MIN_Y 0.0 CONST_FLOAT cfTLG_HEADSHOT_LANE1_MAX_Y 43.0 CONST_FLOAT cfTLG_HEADSHOT_LANE2_MIN_Y 0.0 CONST_FLOAT cfTLG_HEADSHOT_LANE2_MAX_Y 148.0 CONST_FLOAT cfTLG_HEADSHOT_LANE2_MIN_X 0.0 CONST_FLOAT cfTLG_HEADSHOT_LANE2_MAX_X 0.0 CONST_FLOAT cfTLG_HEADSHOT_COFFIN_MIN_X 58.25 CONST_FLOAT cfTLG_HEADSHOT_COFFIN_MAX_X 163.25 CONST_FLOAT cfTLG_HEADSHOT_COFFIN_MIN_Y 0.0 CONST_FLOAT cfTLG_HEADSHOT_COFFIN_MAX_Y 90.0 CONST_FLOAT cfTLG_HEADSHOT_OUTHOUSE_MIN_Y 126.5 CONST_FLOAT cfTLG_HEADSHOT_OUTHOUSE_MAX_Y 159.25 CONST_FLOAT cfTLG_DAMAGE_1_X_POS 1200.0 CONST_FLOAT cfTLG_DAMAGE_1_Y_POS 900.0 CONST_FLOAT cfTLG_DAMAGE_2_X_POS 500.0 CONST_FLOAT cfTLG_DAMAGE_2_Y_POS 400.0 CONST_FLOAT cfTLG_DAMAGE_3_X_POS 900.0 CONST_FLOAT cfTLG_DAMAGE_3_Y_POS 600.0 CONST_FLOAT cfTLG_DAMAGE_4_X_POS 1400.0 CONST_FLOAT cfTLG_DAMAGE_4_Y_POS 500.0 CONST_FLOAT cfTLG_DAMAGE_5_X_POS 900.0 CONST_FLOAT cfTLG_DAMAGE_5_Y_POS 300.0 CONST_FLOAT cfTLG_DAMAGE_BEAR_X_POS 913.75 CONST_FLOAT cfTLG_DAMAGE_BEAR_Y_POS 658.25 CONST_FLOAT cfTLG_TOWN_LEVEL_RIGHTMOST_ENTITY_X 1343.0 CONST_FLOAT cfTLG_FOREST_LEVEL_RIGHTMOST_ENTITY_X 1415.75 CONST_FLOAT cfTLG_MINE_LEVEL_RIGHTMOST_ENTITY_X 1420.0 CONST_FLOAT cfTLG_GRAVEYARD_LEVEL_RIGHTMOST_ENTITY_X 1535.250 CONST_FLOAT cfIAP_CONTROLLER_AXIS_THRESHOLD_MOD 1.0 CONST_INT ciTLG_ENEMY_TIME_TO_SHOOT 2000 CONST_INT ciTLG_PLAYER_CRITICAL_DAMAGE_NO_AMMO_TIME 1000 CONST_INT ciTLG_INVULNERABILTY_TIME 12000 CONST_INT ciTLG_HIDE_RETICULE_TIME 10000 CONST_INT ciTLG_MAX_ANIM_FRAMES 2 CONST_INT ciTLG_MAX_THROWING_FRAMES 4 CONST_INT ciTLG_MAX_CART_ANIM_FRAMES 4 CONST_INT ciTLG_EXPLOSION_MAX_ANIM_FRAMES 3 CONST_INT ciTLG_ENEMY_SHOT_MAX_ANIM_FRAMES 1 CONST_INT ciTLG_PLAYER_SHOT_MAX_ANIM_FRAMES 2 CONST_INT ciTLG_MAX_OUTHOUSE_ENEMY_ANIM_FRAMES 6 CONST_INT ciTLG_MAX_ENEMY_THROWN_DYNAMITE_ANIM_FRAMES 6 CONST_INT ciTLG_MAX_ENEMY_THROWN_EXPLOSION_ANIM_FRAMES 3 CONST_INT ciTLG_MAX_LOOT_CRATE_FX_ANIM_FRAMES 3 CONST_INT ciTLG_FEATHERS_MAX_ANIM_FRAMES 8 CONST_INT ciTLG_MAX_PROJECTILES 4 CONST_INT ciTLG_MAX_ENEMY_PROJECTILES 1 CONST_INT ciTLG_MAX_ENEMY_SHOT_AT_ONCE 4 CONST_INT ciTLG_MAX_COVER 50 CONST_INT ciTLG_MAX_SUITABLE_HIDE_BEHIND_COVER 8 CONST_INT ciTLG_MAX_FX 6 CONST_INT ciTLG_MAX_MENU_OPTIONS 7 CONST_INT ciTLG_MAX_PLAYERS 1 CONST_INT ciTLG_MAX_BACKGROUND_TILES 7 CONST_INT ciTLG_MAX_BACKGROUND_ELEMS 50 CONST_INT ciTLG_MAX_ENEMIES 40 CONST_INT ciTLG_MAX_HOSTAGES 9 CONST_INT ciTLG_MAX_ITEMS 12 CONST_INT ciTLG_MAX_SCREENS 5 CONST_INT MAX_PLAYER_HELD_WEAPONS 2 CONST_INT ciTLG_PLAYER_START_AMMO 99 CONST_INT ciTLG_PLAYER_WEAPON_PISTOL 0 CONST_INT ciTLG_MAX_SCORE_DIGITS 6 CONST_INT ciTLG_LANE_BACKGROUND 0 CONST_INT ciTLG_LANE_MIDDLE 1 CONST_INT ciTLG_LANE_FOREGROUND 2 CONST_INT ciTLG_LANE_POPUP_RHS 3 CONST_INT ciTLG_LANE_POPUP_LHS 4 CONST_INT ciTLG_MAX_LANES 5 CONST_INT ciTLG_STAGE_0 0 CONST_INT ciTLG_STAGE_1 1 CONST_INT ciTLG_STAGE_2 2 CONST_INT ciTLG_SCREEN_1 1 CONST_INT ciTLG_SCREEN_2 2 CONST_INT ciTLG_SCREEN_3 3 CONST_INT ciTLG_SCREEN_4 4 CONST_FLOAT cfTLG_DEFAULT_PIXEL_UPDATE 4.0 TWEAK_INT ciBASE_FPS 30 // Game States CONST_INT TLG_GAME_STATE_INIT 0 CONST_INT TLG_GAME_STATE_RUNNING 1 CONST_INT TLG_GAME_STATE_LEAVE 2 CONST_INT TLG_GAME_STATE_END 3 ENUM TLG_LEVELS TLG_LEVEL_DESERT = 0, TLG_LEVEL_TOWN, TLG_LEVEL_FOREST, TLG_LEVEL_MINE, TLG_LEVEL_GRAVEYARD, TLG_MAX_LEVELS ENDENUM ENUM TLG_ARCADE_CLIENT_STATE TLG_ARCADE_CLIENT_STATE_INIT = 0, TLG_ARCADE_CLIENT_STATE_REQUESTING_ASSETS, TLG_ARCADE_CLIENT_STATE_FIB, TLG_ARCADE_CLIENT_STATE_INTRO, TLG_ARCADE_CLIENT_STATE_TITLE_SCREEN, TLG_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU, TLG_ARCADE_CLIENT_STATE_INIT_LEVEL, TLG_ARCADE_CLIENT_STATE_PLAYING, TLG_ARCADE_CLIENT_STATE_RESULT_SCREEN, TLG_ARCADE_CLIENT_STATE_OUTRO_MOVIE, TLG_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD, TLG_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD, TLG_ARCADE_CLIENT_STATE_CLEANUP ENDENUM ENUM TLG_PLAYER_PED_ANIM_STATE TLG_PLAYER_PED_ANIM_IDLE, TLG_PLAYER_PED_ANIM_IDLE_TO_AIM, TLG_PLAYER_PED_ANIM_AIM_IDLE, TLG_PLAYER_PED_ANIM_PLAY_IDLE, TLG_PLAYER_PED_ANIM_AIM_IDLE_TO_LOSE_LIFE, TLG_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_STAGE, TLG_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_GAME ENDENUM ENUM TLG_LEVELS_BITSET TLG_LEVELS_BIT_SHOULD_STOP = 0, TLG_LEVELS_BIT_STOPPED, TLG_LEVELS_BIT_TOWN_LARGE_BUILDING_PASSED_BY1, TLG_LEVELS_BIT_REPLAYING_LEVEL, TLG_LEVELS_BIT_USED_SPECIAL_WEAPON, TLG_LEVELS_BIT_DONE_RESULTS_SCREEN_AUDIO, TLG_LEVELS_BIT_DAMAGED_BY_BEAR, TLG_LEVELS_BIT_ADDED_ON_ACCURACY_BONUS, TLG_LEVELS_BIT_PLAYED_DEATH_SCREEN_AUDIO, TLG_LEVELS_BIT_ADDED_ON_HOSTAGE_BONUS, TLG_LEVELS_BIT_PLAYED_RESULTS_SCORE_AUDIO, TLG_LEVELS_BIT_PLAYED_ACCURACY_SCORE_AUDIO, TLG_LEVELS_BIT_PLAYED_HOSTAGE_SCORE_AUDIO, TLG_LEVELS_BIT_PLAYED_RESULTS_DEAD_AUDIO ENDENUM ENUM TLG_PLAYER_BITSET TLG_PLAYER_BIT_INVULNERABILE, TLG_PLAYER_BIT_HIDE_RETICULE, TLG_PLAYER_BIT_INIT_NEW_CHAIN, TLG_PLAYER_BIT_GATLING_OVERHEAT, TLG_PLAYER_BIT_GATLING_STOPPED_SHOOTING, TLG_PLAYER_BIT_RELOADED_FIRST_BULLET ENDENUM ENUM TLG_COLLECTIBLE_TYPES TLG_HEALTH, TLG_SNAKE_OIL, TLG_SHERIFF, TLG_ALCOHOL, TLG_GOLD_BARS, TLG_REVOLVER_AMMO, TLG_MACHINE_GUN_AMMO, TLG_RIFLE_AMMO, TLG_SHOTGUN_AMMO ENDENUM ENUM TLG_CIVILIAN_TYPES TLG_GIRL = 0, TLG_GUY, TLG_PRISONER_1, TLG_PRISONER_2, TLG_PRISONER_3, TLG_VULTURE, TLG_EAGLE, TLG_BAT, TLG_MOUSE, TLG_SCORPION ENDENUM ENUM TLG_ENEMY_TYPES TLG_ENEMY_1 = 0, TLG_ENEMY_2, TLG_ENEMY_3, TLG_ENEMY_4, TLG_ENEMY_5, TLG_FOREGROUND_ENEMY_T1_1, TLG_FOREGROUND_ENEMY_T1_2, TLG_FOREGROUND_ENEMY_T1_3, TLG_FOREGROUND_ENEMY_T1_4, TLG_FOREGROUND_ENEMY_T1_5, TLG_FOREGROUND_ENEMY_T2_1, TLG_FOREGROUND_ENEMY_T2_2, TLG_FOREGROUND_ENEMY_T2_3, TLG_FOREGROUND_ENEMY_T2_4, TLG_FOREGROUND_ENEMY_T2_5, TLG_FOREGROUND_ENEMY_BEAR, TLG_CART_1, TLG_THROWING_ENEMY_1, TLG_OUTHOUSE_ENEMY, TLG_COFFIN_ENEMY ENDENUM ENUM TLG_ENEMY_PROJECTILE_TYPES TLG_ENEMY_PROJECTILE_DYNAMITE ENDENUM ENUM TLG_ENEMY_PROJECTILE_STATE TLG_ENEMY_PROJECTILE_STATE_INACTIVE, TLG_ENEMY_PROJECTILE_STATE_AIRBORNE, TLG_ENEMY_PROJECTILE_STATE_EXPLODE ENDENUM ENUM TLG_MENU_OPTIONS TLG_START = 0, TLG_SCORES, TLG_WANTED_1, TLG_WANTED_2, TLG_WANTED_3, TLG_WANTED_4, TLG_WANTED_5 ENDENUM ENUM TLG_LEVEL_STAGE TLG_FADING_IN = 0, TLG_PLAY, TLG_WAIT_FOR_DEAD, TLG_FADING_OUT ENDENUM ENUM TLG_ENEMY_STATE TLG_WAITING = 0, TLG_ACTIVE, TLG_SHOOTING, TLG_DYING, TLG_INACTIVE ENDENUM ENUM TLG_FX_TYPE TLG_FX_EXPLOSION, TLG_FX_ENEMY_SHOT, TLG_FX_IMPACT, TLG_FX_ENEMY_TNT_EXP, TLG_FX_LOOT_CRATE, TLG_FX_FEATHERS ENDENUM ENUM TLG_ASSET_TYPES TLG_ASSET_INVALID = -1, TLG_ASSET_OUTHOUSE = 0, TLG_ASSET_CACTUS_1, TLG_ASSET_CACTUS_2, TLG_ASSET_CACTUS_3, TLG_ASSET_CACTUS_4, TLG_ASSET_CRATE_1, TLG_ASSET_BUILDING_1, TLG_ASSET_BUILDING_2, TLG_ASSET_BUILDING_3, TLG_ASSET_BUILDING_4, TLG_ASSET_BUILDING_5, TLG_ASSET_BUILDING_6, TLG_ASSET_BUILDING_7, TLG_ASSET_BUILDING_8, TLG_ASSET_FENCE, TLG_ASSET_FENCE_SMALL, TLG_ASSET_CACTUS_5, TLG_ASSET_CACTUS_6, TLG_ASSET_CACTUS_7, TLG_ASSET_CACTUS_8, TLG_ASSET_CACTUS_9, TLG_ASSET_CACTUS_10, TLG_ASSET_CACTUS_11, TLG_ASSET_FOREST_TREE_1, TLG_ASSET_FOREST_TREE_2, TLG_ASSET_GRASS, TLG_ASSET_BUSH_1, TLG_ASSET_BUSH_2, TLG_ASSET_ROCK_SMALL, TLG_ASSET_ROCK_LARGE, TLG_ASSET_STACKED_CRATES_1, TLG_ASSET_STACKED_CRATES_2, TLG_ASSET_BARRELS, TLG_ASSET_BIG_TOMB, TLG_ASSET_TOMBSTONE_1, TLG_ASSET_TOMBSTONE_2, TLG_ASSET_TOMBSTONE_3, TLG_ASSET_TOMBSTONE_4, TLG_ASSET_TOMBSTONE_5, TLG_ASSET_COFFIN, TLG_ASSET_WATER_TOWER, TLG_ASSET_SPECIAL_TNT_CRATE, TLG_ASSET_SPECIAL_TNT_BARREL_1, TLG_ASSET_SPECIAL_TNT_BARREL_2, TLG_ASSET_SPECIAL_OUTHOUSE_HOST ENDENUM ENUM TLG_SCORE_TYPE TLG_SCORE_TYPE_ENEMY, TLG_SCORE_TYPE_ENEMY_HEADSHOT, TLG_SCORE_TYPE_SCENERY, TLG_SCORE_TYPE_ENEMY_EXPLOSION, TLG_SCORE_TYPE_ANIMAL ENDENUM ENUM TLG_SCORE_INTEGER_TYPE TLG_SCORE_INTEGER_TYPE_HI_SCORE, TLG_SCORE_INTEGER_TYPE_MY_SCORE, TLG_SCORE_INTEGER_TYPE_RED_SCORE, TLG_SCORE_INTEGER_TYPE_BLUE_SCORE ENDENUM ENUM TLG_PLAYER_WEAPON TLG_PLAYER_WEAPON_NONE = -1, TLG_PLAYER_WEAPON_PISTOL = 0, TLG_PLAYER_WEAPON_RIFLE, TLG_PLAYER_WEAPON_SHOTGUN, TLG_PLAYER_WEAPON_GATLING, TLG_PLAYER_WEAPON_MAX ENDENUM ENUM TLG_PLAYER_WEAPON_TYPE TLG_PLAYER_WEAPON_TYPE_DEFAULT = 0, TLG_PLAYER_WEAPON_TYPE_SPECIAL, TLG_PLAYER_WEAPON_TYPE_MAX ENDENUM ENUM TLG_AUDIO_SCENE TLG_AUDIO_SCENE_MENUS, TLG_AUDIO_SCENE_GAMEPLAY, TLG_AUDIO_SCENE_POWERUP_ACTIVE ENDENUM ENUM TLG_MUSIC_BITS TLG_MUSIC_BIT_STARTED_INTRO, TLG_MUSIC_BIT_STARTED_TITLE, TLG_MUSIC_BIT_STARTED_LEVEL, TLG_MUSIC_BIT_STOPPED, TLG_MUSIC_BIT_DEATH ENDENUM ENUM TLG_MUSIC_EVENTS TLG_MUSIC_EVENT_INVALID = -1, TLG_MUSIC_EVENT_INTRO, TLG_MUSIC_EVENT_TITLE, TLG_MUSIC_EVENT_GOSPEL, TLG_MUSIC_EVENT_BUCKLE, TLG_MUSIC_EVENT_HILLBILLY, TLG_MUSIC_EVENT_RUCKUS, TLG_MUSIC_EVENT_BARREL, TLG_MUSIC_EVENT_DEATH, TLG_MUSIC_EVENT_STOP ENDENUM ENUM TLG_AUDIO_EFFECT TLG_AUDIO_EFFECT_GET_READY, TLG_AUDIO_EFFECT_DRAW, TLG_AUDIO_EFFECT_SELECT_STAGE, TLG_AUDIO_EFFECT_STAGE_LOCKED, TLG_AUDIO_EFFECT_MENU_BACK, TLG_AUDIO_EFFECT_SWAP_WEAPON, TLG_AUDIO_EFFECT_RELOAD, TLG_AUDIO_EFFECT_BULLET_HIT_BODY, TLG_AUDIO_EFFECT_BULLET_HIT_BARREL, TLG_AUDIO_EFFECT_BULLET_HIT_LATRINE, TLG_AUDIO_EFFECT_BULLET_HIT_COFFIN, TLG_AUDIO_EFFECT_BULLET_HIT_BUSH, TLG_AUDIO_EFFECT_BULLET_HIT_CACTUS, TLG_AUDIO_EFFECT_BULLET_HIT_ROCK, TLG_AUDIO_EFFECT_BULLET_HIT_MISS, TLG_AUDIO_EFFECT_BULLET_HIT_OPTION, TLG_AUDIO_EFFECT_BULLET_HIT_START, TLG_AUDIO_EFFECT_BULLET_HIT_GENERIC, TLG_AUDIO_EFFECT_BULLET_HIT_FART, TLG_AUDIO_EFFECT_REVOLVER_COCKED, TLG_AUDIO_EFFECT_REVOLVER_FIRE, TLG_AUDIO_EFFECT_REVOLVER_EMPTY, // TLG_AUDIO_EFFECT_REVOLVER_RELOAD, TLG_AUDIO_EFFECT_RIFLE_FIRE, TLG_AUDIO_EFFECT_RIFLE_COCKED, TLG_AUDIO_EFFECT_RIFLE_EMPTY, // TLG_AUDIO_EFFECT_RIFLE_RELOAD, TLG_AUDIO_EFFECT_SHOTGUN_FIRE, TLG_AUDIO_EFFECT_SHOTGUN_COCKED, TLG_AUDIO_EFFECT_SHOTGUN_EMPTY, /// TLG_AUDIO_EFFECT_SHOTGUN_RELOAD, TLG_AUDIO_EFFECT_GATLING_FIRE, TLG_AUDIO_EFFECT_REVOLVER_RELOAD_FIRST, TLG_AUDIO_EFFECT_REVOLVER_RELOAD_SINGLE, TLG_AUDIO_EFFECT_REVOLVER_RELOAD_LAST, TLG_AUDIO_EFFECT_RIFLE_RELOAD_FIRST, TLG_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE, TLG_AUDIO_EFFECT_RIFLE_RELOAD_LAST, TLG_AUDIO_EFFECT_SHOTGUN_RELOAD_FIRST, TLG_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE, TLG_AUDIO_EFFECT_SHOTGUN_RELOAD_LAST, TLG_AUDIO_EFFECT_GATLING_OVERHEAT, TLG_AUDIO_EFFECT_SHOOT_GATLING_OVERHEAT, TLG_AUDIO_EFFECT_PLAYER_HEALTH_DEAD, TLG_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW, TLG_AUDIO_EFFECT_PLAYER_HEALTH_LOW, TLG_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM, TLG_AUDIO_EFFECT_PLAYER_HEALTH_HIGH, TLG_AUDIO_EFFECT_PLAYER_NEW_GUN, TLG_AUDIO_EFFECT_ENEMY_DEAD, TLG_AUDIO_EFFECT_ENEMY_INJURED, TLG_AUDIO_EFFECT_ENEMY_RIFLE_AIM, TLG_AUDIO_EFFECT_ENEMY_RIFLE_FIRE, TLG_AUDIO_EFFECT_ENEMY_CRIT_WARNING, TLG_AUDIO_EFFECT_ENEMY_THROW_DYNAMITE, TLG_AUDIO_EFFECT_RESULTS_SCORE_UPDATE, TLG_AUDIO_EFFECT_EXP_CART, TLG_AUDIO_EFFECT_EXP_GENERIC, TLG_AUDIO_EFFECT_EXP_DYNAMITE, TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_HELP, TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_DEATH, TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_PAIN, TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_ESCAPE, TLG_AUDIO_EFFECT_HOSTAGE_MALE_HELP, TLG_AUDIO_EFFECT_HOSTAGE_MALE_DEATH, TLG_AUDIO_EFFECT_HOSTAGE_MALE_PAIN, TLG_AUDIO_EFFECT_HOSTAGE_MALE_ESCAPE, TLG_AUDIO_EFFECT_HOSTAGE_CHAINGANG_HELP, TLG_AUDIO_EFFECT_HOSTAGE_CHAINGANG_DEATH, TLG_AUDIO_EFFECT_HOSTAGE_CHAINGANG_PAIN, TLG_AUDIO_EFFECT_HOSTAGE_CHAINGANG_ESCAPE, TLG_AUDIO_EFFECT_BAT_APPEAR, TLG_AUDIO_EFFECT_BAT_DEATH, TLG_AUDIO_EFFECT_BEAR_APPEAR, TLG_AUDIO_EFFECT_BEAR_DEATH, TLG_AUDIO_EFFECT_BEAR_ATTACK, TLG_AUDIO_EFFECT_EAGLE_APPEAR, TLG_AUDIO_EFFECT_EAGLE_DEATH, TLG_AUDIO_EFFECT_RAT_APPEAR, TLG_AUDIO_EFFECT_RAT_DEATH, TLG_AUDIO_EFFECT_SCORPION_APPEAR, TLG_AUDIO_EFFECT_SCORPION_DEATH, TLG_AUDIO_EFFECT_VULTURE_APPEAR, TLG_AUDIO_EFFECT_VULTURE_DEATH, TLG_AUDIO_EFFECT_PICKUP_HEALTH, TLG_AUDIO_EFFECT_PICKUP_SHERIFF, TLG_AUDIO_EFFECT_PICKUP_SNAKE_OIL, TLG_AUDIO_EFFECT_PICKUP_RUN_OUT, TLG_AUDIO_EFFECT_PLAYER_START, TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL1_GOSPEL_GANGSTERS, TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL2_BUCKLE_BUNNIES, TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL3_HILLBILLY_HOODLUMS, TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL4_RUCKUS_RANGERS, TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL5_BARREL_FEVER_BOYS, TLG_AUDIO_EFFECT_PLAYER_RELOAD, TLG_AUDIO_EFFECT_PLAYER_SHOOT_OUTHOUSE, TLG_AUDIO_EFFECT_PLAYER_SHOOT_COFFIN, TLG_AUDIO_EFFECT_PLAYER_SHOOT_HEADSHOT, TLG_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL, TLG_AUDIO_EFFECT_PLAYER_AWARD_PISTOLS, TLG_AUDIO_EFFECT_PLAYER_AWARD_SHARPHSOOTER, TLG_AUDIO_EFFECT_PLAYER_AWARD_DEADEYE, TLG_AUDIO_EFFECT_PLAYER_SCORE_BAD, TLG_AUDIO_EFFECT_PLAYER_SCORE_AVERAGE, TLG_AUDIO_EFFECT_PLAYER_SCORE_GOOD, TLG_AUDIO_EFFECT_PLAYER_SCORE_AMAZING, TLG_AUDIO_EFFECT_PLAYER_GATLING_GUN, TLG_AUDIO_EFFECT_PLAYER_SHOTGUN, TLG_AUDIO_EFFECT_PLAYER_RIFLE, TLG_AUDIO_EFFECT_PLAYER_COMPLETE_LEVEL, TLG_AUDIO_EFFECT_PLAYER_DEATH, TLG_AUDIO_EFFECT_PLAYER_RESULTS_DEAD, TLG_AUDIO_EFFECT_PLAYER_FINISH_GAME, TLG_AUDIO_EFFECT_POWERUP, TLG_AUDIO_EFFECT_POWERDOWN, TLG_AUDIO_EFFECT_MAX ENDENUM ENUM TLG_HELP_TEXT_BITS TLG_HELP_TEXT_BIT_SHOOT_AIM = 0, TLG_HELP_TEXT_BIT_RELOAD, TLG_HELP_TEXT_BIT_HEADSHOT, TLG_HELP_TEXT_BIT_CHAIN, TLG_HELP_TEXT_BIT_CHEST, TLG_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT, TLG_HELP_TEXT_BIT_DEADEYE, TLG_HELP_TEXT_BIT_SHARPSHOOTER_BRONZE, TLG_HELP_TEXT_BIT_SHARPSHOOTER_SILVER, TLG_HELP_TEXT_BIT_SHARPSHOOTER_GOLD, TLG_HELP_TEXT_BIT_SHARPSHOOTER_PLATINUM, TLG_HELP_TEXT_BIT_PISTOLS_AT_DAWN ENDENUM ENUM TLG_HOSTAGE_BITSET TLG_HOSTAGE_BIT_APPEARED_ONSCREEN = 0, TLG_HOSTAGE_BIT_SAVED ENDENUM ENUM TLG_DAMAGE_PLAYER_TYPES TLG_DAMAGE_PLAYER_TYPE_BULLET, TLG_DAMAGE_PLAYER_TYPE_DYNAMITE, TLG_DAMAGE_PLAYER_TYPE_BEAR, TLG_DAMAGE_PLAYER_TYPE_SNAKE_OIL ENDENUM ENUM TLG_CHALLENGES TLG_CHALLENGE_SHARPSHOOTER_PLATINUM = 0, TLG_CHALLENGE_DEADEYE, TLG_CHALLENGE_PISTOLS_AT_DAWN, TLG_CHALLENGE_SHARPSHOOTER_BRONZE, TLG_CHALLENGE_SHARPSHOOTER_SILVER, TLG_CHALLENGE_SHARPSHOOTER_GOLD ENDENUM #IF IS_DEBUG_BUILD FUNC STRING TLG_DEBUG_GET_TLG_ARCADE_CLIENT_STATE_AS_STRING(TLG_ARCADE_CLIENT_STATE eValue) SWITCH eValue CASE TLG_ARCADE_CLIENT_STATE_INIT RETURN "TLG_ARCADE_CLIENT_STATE_INIT" CASE TLG_ARCADE_CLIENT_STATE_REQUESTING_ASSETS RETURN "TLG_ARCADE_CLIENT_STATE_REQUESTING_ASSETS" CASE TLG_ARCADE_CLIENT_STATE_FIB RETURN "TLG_ARCADE_CLIENT_STATE_FIB" CASE TLG_ARCADE_CLIENT_STATE_INTRO RETURN "TLG_ARCADE_CLIENT_STATE_INTRO" CASE TLG_ARCADE_CLIENT_STATE_TITLE_SCREEN RETURN "TLG_ARCADE_CLIENT_STATE_TITLE_SCREEN" CASE TLG_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU RETURN "TLG_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU" CASE TLG_ARCADE_CLIENT_STATE_INIT_LEVEL RETURN "TLG_ARCADE_CLIENT_STATE_INIT_LEVEL" CASE TLG_ARCADE_CLIENT_STATE_PLAYING RETURN "TLG_ARCADE_CLIENT_STATE_PLAYING" CASE TLG_ARCADE_CLIENT_STATE_RESULT_SCREEN RETURN "TLG_ARCADE_CLIENT_STATE_RESULT_SCREEN" CASE TLG_ARCADE_CLIENT_STATE_OUTRO_MOVIE RETURN "TLG_ARCADE_CLIENT_STATE_OUTRO_MOVIE" CASE TLG_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD RETURN "TLG_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD" CASE TLG_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD RETURN "TLG_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD" CASE TLG_ARCADE_CLIENT_STATE_CLEANUP RETURN "TLG_ARCADE_CLIENT_STATE_CLEANUP" ENDSWITCH RETURN "INVALID TLG_ARCADE_CLIENT_STATE" ENDFUNC FUNC STRING TLG_GET_ENEMY_STATE_AS_STRING(TLG_ENEMY_STATE eState) /* TLG_WAITING TLG_ACTIVE TLG_SHOOTING TLG_DYING TLG_INACTIVE */ SWITCH eState CASE TLG_WAITING RETURN "TLG_WAITING" CASE TLG_ACTIVE RETURN "TLG_ACTIVE" CASE TLG_SHOOTING RETURN "TLG_SHOOTING" CASE TLG_DYING RETURN "TLG_DYING" CASE TLG_INACTIVE RETURN "TLG_INACTIVE" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_ENEMY_TYPE_AS_STRING(TLG_ENEMY_TYPES eType) SWITCH eType CASE TLG_ENEMY_1 RETURN "TLG_ENEMY_1" CASE TLG_ENEMY_2 RETURN "TLG_ENEMY_2" CASE TLG_ENEMY_3 RETURN "TLG_ENEMY_3" CASE TLG_ENEMY_4 RETURN "TLG_ENEMY_4" CASE TLG_ENEMY_5 RETURN "TLG_ENEMY_5" CASE TLG_FOREGROUND_ENEMY_T1_1 RETURN "TLG_FOREGROUND_ENEMY_T1_1" CASE TLG_FOREGROUND_ENEMY_T1_2 RETURN "TLG_FOREGROUND_ENEMY_T1_2" CASE TLG_FOREGROUND_ENEMY_T1_3 RETURN "TLG_FOREGROUND_ENEMY_T1_3" CASE TLG_FOREGROUND_ENEMY_T1_4 RETURN "TLG_FOREGROUND_ENEMY_T1_4" CASE TLG_FOREGROUND_ENEMY_T1_5 RETURN "TLG_FOREGROUND_ENEMY_T1_5" CASE TLG_FOREGROUND_ENEMY_T2_1 RETURN "TLG_FOREGROUND_ENEMY_T2_1" CASE TLG_FOREGROUND_ENEMY_T2_2 RETURN "TLG_FOREGROUND_ENEMY_T2_2" CASE TLG_FOREGROUND_ENEMY_T2_3 RETURN "TLG_FOREGROUND_ENEMY_T2_3" CASE TLG_FOREGROUND_ENEMY_T2_4 RETURN "TLG_FOREGROUND_ENEMY_T2_4" CASE TLG_FOREGROUND_ENEMY_T2_5 RETURN "TLG_FOREGROUND_ENEMY_T2_5" CASE TLG_FOREGROUND_ENEMY_BEAR RETURN "TLG_FOREGROUND_ENEMY_BEAR" CASE TLG_CART_1 RETURN "TLG_CART_1" CASE TLG_THROWING_ENEMY_1 RETURN "TLG_THROWING_ENEMY_1" CASE TLG_OUTHOUSE_ENEMY RETURN "TLG_OUTHOUSE_ENEMY" CASE TLG_COFFIN_ENEMY RETURN "TLG_COFFIN_ENEMY" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_ASSET_TYPE_AS_STRING(TLG_ASSET_TYPES eType) SWITCH eType CASE TLG_ASSET_INVALID RETURN "TLG_ASSET_INVALID" CASE TLG_ASSET_OUTHOUSE RETURN "TLG_ASSET_OUTHOUSE" CASE TLG_ASSET_CACTUS_1 RETURN "TLG_ASSET_CACTUS_1" CASE TLG_ASSET_CACTUS_2 RETURN "TLG_ASSET_CACTUS_2" CASE TLG_ASSET_CACTUS_3 RETURN "TLG_ASSET_CACTUS_3" CASE TLG_ASSET_CACTUS_4 RETURN "TLG_ASSET_CACTUS_4" CASE TLG_ASSET_CRATE_1 RETURN "TLG_ASSET_CRATE_1" CASE TLG_ASSET_BUILDING_1 RETURN "TLG_ASSET_BUILDING_1" CASE TLG_ASSET_BUILDING_2 RETURN "TLG_ASSET_BUILDING_2" CASE TLG_ASSET_BUILDING_3 RETURN "TLG_ASSET_BUILDING_3" CASE TLG_ASSET_BUILDING_4 RETURN "TLG_ASSET_BUILDING_4" CASE TLG_ASSET_BUILDING_5 RETURN "TLG_ASSET_BUILDING_5" CASE TLG_ASSET_BUILDING_6 RETURN "TLG_ASSET_BUILDING_6" CASE TLG_ASSET_BUILDING_7 RETURN "TLG_ASSET_BUILDING_7" CASE TLG_ASSET_BUILDING_8 RETURN "TLG_ASSET_BUILDING_8" CASE TLG_ASSET_FENCE RETURN "TLG_ASSET_FENCE" CASE TLG_ASSET_FENCE_SMALL RETURN "TLG_ASSET_FENCE_SMALl" CASE TLG_ASSET_CACTUS_5 RETURN "TLG_ASSET_CACTUS_5" CASE TLG_ASSET_CACTUS_6 RETURN "TLG_ASSET_CACTUS_6" CASE TLG_ASSET_CACTUS_7 RETURN "TLG_ASSET_CACTUS_7" CASE TLG_ASSET_CACTUS_8 RETURN "TLG_ASSET_CACTUS_8" CASE TLG_ASSET_CACTUS_9 RETURN "TLG_ASSET_CACTUS_9" CASE TLG_ASSET_CACTUS_10 RETURN "TLG_ASSET_CACTUS_10" CASE TLG_ASSET_CACTUS_11 RETURN "TLG_ASSET_CACTUS_11" CASE TLG_ASSET_FOREST_TREE_1 RETURN "TLG_ASSET_FOREST_TREE_1" CASE TLG_ASSET_FOREST_TREE_2 RETURN "TLG_ASSET_FOREST_TREE_2" CASE TLG_ASSET_GRASS RETURN "TLG_ASSET_GRASS" CASE TLG_ASSET_BUSH_1 RETURN "TLG_ASSET_BUSH_1" CASE TLG_ASSET_BUSH_2 RETURN "TLG_ASSET_BUSH_2" CASE TLG_ASSET_ROCK_SMALL RETURN "TLG_ASSET_ROCK_SMALL" CASE TLG_ASSET_ROCK_LARGE RETURN "TLG_ASSET_ROCK_LARGE" CASE TLG_ASSET_STACKED_CRATES_1 RETURN "TLG_ASSET_STACKED_CRATES_1" CASE TLG_ASSET_STACKED_CRATES_2 RETURN "TLG_ASSET_STACKED_CRATES_2" CASE TLG_ASSET_BARRELS RETURN "TLG_ASSET_BARRELS" CASE TLG_ASSET_BIG_TOMB RETURN "TLG_ASSET_BIG_TOMB" CASE TLG_ASSET_TOMBSTONE_1 RETURN "TLG_ASSET_TOMBSTONE_1" CASE TLG_ASSET_TOMBSTONE_2 RETURN "TLG_ASSET_TOMBSTONE_2" CASE TLG_ASSET_TOMBSTONE_3 RETURN "TLG_ASSET_TOMBSTONE_3" CASE TLG_ASSET_TOMBSTONE_4 RETURN "TLG_ASSET_TOMBSTONE_4" CASE TLG_ASSET_TOMBSTONE_5 RETURN "TLG_ASSET_TOMBSTONE_5" CASE TLG_ASSET_COFFIN RETURN "TLG_ASSET_COFFIN" CASE TLG_ASSET_WATER_TOWER RETURN "TLG_ASSET_WATER_TOWER" CASE TLG_ASSET_SPECIAL_TNT_CRATE RETURN "TLG_ASSET_SPECIAL_TNT_CRATE" CASE TLG_ASSET_SPECIAL_TNT_BARREL_1 RETURN "TLG_ASSET_SPECIAL_TNT_BARREL_1" CASE TLG_ASSET_SPECIAL_TNT_BARREL_2 RETURN "TLG_ASSET_SPECIAL_TNT_BARREL_2" CASE TLG_ASSET_SPECIAL_OUTHOUSE_HOST RETURN "TLG_ASSET_SPECIAL_OUTHOUSE_HOST" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_COLLECTIBLE_TYPE_AS_STRING(TLG_COLLECTIBLE_TYPES eType) SWITCH eType CASE TLG_HEALTH RETURN "TLG_HEALTH" CASE TLG_SNAKE_OIL RETURN "TLG_SNAKE_OIL" CASE TLG_SHERIFF RETURN "TLG_SHERIFF" CASE TLG_GOLD_BARS RETURN "TLG_GOLD_BARS" CASE TLG_REVOLVER_AMMO RETURN "TLG_REVOLVER_AMMO" CASE TLG_MACHINE_GUN_AMMO RETURN "TLG_MACHINE_GUN_AMMO" CASE TLG_SHOTGUN_AMMO RETURN "TLG_SHOTGUN_AMMO" CASE TLG_RIFLE_AMMO RETURN "TLG_RIFLE_AMMO" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_DEBUG_GET_TLG_PLAYER_PED_ANIM_STATE_AS_STRING(TLG_PLAYER_PED_ANIM_STATE eState) SWITCH eState CASE TLG_PLAYER_PED_ANIM_IDLE RETURN "TLG_PLAYER_PED_ANIM_IDLE" CASE TLG_PLAYER_PED_ANIM_IDLE_TO_AIM RETURN "TLG_PLAYER_PED_ANIM_IDLE_TO_AIM" CASE TLG_PLAYER_PED_ANIM_AIM_IDLE RETURN "TLG_PLAYER_PED_ANIM_AIM_IDLE" CASE TLG_PLAYER_PED_ANIM_PLAY_IDLE RETURN "TLG_PLAYER_PED_ANIM_PLAY_IDLE" CASE TLG_PLAYER_PED_ANIM_AIM_IDLE_TO_LOSE_LIFE RETURN "TLG_PLAYER_PED_ANIM_AIM_IDLE_TO_LOSE_LIFE" CASE TLG_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_STAGE RETURN "TLG_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_STAGE" CASE TLG_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_GAME RETURN "TLG_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_GAME" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_SERVER_STATE_AS_STRING(INT iState) SWITCH iState CASE TLG_GAME_STATE_INIT RETURN "GAME_STATE_INIT" CASE TLG_GAME_STATE_RUNNING RETURN "GAME_STATE_RUNNING" CASE TLG_GAME_STATE_LEAVE RETURN "GAME_STATE_LEAVE" CASE TLG_GAME_STATE_END RETURN "GAME_STATE_END" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_SCORE_TYPE_AS_STRING(TLG_SCORE_TYPE score) SWITCH score CASE TLG_SCORE_TYPE_ENEMY RETURN "TLG_SCORE_TYPE_ENEMY" CASE TLG_SCORE_TYPE_ENEMY_HEADSHOT RETURN "TLG_SCORE_TYPE_ENEMY_HEADSHOT" CASE TLG_SCORE_TYPE_SCENERY RETURN "TLG_SCORE_TYPE_SCENERY" CASE TLG_SCORE_TYPE_ENEMY_EXPLOSION RETURN "TLG_SCORE_TYPE_ENEMY_EXPLOSION" CASE TLG_SCORE_TYPE_ANIMAL RETURN "TLG_SCORE_TYPE_ANIMAL" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_LEVEL_NAME_AS_STRING(TLG_LEVELS level) SWITCH level CASE TLG_LEVEL_DESERT RETURN "TLG_LEVEL_DESERT" CASE TLG_LEVEL_TOWN RETURN "TLG_LEVEL_TOWN" CASE TLG_LEVEL_FOREST RETURN "TLG_LEVEL_FOREST" CASE TLG_LEVEL_MINE RETURN "TLG_LEVEL_MINE" CASE TLG_LEVEL_GRAVEYARD RETURN "TLG_LEVEL_GRAVEYARD" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_PLAYER_WEAPON_AS_STRING(TLG_PLAYER_WEAPON weapon) SWITCH weapon CASE TLG_PLAYER_WEAPON_NONE RETURN "TLG_PLAYER_WEAPON_NONE" CASE TLG_PLAYER_WEAPON_PISTOL RETURN "TLG_PLAYER_WEAPON_PISTOL" CASE TLG_PLAYER_WEAPON_GATLING RETURN "TLG_PLAYER_WEAPON_GATLING" CASE TLG_PLAYER_WEAPON_SHOTGUN RETURN "TLG_PLAYER_WEAPON_SHOTGUN" CASE TLG_PLAYER_WEAPON_RIFLE RETURN "TLG_PLAYER_WEAPON_RIFLE" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_PLAYER_WEAPON_TYPE_AS_STRING(TLG_PLAYER_WEAPON_TYPE type) SWITCH type CASE TLG_PLAYER_WEAPON_TYPE_DEFAULT RETURN "TLG_PLAYER_WEAPON_TYPE_DEFAULT" CASE TLG_PLAYER_WEAPON_TYPE_SPECIAL RETURN "TLG_PLAYER_WEAPON_TYPE_SPECIAL" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_HELP_TEXT_BIT_AS_STRING(TLG_HELP_TEXT_BITS eHelp) SWITCH eHelp CASE TLG_HELP_TEXT_BIT_SHOOT_AIM RETURN "TLG_HELP_TEXT_BIT_SHOOT_AIM" CASE TLG_HELP_TEXT_BIT_RELOAD RETURN "TLG_HELP_TEXT_BIT_RELOAD" CASE TLG_HELP_TEXT_BIT_HEADSHOT RETURN "TLG_HELP_TEXT_BIT_HEADSHOT" CASE TLG_HELP_TEXT_BIT_CHAIN RETURN "TLG_HELP_TEXT_BIT_CHAIN" CASE TLG_HELP_TEXT_BIT_CHEST RETURN "TLG_HELP_TEXT_BIT_CHEST" CASE TLG_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT RETURN "TLG_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT" CASE TLG_HELP_TEXT_BIT_SHARPSHOOTER_BRONZE RETURN "TLG_HELP_TEXT_BIT_SHARPSHOOTER_BRONZE" CASE TLG_HELP_TEXT_BIT_SHARPSHOOTER_SILVER RETURN "TLG_HELP_TEXT_BIT_SHARPSHOOTER_SILVER" CASE TLG_HELP_TEXT_BIT_SHARPSHOOTER_GOLD RETURN "TLG_HELP_TEXT_BIT_SHARPSHOOTER_GOLD" CASE TLG_HELP_TEXT_BIT_SHARPSHOOTER_PLATINUM RETURN "TLG_HELP_TEXT_BIT_SHARPSHOOTER_PLATINUM" CASE TLG_HELP_TEXT_BIT_PISTOLS_AT_DAWN RETURN "TLG_HELP_TEXT_BIT_PISTOLS_AT_DAWN" CASE TLG_HELP_TEXT_BIT_DEADEYE RETURN "TLG_HELP_TEXT_BIT_DEADEYE" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_LEVELS_BIT_AS_STRING(TLG_LEVELS_BITSET eBit) SWITCH eBit CASE TLG_LEVELS_BIT_SHOULD_STOP RETURN "TLG_LEVELS_BIT_SHOULD_STOP" CASE TLG_LEVELS_BIT_STOPPED RETURN "TLG_LEVELS_BIT_STOPPED" CASE TLG_LEVELS_BIT_REPLAYING_LEVEL RETURN "TLG_LEVELS_BIT_REPLAYING_LEVEL" CASE TLG_LEVELS_BIT_USED_SPECIAL_WEAPON RETURN "TLG_LEVELS_BIT_USED_SPECIAL_WEAPON" CASE TLG_LEVELS_BIT_DONE_RESULTS_SCREEN_AUDIO RETURN "TLG_LEVELS_BIT_DONE_RESULTS_SCREEN_AUDIO" CASE TLG_LEVELS_BIT_TOWN_LARGE_BUILDING_PASSED_BY1 RETURN "TLG_LEVELS_BIT_TOWN_LARGE_BUILDING_PASSED_BY1" CASE TLG_LEVELS_BIT_DAMAGED_BY_BEAR RETURN "TLG_LEVELS_BIT_DAMAGED_BY_BEAR" CASE TLG_LEVELS_BIT_ADDED_ON_ACCURACY_BONUS RETURN "TLG_LEVELS_BIT_ADDED_ON_ACCURACY_BONUS" CASE TLG_LEVELS_BIT_ADDED_ON_HOSTAGE_BONUS RETURN "TLG_LEVELS_BIT_ADDED_ON_HOSTAGE_BONUS" CASE TLG_LEVELS_BIT_PLAYED_DEATH_SCREEN_AUDIO RETURN "TLG_LEVELS_BIT_PLAYED_DEATH_SCREEN_AUDIO" CASE TLG_LEVELS_BIT_PLAYED_RESULTS_DEAD_AUDIO RETURN "TLG_LEVELS_BIT_PLAYED_RESULTS_DEAD_AUDIO" CASE TLG_LEVELS_BIT_PLAYED_HOSTAGE_SCORE_AUDIO RETURN "TLG_LEVELS_BIT_PLAYED_HOSTAGE_SCORE_AUDIO" CASE TLG_LEVELS_BIT_PLAYED_ACCURACY_SCORE_AUDIO RETURN "TLG_LEVELS_BIT_PLAYED_ACCURACY_SCORE_AUDIO" CASE TLG_LEVELS_BIT_PLAYED_RESULTS_SCORE_AUDIO RETURN "TLG_LEVELS_BIT_PLAYED_RESULTS_SCORE_AUDIO" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_PLAYER_BIT_AS_STRING(TLG_PLAYER_BITSET eBit) SWITCH eBit CASE TLG_PLAYER_BIT_INVULNERABILE RETURN "TLG_PLAYER_BIT_INVULNERABILE" CASE TLG_PLAYER_BIT_HIDE_RETICULE RETURN "TLG_PLAYER_BIT_HIDE_RETICULE" CASE TLG_PLAYER_BIT_INIT_NEW_CHAIN RETURN "TLG_PLAYER_BIT_INIT_NEW_CHAIN" CASE TLG_PLAYER_BIT_GATLING_OVERHEAT RETURN "TLG_PLAYER_BIT_GATLING_OVERHEAT" CASE TLG_PLAYER_BIT_GATLING_STOPPED_SHOOTING RETURN "TLG_PLAYER_BIT_GATLING_STOPPED_SHOOTING" CASE TLG_PLAYER_BIT_RELOADED_FIRST_BULLET RETURN "TLG_PLAYER_BIT_RELOADED_FIRST_BULLET" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_HOSTAGE_BIT_AS_STRING(TLG_HOSTAGE_BITSET eBit) SWITCH eBit CASE TLG_HOSTAGE_BIT_APPEARED_ONSCREEN RETURN "TLG_HOSTAGE_BIT_APPEARED_ONSCREEN" CASE TLG_HOSTAGE_BIT_SAVED RETURN "TLG_HOSTAGE_BIT_SAVED" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_ENEMY_THROWN_PROJECTILE_TYPE_AS_STRING(TLG_ENEMY_PROJECTILE_TYPES eType) SWITCH eType CASE TLG_ENEMY_PROJECTILE_DYNAMITE RETURN "TLG_ENEMY_PROJECTILE_DYNAMITE" ENDSWITCH RETURN "UNKNOWKN" ENDFUNC FUNC STRING TLG_GET_ENEMY_THROWN_PROJECTILE_STATE_AS_STRING(TLG_ENEMY_PROJECTILE_STATE eState) SWITCH eState CASE TLG_ENEMY_PROJECTILE_STATE_INACTIVE RETURN "TLG_ENEMY_PROJECTILE_STATE_INACTIVE" CASE TLG_ENEMY_PROJECTILE_STATE_AIRBORNE RETURN "TLG_ENEMY_PROJECTILE_STATE_AIRBORNE" CASE TLG_ENEMY_PROJECTILE_STATE_EXPLODE RETURN "TLG_ENEMY_PROJECTILE_STATE_EXPLODE" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_DAMAGE_PLAYER_TYPE_AS_STRING(TLG_DAMAGE_PLAYER_TYPES eType) SWITCH eType CASE TLG_DAMAGE_PLAYER_TYPE_BULLET RETURN "TLG_DAMAGE_PLAYER_TYPE_BULLET" CASE TLG_DAMAGE_PLAYER_TYPE_DYNAMITE RETURN "TLG_DAMAGE_PLAYER_TYPE_DYNAMITE" CASE TLG_DAMAGE_PLAYER_TYPE_BEAR RETURN "TLG_DAMAGE_PLAYER_TYPE_BEAR" CASE TLG_DAMAGE_PLAYER_TYPE_SNAKE_OIL RETURN "TLG_DAMAGE_PLAYER_TYPE_SNAKE_OIL" ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING TLG_GET_HOSTAGE_TYPE_AS_STRING(TLG_CIVILIAN_TYPES eHostage) SWITCH eHostage CASE TLG_GIRL RETURN "TLG_GIRL" CASE TLG_GUY RETURN "TLG_GU," CASE TLG_PRISONER_1 RETURN "TLG_PRISONER_1" CASE TLG_PRISONER_2 RETURN "TLG_PRISONER_2" CASE TLG_PRISONER_3 RETURN "TLG_PRISONER_3" CASE TLG_VULTURE RETURN "TLG_VULTURE," CASE TLG_EAGLE RETURN "TLG_EAGLE" CASE TLG_BAT RETURN "TLG_BAT" CASE TLG_MOUSE RETURN "TLG_MOUSE" CASE TLG_SCORPION RETURN "TLG_SCORPION" ENDSWITCH RETURN "Unknown" ENDFUNC FUNC STRING TLG_GET_FX_TYPE_AS_STRING(TLG_FX_TYPE eType) SWITCH eType CASE TLG_FX_EXPLOSION RETURN "TLG_FX_EXPLOSION" CASE TLG_FX_ENEMY_SHOT RETURN "TLG_FX_ENEMY_SHOT" CASE TLG_FX_IMPACT RETURN "TLG_FX_IMPACT" CASE TLG_FX_ENEMY_TNT_EXP RETURN "TLG_FX_ENEMY_TNT_EXP" CASE TLG_FX_LOOT_CRATE RETURN "TLG_FX_LOOT_CRATE" CASE TLG_FX_FEATHERS RETURN "TLG_FX_FEATHERS" ENDSWITCH RETURN "UNKNOWN" ENDFUNC #ENDIF STRUCT TLG_COVER_DATA BOOL bRendering = FALSE BOOL bSpawnedPickup = FALSE BOOL bIsSpecialCover = FALSE BOOL bIsAnimated = FALSE // BOOL bRenderAfterWarp = FALSE INT iRenderAfterWarpCount INT iWarpCount BOOL bNeverRender = FALSE INT iCoverLane INT iHitCount INT iDefaultFrameTimeCounter INT iDefaultUpdateFrames INT iSlowFrameTimeCounter INT iSlowUpdateFrames INT iSpriteAnimFrame TLG_ASSET_TYPES eType VECTOR_2D vSpritePos VECTOR_2D vSpriteInitialPos FLOAT fCoverWidth FLOAT fCoverHeight INT iActiveInStage INT iScreen ENDSTRUCT STRUCT ENEMY_PROJECTILE_DATA INT iSlowFrameTimeCounter INT iSlowUpdateFrames INT iSpriteAnimFrame INT iLane TLG_ENEMY_PROJECTILE_STATE eState TLG_ENEMY_PROJECTILE_TYPES eType VECTOR_2D vSpritePos VECTOR_2D vSpriteSize 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 TLG_FX_DATA BOOL bActive = FALSE INT iSpriteBlastAnimFrame INT iSlowFrameTimeCounter INT iSlowUpdateFrames INT iLane = 0 TLG_FX_TYPE eFXType VECTOR_2D vSpritePos ENDSTRUCT STRUCT TLG_EQUIPPED_WEAPON_DATA INT iAmmoInClip INT iTotalAmmo INT iLastShotTime INT iReloadSingleBulletTime ENDSTRUCT STRUCT TLG_PLAYER_DATA BOOL bHasJustShot BOOL bCovering BOOL bHoveringEnemy BOOL bShouldShowReloadPrompt INT iProjectileIndex INT iLastShotTime INT iLastProjectileTime = 0 INT iGatlingOverheatTime = 0 INT iDeadTime = 0 INT iReloadPromptShowTime = 0 BOOL bDoneReloadEffect TLG_PLAYER_WEAPON_TYPE weaponType = TLG_PLAYER_WEAPON_TYPE_DEFAULT TLG_PLAYER_WEAPON specialWeapon = TLG_PLAYER_WEAPON_NONE TLG_EQUIPPED_WEAPON_DATA weaponData[TLG_PLAYER_WEAPON_TYPE_MAX] BOOL bIsReloading[TLG_PLAYER_WEAPON_TYPE_MAX] // INT iAmmo = ciTLG_PLAYER_START_AMMO // INT iWeapon = 0 INT iHitCountdown INT iSuccessiveHits INT iChainedScore INT iScoreNoChain INT iPreviousTargetScore INT iPlayerBitset INT iInvulnerableTimer INT iHideReticuleTimer INT iNoAmmoTimer FLOAT fRotation FLOAT fHealth = 1.0 FLOAT fGatlingGunTemp = 0.0 VECTOR_2D vSpritePos VECTOR_2D vSpriteMarkerPos BULLET_DATA sBulletData[ciTLG_MAX_PROJECTILES] ENDSTRUCT STRUCT TLG_ENEMY_DATA BOOL bReverse BOOL bIsPopup BOOL bPlayedAimAudio BOOL bPlayedCriticalWarningAudio BOOL bWaitUntilLevelStationary BOOL bShotAtLeastOnce BOOL bThrownProjectile BOOL bOuthouseAudio BOOL bAppearedOnscreen TLG_ENEMY_TYPES iEnemyType = 0 TLG_ENEMY_STATE eState = TLG_INACTIVE INT iJumpDistance INT iDefaultFrameTimeCounter INT iDefaultUpdateFrames INT iSlowFrameTimeCounter INT iSlowUpdateFrames INT iSpriteAnimFrame INT iHealth = 10 INT iEnemyFlashTimer INT iTimeOfLastShot INT iPopUpTime INT iEnemyLane INT iLevelStage INT iWarpedForMovingLevelCount INT iRenderAfterWarpedCount = 0 INT iOnScreenTime FLOAT fStoppingX = 500.0 VECTOR_2D vSpritePos VECTOR_2D vStartPos VECTOR_2D vSize ENDSTRUCT STRUCT TLG_HOSTAGE_DATA BOOL bSpawned = FALSE BOOL bRendering = FALSE BOOL bDying = FALSE BOOL bGoingBack = FALSE INT iJumpDistance INT iDefaultFrameTimeCounter INT iDefaultUpdateFrames INT iSlowFrameTimeCounter INT iSlowUpdateFrames INT iSpriteAnimFrame INT iHealth = 10 TLG_CIVILIAN_TYPES eHostageType = TLG_GIRL INT iHostageLane = 0 INT iBitset FLOAT fStoppingX = 500.0 VECTOR_2D vSpritePos VECTOR_2D vSize ENDSTRUCT STRUCT TLG_COLLECTIBLE_DATA BOOL bSpawned = FALSE BOOL bRendering = FALSE BOOL bShot = FALSE TLG_COLLECTIBLE_TYPES eItemType = TLG_HEALTH INT iLane = 0 INT iRenderAfterWarpCount INT iWarpCount INT iMinActiveStage VECTOR_2D vSpritePos VECTOR_2D vSize ENDSTRUCT STRUCT TLG_MENU_OPTION_DATA TLG_ARCADE_CLIENT_STATE eClientState = TLG_ARCADE_CLIENT_STATE_TITLE_SCREEN TLG_MENU_OPTIONS eMenuOption VECTOR_2D vSpritePos VECTOR_2D vSize ENDSTRUCT STRUCT TLG_BACKGROUND_SPRITE BOOL bRendering = FALSE VECTOR_2D vSpritePos VECTOR_2D vSpriteSize STRING sSprite INT iLane ENDSTRUCT STRUCT TLG_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 STRUCT TLG_ARCADE_DATA #IF IS_DEBUG_BUILD WIDGET_GROUP_ID widgetGroupExample BOOL bDebugCreatedWidgets INT iMyScores[TLG_MAX_LEVELS] FLOAT fTexturePosX[3] FLOAT fTexturePosY[3] FLOAT fTextureScale[3] 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 iDebugTotalStages 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 iDebugSharpShooter 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 bDebugAwardDeadeye BOOL bDebugAwardSharpshooter BOOL bDebugAwardSetSharpshooter BOOL bDebugAwardPistols BOOL bDebugAwardComplete BOOL bDebugAwardTrophy BOOL bClearAwardStats BOOL bDebugLaunchDynamite BOOL bDebugClearDynamite TEXT_WIDGET_ID twDebugId #ENDIF BOOL bFadingOut = FALSE BOOL bLevelsCompleted[TLG_MAX_LEVELS] INT iLastMenuInput = 0 INT iExplosionIndex = 0 INT iCurrentActiveEnemies[ciTLG_MAX_LANES] INT iTimeSinceEnemyActive[ciTLG_MAX_LANES] INT iFade = 0 INT iNumberOfBackgroundElements = 0 INT iNumberOfEnemies = 0 INT iNumberOfThrownEnemyProjectiles = 0 INT iNumberOfHostages = 0 INT iNumberOfProps = 0 INT iNumberOfItems = 0 INT iNumberOfMenuOptions = 0 INT iLocalLevelRunningTime INT iResultsScreenTimer INT iTotalTimePlayed INT iTimer INT iRivalPart INT iStaggeredOnScreenViableCoverCount INT iHelpTextBitset = 0 INT iLevelBitset[TLG_MAX_LEVELS] INT iLevelCurrentStage[TLG_MAX_LEVELS] INT iTotalLevelShots[TLG_MAX_LEVELS] INT iTotalLevelEnemyHits[TLG_MAX_LEVELS] INT iTotalLevelEnemyHeadShots[TLG_MAX_LEVELS] INT iTotalLevelBirdsShot[TLG_MAX_LEVELS] INT iTotalLevelHostagesSaved[TLG_MAX_LEVELS] INT iTotalPowerupsCollected[TLG_MAX_LEVELS] INT iChallengesBitsetForTelemetry INT iScreenToStopOn INT iLastScreenToStopOn INT iRightMostCover FLOAT fRightMostCoverX INT iCurrentScreen INT iPropToStopOn[ciTLG_MAX_SCREENS] INT iNumberOfViableOnScreenCoverPoints INT iViableOnScreenEnemyCoverPoints[ciTLG_MAX_SUITABLE_HIDE_BEHIND_COVER] TLG_ARCADE_CLIENT_STATE eClientState RGBA_COLOUR_STRUCT rgbaBlack RGBA_COLOUR_STRUCT rgbaSprite RGBA_COLOUR_STRUCT rgbaWhite RGBA_COLOUR_STRUCT rgbaRed RGBA_COLOUR_STRUCT rgbaEnemyShot RGBA_COLOUR_STRUCT rgbaGreen RGBA_COLOUR_STRUCT rgbaSpriteUsedBullet RGBA_COLOUR_STRUCT rgbaYellow TLG_LEVELS eCurrentLevel = TLG_LEVEL_TOWN TLG_LEVEL_STAGE eLevelStage = TLG_FADING_IN // TLG_MENU_OPTIONS eCurrentTitleOption = TLG_START TLG_PLAYER_DATA sPlayerData[ciTLG_MAX_PLAYERS] TLG_COVER_DATA sCoverData[ciTLG_MAX_COVER] TLG_FX_DATA sFXData[ciTLG_MAX_FX] TLG_BACKGROUND_SPRITE sBackgroundTilesData[ciTLG_MAX_BACKGROUND_TILES] TLG_BACKGROUND_SPRITE sBackgroundData[ciTLG_MAX_BACKGROUND_ELEMS] TLG_ENEMY_DATA sEnemyData[CITLG_MAX_ENEMIES] TLG_HOSTAGE_DATA sHostageData[ciTLG_MAX_HOSTAGES] TLG_COLLECTIBLE_DATA sItemData[ciTLG_MAX_ITEMS] ENEMY_PROJECTILE_DATA sEnemyProjectiles[ciTLG_MAX_ENEMY_PROJECTILES] TLG_MENU_OPTION_DATA sMenuOptionsData[ciTLG_MAX_MENU_OPTIONS] SCRIPT_CONTROL_HOLD_TIMER sControlTimer SCRIPT_CONTROL_HOLD_TIMER sPcQuitTimer ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeAnimData BOOL bDoneReactionAnim TLG_PLAYER_PED_ANIM_STATE ePlayerPedAnimState = TLG_PLAYER_PED_ANIM_IDLE INT iBearAttackTime INT iIdleAnimCount BOOL bPlayedWinningAnim BOOL bWonTrophyThisSession BOOL bPlayedOutroAudio BOOL bPlayedOutro BINK_MOVIE_ID bmIdTlgIntro BINK_MOVIE_ID bmIdTlgOutro INT iResultsScreenTimeout INT iReturnToMenuTimeout INT iMusicBitset INT iSoundId[TLG_AUDIO_EFFECT_MAX] //INT iEffectFlashDurationTimer //FLOAT fTotalTimeTaken INT iEffectFlashAlpha FLOAT fEffectFlashAlpha BOOL bEffectHitmaxAlpha FLOAT fCurrentTimeStep ARCADE_GAMES_LEADERBOARD_DATA sLbData TEXT_LABEL_31 tl31BaseTextDict TEXT_LABEL_31 tl31TitleTextDict TEXT_LABEL_31 tl31HudTextDict TEXT_LABEL_31 tl31FacadeTextDict TEXT_LABEL_31 tl31LevelSelectTextDict TEXT_LABEL_31 tl31LevelCompTextDict TEXT_LABEL_31 tl31Level1TextDict TEXT_LABEL_31 tl31Level2TextDict TEXT_LABEL_31 tl31Level3TextDict TEXT_LABEL_31 tl31Level4TextDict TEXT_LABEL_31 tl31Level5TextDict TEXT_LABEL_31 tl31EnemiesTextDict TEXT_LABEL_31 tl31ForegroundEnemiesATextDict TEXT_LABEL_31 tl31ForegroundEnemiesBTextDict TEXT_LABEL_31 tl31ForegroundEnemiesCTextDict TEXT_LABEL_31 tl31GameplayCommonTextDict TEXT_LABEL_31 tl31HostagesTextDict TEXT_LABEL_31 tl31ResultsTextDict TEXT_LABEL_31 tl31LeaderboardTextDict TEXT_LABEL_31 tl31CommonPropsTextDict TEXT_LABEL_31 tl31DeadTextDict ENDSTRUCT TLG_ARCADE_DATA sTLGData #IF IS_DEBUG_BUILD FUNC VECTOR_2D GET_DEBUG_TEXTURE_POS(INT iDebugTexture) RETURN INIT_VECTOR_2D(sTLGData.fTexturePosX[iDebugTexture], sTLGData.fTexturePosY[iDebugTexture]) ENDFUNC FUNC FLOAT GET_DEBUG_TEXTURE_SCALE(INT iDebugTexture) RETURN sTLGData.fTextureScale[iDebugTexture] ENDFUNC FUNC INT TLG_GET_DEBUG_INTEGER() RETURN sTLGData.iDebugIntegerValue ENDFUNC FUNC FLOAT TLG_GET_DEBUG_FLOAT() RETURN sTLGData.fDebugFloatValue ENDFUNC #ENDIF STRUCT TLG_PART_DATA INT iHiScoreForLevel[TLG_MAX_LEVELS] INT iCurrentScoreForLevel[TLG_MAX_LEVELS] ENDSTRUCT // Everyone can read this data, only the server can update it. STRUCT TLG_SERVER_BROADCAST_DATA INT iServerGameState INT iNumPlayers INT iServerBitset INT iMatchId INT iSortLbForPart TLG_PART_DATA sPlayerScores[2] ARCADE_GAMES_LEADERBOARD_STRUCT sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS] BOOL bLeaderboardRecieved = FALSE ENDSTRUCT TLG_SERVER_BROADCAST_DATA tlgServerBd CONST_INT ciTLG_MAX_MP_PLAYERS 2 ENUM TLG_PLAYER_BD_BITS TLG_PLAYER_BD_BIT_EDITING_LEADERBOARD = 0 ENDENUM STRUCT TLG_PLAYER_BROADCAST_DATA INT iGameState INT iPlayerBitset INT iPlayerScore[TLG_MAX_LEVELS] INT iPlayerHiScore[TLG_MAX_LEVELS] INT iLeaderboardInitials INT iLeaderboardScore = 0 ENDSTRUCT TLG_PLAYER_BROADCAST_DATA playerBd[2] ENUM TLG_SERVER_BITS TLG_SERVER_BIT_TWO_PLAYERS_JOINED = 0, TLG_SERVER_BIT_SOMEONE_EDITING_LEADERBOARD, TLG_SERVER_BIT_SORTED_LEADERBOARD ENDENUM PROC TLG_INIT_TEXTURE_DICTIONARIES() sTLGData.tl31BaseTextDict = "MPLastGunslingers" sTLGData.tl31TitleTextDict = "MPLastGunslingersTitle" sTLGData.tl31HudTextDict = "MPLastGunslingersHud" sTLGData.tl31FacadeTextDict = "MPLastGunslingersFacade" sTLGData.tl31LevelSelectTextDict = "MPLastGunslingersLevels" sTLGData.tl31LevelCompTextDict = "MPLastGunslingersLevelsComp" sTLGData.tl31Level1TextDict = "MPLastGunslingersLevel1" sTLGData.tl31Level2TextDict = "MPLastGunslingersLevel2" sTLGData.tl31Level3TextDict = "MPLastGunslingersLevel3" sTLGData.tl31Level4TextDict = "MPLastGunslingersLevel4" sTLGData.tl31Level5TextDict = "MPLastGunslingersLevel5" sTLGData.tl31EnemiesTextDict = "MPLastGunslingersEnemy" sTLGData.tl31ForegroundEnemiesATextDict = "MPLastGunslingersEnemyFGA" sTLGData.tl31ForegroundEnemiesBTextDict = "MPLastGunslingersEnemyFGB" sTLGData.tl31ForegroundEnemiesCTextDict = "MPLastGunslingersEnemyFGC" sTLGData.tl31GameplayCommonTextDict = "MPLastGunslingersCommon" sTLGData.tl31HostagesTextDict = "MPLastGunslingersHost" sTLGData.tl31CommonPropsTextDict = "MPLastGunslingersProps" sTLGData.tl31ResultsTextDict = "MPLastGunslingersResult" sTLGData.tl31DeadTextDict = "MPLastGunslingersDead" ENDPROC FUNC TEXT_LABEL_31 TLG_GET_BASE_TEXTURE_DIC() RETURN sTLGData.tl31BaseTextDict ENDFUNC FUNC TLG_MUSIC_EVENTS TLG_GET_MUSIC_EVENT_FOR_LEVEL(TLG_LEVELS eLevel) SWITCH eLevel CASE TLG_LEVEL_DESERT RETURN TLG_MUSIC_EVENT_GOSPEL CASE TLG_LEVEL_TOWN RETURN TLG_MUSIC_EVENT_BUCKLE CASE TLG_LEVEL_FOREST RETURN TLG_MUSIC_EVENT_HILLBILLY CASE TLG_LEVEL_MINE RETURN TLG_MUSIC_EVENT_RUCKUS CASE TLG_LEVEL_GRAVEYARD RETURN TLG_MUSIC_EVENT_BARREL ENDSWITCH RETURN TLG_MUSIC_EVENT_INVALID ENDFUNC FUNC STRING TLG_GET_MUSIC_EVENT_FROM_ENUM(TLG_MUSIC_EVENTS eEvent) SWITCH eEvent CASE TLG_MUSIC_EVENT_INTRO RETURN "ARCADE_BR_INTRO_OS" CASE TLG_MUSIC_EVENT_TITLE RETURN "ARCADE_BR_TITLE_CARD" CASE TLG_MUSIC_EVENT_GOSPEL RETURN "ARCADE_BR_TRACK_1" CASE TLG_MUSIC_EVENT_BUCKLE RETURN "ARCADE_BR_TRACK_2" CASE TLG_MUSIC_EVENT_HILLBILLY RETURN "ARCADE_BR_TRACK_4" CASE TLG_MUSIC_EVENT_RUCKUS RETURN "ARCADE_BR_TRACK_6" CASE TLG_MUSIC_EVENT_BARREL RETURN "ARCADE_BR_TRACK_9" CASE TLG_MUSIC_EVENT_STOP RETURN "ARCADE_BADLANDS_REVENGE_STOP" CASE TLG_MUSIC_EVENT_DEATH RETURN "ARCADE_BR_DEATH" ENDSWITCH RETURN "UNKNOWN" ENDFUNC PROC TLG_TRIGGER_MUSIC_EVENT(TLG_MUSIC_EVENTS eEvent) TEXT_LABEL_31 tl31MusicEvent = TLG_GET_MUSIC_EVENT_FROM_ENUM(eEvent) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] [TLG_TRIGGER_MUSIC_EVENT] {DSW} Event: ", tl31MusicEvent) TRIGGER_MUSIC_EVENT(tl31MusicEvent) ENDPROC PROC TLG_PREPARE_MUSIC_EVENT(TLG_MUSIC_EVENTS eEvent) TEXT_LABEL_31 tl31MusicEvent = TLG_GET_MUSIC_EVENT_FROM_ENUM(eEvent) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] [TLG_PREPARE_MUSIC_EVENT] {DSW} Event: ", tl31MusicEvent) PREPARE_MUSIC_EVENT(tl31MusicEvent) ENDPROC PROC TLG_CANCEL_MUSIC_EVENT(TLG_MUSIC_EVENTS eEvent) TEXT_LABEL_31 tl31MusicEvent = TLG_GET_MUSIC_EVENT_FROM_ENUM(eEvent) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] [TLG_CANCEL_MUSIC_EVENT] {DSW} Event: ", tl31MusicEvent) CANCEL_MUSIC_EVENT(tl31MusicEvent) ENDPROC //PROC TLG_CANCEL_MUSIC_EVENT(TLG_MUSIC_EVENTS eEvent) // TEXT_LABEL_31 tl31MusicEvent = TLG_GET_MUSIC_EVENT_FROM_ENUM(eEvent) // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] [TLG_PREPARE_MUSIC_EVENT] {DSW} Event: ", tl31MusicEvent) // PREPARE_MUSIC_EVENT(tl31MusicEvent) //ENDPROC PROC TLG_GET_AUDIO_STRINGS_FROM_ENUM(TLG_AUDIO_EFFECT eSound, TEXT_LABEL_31 &tl31SoundName, TEXT_LABEL_63 &tl63BankName) SWITCH eSound CASE TLG_AUDIO_EFFECT_GET_READY tl31SoundName = "VO_Get_Ready" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_DRAW tl31SoundName = "VO_Draw" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SELECT_STAGE tl31SoundName = "Select_stage" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RELOAD tl31SoundName = "VO_Reload" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_STAGE_LOCKED tl31SoundName = "Select_Stage_Failed" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_MENU_BACK tl31SoundName = "Menu_Back" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_MISS tl31SoundName = "Shoot_Miss" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_OPTION tl31SoundName = "Shoot_Option" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_START tl31SoundName = "Press_Start" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RESULTS_SCORE_UPDATE tl31SoundName = "Calculate_Score_Total" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_GENERIC tl31SoundName = "Hit_Generic" tl63BankName = "DLC_H3_ArcMac_BR2_Bullet_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_BODY tl31SoundName = "Hit_Body" tl63BankName = "DLC_H3_ArcMac_BR2_Bullet_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_BARREL tl31SoundName = "Hit_Barrel" tl63BankName = "DLC_H3_ArcMac_BR2_Bullet_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_LATRINE tl31SoundName = "Hit_Latrine" tl63BankName = "DLC_H3_ArcMac_BR2_Bullet_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_COFFIN tl31SoundName = "Hit_Coffin" tl63BankName = "DLC_H3_ArcMac_BR2_Bullet_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_BUSH tl31SoundName = "Hit_Bush" tl63BankName = "DLC_H3_ArcMac_BR2_Bullet_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_CACTUS tl31SoundName = "Hit_Cactus" tl63BankName = "DLC_H3_ArcMac_BR2_Bullet_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_ROCK tl31SoundName = "Hit_Rock" tl63BankName = "DLC_H3_ArcMac_BR2_Bullet_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BULLET_HIT_FART tl31SoundName = "Hit_Latrine_Fart" tl63BankName = "DLC_H3_ArcMac_BR2_Bullet_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SWAP_WEAPON tl31SoundName = "Weapon_Change" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_REVOLVER_FIRE tl31SoundName = "Revolver_Fire" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_REVOLVER_COCKED tl31SoundName = "Revolver_Cock" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_REVOLVER_EMPTY tl31SoundName = "Revolver_Dry_Fire" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK // CASE TLG_AUDIO_EFFECT_REVOLVER_RELOAD tl31SoundName = "Revolver_Reload" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_REVOLVER_RELOAD_FIRST tl31SoundName = "Revolver_Reload_First" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_REVOLVER_RELOAD_SINGLE tl31SoundName = "Revolver_Reload" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_REVOLVER_RELOAD_LAST tl31SoundName = "Revolver_Reload_Last" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RIFLE_FIRE tl31SoundName = "Rifle_Fire" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RIFLE_COCKED tl31SoundName = "Rifle_Cock" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RIFLE_EMPTY tl31SoundName = "Rifle_Dry_Fire" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK // CASE TLG_AUDIO_EFFECT_RIFLE_RELOAD tl31SoundName = "Rifle_Reload" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RIFLE_RELOAD_FIRST tl31SoundName = "Rifle_Reload_First" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE tl31SoundName = "Rifle_Reload" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RIFLE_RELOAD_LAST tl31SoundName = "Rifle_Reload_Last" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SHOTGUN_FIRE tl31SoundName = "Shotgun_Fire" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SHOTGUN_COCKED tl31SoundName = "Shotgun_Cock" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SHOTGUN_EMPTY tl31SoundName = "Shotgun_Dry_Fire" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK // CASE TLG_AUDIO_EFFECT_SHOTGUN_RELOAD tl31SoundName = "Shotgun_Reload" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SHOTGUN_RELOAD_FIRST tl31SoundName = "Shotgun_Reload_First" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE tl31SoundName = "Shotgun_Reload" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SHOTGUN_RELOAD_LAST tl31SoundName = "Shotgun_Reload_Last" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_GATLING_OVERHEAT tl31SoundName = "Gatling_Overheat" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SHOOT_GATLING_OVERHEAT tl31SoundName = "Gatling_Dry_Fire" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_GATLING_FIRE tl31SoundName = "Gatling" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_HEALTH_DEAD tl31SoundName = "Death" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW tl31SoundName = "Pain_Near_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_HEALTH_LOW tl31SoundName = "Pain_High" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM tl31SoundName = "Pain_Med" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_HEALTH_HIGH tl31SoundName = "Pain_Low" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Sounds" BREAK CASE TLG_AUDIO_EFFECT_ENEMY_DEAD tl31SoundName = "Death" tl63BankName = "DLC_H3_ArcMac_BR2_Enemy_Sounds" BREAK CASE TLG_AUDIO_EFFECT_ENEMY_INJURED tl31SoundName = "Pain" tl63BankName = "DLC_H3_ArcMac_BR2_Enemy_Sounds" BREAK CASE TLG_AUDIO_EFFECT_ENEMY_RIFLE_AIM tl31SoundName = "Rifle_Aim" tl63BankName = "DLC_H3_ArcMac_BR2_Enemy_Sounds" BREAK CASE TLG_AUDIO_EFFECT_ENEMY_RIFLE_FIRE tl31SoundName = "Rifle_Fire" tl63BankName = "DLC_H3_ArcMac_BR2_Enemy_Sounds" BREAK CASE TLG_AUDIO_EFFECT_ENEMY_CRIT_WARNING tl31SoundName = "Critical_Hit_Warn" tl63BankName = "DLC_H3_ArcMac_BR2_Enemy_Sounds" BREAK CASE TLG_AUDIO_EFFECT_ENEMY_THROW_DYNAMITE tl31SoundName = "Dynamite_Throw" tl63BankName = "DLC_H3_ArcMac_BR2_Enemy_Sounds" BREAK CASE TLG_AUDIO_EFFECT_EXP_CART tl31SoundName = "Cart" tl63BankName = "DLC_H3_ArcMac_BR2_Explosion_Sounds" BREAK CASE TLG_AUDIO_EFFECT_EXP_GENERIC tl31SoundName = "Generic" tl63BankName = "DLC_H3_ArcMac_BR2_Explosion_Sounds" BREAK CASE TLG_AUDIO_EFFECT_EXP_DYNAMITE tl31SoundName = "Dynamite" tl63BankName = "DLC_H3_ArcMac_BR2_Explosion_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_HELP tl31SoundName = "Female_Help" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_DEATH tl31SoundName = "Female_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_ESCAPE tl31SoundName = "Female_Escape" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_PAIN tl31SoundName = "Female_Pain" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_MALE_HELP tl31SoundName = "Male_Help" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_MALE_DEATH tl31SoundName = "Male_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_MALE_ESCAPE tl31SoundName = "Male_Escape" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_MALE_PAIN tl31SoundName = "Male_Pain" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_CHAINGANG_HELP tl31SoundName = "Male_Help" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_CHAINGANG_DEATH tl31SoundName = "Male_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_CHAINGANG_ESCAPE tl31SoundName = "Male_Escape" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_HOSTAGE_CHAINGANG_PAIN tl31SoundName = "Male_Pain" tl63BankName = "DLC_H3_ArcMac_BR2_Hostage_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BAT_APPEAR tl31SoundName = "Bat_Appear" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BAT_DEATH tl31SoundName = "Bat_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BEAR_APPEAR tl31SoundName = "Bear_Appear" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BEAR_DEATH tl31SoundName = "Bear_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_BEAR_ATTACK tl31SoundName = "Bear_Attack" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_EAGLE_APPEAR tl31SoundName = "Eagle_Appear" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_EAGLE_DEATH tl31SoundName = "Eagle_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RAT_APPEAR tl31SoundName = "Rat_Appear" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_RAT_DEATH tl31SoundName = "Rat_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SCORPION_APPEAR tl31SoundName = "Scorpion_Appear" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_SCORPION_DEATH tl31SoundName = "Scorpion_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_VULTURE_APPEAR tl31SoundName = "Vulture_Appear" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_VULTURE_DEATH tl31SoundName = "Vulture_Death" tl63BankName = "DLC_H3_ArcMac_BR2_Animal_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PICKUP_HEALTH tl31SoundName = "Medicine" tl63BankName = "DLC_H3_ArcMac_BR2_Pickup_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PICKUP_SNAKE_OIL tl31SoundName = "Snake_Oil" tl63BankName = "DLC_H3_ArcMac_BR2_Pickup_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PICKUP_SHERIFF tl31SoundName = "Sheriff_Badge" tl63BankName = "DLC_H3_ArcMac_BR2_Pickup_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PICKUP_RUN_OUT tl31SoundName = "Run_Out" tl63BankName = "DLC_H3_ArcMac_BR2_Pickup_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_START tl31SoundName = "Start_Game" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL1_GOSPEL_GANGSTERS tl31SoundName = "Level_Select_Gospel_Gangsters" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL2_BUCKLE_BUNNIES tl31SoundName = "Level_Select_Buckle_Bunnies" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL3_HILLBILLY_HOODLUMS tl31SoundName = "Level_Select_Hillbilly_Hoodlums" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL4_RUCKUS_RANGERS tl31SoundName = "Level_Select_Ruckus_Rangers" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_CHOOSE_LVL5_BARREL_FEVER_BOYS tl31SoundName = "Level_Select_Barrel_Fever_Boys" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_RELOAD tl31SoundName = "Reload" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_SHOOT_OUTHOUSE tl31SoundName = "Shoot_Outhouse" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_SHOOT_COFFIN tl31SoundName = "Shoot_Coffin" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_SHOOT_HEADSHOT tl31SoundName = "Headshot" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL tl31SoundName = "Shoot_Critter" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_AWARD_PISTOLS tl31SoundName = "Award_Pistols_At_Dawn" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_AWARD_SHARPHSOOTER tl31SoundName = "Award_Sharpshooter" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_AWARD_DEADEYE tl31SoundName = "Award_Deadeye" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_SCORE_BAD tl31SoundName = "Level_Complete_Bad" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_SCORE_AVERAGE tl31SoundName = "Level_Complete_Average" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_SCORE_GOOD tl31SoundName = "Level_Complete_Good" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_SCORE_AMAZING tl31SoundName = "Level_Complete_Amazing" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_GATLING_GUN tl31SoundName = "Weapon_Select_Gatlinggun" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_SHOTGUN tl31SoundName = "Weapon_Select_Shotgun" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_RIFLE tl31SoundName = "Weapon_Select_Rifle" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_NEW_GUN tl31SoundName = "Get_New_Gun" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_COMPLETE_LEVEL tl31SoundName = "Beat_Level" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_DEATH tl31SoundName = "Death" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_RESULTS_DEAD tl31SoundName = "Dead_Text" tl63BankName = "DLC_H3_ArcMac_BR2_Frontend_Sounds" BREAK CASE TLG_AUDIO_EFFECT_PLAYER_FINISH_GAME tl31SoundName = "Finish_Game" tl63BankName = "DLC_H3_ArcMac_BR2_Player_Speech_Sounds" BREAK CASE TLG_AUDIO_EFFECT_POWERUP tl31SoundName = "Powerup_Loop" tl63BankName = "DLC_H3_ArcMac_BR2_Pickup_Sounds" BREAK CASE TLG_AUDIO_EFFECT_POWERDOWN tl31SoundName = "Powerdown_Loop" tl63BankName = "DLC_H3_ArcMac_BR2_Pickup_Sounds" BREAK ENDSWITCH ENDPROC FUNC BOOL TLG_HAS_SOUND_FINISHED(TLG_AUDIO_EFFECT effect) IF sTLGDATA.iSoundId[effect] = -1 RETURN TRUE ENDIF RETURN HAS_SOUND_FINISHED(sTLGDATA.iSoundId[effect]) ENDFUNC //PROC TLG_PLAY_SOUND_FRONT_END(TLG_AUDIO_EFFECT effect) // TEXT_LABEL_23 tl23Sound // TEXT_LABEL_63 tl63Bank // TLG_GET_AUDIO_STRINGS_FROM_ENUM(effect,tl23Sound, tl63Bank) // // #IF IS_DEBUG_BUILD // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_PLAY_SOUND_FRONT_END] Sound: ", tl23Sound, " Bank: ",tl63Bank) // DEBUG_PRINTCALLSTACK() // #ENDIF // // IF sTLGDATA.iSoundId[effect] = -1 // sTLGDATA.iSoundId[effect] = GET_SOUND_ID() // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_PLAY_SOUND_FRONT_END] Got sound ID") // ENDIF // // PLAY_SOUND_FRONTEND(sTLGDATA.iSoundId[effect], tl23Sound, tl63Bank, FALSE) // SET_VARIABLE_ON_SOUND(sTLGDATA.iSoundId[effect],"Screen_Position",0.5) //ENDPROC PROC TLG_PLAY_SOUND(TLG_AUDIO_EFFECT effect, VECTOR_2D v2Pos) TEXT_LABEL_31 tl31Sound TEXT_LABEL_63 tl63Bank TLG_GET_AUDIO_STRINGS_FROM_ENUM(effect,tl31Sound, tl63Bank) #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_PLAY_SOUND_AND_RELEASE] Sound: ", tl31Sound, " Bank: ",tl63Bank) DEBUG_PRINTCALLSTACK() #ENDIF IF sTLGDATA.iSoundId[effect] = -1 sTLGDATA.iSoundId[effect] = GET_SOUND_ID() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_PLAY_SOUND_AND_RELEASE] Got sound ID") ENDIF PLAY_SOUND_FRONTEND(sTLGDATA.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(sTLGDATA.iSoundId[effect],"Screen_Position",v2Screen.x) ELSE SET_VARIABLE_ON_SOUND(sTLGDATA.iSoundId[effect],"Screen_Position",0.5) ENDIF ENDPROC PROC TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT effect, VECTOR_2D v2Pos) TEXT_LABEL_31 tl31Sound TEXT_LABEL_63 tl63Bank TLG_GET_AUDIO_STRINGS_FROM_ENUM(effect,tl31Sound, tl63Bank) #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_PLAY_SOUND_AND_RELEASE] Sound: ", tl31Sound, " Bank: ",tl63Bank) DEBUG_PRINTCALLSTACK() #ENDIF IF sTLGDATA.iSoundId[effect] = -1 sTLGDATA.iSoundId[effect] = GET_SOUND_ID() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_PLAY_SOUND_AND_RELEASE] Got sound ID") ENDIF PLAY_SOUND_FRONTEND(sTLGDATA.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(sTLGDATA.iSoundId[effect],"Screen_Position",v2Screen.x) ELSE SET_VARIABLE_ON_SOUND(sTLGDATA.iSoundId[effect],"Screen_Position",0.5) ENDIF RELEASE_SOUND_ID(sTLGDATA.iSoundId[effect]) sTLGDATA.iSoundId[effect] = -1 ENDPROC PROC TLG_PLAY_SOUND_NO_POSITION(TLG_AUDIO_EFFECT effect) TLG_PLAY_SOUND(effect, INIT_VECTOR_2D(0.0, 0.0)) ENDPROC PROC TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT effect) TLG_PLAY_SOUND_AND_RELEASE(effect, INIT_VECTOR_2D(0.0, 0.0)) ENDPROC PROC TLG_STOP_SOUND(TLG_AUDIO_EFFECT effect) STOP_SOUND(sTLGDATA.iSoundId[effect]) RELEASE_SOUND_ID(sTLGDATA.iSoundId[effect]) sTLGDATA.iSoundId[effect] = -1 ENDPROC PROC TLG_PLAY_HOSTAGE_DEAD_AUDIO(TLG_CIVILIAN_TYPES eHostage, VECTOR_2D v2Pos) SWITCH eHostage CASE TLG_GIRL TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_DEATH, v2Pos) BREAK CASE TLG_GUY TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_HOSTAGE_MALE_DEATH, v2Pos) BREAK CASE TLG_EAGLE TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_EAGLE_DEATH, v2Pos) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL) BREAK CASE TLG_BAT TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_BAT_DEATH, v2Pos) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL) BREAK CASE TLG_MOUSE TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_RAT_DEATH, v2Pos) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL) BREAK CASE TLG_SCORPION TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_SCORPION_DEATH, v2Pos) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL) BREAK CASE TLG_VULTURE TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_VULTURE_DEATH, v2Pos) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_SHOOT_ANIMAL) BREAK ENDSWITCH ENDPROC PROC TLG_PLAY_HOSTAGE_HELP_AUDIO(TLG_CIVILIAN_TYPES eHostage, VECTOR_2D v2Pos) SWITCH eHostage CASE TLG_GIRL TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_HELP, v2Pos) BREAK CASE TLG_GUY TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_HOSTAGE_MALE_HELP, v2Pos) BREAK CASE TLG_EAGLE TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_EAGLE_APPEAR, v2Pos) BREAK CASE TLG_BAT TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_BAT_APPEAR, v2Pos) BREAK CASE TLG_MOUSE TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_RAT_APPEAR, v2Pos) BREAK CASE TLG_SCORPION TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_SCORPION_APPEAR, v2Pos) BREAK CASE TLG_VULTURE TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_VULTURE_APPEAR, v2Pos) BREAK ENDSWITCH ENDPROC PROC TLG_PLAY_HOSTAGE_ESCAPE_AUDIO(TLG_CIVILIAN_TYPES eHostage, VECTOR_2D v2Pos) SWITCH eHostage CASE TLG_GIRL TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_HOSTAGE_FEMALE_ESCAPE, v2Pos) BREAK CASE TLG_GUY TLG_PLAY_SOUND_AND_RELEASE(TLG_AUDIO_EFFECT_HOSTAGE_MALE_ESCAPE, v2Pos) BREAK ENDSWITCH ENDPROC PROC TLG_HANDLE_LEVEL_INTRO_AUDIO() //-- Replaced with level select dialogue // IF sTLGData.iSoundId[TLG_AUDIO_EFFECT_DRAW] = -1 // IF TLG_HAS_SOUND_FINISHED(TLG_AUDIO_EFFECT_GET_READY) // IF sTLGData.iDrawAudioTimer = 0 // sTLGData.iDrawAudioTimer = GET_GAME_TIMER() // ELIF GET_GAME_TIMER() - sTLGData.iDrawAudioTimer > 250 // TLG_PLAY_SOUND_NO_POSITION(TLG_AUDIO_EFFECT_DRAW) // ENDIF // ENDIF // ENDIF ENDPROC FUNC BOOL TLG_HAVE_ALL_PLAYER_DAMAGE_AUDIO_EFFECTS_FINISHED() RETURN (TLG_HAS_SOUND_FINISHED(TLG_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW) AND TLG_HAS_SOUND_FINISHED(TLG_AUDIO_EFFECT_PLAYER_HEALTH_LOW) AND TLG_HAS_SOUND_FINISHED(TLG_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM) AND TLG_HAS_SOUND_FINISHED(TLG_AUDIO_EFFECT_PLAYER_HEALTH_HIGH)) ENDFUNC PROC TLG_PLAY_PLAYER_TAKE_DAMAGE_AUDIO(FLOAT fNewHealth) IF fNewHealth <= 0.0 EXIT ENDIF IF TLG_HAVE_ALL_PLAYER_DAMAGE_AUDIO_EFFECTS_FINISHED() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_PLAY_PLAYER_TAKE_DAMAGE_AUDIO] {DSW} fNewHealth: ", fNewHealth) IF fNewHealth >= 0.8 TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_HEALTH_HIGH) ELIF fNewHealth >= 0.5 TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_HEALTH_MEDIUM) ELIF fNewHealth >= 0.2 TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_HEALTH_LOW) ELIF fNewHealth > 0.0 TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_HEALTH_VERY_LOW) ENDIF ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_PLAY_PLAYER_TAKE_DAMAGE_AUDIO] {DSW} Not playing as previous not finished. fNewHealth: ", fNewHealth) ENDIF ENDPROC PROC TLG_SET_CURRENT_TIMESTEP() sTLGData.fCurrentTimeStep = (TO_FLOAT(ciBASE_FPS) / (1.0 / GET_FRAME_TIME())) // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_SET_CURRENT_TIMESTEP] fCurrentTimeStep: ", sTLGData.fCurrentTimeStep) ENDPROC FUNC FLOAT TLG_GET_DEFAULT_TIMESTEP() RETURN sTLGData.fCurrentTimeStep ENDFUNC FUNC FLOAT TLG_DET_DEFAULT_UPDATE() RETURN cfTLG_DEFAULT_PIXEL_UPDATE * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC FLOAT TLG_GET_OUTHOUSE_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_ENEMY_SHOOTING_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_ENEMY_DYING_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_ENEMY_WAITING_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_HOSTAGE_DYING_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_FX_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_PROJECTILE_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_BACKGROUND_TILE_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_ITEM_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_CUSTOM_FAST_NEAR_BACKGROUND_ELEMENT_UPDATE() RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_COVER_UPDATE() // FLOAT fDist = 4.0 * (30.0 / (1.0 / GET_FRAME_TIME())) // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_GET_COVER_UPDATE] Update: ", fDist) RETURN TLG_DET_DEFAULT_UPDATE() ENDFUNC FUNC FLOAT TLG_GET_HOSTAGE_UPDATE() RETURN 6.0 * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC FLOAT TLG_GET_CLOUD_UPDATE() RETURN 1.0 * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC FLOAT TLG_GET_BACKGROUND_ELEMENT_UPDATE() RETURN 2.0 * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC FLOAT TLG_GET_CUSTOM_SLOW_NEAR_BACKGROUND_ELEMENT_UPDATE() RETURN 2.5 * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC FLOAT TLG_GET_DEFAULT_NEAR_BACKGROUND_ELEMENT_UPDATE() RETURN 3.0 * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC FLOAT TLG_GET_COVER_FOREGROUND_UPDATE() RETURN 12.0 * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC FLOAT TLG_GET_ENEMY_FOREGROUND_UPDATE(BOOL bReverse) IF bReverse RETURN 6.0 * TLG_GET_DEFAULT_TIMESTEP() ENDIF RETURN 10.0 * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC FLOAT TLG_GET_ENEMY_MIDDLE_UPDATE(BOOL bReverse) IF bReverse RETURN 11.0 * TLG_GET_DEFAULT_TIMESTEP() ENDIF RETURN 15.0 * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC FLOAT TLG_GET_ENEMY_BACKGROUND_UPDATE(BOOL bReverse) IF bReverse RETURN 16.0 * TLG_GET_DEFAULT_TIMESTEP() ENDIF RETURN 20.0 * TLG_GET_DEFAULT_TIMESTEP() ENDFUNC FUNC TLG_PLAYER_WEAPON GET_PLAYER_DEFAULT_WEAPON() RETURN TLG_PLAYER_WEAPON_PISTOL ENDFUNC FUNC TLG_PLAYER_WEAPON TLG_GET_PLAYER_SPECIAL_WEAPON() RETURN sTLGData.sPlayerData[0].specialWeapon ENDFUNC FUNC BOOL TLG_DOES_PLAYER_HAVE_SPECIAL_WEAPON() RETURN TLG_GET_PLAYER_SPECIAL_WEAPON() != TLG_PLAYER_WEAPON_NONE ENDFUNC FUNC TLG_PLAYER_WEAPON TLG_GET_PLAYER_CURRENT_WEAPON() IF TLG_DOES_PLAYER_HAVE_SPECIAL_WEAPON() RETURN TLG_GET_PLAYER_SPECIAL_WEAPON() ENDIF RETURN GET_PLAYER_DEFAULT_WEAPON() ENDFUNC PROC TLG_HANDLE_PLAYER_SHOOTING_AUDIO() TLG_PLAYER_WEAPON weapon = TLG_GET_PLAYER_CURRENT_WEAPON() SWITCH weapon CASE TLG_PLAYER_WEAPON_PISTOL TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_REVOLVER_FIRE) BREAK CASE TLG_PLAYER_WEAPON_RIFLE TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_RIFLE_FIRE) BREAK CASE TLG_PLAYER_WEAPON_SHOTGUN TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_SHOTGUN_FIRE) BREAK CASE TLG_PLAYER_WEAPON_GATLING TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_GATLING_FIRE) BREAK ENDSWITCH ENDPROC PROC TLG_HANDLE_PLAYER_WEAPON_COCKED_AUDIO() TLG_PLAYER_WEAPON weapon = TLG_GET_PLAYER_CURRENT_WEAPON() SWITCH weapon CASE TLG_PLAYER_WEAPON_PISTOL TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_REVOLVER_COCKED) BREAK CASE TLG_PLAYER_WEAPON_RIFLE TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_RIFLE_COCKED) BREAK CASE TLG_PLAYER_WEAPON_SHOTGUN TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_SHOTGUN_COCKED) BREAK ENDSWITCH ENDPROC PROC TLG_HANDLE_PLAYER_FIRING_EMPTY_WEAPON_AUDIO() TLG_PLAYER_WEAPON weapon = TLG_GET_PLAYER_CURRENT_WEAPON() SWITCH weapon CASE TLG_PLAYER_WEAPON_PISTOL IF TLG_HAS_SOUND_FINISHED(TLG_AUDIO_EFFECT_REVOLVER_EMPTY) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_REVOLVER_EMPTY) ENDIF BREAK CASE TLG_PLAYER_WEAPON_RIFLE IF TLG_HAS_SOUND_FINISHED(TLG_AUDIO_EFFECT_RIFLE_EMPTY) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_RIFLE_EMPTY) ENDIF BREAK CASE TLG_PLAYER_WEAPON_SHOTGUN IF TLG_HAS_SOUND_FINISHED(TLG_AUDIO_EFFECT_SHOTGUN_EMPTY) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_SHOTGUN_EMPTY) ENDIF BREAK ENDSWITCH ENDPROC PROC TLG_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO(BOOL bIsFirst, BOOL bIsSingle, BOOL bIsLast) TLG_PLAYER_WEAPON weapon = TLG_GET_PLAYER_CURRENT_WEAPON() #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO] Weapon: ", TLG_GET_PLAYER_WEAPON_AS_STRING(weapon), " bIsFirst: ", bIsFirst, " bIsSingle: ", bIsSingle, " bIsLast: ", bIsLast) #ENDIF SWITCH weapon CASE TLG_PLAYER_WEAPON_PISTOL IF bIsFirst TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_REVOLVER_RELOAD_FIRST) ELIF bIsSingle TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_REVOLVER_RELOAD_SINGLE) ELIF bIsLast TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_REVOLVER_RELOAD_LAST) ENDIF BREAK CASE TLG_PLAYER_WEAPON_RIFLE IF bIsFirst TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_RIFLE_RELOAD_FIRST) ELIF bIsSingle TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE) ELIF bIsLast TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_RIFLE_RELOAD_LAST) ENDIF BREAK CASE TLG_PLAYER_WEAPON_SHOTGUN IF bIsFirst TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_SHOTGUN_RELOAD_FIRST) ELIF bIsSingle TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE) ELIF bIsLast TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_SHOTGUN_RELOAD_LAST) ENDIF BREAK ENDSWITCH ENDPROC PROC TLG_INIT_COLOUR_STRUCTS() INIT_RGBA_STRUCT(sTLGData.rgbaBlack, 0, 0, 0, 255) INIT_RGBA_STRUCT(sTLGData.rgbaRed, 255, 50, 0, 155) INIT_RGBA_STRUCT(sTLGData.rgbaEnemyShot, 255, 0, 0, 255) INIT_RGBA_STRUCT(sTLGData.rgbaSprite, 255, 255, 255, 255) INIT_RGBA_STRUCT(sTLGData.rgbaWhite, 255, 255, 255, 255) INIT_RGBA_STRUCT(sTLGData.rgbaGreen, 0, 255,0, 255) INIT_RGBA_STRUCT(sTLGData.rgbaYellow, 255, 255,0, 255) INIT_RGBA_STRUCT(sTLGData.rgbaSpriteUsedBullet, 255, 255, 255, 50) ENDPROC // Items PROC TLG_ADD_MENU_OPTION_TO_LIST(VECTOR_2D vPos, VECTOR_2D vSize, TLG_MENU_OPTIONS eOption, TLG_ARCADE_CLIENT_STATE eScreen) sTLGData.sMenuOptionsData[sTLGData.iNumberOfMenuOptions].vSpritePos = vPos sTLGData.sMenuOptionsData[sTLGData.iNumberOfMenuOptions].vSize = vSize sTLGData.sMenuOptionsData[sTLGData.iNumberOfMenuOptions].eMenuOption = eOption sTLGData.sMenuOptionsData[sTLGData.iNumberOfMenuOptions].eClientState = eScreen sTLGData.iNumberOfMenuOptions ++ ENDPROC PROC TLG_INIT_MENU_OPTIONS() TLG_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, (cfBASE_SCREEN_HEIGHT/6*4) + 80), INIT_VECTOR_2D(cfTLG_SPRITE_HUD_START_WIDTH, cfTLG_SPRITE_HUD_START_HEIGHT), TLG_START, TLG_ARCADE_CLIENT_STATE_TITLE_SCREEN) TLG_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, (cfBASE_SCREEN_HEIGHT/6*4) + 150), INIT_VECTOR_2D(cfTLG_SPRITE_HUD_LEADERBOARDS_WIDTH, cfTLG_SPRITE_HUD_LEADERBOARDS_HEIGHT), TLG_SCORES, TLG_ARCADE_CLIENT_STATE_TITLE_SCREEN) FLOAT fFactor = 0.65 TLG_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*3, cfBASE_SCREEN_HEIGHT/8*3), INIT_VECTOR_2D(cfTLG_SPRITE_POSTER_MENU_WIDTH*fFactor, cfTLG_SPRITE_POSTER_MENU_HEIGHT*fFactor), TLG_WANTED_1, TLG_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU) TLG_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*5, cfBASE_SCREEN_HEIGHT/8*3), INIT_VECTOR_2D(cfTLG_SPRITE_POSTER_MENU_WIDTH*fFactor, cfTLG_SPRITE_POSTER_MENU_HEIGHT*fFactor), TLG_WANTED_2, TLG_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU) TLG_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*7, cfBASE_SCREEN_HEIGHT/8*3), INIT_VECTOR_2D(cfTLG_SPRITE_POSTER_MENU_WIDTH*fFactor, cfTLG_SPRITE_POSTER_MENU_HEIGHT*fFactor), TLG_WANTED_3, TLG_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU) TLG_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*4, cfBASE_SCREEN_HEIGHT/8*6), INIT_VECTOR_2D(cfTLG_SPRITE_POSTER_MENU_WIDTH*fFactor, cfTLG_SPRITE_POSTER_MENU_HEIGHT*fFactor), TLG_WANTED_4, TLG_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU) TLG_ADD_MENU_OPTION_TO_LIST(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/10*6, cfBASE_SCREEN_HEIGHT/8*6), INIT_VECTOR_2D(cfTLG_SPRITE_POSTER_MENU_WIDTH*fFactor, cfTLG_SPRITE_POSTER_MENU_HEIGHT*fFactor), TLG_WANTED_5, TLG_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU) ENDPROC PROC TLG_INIT_MENU() TLG_INIT_MENU_OPTIONS() sTLGData.eCurrentLevel = TLG_LEVEL_DESERT sTLGData.sPlayerData[0].vSpriteMarkerPos = INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/3, cfBASE_SCREEN_HEIGHT/3) sTLGData.sControlTimer.control = FRONTEND_CONTROL sTLGData.sControlTimer.action = INPUT_FRONTEND_CANCEL //INPUT_SCRIPT_RRIGHT sTLGData.sPcQuitTimer.control = FRONTEND_CONTROL sTLGData.sPcQuitTimer.action = INPUT_FRONTEND_DELETE ENDPROC PROC TLG_SET_PLAYER_NO_CHAIN_SCORE(INT iValue) sTLGData.sPlayerData[0].iScoreNoChain = iValue CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SET_PLAYER_NO_CHAIN_SCORE] Value: ", iValue) ENDPROC PROC TLG_RESET_PLAYER_CHAINED_SCORE() sTLGData.sPlayerData[0].iChainedScore = 0 CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_RESET_PLAYER_CHAINED_SCORE] Called") ENDPROC FUNC INT TLG_GET_PLAYER_NO_CHAIN_SCORE() RETURN sTLGData.sPlayerData[0].iScoreNoChain ENDFUNC PROC TLG_SET_PREVIOUS_TARGET_SCORE(INT iValue) sTLGData.sPlayerData[0].iPreviousTargetScore = iValue CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SET_PREVIOUS_TARGET_SCORE] Value: ", iValue) ENDPROC FUNC INT TLG_GET_PREVIOUS_TARGET_SCORE() RETURN sTLGData.sPlayerData[0].iPreviousTargetScore ENDFUNC FUNC TLG_LEVELS TLG_GET_CURRENT_LEVEL() RETURN sTLGData.eCurrentLevel ENDFUNC FUNC INT TLG_GET_CURRENT_LEVEL_AS_INT() RETURN ENUM_TO_INT(TLG_GET_CURRENT_LEVEL()) ENDFUNC PROC TLG_RESET_PLAYER_SUCCESSIVE_HITS() sTLGData.sPlayerData[0].iSuccessiveHits = 0 CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_RESET_PLAYER_SUCCESSIVE_HITS] Called") TLG_RESET_PLAYER_CHAINED_SCORE() TLG_SET_PLAYER_NO_CHAIN_SCORE(playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[TLG_GET_CURRENT_LEVEL_AS_INT()]) ENDPROC PROC TLG_INIT_PLAYERS() sTLGData.sPlayerData[0].vSpritePos = INIT_VECTOR_2D(200, 860) sTLGData.sPlayerData[0].vSpriteMarkerPos = INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2.0, cfBASE_SCREEN_HEIGHT/2.0) // INIT_VECTOR_2D(300, 500) sTLGData.sPlayerData[0].iPlayerBitset = 0 sTLGData.sPlayerData[0].iInvulnerableTimer = 0 sTLGData.sPlayerData[0].iHideReticuleTimer = 0 sTLGData.sPlayerData[0].iGatlingOverheatTime = 0 sTLGData.sPlayerData[0].iDeadTime = 0 sTLGData.sPlayerData[0].iNoAmmoTimer = 0 TLG_RESET_PLAYER_SUCCESSIVE_HITS() ENDPROC /// PURPOSE: /// Different scores (Hi-score, current score, rival's score) are different colours. Need to construct the texture name /// PARAMS: /// iInsertValue - The integer value represented by the texture /// RETURNS: /// FUNC TEXT_LABEL_63 TLG_GET_SCORE_INTEGER_TEXTURE_NAME_FROM_TYPE(TLG_SCORE_INTEGER_TYPE type, INT iInsertValue) TEXT_LABEL_63 tlTextureName tlTextureName = "SCORE_TEXT_" tlTextureName += iInsertValue SWITCH type CASE TLG_SCORE_INTEGER_TYPE_HI_SCORE tlTextureName += "_WHITE" BREAK CASE TLG_SCORE_INTEGER_TYPE_BLUE_SCORE tlTextureName += "_BLUE" BREAK CASE TLG_SCORE_INTEGER_TYPE_MY_SCORE tlTextureName += "_YELLOW" BREAK CASE TLG_SCORE_INTEGER_TYPE_RED_SCORE tlTextureName += "_RED" BREAK ENDSWITCH RETURN tlTextureName ENDFUNC FUNC TEXT_LABEL_63 TLG_GET_PERCENTAGE_SIGN_TEXTURE_FOR_SCORE_TYPE(TLG_SCORE_INTEGER_TYPE type) TEXT_LABEL_63 tlTextureName SWITCH type CASE TLG_SCORE_INTEGER_TYPE_BLUE_SCORE tlTextureName = "SCORE_TEXT_PERCENTAGE_BLUE" BREAK CASE TLG_SCORE_INTEGER_TYPE_RED_SCORE tlTextureName = "SCORE_TEXT_PERCENTAGE_RED" BREAK ENDSWITCH RETURN tlTextureName ENDFUNC FUNC TEXT_LABEL_63 TLG_GET_CROSS_CHAR_TEXTURE_FOR_SCORE_TYPE(TLG_SCORE_INTEGER_TYPE type) TEXT_LABEL_63 tlTextureName SWITCH type CASE TLG_SCORE_INTEGER_TYPE_BLUE_SCORE tlTextureName = "SCORE_TEXT_X_BLUE" BREAK CASE TLG_SCORE_INTEGER_TYPE_RED_SCORE tlTextureName = "SCORE_TEXT_X_RED" BREAK ENDSWITCH RETURN tlTextureName ENDFUNC PROC TLG_DRAW_DOLLAR_SYMBOL(STRING txTexture, VECTOR_2D vPos, VECTOR_2D vScale) ARCADE_DRAW_PIXELSPACE_SPRITE(sTLGData.tl31HudTextDict, txTexture, vPos, vScale, 0, sTLGData.rgbaSprite) ENDPROC // See Alex's DEGENATRON_GAMES_DRAW_INTEGER PROC TLG_DRAW_SCORE_INTEGER(INT iValue, INT iDigits, VECTOR_2D vCenter,RGBA_COLOUR_STRUCT rgba, TLG_SCORE_INTEGER_TYPE scoreType, FLOAT fScale = 1.0) VECTOR_2D vCharCenter = vCenter VECTOR_2D vCharSize = INIT_VECTOR_2D(cfTLG_MY_HISCORE_X_DIGIT_SIZE * fScale, cfTLG_MY_HISCORE_Y_DIGIT_SIZE * fScale) BOOL bZero = (iValue = 0) INT iChar IF iDigits = 0 INT currentValue currentValue = iValue IF iValue > 0 iDigits = FLOOR(LOG10(TO_FLOAT(iValue)))+1 ELIF iValue = 0 iDigits = 1 ENDIF // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_DRAW_SCORE_INTEGER] {DSW} ") // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_DRAW_SCORE_INTEGER] {DSW} iValue: ", iValue, " iDigits: ", iDigits, " Orig vCenter.x: ", vCenter.x, " vCharSize.x: ", vCharSize.x) WHILE currentValue > 0 OR bZero bZero = FALSE vCharCenter.x = vCenter.x + (vCharSize.x * (iDigits-1)/2.0) - (vCharSize.x * iChar) // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_DRAW_SCORE_INTEGER] {DSW} currentValue: ", currentValue, " vCharCenter.x: ", vCharCenter.x, " iChar: ", iChar, " Drawing value: ",currentValue % 10) TEXT_LABEL_63 tlTextureName = TLG_GET_SCORE_INTEGER_TEXTURE_NAME_FROM_TYPE(scoreType, currentValue % 10) currentValue /= 10 ARCADE_DRAW_PIXELSPACE_SPRITE(sTLGData.tl31HudTextDict, tlTextureName,vCharCenter,vCharSize,0.0, rgba) iChar++ ENDWHILE ELSE REPEAT iDigits iChar vCharCenter.x = vCenter.x + vCharSize.x * (iDigits-1)/2.0 - vCharSize.x * iChar TEXT_LABEL_63 tlTextureName = TLG_GET_SCORE_INTEGER_TEXTURE_NAME_FROM_TYPE(scoreType, (iValue / ROUND(POW(10.0,to_float(iChar)))) % 10) ARCADE_DRAW_PIXELSPACE_SPRITE(sTLGData.tl31HudTextDict, tlTextureName,vCharCenter,vCharSize,0.0, rgba) ENDREPEAT ENDIF ENDPROC PROC TLG_DRAW_SCORE_INTEGER_WITH_DOLLAR(INT iValue, VECTOR_2D vCenter,RGBA_COLOUR_STRUCT rgba, TLG_SCORE_INTEGER_TYPE scoreType, FLOAT fScale = 1.0) VECTOR_2D vCharCenter = vCenter VECTOR_2D vCharSize = INIT_VECTOR_2D(cfTLG_MY_HISCORE_X_DIGIT_SIZE * fScale, cfTLG_MY_HISCORE_Y_DIGIT_SIZE * fScale) BOOL bZero = (iValue = 0) INT iChar INT iDigits = 0 IF iDigits = 0 INT currentValue currentValue = iValue IF iValue > 0 iDigits = FLOOR(LOG10(TO_FLOAT(iValue)))+1 ELIF iValue = 0 iDigits = 1 ENDIF CDEBUG1LN(DEBUG_MINIGAME, "[TLG_DRAW_SCORE_INTEGER] {DSW} ") CDEBUG1LN(DEBUG_MINIGAME, "[TLG_DRAW_SCORE_INTEGER] {DSW} iValue: ", iValue, " iDigits: ", iDigits, " Orig vCenter.x: ", vCenter.x, " vCharSize.x: ", vCharSize.x) WHILE currentValue > 0 OR bZero bZero = FALSE vCharCenter.x = vCenter.x + (vCharSize.x * (iDigits-1)/2.0) - (vCharSize.x * iChar) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_DRAW_SCORE_INTEGER] {DSW} currentValue: ", currentValue, " vCharCenter.x: ", vCharCenter.x, " iChar: ", iChar, " Drawing value: ",currentValue % 10) TEXT_LABEL_63 tlTextureName = TLG_GET_SCORE_INTEGER_TEXTURE_NAME_FROM_TYPE(scoreType, currentValue % 10) currentValue /= 10 ARCADE_DRAW_PIXELSPACE_SPRITE(sTLGData.tl31HudTextDict, tlTextureName,vCharCenter,vCharSize,0.0, rgba) iChar++ ENDWHILE vCharCenter.x = vCenter.x + (vCharSize.x * (iDigits-1)/2.0) - (vCharSize.x * iChar) TLG_DRAW_DOLLAR_SYMBOL("NUMERICAL_DOLLAR",vCharCenter,INIT_VECTOR_2D(cfTLG_MY_HISCORE_DOLLAR_X_SIZE* cfTLG_LEVEL_SCORE_SCALE, cfTLG_MY_HISCORE_DOLLAR_Y_SIZE * cfTLG_LEVEL_SCORE_SCALE)) ENDIF ENDPROC PROC GET_SCORE_DIGITS_AS_ARRAY(INT iScore, INT iDigits, INT &ScoreArray[]) // CDEBUG1LN(DEBUG_MINIGAME, "[GET_SCORE_DIGITS_AS_ARRAY] {DSW} ") // CDEBUG1LN(DEBUG_MINIGAME, "[GET_SCORE_DIGITS_AS_ARRAY] {DSW} iScore: ", iScore, " iDigits:", iDigits ) INT iChar = 0 INT i = 0 FOR iChar = (iDigits-1) to 0 STEP - 1 ScoreArray[i] = (iScore / ROUND(POW(10.0,to_float(iChar)))) % 10 // CDEBUG1LN(DEBUG_MINIGAME, "[GET_SCORE_DIGITS_AS_ARRAY] {DSW} ScoreArray[", i, "] = ",ScoreArray[i] ) i++ ENDFOR ENDPROC /// PURPOSE: /// Draw the value specified where the 'center' value is the position of the 'left-most' (i.e. first) digit /// PARAMS: /// iValue - /// vLeftMostCenter - /// rgba - /// scoreType - /// fScale - PROC TLG_DRAW_SCORE_INTEGER_CENTER_LEFT_MOST(INT iValue, VECTOR_2D vLeftMostCenter,RGBA_COLOUR_STRUCT rgba, TLG_SCORE_INTEGER_TYPE scoreType, FLOAT fScale = 1.0, BOOL bWithPercentage = FALSE) VECTOR_2D vCharSize = INIT_VECTOR_2D(cfTLG_MY_HISCORE_X_DIGIT_SIZE * fScale, cfTLG_MY_HISCORE_Y_DIGIT_SIZE * fScale) vCharSize = INIT_VECTOR_2D(cfTLG_MY_HISCORE_X_DIGIT_SIZE * fScale, cfTLG_MY_HISCORE_Y_DIGIT_SIZE * fScale) INT iScoreDigits[10] INT i INT iNumDigits = FLOOR(LOG10(TO_FLOAT(iValue))) + 1 GET_SCORE_DIGITS_AS_ARRAY(iValue, iNumDigits, iScoreDigits) TEXT_LABEL_63 tlTextureName VECTOR_2D vCenter REPEAT iNumDigits i tlTextureName = TLG_GET_SCORE_INTEGER_TEXTURE_NAME_FROM_TYPE(scoreType, iScoreDigits[i]) vCenter.y = vLeftMostCenter.y vCenter.x = vLeftMostCenter.x + (i * vCharSize.x) ARCADE_DRAW_PIXELSPACE_SPRITE(sTLGData.tl31HudTextDict, tlTextureName,vCenter,vCharSize,0.0, rgba) ENDREPEAT TEXT_LABEL_63 tlTexturePercent IF bWithPercentage tlTexturePercent= TLG_GET_PERCENTAGE_SIGN_TEXTURE_FOR_SCORE_TYPE(scoreType) vCenter.x = vLeftMostCenter.x + (i * vCharSize.x) ARCADE_DRAW_PIXELSPACE_SPRITE(sTLGData.tl31HudTextDict, tlTexturePercent, vCenter, INIT_VECTOR_2D(cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_PERCENT_SIZE_X * fScale, cfTLG_RESULTS_SCREEN_COMPLETE_ACCURACY_PERCENT_SIZE_Y* fScale), 0, rgba) ENDIF ENDPROC PROC TLG_DRAW_SCORE_ZERO( VECTOR_2D vLeftMostCenter,RGBA_COLOUR_STRUCT rgba, TLG_SCORE_INTEGER_TYPE scoreType, FLOAT fScale = 1.0) VECTOR_2D vCharSize = INIT_VECTOR_2D(cfTLG_MY_HISCORE_X_DIGIT_SIZE * fScale, cfTLG_MY_HISCORE_Y_DIGIT_SIZE * fScale) TEXT_LABEL_63 tlTextureName = TLG_GET_SCORE_INTEGER_TEXTURE_NAME_FROM_TYPE(scoreType, 0) ARCADE_DRAW_PIXELSPACE_SPRITE(sTLGData.tl31HudTextDict, tlTextureName,vLeftMostCenter,vCharSize,0.0, rgba) ENDPROC //PROC TLG_DRAW_SCORE_INTEGER_CENTER_RIGHT_MOST(INT iValue, VECTOR_2D vLeftMostCenter,RGBA_COLOUR_STRUCT rgba, TLG_SCORE_INTEGER_TYPE scoreType, FLOAT fScale = 1.0) // // VECTOR_2D vCharSize = INIT_VECTOR_2D(cfTLG_MY_HISCORE_X_DIGIT_SIZE * fScale, cfTLG_MY_HISCORE_Y_DIGIT_SIZE * fScale) // INT iScoreDigits[6] // INT i // INT iNumDigits = FLOOR(LOG10(TO_FLOAT(iValue))) + 1 // GET_SCORE_DIGITS_AS_ARRAY(iValue, iNumDigits, iScoreDigits) // TEXT_LABEL_63 tlTextureName // VECTOR_2D vCenter // FOR i = (iNumDigits-1) TO 0 STEP -1 // tlTextureName = TLG_GET_SCORE_INTEGER_TEXTURE_NAME_FROM_TYPE(scoreType, iScoreDigits[i]) // vCenter.y = vLeftMostCenter.y // vCenter.x = vLeftMostCenter.x - (i * vCharSize.x) // ARCADE_DRAW_PIXELSPACE_SPRITE(sTLGData.tl31BaseTextDict, tlTextureName,vCenter,vCharSize,0.0, rgba) // ENDFOR // //ENDPROC PROC TLG_DRAW_SCORE_INTEGER_CENTER_RIGHT_MOST_WITH_DOLLAR(INT iValue, VECTOR_2D vRightMostCenter,RGBA_COLOUR_STRUCT rgba, TLG_SCORE_INTEGER_TYPE scoreType, STRING txDollar, FLOAT fScale = 1.0) VECTOR_2D vCharSize = INIT_VECTOR_2D(cfTLG_MY_HISCORE_X_DIGIT_SIZE * fScale, cfTLG_MY_HISCORE_Y_DIGIT_SIZE * fScale) INT iScoreDigits[6] INT i, j INT iNumDigits = FLOOR(LOG10(TO_FLOAT(iValue))) + 1 GET_SCORE_DIGITS_AS_ARRAY(iValue, iNumDigits, iScoreDigits) TEXT_LABEL_63 tlTextureName VECTOR_2D vCenter // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_DRAW_SCORE_INTEGER_CENTER_RIGHT_MOST_WITH_DOLLAR] {DSW} ") // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_DRAW_SCORE_INTEGER_CENTER_RIGHT_MOST_WITH_DOLLAR] {DSW} iValue: ", iValue, " vRightMostCenter.x: ", vRightMostCenter.x) FOR i = (iNumDigits-1) TO 0 STEP -1 tlTextureName = TLG_GET_SCORE_INTEGER_TEXTURE_NAME_FROM_TYPE(scoreType, iScoreDigits[i]) vCenter.y = vRightMostCenter.y vCenter.x = vRightMostCenter.x - (j * vCharSize.x) j++ // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_DRAW_SCORE_INTEGER_CENTER_RIGHT_MOST_WITH_DOLLAR] {DSW} Drawing digit ", iScoreDigits[i], " at x pos: ",vCenter.x) ARCADE_DRAW_PIXELSPACE_SPRITE(sTLGData.tl31HudTextDict, tlTextureName,vCenter,vCharSize,0.0, rgba) ENDFOR VECTOR_2D vDollarPos vDollarPos.y = vRightMostCenter.y vDollarPos.x = vCenter.x - (fScale * cfTLG_MY_HISCORE_DOLLAR_X_SIZE) VECTOR_2D vDollarScale = INIT_VECTOR_2D(cfTLG_MY_HISCORE_DOLLAR_X_SIZE * fScale, cfTLG_MY_HISCORE_DOLLAR_Y_SIZE * fScale) TLG_DRAW_DOLLAR_SYMBOL(txDollar, vDollarPos, vDollarScale) ENDPROC FUNC VECTOR_2D TLG_GET_PLAYER_RETICULE_POSITON() RETURN INIT_VECTOR_2D(sTLGData.sPlayerData[0].vSpriteMarkerPos.x, sTLGData.sPlayerData[0].vSpriteMarkerPos.y) ENDFUNC ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Player Bits ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FUNC BOOL TLG_IS_PLAYER_BIT_SET(TLG_PLAYER_BITSET eBit) RETURN IS_BIT_SET(sTLGData.sPlayerData[0].iPlayerBitset, ENUM_TO_INT(eBit)) ENDFUNC PROC TLG_SET_PLAYER_BIT(TLG_PLAYER_BITSET eBit) IF NOT TLG_IS_PLAYER_BIT_SET(eBit) #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_SET_PLAYER_BIT] {DSW} Set bit ", TLG_GET_PLAYER_BIT_AS_STRING(eBit)) #ENDIF SET_BIT(sTLGData.sPlayerData[0].iPlayerBitset, ENUM_TO_INT(eBit)) ENDIF ENDPROC PROC TLG_CLEAR_PLAYER_BIT(TLG_PLAYER_BITSET eBit) IF TLG_IS_PLAYER_BIT_SET(eBit) #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_CLEAR_PLAYER_BIT] {DSW} Set bit ", TLG_GET_PLAYER_BIT_AS_STRING(eBit)) #ENDIF CLEAR_BIT(sTLGData.sPlayerData[0].iPlayerBitset, ENUM_TO_INT(eBit)) ENDIF ENDPROC ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Player weapons ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FUNC TLG_PLAYER_WEAPON_DATA TLG_GET_PLAYER_WEAPON_DATA(TLG_PLAYER_WEAPON weapon) TLG_PLAYER_WEAPON_DATA data SWITCH weapon CASE TLG_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 TLG_PLAYER_WEAPON_PISTOL data.iClipSize = 6 data.iMaxAmmo = ciTLG_PLAYER_START_AMMO data.iMaxEnemyImpacts = 1 data.fSpreadModifier = 1.0 data.iMinTimeBetweenShots = 0 data.iMinDamagePerShot = 7 data.iMinTimeReloadSingleBullet = 100 BREAK CASE TLG_PLAYER_WEAPON_SHOTGUN data.iClipSize = 4 data.iMaxAmmo = 20 data.iMaxEnemyImpacts = 5 data.fSpreadModifier = 350.0 data.iMinTimeBetweenShots = 1000 data.iMinDamagePerShot = 20 data.iMinTimeReloadSingleBullet = 300 BREAK CASE TLG_PLAYER_WEAPON_GATLING data.iClipSize = 6 data.iMaxAmmo = 100 // Anything over 99 is 'infinite' data.iMaxEnemyImpacts = 1 data.fSpreadModifier = 1.0 data.iMinTimeBetweenShots = 0 data.iMinDamagePerShot = 10 BREAK CASE TLG_PLAYER_WEAPON_RIFLE data.iClipSize = 5 data.iMaxAmmo = 25 // Anything over 99 is 'infinite' data.iMaxEnemyImpacts = 1 data.fSpreadModifier = 1.0 data.iMinTimeBetweenShots = 0 data.iMinDamagePerShot = 15 data.iMinTimeReloadSingleBullet = 200 BREAK DEFAULT #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_GET_PLAYER_WEAPON_DATA] ************* NO WEAPON DATA weapon: ", TLG_GET_PLAYER_WEAPON_AS_STRING(weapon), " Int: ", ENUM_TO_INT(weapon)) #ENDIF BREAK ENDSWITCH RETURN data ENDFUNC FUNC INT TLG_GET_PLAYER_AMMO_IN_CLIP_FOR_WEAPON_TYPE(TLG_PLAYER_WEAPON_TYPE type) INT iAmmo = sTLGData.sPlayerData[0].weaponData[type].iAmmoInClip RETURN iAmmo ENDFUNC FUNC INT TLG_GET_PLAYER_TOTAL_AMMO_FOR_WEAPON_TYPE(TLG_PLAYER_WEAPON_TYPE type, BOOL bIncludeClip = FALSE) INT iTotal = sTLGData.sPlayerData[0].weaponData[type].iTotalAmmo IF bIncludeClip iTotal += TLG_GET_PLAYER_AMMO_IN_CLIP_FOR_WEAPON_TYPE(type) ENDIF RETURN iTotal ENDFUNC FUNC INT TLG_GET_PLAYER_CURRENT_WEAPON_CLIP_SIZE() TLG_PLAYER_WEAPON weapon = TLG_GET_PLAYER_CURRENT_WEAPON() TLG_PLAYER_WEAPON_DATA data = TLG_GET_PLAYER_WEAPON_DATA(weapon) RETURN data.iClipSize ENDFUNC FUNC INT TLG_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() RETURN TLG_GET_PLAYER_AMMO_IN_CLIP_FOR_WEAPON_TYPE(sTLGData.sPlayerData[0].weaponType) ENDFUNC FUNC INT TLG_GET_PLAYER_TOTAL_AMMO_IN_CURRENT_WEAPON(BOOL bIncludeInClip = FALSE) RETURN TLG_GET_PLAYER_TOTAL_AMMO_FOR_WEAPON_TYPE(sTLGData.sPlayerData[0].weaponType, bIncludeInClip) ENDFUNC FUNC INT GET_PLAYER_TOTAL_AMMO_FOR_ALL_WEAPON_TYPES() INT i, iTotal REPEAT TLG_PLAYER_WEAPON_TYPE_MAX i iTotal += TLG_GET_PLAYER_TOTAL_AMMO_FOR_WEAPON_TYPE(INT_TO_ENUM(TLG_PLAYER_WEAPON_TYPE, i)) ENDREPEAT RETURN iTotal ENDFUNC FUNC BOOL TLG_DOES_PLAYER_WEAPON_HAVE_INFINITE_AMMO(TLG_PLAYER_WEAPON weapon) IF weapon = TLG_PLAYER_WEAPON_GATLING RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL TLG_DOES_PLAYER_CURRENT_WEAPON_HAVE_INFINITE_AMMO() RETURN TLG_DOES_PLAYER_WEAPON_HAVE_INFINITE_AMMO(TLG_GET_PLAYER_CURRENT_WEAPON()) ENDFUNC PROC TLG_REDUCE_PLAYER_AMMO_IN_CLIP(INT iAmount = 1) IF TLG_DOES_PLAYER_CURRENT_WEAPON_HAVE_INFINITE_AMMO() EXIT ENDIF TLG_PLAYER_WEAPON_TYPE type = sTLGData.sPlayerData[0].weaponType sTLGData.sPlayerData[0].weaponData[type].iAmmoInClip -= iAmount IF sTLGData.sPlayerData[0].weaponData[type].iAmmoInClip < 0 sTLGData.sPlayerData[0].weaponData[type].iAmmoInClip = 0 ENDIF sTLGData.sPlayerData[0].weaponData[type].iTotalAmmo -= iAmount IF sTLGData.sPlayerData[0].weaponData[type].iTotalAmmo < 0 sTLGData.sPlayerData[0].weaponData[type].iTotalAmmo = 0 ENDIF CDEBUG1LN(DEBUG_MINIGAME, "[TLG_REDUCE_PLAYER_AMMO_IN_CLIP] {DSW} Weapon type: ", ENUM_TO_INT(type), " Ammo in clip now: ", sTLGData.sPlayerData[0].weaponData[type].iAmmoInClip, " Ammo remaining: ",sTLGData.sPlayerData[0].weaponData[type].iTotalAmmo) ENDPROC PROC TLG_SET_CURRENT_PLAYER_WEAPON_AMMO(INT iClip, INT iWeapon) TLG_PLAYER_WEAPON_TYPE weaponType = sTLGData.sPlayerData[0].weaponType sTLGData.sPlayerData[0].weaponData[weaponType].iAmmoInClip = iClip sTLGData.sPlayerData[0].weaponData[weaponType].iTotalAmmo = iWeapon CDEBUG1LN(DEBUG_MINIGAME, "{DSW} [TLG_SET_CURRENT_PLAYER_WEAPON_AMMO] Set ammo in clip: ", iClip, " In weapon: ", iWeapon) ENDPROC //PROC TLG_SET_SHOULD_SHOW_RELOAD_PROMPT() // sTLGData.sPlayerData[0].bShouldShowReloadPrompt = TRUE //ENDPROC FUNC BOOL TLG_IS_PLAYER_SHOOTING() 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 TLG_SHOULD_SHOW_RELOAD_PROMPT() IF TLG_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() > 0 IF sTLGData.sPlayerData[0].bShouldShowReloadPrompt sTLGData.sPlayerData[0].bShouldShowReloadPrompt = FALSE sTLGData.sPlayerData[0].bDoneReloadEffect = FALSE sTLGData.sPlayerData[0].iReloadPromptShowTime = 0 ENDIF RETURN FALSE ENDIF IF TLG_IS_PLAYER_SHOOTING() IF sTLGData.sPlayerData[0].iReloadPromptShowTime = 0 sTLGData.sPlayerData[0].iReloadPromptShowTime = GET_GAME_TIMER() RETURN FALSE ENDIF IF GET_GAME_TIMER() - sTLGData.sPlayerData[0].iReloadPromptShowTime > 100 sTLGData.sPlayerData[0].bShouldShowReloadPrompt = TRUE IF NOT sTLGData.sPlayerData[0].bDoneReloadEffect // TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_RELOAD) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_RELOAD) sTLGData.sPlayerData[0].bDoneReloadEffect = TRUE ENDIF ENDIF ENDIF RETURN sTLGData.sPlayerData[0].bShouldShowReloadPrompt ENDFUNC /// PURPOSE: /// Some weapons have infinite ammo /// RETURNS: /// FUNC BOOL TLG_CAN_PLAYER_CURRNT_WEAPON_BE_RELOADED() TLG_PLAYER_WEAPON weapon = TLG_GET_PLAYER_CURRENT_WEAPON() SWITCH weapon CASE TLG_PLAYER_WEAPON_NONE CASE TLG_PLAYER_WEAPON_GATLING RETURN FALSE ENDSWITCH TLG_PLAYER_WEAPON_DATA data = TLG_GET_PLAYER_WEAPON_DATA(weapon) INT iAmmoInClip = TLG_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() IF iAmmoInClip = data.iClipSize //-- Clip full RETURN FALSE ENDIF RETURN TRUE ENDFUNC FUNC BOOL TLG_DOES_PLAYER_NEED_TO_RELOAD() RETURN TLG_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() = 0 ENDFUNC PROC TLG_RELOAD_PLAYER_WEAPON() TLG_PLAYER_WEAPON_TYPE weaponType = sTLGData.sPlayerData[0].weaponType // // IF NOT TLG_CAN_PLAYER_CURRNT_WEAPON_BE_RELOADED() // IF sTLGData.sPlayerData[0].bIsReloading[weaponType] // sTLGData.sPlayerData[0].bIsReloading[weaponType] = FALSE // ENDIF // EXIT // ENDIF TLG_PLAYER_WEAPON weapon = TLG_GET_PLAYER_CURRENT_WEAPON() TLG_PLAYER_WEAPON_DATA data = TLG_GET_PLAYER_WEAPON_DATA(weapon) BOOL bPlayFirst IF sTLGData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime = 0 OR GET_GAME_TIMER() - sTLGData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime >= data.iMinTimeReloadSingleBullet INT iAmmoInClip = TLG_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() INT iTotalAmmo = TLG_GET_PLAYER_TOTAL_AMMO_IN_CURRENT_WEAPON(FALSE) INT iBulletsToAdd = 1 // data.iClipSize - iAmmoInClip IF iAmmoInClip < iTotalAmmo IF iBulletsToAdd > iTotalAmmo iBulletsToAdd = iTotalAmmo ENDIF // TLG_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO() #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "{DSW} [TLG_RELOAD_PLAYER_WEAPON] Weapon: ", TLG_GET_PLAYER_WEAPON_AS_STRING(weapon), "In clip: ", iAmmoInClip, " Weapon size: ", data.iClipSize) #ENDIF bPlayFirst = (iAmmoInClip < data.iClipSize - 2) AND NOT TLG_IS_PLAYER_BIT_SET(TLG_PLAYER_BIT_RELOADED_FIRST_BULLET) TLG_SET_CURRENT_PLAYER_WEAPON_AMMO(iAmmoInClip+iBulletsToAdd, iTotalAmmo) IF bPlayFirst //- -First bullet in clip (but not also last) TLG_SET_PLAYER_BIT(TLG_PLAYER_BIT_RELOADED_FIRST_BULLET) TLG_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO(TRUE, FALSE, FALSE) ELIF TLG_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() = data.iClipSize //-- Last bullet in clip TLG_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO(FALSE, FALSE, TRUE) ELSE TLG_HANDLE_PLAYER_RELOADING_WEAPON_AUDIO(FALSE, TRUE, FALSE) ENDIF sTLGData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime = GET_GAME_TIMER() ENDIF ENDIF ENDPROC PROC TLG_SET_PLAYER_WEAPON_TYPE(TLG_PLAYER_WEAPON_TYPE type) #IF IS_DEBUG_BUILD STRING sOld = TLG_GET_PLAYER_WEAPON_TYPE_AS_STRING(sTLGData.sPlayerData[0].weaponType) STRING sNew = TLG_GET_PLAYER_WEAPON_TYPE_AS_STRING(type) CDEBUG1LN(DEBUG_MINIGAME, "{DSW} [TLG_SET_PLAYER_WEAPON_TYPE] Setting weapon type ", sOld, " -> ", sNew) #ENDIF sTLGData.sPlayerData[0].weaponType = type ENDPROC PROC TLG_INIT_PLAYER_SPECIAL_WEAPON() TLG_PLAYER_WEAPON weapon = sTLGData.sPlayerData[0].specialWeapon TLG_PLAYER_WEAPON_DATA data = TLG_GET_PLAYER_WEAPON_DATA(weapon) sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_SPECIAL].iAmmoInClip = data.iClipSize sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_SPECIAL].iTotalAmmo = data.iMaxAmmo sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_SPECIAL].iLastShotTime = 0 sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_SPECIAL].iReloadSingleBulletTime = 0 sTLGData.sPlayerData[0].bIsReloading[TLG_PLAYER_WEAPON_TYPE_SPECIAL] = FALSE ENDPROC FUNC BOOL TLG_IS_LEVEL_BIT_SET_FOR_LEVEL(TLG_LEVELS eLevel, TLG_LEVELS_BITSET eBit) RETURN IS_BIT_SET(sTLGData.iLevelBitset[ENUM_TO_INT(eLevel)], ENUM_TO_INT(eBit)) ENDFUNC FUNC BOOL TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BITSET eBit) RETURN TLG_IS_LEVEL_BIT_SET_FOR_LEVEL(sTLGData.eCurrentLevel, eBit) ENDFUNC PROC TLG_SET_LEVEL_BIT_FOR_LEVEL(TLG_LEVELS eLevel, TLG_LEVELS_BITSET eBit) IF NOT TLG_IS_LEVEL_BIT_SET_FOR_LEVEL(eLevel, eBit) #IF IS_DEBUG_BUILD STRING sBit = TLG_GET_LEVELS_BIT_AS_STRING(eBit) STRING sLevel = TLG_GET_LEVEL_NAME_AS_STRING(eLevel) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_SET_LEVEL_BIT_FOR_LEVEL] {DSW} Set bit ", sBit, " For Level ", sLevel) #ENDIF SET_BIT(sTLGData.iLevelBitset[ENUM_TO_INT(eLevel)], ENUM_TO_INT(eBit)) ENDIF ENDPROC PROC TLG_SET_LEVEL_BIT_FOR_CURRENT_LEVEL(TLG_LEVELS_BITSET eBit) TLG_SET_LEVEL_BIT_FOR_LEVEL(sTLGData.eCurrentLevel, eBit) ENDPROC PROC TLG_SET_PLAYER_SPECIAL_WEAPON(TLG_PLAYER_WEAPON weapon, BOOL bSwapToSpecial = TRUE) #IF IS_DEBUG_BUILD STRING sOld = TLG_GET_PLAYER_WEAPON_AS_STRING(sTLGData.sPlayerData[0].specialWeapon) STRING sNew = TLG_GET_PLAYER_WEAPON_AS_STRING(weapon) CDEBUG1LN(DEBUG_MINIGAME, "{DSW} [TLG_SET_PLAYER_SPECIAL_WEAPON] Setting special weapon ", sOld, " -> ", sNew, " Swap? ", bSwapToSpecial) #ENDIF sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_DEFAULT].iLastShotTime = 0 sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_DEFAULT].iReloadSingleBulletTime = 0 sTLGData.sPlayerData[0].specialWeapon = weapon IF bSwapToSpecial TLG_SET_PLAYER_WEAPON_TYPE(TLG_PLAYER_WEAPON_TYPE_SPECIAL) TLG_INIT_PLAYER_SPECIAL_WEAPON() TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_SWAP_WEAPON) TLG_SET_LEVEL_BIT_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_USED_SPECIAL_WEAPON) ENDIF ENDPROC PROC TLG_INIT_PLAYER_WEAPON() sTLGData.sPlayerData[0].weaponType = TLG_PLAYER_WEAPON_TYPE_DEFAULT sTLGData.sPlayerData[0].specialWeapon = TLG_PLAYER_WEAPON_NONE TLG_PLAYER_WEAPON_DATA data = TLG_GET_PLAYER_WEAPON_DATA(TLG_PLAYER_WEAPON_PISTOL) sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_DEFAULT].iAmmoInClip = data.iClipSize sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_DEFAULT].iReloadSingleBulletTime = 0 sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_DEFAULT].iTotalAmmo = ciTLG_PLAYER_START_AMMO sTLGData.sPlayerData[0].weaponData[TLG_PLAYER_WEAPON_TYPE_DEFAULT].iLastShotTime = 0 sTLGData.sPlayerData[0].bIsReloading[TLG_PLAYER_WEAPON_TYPE_DEFAULT] = FALSE TLG_SET_PLAYER_SPECIAL_WEAPON(TLG_PLAYER_WEAPON_NONE, FALSE) TLG_INIT_PLAYER_SPECIAL_WEAPON() ENDPROC FUNC INT TLG_GET_RIVAL_PLAYER_PART_ID() RETURN sTLGData.iRivalPart ENDFUNC PROC TLG_INIT_PLAY_VARIABLES() sTLGData.eLevelStage = TLG_PLAY ENDPROC ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Level / Hi scores ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FUNC INT TLG_GET_TOTAL_SHOTS_FIRED_IN_LEVEL(TLG_LEVELS eLevel) RETURN sTLGData.iTotalLevelShots[eLevel] ENDFUNC FUNC INT TLG_GET_TOTAL_SHOTS_FIRED_IN_ALL_LEVELS() INT iTotal INT i REPEAT TLG_MAX_LEVELS i iTotal += TLG_GET_TOTAL_SHOTS_FIRED_IN_LEVEL(INT_TO_ENUM(TLG_LEVELS, i)) ENDREPEAT RETURN iTotal ENDFUNC FUNC INT TLG_GET_CURRENT_LEVEL_STAGE() RETURN sTLGData.iLevelCurrentStage[ENUM_TO_INT(sTLGData.eCurrentLevel)] ENDFUNC PROC TLG_INCREASE_SHOT_FIRED_FOR_CURRENT_LEVEL() sTLGData.iTotalLevelShots[TLG_GET_CURRENT_LEVEL()]++ ENDPROC FUNC INT TLG_GET_TOTAL_SHOTS_FIRED_IN_CURRENT_LEVEL() RETURN sTLGData.iTotalLevelShots[TLG_GET_CURRENT_LEVEL()] ENDFUNC FUNC INT TLG_GET_TOTAL_ENEMY_HITS_FOR_LEVEL(TLG_LEVELS eLevel) RETURN sTLGData.iTotalLevelEnemyHits[eLevel] ENDFUNC PROC TLG_INCREASE_ENEMY_HIT_COUNT_FOR_CURRENT_LEVEL() sTLGData.iTotalLevelEnemyHits[TLG_GET_CURRENT_LEVEL()]++ ENDPROC FUNC INT TLG_GET_TOTAL_ENEMY_HITS_FOR_CURRENT_LEVEL() RETURN TLG_GET_TOTAL_ENEMY_HITS_FOR_LEVEL(TLG_GET_CURRENT_LEVEL()) ENDFUNC FUNC INT TLG_GET_TOTAL_ENEMY_HITS_FOR_ALL_LEVELS() INT iTotal INT i REPEAT TLG_MAX_LEVELS i iTotal += TLG_GET_TOTAL_ENEMY_HITS_FOR_LEVEL(INT_TO_ENUM(TLG_LEVELS, i)) ENDREPEAT RETURN iTotal ENDFUNC PROC TLG_INCREASE_ENEMY_HEADSHOT_COUNT_FOR_CURRENT_LEVEL() sTLGData.iTotalLevelEnemyHeadShots[TLG_GET_CURRENT_LEVEL()]++ ENDPROC PROC TLG_INCREASE_BIRDS_SHOT_COUNT_FOR_CURRENT_LEVEL() sTLGData.iTotalLevelBirdsShot[TLG_GET_CURRENT_LEVEL()]++ ENDPROC FUNC INT TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_LEVEL(TLG_LEVELS eLevel) RETURN sTLGData.iTotalLevelBirdsShot[eLevel] ENDFUNC FUNC INT TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_ALL_LEVELS() INT iTotal INT i REPEAT TLG_MAX_LEVELS i iTotal += TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_LEVEL(INT_TO_ENUM(TLG_LEVELS, i)) ENDREPEAT RETURN iTotal ENDFUNC FUNC INT TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_CURRENT_LEVEL() RETURN TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_LEVEL(TLG_GET_CURRENT_LEVEL()) ENDFUNC FUNC INT TLG_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_LEVEL(TLG_LEVELS eLevel) RETURN sTLGData.iTotalPowerupsCollected[eLevel] ENDFUNC FUNC INT TLG_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_CURRENT_LEVEL() RETURN TLG_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_LEVEL(TLG_GET_CURRENT_LEVEL()) ENDFUNC FUNC INT TLG_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_ALL_LEVELS() INT iTotal INT i REPEAT TLG_MAX_LEVELS i iTotal += TLG_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_LEVEL(INT_TO_ENUM(TLG_LEVELS, i)) ENDREPEAT RETURN iTotal ENDFUNC PROC TLG_INCREASE_POWERUPS_COLLECTED_FOR_CURRENT_LEVEL() sTLGData.iTotalPowerupsCollected[TLG_GET_CURRENT_LEVEL()]++ #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_INCREASE_POWERUPS_COLLECTED_FOR_CURRENT_LEVEL] Powerups collected now: ",sTLGData.iTotalPowerupsCollected[TLG_GET_CURRENT_LEVEL()], " level: ", TLG_GET_LEVEL_NAME_AS_STRING(sTLGData.eCurrentLevel)) #ENDIF ENDPROC PROC TLG_INCREASE_HOSTAGES_SAVED_COUNT_FOR_CURRENT_LEVEL() sTLGData.iTotalLevelHostagesSaved[TLG_GET_CURRENT_LEVEL()]++ #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_INCREASE_HOSTAGES_SAVED_COUNT_FOR_CURRENT_LEVEL] Hostages saved now: ",sTLGData.iTotalLevelHostagesSaved[TLG_GET_CURRENT_LEVEL()], " level: ", TLG_GET_LEVEL_NAME_AS_STRING(sTLGData.eCurrentLevel)) #ENDIF ENDPROC FUNC FLOAT TLG_GET_PLAYER_ACCURACY_FOR_CURRENT_LEVEL() FLOAT fNumberOfShots = TO_FLOAT(TLG_GET_TOTAL_SHOTS_FIRED_IN_CURRENT_LEVEL()) FLOAT fEnemiesShot = TO_FLOAT(TLG_GET_TOTAL_ENEMY_HITS_FOR_CURRENT_LEVEL()) FLOAT fAnimalsShot = TO_FLOAT(TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_CURRENT_LEVEL()) FLOAT fTotalHits = fEnemiesShot + fAnimalsShot RETURN 100.0 * (fTotalHits / fNumberOfSHots) ENDFUNC FUNC FLOAT TLG_GET_PLAYER_ACCURACY_FOR_ALL_LEVELS() FLOAT fTotalShots = TO_FLOAT(TLG_GET_TOTAL_SHOTS_FIRED_IN_ALL_LEVELS()) FLOAT fTotalEnemyHits = TO_FLOAT(TLG_GET_TOTAL_ENEMY_HITS_FOR_ALL_LEVELS()) FLOAT fTotalAnimals = TO_FLOAT(TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_CURRENT_LEVEL()) FLOAT fAccuracy = 100.0 * (fTotalEnemyHits + fTotalAnimals) / fTotalShots RETURN fAccuracy ENDFUNC FUNC INT TLG_GET_TOTAL_NUMBER_OF_HOSTAGES_SAVED_FOR_CURRENT_LEVEL() RETURN sTLGData.iTotalLevelHostagesSaved[TLG_GET_CURRENT_LEVEL()] ENDFUNC FUNC INT TLG_GET_PLAYER_SUCESSIVE_HITS() RETURN sTLGData.sPlayerData[0].iSuccessiveHits ENDFUNC PROC TLG_INCREASE_PLAYER_SUCCESSIVE_HITS() sTLGData.sPlayerData[0].iSuccessiveHits += 1 CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_INCREASE_PLAYER_SUCCESSIVE_HITS] Score mulitplier now: ", sTLGData.sPlayerData[0].iSuccessiveHits) ENDPROC PROC TLG_INCREASE_PLAYER_CHAINED_SCORE(INT iScore) sTLGData.sPlayerData[0].iChainedScore += iScore CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_INCREASE_PLAYER_CHAINED_SCORE] Chained score now: ", sTLGData.sPlayerData[0].iChainedScore, " Chained Shots: ",TLG_GET_PLAYER_SUCESSIVE_HITS() - 1 ) DEBUG_PRINTCALLSTACK() ENDPROC FUNC INT TLG_GET_PLAYER_CHAINED_SCORE() RETURN sTLGData.sPlayerData[0].iChainedScore ENDFUNC FUNC INT TLG_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(INT iPart, INT iLevel) RETURN tlgServerBd.sPlayerScores[iPart].iHiScoreForLevel[iLevel] RETURN 0 ENDFUNC FUNC INT TLG_GET_RIVAL_HI_SCORE_FOR_LEVEL(INT iLevel) RETURN tlgServerBd.sPlayerScores[sTLGData.iRivalPart].iHiScoreForLevel[iLevel] ENDFUNC FUNC INT TLG_GET_RIVAL_SCORE_FOR_LEVEL(INT iLevel) RETURN tlgServerBd.sPlayerScores[sTLGData.iRivalPart].iCurrentScoreForLevel[iLevel] ENDFUNC FUNC INT TLG_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(INT iLevel) RETURN playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iLevel] ENDFUNC FUNC INT TLG_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(INT iLevel) RETURN playerBd[PARTICIPANT_ID_TO_INT()].iPlayerHiScore[iLevel] ENDFUNC FUNC INT TLG_GET_LOCAL_PLAYER_HI_SCORE_FOR_ALL_LEVELS() INT i, iScore REPEAT TLG_MAX_LEVELS i iScore += TLG_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(i) ENDREPEAT RETURN iScore ENDFUNC FUNC INT TLG_GET_LOCAL_PLAYER_HI_SCORE() RETURN TLG_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(TLG_GET_CURRENT_LEVEL_AS_INT()) ENDFUNC FUNC INT GET_LOCAL_PLAYER_SCORE() INT iCurrentLevel = TLG_GET_CURRENT_LEVEL_AS_INT() RETURN TLG_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(iCurrentLevel) ENDFUNC FUNC INT TLG_GET_PARTICIPANT_WITH_HIGHEST_HI_SCORE_FOR_CURRENT_LEVEL() INT iCurrentLevel = TLG_GET_CURRENT_LEVEL_AS_INT() INT iRivalHiScore = TLG_GET_RIVAL_HI_SCORE_FOR_LEVEL(iCurrentLevel) INT iMyHiScore = tlgServerBd.sPlayerScores[PARTICIPANT_ID_TO_INT()].iHiScoreForLevel[iCurrentLevel] IF iRivalHiScore > iMyHiScore RETURN TLG_GET_RIVAL_PLAYER_PART_ID() ENDIF RETURN PARTICIPANT_ID_TO_INT() ENDFUNC FUNC INT TLG_GET_LOCAL_PLAYER_TOTAL_SCORE() INT i, iScore REPEAT TLG_MAX_LEVELS i iScore += TLG_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(i) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_GET_LOCAL_PLAYER_TOTAL_SCORE] Hi Score for level ", i, ": ", TLG_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(i), " Total so far: ", iScore) ENDREPEAT RETURN iScore ENDFUNC FUNC INT TLG_GET_SCORE_FOR_TYPE(TLG_SCORE_TYPE score) SWITCH score CASE TLG_SCORE_TYPE_ENEMY RETURN 100 CASE TLG_SCORE_TYPE_ENEMY_HEADSHOT RETURN 150 CASE TLG_SCORE_TYPE_ANIMAL RETURN 250 CASE TLG_SCORE_TYPE_SCENERY RETURN 10 CASE TLG_SCORE_TYPE_ENEMY_EXPLOSION RETURN 100 ENDSWITCH CDEBUG1LN(DEBUG_MINIGAME, "[GET_SCORE_FOR_TYPE] {DSW} Unknown score type") RETURN 0 ENDFUNC FUNC INT TLG_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 TLG_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 TLG_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 CDEBUG1LN(DEBUG_MINIGAME, "[TLG_RESET_LOCAL_PLAYER_SCORE_FOR_LEVEL] {DSW} Called for level ", iLevel) DEBUG_PRINTCALLSTACK() #ENDIF ENDIF ENDPROC PROC TLG_RESET_LOCAL_PLAYER_SCORE_FOR_CURRENT_LEVEL() TLG_RESET_LOCAL_PLAYER_SCORE_FOR_LEVEL(TLG_GET_CURRENT_LEVEL_AS_INT()) ENDPROC PROC TLG_ADD_TO_LOCAL_PLAYER_SCORE(TLG_SCORE_TYPE score) INT iScoreToAdd = TLG_GET_SCORE_FOR_TYPE(score) INT iCurrentLevel = TLG_GET_CURRENT_LEVEL_AS_INT() //INT iChainBonus = 0 TLG_INCREASE_PLAYER_SUCCESSIVE_HITS() INT iHits = TLG_GET_PLAYER_SUCESSIVE_HITS() FLOAT fScoreMultiplier = 0.0 IF iHits > 1 fScoreMultiplier = TO_FLOAT(iHits) / 10.0 ENDIF TLG_INCREASE_PLAYER_CHAINED_SCORE(iScoreToAdd) INT iChainedScore = TLG_GET_PLAYER_CHAINED_SCORE() #IF IS_DEBUG_BUILD INT iCurrentScore = TLG_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(iCurrentLevel) STRING sScore = TLG_GET_SCORE_TYPE_AS_STRING(score) STRING sLevel = TLG_GET_LEVEL_NAME_AS_STRING(TLG_GET_CURRENT_LEVEL()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ADD_TO_LOCAL_PLAYER_SCORE] {dsw} Local player scored points on level ", sLevel, " ( Old Score: ", iCurrentScore, ")" ) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ADD_TO_LOCAL_PLAYER_SCORE] {dsw} Score to add (type): ", sScore) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ADD_TO_LOCAL_PLAYER_SCORE] {dsw} Score to add (value): ", iScoreToAdd) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ADD_TO_LOCAL_PLAYER_SCORE] {dsw} Successive Hits: ", iHits) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ADD_TO_LOCAL_PLAYER_SCORE] {dsw} Multiplier: ", fScoreMultiplier) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ADD_TO_LOCAL_PLAYER_SCORE] {dsw} Chained score: ", iChainedScore) #ENDIF IF iHits = 1 playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel] += iScoreToAdd TLG_SET_PREVIOUS_TARGET_SCORE(iScoreToAdd) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ADD_TO_LOCAL_PLAYER_SCORE] {dsw} No Chain. New score: ", playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel]) TLG_CLEAR_PLAYER_BIT(TLG_PLAYER_BIT_INIT_NEW_CHAIN) ELSE IF NOT TLG_IS_PLAYER_BIT_SET(TLG_PLAYER_BIT_INIT_NEW_CHAIN) TLG_SET_PLAYER_BIT(TLG_PLAYER_BIT_INIT_NEW_CHAIN) TLG_SET_PLAYER_NO_CHAIN_SCORE(playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel] - TLG_GET_PREVIOUS_TARGET_SCORE()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ADD_TO_LOCAL_PLAYER_SCORE] New Chain started, storing score: ", TLG_GET_PLAYER_NO_CHAIN_SCORE()) ENDIF iScoreToAdd = iChainedScore + ROUND(TO_FLOAT(iChainedScore) * fScoreMultiplier) playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[iCurrentLevel] = TLG_GET_PLAYER_NO_CHAIN_SCORE() + iScoreToAdd CDEBUG1LN(DEBUG_MINIGAME, "[TLG_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 TLG_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 TLG_IS_LOCAL_PLAYER_IN_LEFT_HAND_CABINET() RETURN GET_ARCADE_CABINET_LOCATE_PLAYER_SLOT_PLAYER_IS_IN(PLAYER_ID()) <= 0 ENDFUNC FUNC INT TLG_GET_RED_PLAYER_SCORE_FOR_LEVEL(INT iLevel) IF GET_ARCADE_CABINET_LOCATE_PLAYER_SLOT_PLAYER_IS_IN(PLAYER_ID()) <= 0 RETURN TLG_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(iLevel) ELSE RETURN TLG_GET_RIVAL_SCORE_FOR_LEVEL(iLevel) ENDIF RETURN 0 ENDFUNC FUNC INT TLG_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 TLG_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(PARTICIPANT_ID_TO_INT(), iLevel) ELSE RETURN TLG_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(sTLGData.iRivalPart, iLevel) ENDIF RETURN 0 ENDFUNC FUNC INT TLG_GET_BLUE_PLAYER_SCORE_FOR_LEVEL(INT iLevel) IF GET_ARCADE_CABINET_LOCATE_PLAYER_SLOT_PLAYER_IS_IN(PLAYER_ID()) = 1 RETURN TLG_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(iLevel) ELSE RETURN TLG_GET_RIVAL_SCORE_FOR_LEVEL(iLevel) ENDIF RETURN 0 ENDFUNC FUNC INT TLG_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 TLG_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(PARTICIPANT_ID_TO_INT(), iLevel) ELSE RETURN TLG_GET_PARTICIPANT_HI_SCORE_FOR_LEVEL_FROM_HOST(sTLGData.iRivalPart, iLevel) ENDIF RETURN 0 ENDFUNC FUNC INT TLG_GET_RED_PLAYER_HI_SCORE_FOR_ALL_LEVELS_FROM_HOST() INT i, iScore REPEAT TLG_MAX_LEVELS i iScore += TLG_GET_RED_PLAYER_HI_SCORE_FOR_LEVEL_FROM_HOST(i) ENDREPEAT RETURN iScore ENDFUNC FUNC INT TLG_GET_BLUE_PLAYER_HI_SCORE_FOR_ALL_LEVELS_FROM_HOST() INT i, iScore REPEAT TLG_MAX_LEVELS i iScore += TLG_GET_BLUE_PLAYER_HI_SCORE_FOR_LEVEL_FROM_HOST(i) ENDREPEAT RETURN iScore ENDFUNC ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Levels Util ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// PROC TLG_CLEAR_LEVEL_BIT_FOR_LEVEL(TLG_LEVELS eLevel, TLG_LEVELS_BITSET eBit) IF TLG_IS_LEVEL_BIT_SET_FOR_LEVEL(eLevel, eBit) #IF IS_DEBUG_BUILD STRING sBit = TLG_GET_LEVELS_BIT_AS_STRING(eBit) STRING sLevel = TLG_GET_LEVEL_NAME_AS_STRING(eLevel) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_CLEAR_LEVEL_BIT_FOR_LEVEL] {DSW} Set bit ", sBit, " For Level ", sLevel) #ENDIF CLEAR_BIT(sTLGData.iLevelBitset[ENUM_TO_INT(eLevel)], ENUM_TO_INT(eBit)) ENDIF ENDPROC FUNC BOOL IS_MOVING_LEVEL() #IF IS_DEBUG_BUILD IF sTLGData.bStopMovingLevel RETURN FALSE ENDIF #ENDIF BOOL bMovingBackground = FALSE SWITCH sTLGData.eCurrentLevel CASE TLG_LEVEL_DESERT IF NOT TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_STOPPED) bMovingBackground = TRUE ENDIF BREAK CASE TLG_LEVEL_TOWN IF NOT TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_STOPPED) bMovingBackground = TRUE ENDIF BREAK CASE TLG_LEVEL_FOREST IF NOT TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_STOPPED) bMovingBackground = TRUE ENDIF BREAK CASE TLG_LEVEL_MINE IF NOT TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_STOPPED) bMovingBackground = TRUE ENDIF BREAK CASE TLG_LEVEL_GRAVEYARD IF NOT TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_STOPPED) bMovingBackground = TRUE ENDIF BREAK ENDSWITCH RETURN bMovingBackground ENDFUNC FUNC BOOL TLG_IS_COVER_TYPE_LARGE_BUILDING(TLG_ASSET_TYPES eCover) SWITCH eCover CASE TLG_ASSET_BUILDING_1 CASE TLG_ASSET_BUILDING_2 CASE TLG_ASSET_BUILDING_3 CASE TLG_ASSET_BUILDING_4 RETURN TRUE ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL TLG_IS_COVER_TYPE_SMALL_BUILDING(TLG_ASSET_TYPES eCover) SWITCH eCover CASE TLG_ASSET_BUILDING_5 CASE TLG_ASSET_BUILDING_6 CASE TLG_ASSET_BUILDING_7 CASE TLG_ASSET_BUILDING_8 RETURN TRUE ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL TLG_IS_MOVING_LEVEL_ABOUT_TO_STOP() RETURN TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_SHOULD_STOP) AND NOT TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_STOPPED) ENDFUNC FUNC BOOL TLG_IS_LEVEL_STOPPED() RETURN TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_SHOULD_STOP) AND TLG_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(TLG_LEVELS_BIT_STOPPED) ENDFUNC FUNC INT TLG_GET_NUMBER_OF_SCREENS_FOR_LEVEL(TLG_LEVELS eLevel) SWITCH eLevel CASE TLG_LEVEL_TOWN CASE TLG_LEVEL_FOREST CASE TLG_LEVEL_MINE CASE TLG_LEVEL_GRAVEYARD RETURN 4 BREAK ENDSWITCH RETURN 0 ENDFUNC PROC TLG_SET_SCREEN_TO_STOP_ON(INT iScreen) INT iMaxScreens = TLG_GET_NUMBER_OF_SCREENS_FOR_LEVEL(sTLGData.eCurrentLevel) IF iScreen > iMaxScreens iScreen = 1 ENDIF sTLGData.iScreenToStopOn = iScreen #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [TLG_SET_SCREEN_TO_STOP_ON] (callstack) sTLGData.iScreenToStopOn: ", sTLGData.iScreenToStopOn) DEBUG_PRINTCALLSTACK() #ENDIF ENDPROC FUNC INT TLG_GET_SCREEN_TO_STOP_ON() RETURN sTLGData.iScreenToStopOn ENDFUNC PROC TLG_RESET_SCREEN_TO_STOP_ON() sTLGData.iLastScreenToStopOn = sTLGData.iScreenToStopOn sTLGData.iScreenToStopOn = -1 #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [TLG_RESET_SCREEN_TO_STOP_ON] CAlled. last screen to stop on: ", sTLGData.iLastScreenToStopOn, " Callstack...") DEBUG_PRINTCALLSTACK() #ENDIF ENDPROC PROC TLG_INCREASE_CURRENT_LEVEL_STAGE() sTLGData.iLevelCurrentStage[ENUM_TO_INT(sTLGData.eCurrentLevel)]++ #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_INCREASE_CURRENT_LEVEL_STAGE] {DSW} Stage for Level ", TLG_GET_LEVEL_NAME_AS_STRING(sTLGData.eCurrentLevel), " now ", sTLGData.iLevelCurrentStage[ENUM_TO_INT(sTLGData.eCurrentLevel)]) #ENDIF ENDPROC FUNC BOOL TLG_IS_LEVEL_COMPLETED(TLG_LEVELS level) RETURN sTLGData.bLevelsCompleted[ENUM_TO_INT(level)] ENDFUNC FUNC BOOL TLG_ARE_ALL_LEVELS_COMPLETE() INT i REPEAT TLG_MAX_LEVELS i IF NOT TLG_IS_LEVEL_COMPLETED(INT_TO_ENUM(TLG_LEVELS, i)) RETURN FALSE ENDIF ENDREPEAT RETURN TRUE ENDFUNC FUNC BOOL TLG_WAS_ANY_LEVEL_REPLAYED() INT i REPEAT TLG_MAX_LEVELS i IF TLG_IS_LEVEL_BIT_SET_FOR_LEVEL(TLG_GET_CURRENT_LEVEL(), TLG_LEVELS_BIT_REPLAYING_LEVEL) #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_INCREASE_CURRENT_LEVEL_STAGE] {DSW} This level was replayed: ", TLG_GET_LEVEL_NAME_AS_STRING(sTLGData.eCurrentLevel)) #ENDIF RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC FUNC BOOL TLG_WAS_A_SPECIAL_WEAPON_USED_ON_ANY_LEVEL() INT i REPEAT TLG_MAX_LEVELS i IF TLG_IS_LEVEL_BIT_SET_FOR_LEVEL(INT_TO_ENUM(TLG_LEVELS, i), TLG_LEVELS_BIT_USED_SPECIAL_WEAPON) #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_WAS_A_SPECIAL_WEAPON_USED_ON_ANY_LEVEL] {DSW} Special weapon was used on level: ", TLG_GET_LEVEL_NAME_AS_STRING(sTLGData.eCurrentLevel)) #ENDIF RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC FUNC BOOL IS_LEVEL_UNLOCKED(TLG_LEVELS level) #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("sc_BadlandsUnlockLvls") RETURN TRUE ENDIF #ENDIF SWITCH level CASE TLG_LEVEL_DESERT CASE TLG_LEVEL_TOWN RETURN TRUE BREAK CASE TLG_LEVEL_FOREST RETURN TRUE // IF sTLGData.bLevelsCompleted[0] // OR sTLGData.bLevelsCompleted[1] // RETURN TRUE // ENDIF BREAK CASE TLG_LEVEL_MINE IF sTLGData.bLevelsCompleted[1] OR sTLGData.bLevelsCompleted[2] RETURN TRUE ENDIF BREAK CASE TLG_LEVEL_GRAVEYARD IF sTLGData.bLevelsCompleted[2] OR sTLGData.bLevelsCompleted[3] RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC INT TLG_GET_LEVEL_NUMBER_OF_STAGES(TLG_LEVELS eLevel) SWITCH eLevel CASE TLG_LEVEL_DESERT RETURN 2 BREAK CASE TLG_LEVEL_TOWN RETURN 4 BREAK CASE TLG_LEVEL_FOREST RETURN 2 BREAK CASE TLG_LEVEL_MINE RETURN 2 BREAK CASE TLG_LEVEL_GRAVEYARD RETURN 2 BREAK ENDSWITCH RETURN 1 ENDFUNC FUNC INT TLG_GET_CURRENT_LEVEL_NUMBER_OF_STAGES() RETURN TLG_GET_LEVEL_NUMBER_OF_STAGES(sTLGData.eCurrentLevel) ENDFUNC FUNC BOOL TLG_IS_LEVEL_STAGE_STATIONARY(TLG_LEVELS eLevel, INT iStage) SWITCH eLevel CASE TLG_LEVEL_DESERT SWITCH iStage CASE 1 RETURN TRUE ENDSWITCH BREAK CASE TLG_LEVEL_TOWN SWITCH iStage CASE 1 RETURN TRUE ENDSWITCH BREAK CASE TLG_LEVEL_FOREST SWITCH iStage CASE 1 RETURN TRUE ENDSWITCH BREAK CASE TLG_LEVEL_MINE SWITCH iStage CASE 1 RETURN TRUE ENDSWITCH BREAK CASE TLG_LEVEL_GRAVEYARD SWITCH iStage CASE 1 RETURN TRUE ENDSWITCH BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL TLG_IS_CURRENT_LEVEL_STAGE_STATIONARY() TLG_LEVELS level = sTLGData.eCurrentLevel INT iStage = TLG_GET_CURRENT_LEVEL_STAGE() RETURN TLG_IS_LEVEL_STAGE_STATIONARY(level, iStage) ENDFUNC FUNC INT TLG_GET_FINAL_STAGE_IN_LEVEL(TLG_LEVELS eLevel) SWITCH eLevel CASE TLG_LEVEL_DESERT RETURN 1 BREAK CASE TLG_LEVEL_TOWN RETURN 1 BREAK CASE TLG_LEVEL_FOREST RETURN 1 BREAK CASE TLG_LEVEL_MINE RETURN 1 BREAK CASE TLG_LEVEL_GRAVEYARD RETURN 1 BREAK ENDSWITCH RETURN 0 ENDFUNC FUNC INT TLG_GET_FINAL_STAGE_IN_CURRENT_LEVEL() RETURN TLG_GET_FINAL_STAGE_IN_LEVEL(sTLGData.eCurrentLevel) ENDFUNC FUNC BOOL TLG_IS_MENU_OPTION_UNLOCKED(TLG_MENU_OPTIONS option) SWITCH option CASE TLG_WANTED_3 RETURN IS_LEVEL_UNLOCKED(TLG_LEVEL_FOREST) CASE TLG_WANTED_4 RETURN IS_LEVEL_UNLOCKED(TLG_LEVEL_MINE) CASE TLG_WANTED_5 RETURN IS_LEVEL_UNLOCKED(TLG_LEVEL_GRAVEYARD) ENDSWITCH RETURN TRUE ENDFUNC FUNC FLOAT TLG_GET_LOCAL_PLAYER_HEALTH() #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("sc_BadlandsNoDeath") RETURN 1.0 ENDIF #ENDIF RETURN sTLGData.sPlayerData[0].fHealth ENDFUNC PROC TLG_SET_PLAYER_PED_ANIM_STATE(TLG_PLAYER_PED_ANIM_STATE eNewState) #IF IS_DEBUG_BUILD STRING sCurrentState = TLG_DEBUG_GET_TLG_PLAYER_PED_ANIM_STATE_AS_STRING(sTLGData.ePlayerPedAnimState) STRING sNewState = TLG_DEBUG_GET_TLG_PLAYER_PED_ANIM_STATE_AS_STRING(eNewState) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_PROCESS_PLAYER_PED_ANIMS] TLG_SET_PLAYER_PED_ANIM_STATE: ", sCurrentState, " -> ", sNewState ) #ENDIF sTLGData.ePlayerPedAnimState = eNewState ENDPROC FUNC INT TLG_GET_NUMBER_OF_PLAYERS() RETURN tlgServerBd.iNumPlayers ENDFUNC PROC TLG_STORE_RIVAL_PLAYER_PART_ID() IF PARTICIPANT_ID_TO_INT() = 0 sTLGData.iRivalPart = 1 ELSE sTLGData.iRivalPart = 0 ENDIF CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_STORE_RIVAL_PLAYER_PART_ID] :", sTLGData.iRivalPart) ENDPROC PROC TLG_INIT_SOUND() INT i REPEAT TLG_AUDIO_EFFECT_MAX i sTLGDATA.iSoundId[i] = -1 ENDREPEAT ENDPROC ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Audio scenes ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// PROC TLG_START_AUDIO_SCENE(TLG_AUDIO_SCENE scene) SWITCH scene CASE TLG_AUDIO_SCENE_MENUS CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_AUDIO_SCENE] [TLG_START_AUDIO_SCENE] Starting scene TLG_AUDIO_SCENE_MENUS / dlc_ch_am_br_in_menus_scene") START_AUDIO_SCENE("dlc_ch_am_br_in_menus_scene") BREAK CASE TLG_AUDIO_SCENE_GAMEPLAY CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_AUDIO_SCENE] [TLG_START_AUDIO_SCENE] Starting scene TLG_AUDIO_SCENE_GAMEPLAY / dlc_ch_am_br_in_gameplay_scene") START_AUDIO_SCENE("dlc_ch_am_br_in_gameplay_scene") BREAK CASE TLG_AUDIO_SCENE_POWERUP_ACTIVE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_AUDIO_SCENE] [TLG_START_AUDIO_SCENE] Starting scene TLG_AUDIO_SCENE_POWERUP_ACTIVE / dlc_ch_badlands_revenge_powerup_active_scene") START_AUDIO_SCENE("dlc_ch_badlands_revenge_powerup_active_scene") BREAK ENDSWITCH ENDPROC PROC TLG_STOP_AUDIO_SCENE(TLG_AUDIO_SCENE scene) SWITCH scene CASE TLG_AUDIO_SCENE_MENUS CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_AUDIO_SCENE] [TLG_STOP_AUDIO_SCENE] Stopping scene TLG_AUDIO_SCENE_MENUS / dlc_ch_am_br_in_menus_scene") STOP_AUDIO_SCENE("dlc_ch_am_br_in_menus_scene") BREAK CASE TLG_AUDIO_SCENE_GAMEPLAY CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_AUDIO_SCENE] [TLG_STOP_AUDIO_SCENE] Stopping scene TLG_AUDIO_SCENE_GAMEPLAY / dlc_ch_am_br_in_gameplay_scene") STOP_AUDIO_SCENE("dlc_ch_am_br_in_gameplay_scene") BREAK CASE TLG_AUDIO_SCENE_POWERUP_ACTIVE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_AUDIO_SCENE] [TLG_STOP_AUDIO_SCENE] Stopping scene TLG_AUDIO_SCENE_GAMEPLAY / dlc_ch_am_br_in_gameplay_scene") STOP_AUDIO_SCENE("dlc_ch_badlands_revenge_powerup_active_scene") BREAK ENDSWITCH ENDPROC ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Help Text ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FUNC BOOL TLG_IS_HELP_TEXT_BIT_SET(TLG_HELP_TEXT_BITS eHelp) RETURN IS_BIT_SET(sTLGData.iHelpTextBitset, ENUM_TO_INT(eHelp)) ENDFUNC PROC TLG_SET_HELP_TEXT_BIT(TLG_HELP_TEXT_BITS eHelp) IF NOT TLG_IS_HELP_TEXT_BIT_SET(eHelp) #IF IS_DEBUG_BUILD STRING sHelp = TLG_GET_HELP_TEXT_BIT_AS_STRING(eHelp) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SET_HELP_TEXT_BIT] Setting bit ", sHelp) #ENDIF SET_BIT(sTLGData.iHelpTextBitset, ENUM_TO_INT(eHelp)) ENDIF ENDPROC PROC TLG_CLEAR_HELP_TEXT_BIT(TLG_HELP_TEXT_BITS eHelp) IF TLG_IS_HELP_TEXT_BIT_SET(eHelp) #IF IS_DEBUG_BUILD STRING sHelp = TLG_GET_HELP_TEXT_BIT_AS_STRING(eHelp) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_CLEAR_HELP_TEXT_BIT] Clearing bit ", sHelp) #ENDIF CLEAR_BIT(sTLGData.iHelpTextBitset, ENUM_TO_INT(eHelp)) ENDIF ENDPROC FUNC INT TLG_GET_SHARPSHOOTER_AWARD_BRONZE_TARGET_SCORE() RETURN g_sMptunables.iARCADE_SHARPSHOOTER_BRONZE_SCORE // RETURN 5 ENDFUNC FUNC INT TLG_GET_SHARPSHOOTER_AWARD_SILVER_TARGET_SCORE() RETURN g_sMptunables.iARCADE_SHARPSHOOTER_SILVER_SCORE // RETURN 10 ENDFUNC FUNC INT TLG_GET_SHARPSHOOTER_AWARD_GOLD_TARGET_SCORE() RETURN g_sMptunables.iARCADE_SHARPSHOOTER_GOLD_SCORE // RETURN 20 ENDFUNC FUNC INT TLG_GET_SHARPSHOOTER_AWARD_PLATINUM_TARGET_SCORE() RETURN g_sMptunables.iARCADE_SHARPSHOOTER_PLATINUM_SCORE // RETURN TLG_SHARPSHOOTER_AWARD_PLATINUM_TARGET_SCORE ENDFUNC FUNC FLOAT TLG_GET_DEADEYE_AWARD_TARGET_ACCURACY() RETURN TO_FLOAT(g_sMptunables.iARCADE_DEADEYE_SCORE) ENDFUNC PROC TLG_MAINTAIN_HELP_TEXT() IF sTLGData.eClientState = TLG_ARCADE_CLIENT_STATE_TITLE_SCREEN OR sTLGData.eClientState = TLG_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU ARCADE_GAMES_HELP_TEXT_PRINT_FOREVER(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_TITLE) ELIF sTLGData.eClientState = TLG_ARCADE_CLIENT_STATE_PLAYING IF NOT TLG_IS_HELP_TEXT_BIT_SET(TLG_HELP_TEXT_BIT_SHOOT_AIM) //-- Aim / shoot ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_AIM_SHOOT) TLG_SET_HELP_TEXT_BIT(TLG_HELP_TEXT_BIT_SHOOT_AIM) ELSE //-- Reload IF sTLGData.sPlayerData[0].bShouldShowReloadPrompt ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_RELOAD) ENDIF ENDIF IF NOT TLG_IS_HELP_TEXT_BIT_SET(TLG_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT) //-- Headshot help text IF GET_GAME_TIMER() - sTLGData.iLocalLevelRunningTime > 20000 ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_HEADSHOT) ENDIF ENDIF //-- Chain together attacks IF GET_GAME_TIMER() - sTLGData.iLocalLevelRunningTime > 10000 ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_CHAIN) ENDIF ENDIF IF TLG_IS_HELP_TEXT_BIT_SET(TLG_HELP_TEXT_BIT_SHARPSHOOTER_BRONZE) ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_SHARPSHOOTER, TLG_GET_SHARPSHOOTER_AWARD_BRONZE_TARGET_SCORE()) ENDIF IF TLG_IS_HELP_TEXT_BIT_SET(TLG_HELP_TEXT_BIT_SHARPSHOOTER_SILVER) ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_SHARPSHOOTER, TLG_GET_SHARPSHOOTER_AWARD_SILVER_TARGET_SCORE()) ENDIF IF TLG_IS_HELP_TEXT_BIT_SET(TLG_HELP_TEXT_BIT_SHARPSHOOTER_GOLD) ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_SHARPSHOOTER, TLG_GET_SHARPSHOOTER_AWARD_GOLD_TARGET_SCORE()) ENDIF IF TLG_IS_HELP_TEXT_BIT_SET(TLG_HELP_TEXT_BIT_SHARPSHOOTER_PLATINUM) ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_SHARPSHOOTER, TLG_GET_SHARPSHOOTER_AWARD_PLATINUM_TARGET_SCORE()) ENDIF IF TLG_IS_HELP_TEXT_BIT_SET(TLG_HELP_TEXT_BIT_PISTOLS_AT_DAWN) ARCADE_GAMES_HELP_TEXT_PRINT(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_PISTOLS_AT_DAWN) ENDIF IF TLG_IS_HELP_TEXT_BIT_SET(TLG_HELP_TEXT_BIT_DEADEYE) ARCADE_GAMES_HELP_TEXT_PRINT_WITH_NUMBER(ARCADE_GAMES_HELP_TEXT_ENUM_TLGS_DEADEYE, ROUND(TLG_GET_DEADEYE_AWARD_TARGET_ACCURACY())) ENDIF ENDPROC ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Awards ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// PROC TLG_AWARD_SHARPSHOOTER(INT iValue, BOOL bWonPlatinum) SET_MP_INT_CHARACTER_AWARD(MP_AWARD_SHARPSHOOTER,iValue) IF bWonPlatinum TLG_SET_HELP_TEXT_BIT(TLG_HELP_TEXT_BIT_SHARPSHOOTER_PLATINUM) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_AWARD_SHARPHSOOTER) ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_BADLANDS_SHARPSHOOTER) ENDIF ENDPROC PROC TLG_AWARD_DEADEYE() SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_DEADEYE, TRUE) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_DEADEYE)) ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_BADLANDS_DEADEYE) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_AWARD_DEADEYE) TLG_SET_HELP_TEXT_BIT(TLG_HELP_TEXT_BIT_DEADEYE) // ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TROPHY_HELP(ARCADE_GAME_TROPHY_BADLANDS, TRUE) ENDPROC PROC TLG_AWARD_PISTOLS_AT_DAWN() SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_PISTOLSATDAWN, TRUE) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_PISTOLS_AT_DAWN)) TLG_PLAY_SOUND_AND_RELEASE_NO_POSITION(TLG_AUDIO_EFFECT_PLAYER_AWARD_PISTOLS) TLG_SET_HELP_TEXT_BIT(TLG_HELP_TEXT_BIT_PISTOLS_AT_DAWN) ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_BADLANDS_PISTOLS) ENDPROC PROC TLG_MAINTAIN_PLAYER_AWARDS() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Called...") //-- Kev says the rp is handled at his side BOOL bSharpshooterAwarded = FALSE BOOL bDeadeyeAwarded = FALSE BOOL bPistolsAtDawnAwarded = FALSE //-- SET_MP_INT_CHARACTER_AWARD(MP_AWARD_SHARPSHOOTER) // // Kill X Eagles across all levels of ‘Light Gun Game’. CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Check MP_AWARD_SHARPSHOOTER:") INT iSharpshooter = GET_MP_INT_CHARACTER_AWARD(MP_AWARD_SHARPSHOOTER) INT iBirdsShot = TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_ALL_LEVELS() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Bronze target: ", TLG_GET_SHARPSHOOTER_AWARD_BRONZE_TARGET_SCORE()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Silver target: ", TLG_GET_SHARPSHOOTER_AWARD_SILVER_TARGET_SCORE()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Gold target: ", TLG_GET_SHARPSHOOTER_AWARD_GOLD_TARGET_SCORE()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Platinum target: ", TLG_GET_SHARPSHOOTER_AWARD_PLATINUM_TARGET_SCORE()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Birds killed: ", iBirdsShot) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Stat value: ", iSharpshooter) BOOL bCanAwardGold, bAwardGold BOOL bCanAwardSilver, bAwardSilver BOOL bCanAwardBronze, bAwardBronze INT iNewValue iNewValue = iSharpshooter + iBirdsShot IF iSharpshooter < TLG_GET_SHARPSHOOTER_AWARD_PLATINUM_TARGET_SCORE() IF iBirdsShot > 0 CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharpshooter new total: ", iNewValue, " Old: ",iSharpshooter, " Shot this session: ", iBirdsShot) IF iNewValue >= TLG_GET_SHARPSHOOTER_AWARD_PLATINUM_TARGET_SCORE() SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_PLATINUM)) TLG_AWARD_SHARPSHOOTER(iNewValue, TRUE) ELSE //-- Can only give an award if the old toltal was below the threshhold score for that award IF iSharpshooter < TLG_GET_SHARPSHOOTER_AWARD_GOLD_TARGET_SCORE() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharshooter: bCanAwardGold set") bCanAwardGold = TRUE ENDIF IF iSharpshooter < TLG_GET_SHARPSHOOTER_AWARD_SILVER_TARGET_SCORE() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharshooter: bCanAwardSilver set") bCanAwardSilver = TRUE ENDIF IF iSharpshooter < TLG_GET_SHARPSHOOTER_AWARD_BRONZE_TARGET_SCORE() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharshooter: bCanAwardBronze Set") bCanAwardBronze = TRUE ENDIF IF bCanAwardGold IF iNewValue >= TLG_GET_SHARPSHOOTER_AWARD_GOLD_TARGET_SCORE() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharshooter: bAwardGold set") bAwardGold = TRUE ENDIF ENDIF IF bCanAwardSilver IF iNewValue >= TLG_GET_SHARPSHOOTER_AWARD_SILVER_TARGET_SCORE() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharshooter: bAwardSilver set") bAwardSilver = TRUE ENDIF ENDIF IF bCanAwardBronze IF iNewValue >= TLG_GET_SHARPSHOOTER_AWARD_BRONZE_TARGET_SCORE() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharshooter: bAwardBronze set") bAwardBronze = TRUE ENDIF ENDIF IF bAwardGold TLG_SET_HELP_TEXT_BIT(TLG_HELP_TEXT_BIT_SHARPSHOOTER_GOLD) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_GOLD)) ELIF bAwardSilver TLG_SET_HELP_TEXT_BIT(TLG_HELP_TEXT_BIT_SHARPSHOOTER_SILVER) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_SILVER)) ELIF bAwardBronze TLG_SET_HELP_TEXT_BIT(TLG_HELP_TEXT_BIT_SHARPSHOOTER_BRONZE) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_BRONZE)) ENDIF TLG_AWARD_SHARPSHOOTER(iNewValue, FALSE) ENDIF ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] not awarding sharpshooter as didn't shoot any birds") ENDIF ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] not awarding sharpshooter as already achieved platinum") ENDIF //-- For Sharpshooter Telemetry IF iBirdsShot >= TLG_GET_SHARPSHOOTER_AWARD_PLATINUM_TARGET_SCORE() SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_PLATINUM)) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_GOLD)) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_SILVER)) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_BRONZE)) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharpshooter telemetry - set Platinum - set all") ELIF iBirdsShot >= TLG_GET_SHARPSHOOTER_AWARD_GOLD_TARGET_SCORE() SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_GOLD)) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_SILVER)) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_BRONZE)) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharpshooter telemetry - set Gold") ELIF iBirdsShot >= TLG_GET_SHARPSHOOTER_AWARD_SILVER_TARGET_SCORE() SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_SILVER)) SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_BRONZE)) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharpshooter telemetry - set Silver") ELIF iBirdsShot >= TLG_GET_SHARPSHOOTER_AWARD_BRONZE_TARGET_SCORE() SET_BIT(sTLGData.iChallengesBitsetForTelemetry, ENUM_TO_INT(TLG_CHALLENGE_SHARPSHOOTER_BRONZE)) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Sharpshooter telemetry - set BRONZE") ENDIF //-- Get over 90% accuracy for an entire playthrough of ‘Light Gun Game’ CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS]") CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Check DEADEYE:") FLOAT fAccuracy = TLG_GET_PLAYER_ACCURACY_FOR_ALL_LEVELS() FLOAT fTargetAccuracy = TLG_GET_DEADEYE_AWARD_TARGET_ACCURACY() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Target accuracy: ", fTargetAccuracy) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] My accuracy: ", fAccuracy) IF NOT GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_DEADEYE) IF TLG_ARE_ALL_LEVELS_COMPLETE() IF NOT TLG_WAS_ANY_LEVEL_REPLAYED() IF fAccuracy > fTargetAccuracy TLG_AWARD_DEADEYE() bDeadeyeAwarded = TRUE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_INCREASE_CURRENT_LEVEL_STAGE] {DSW} Awarding MP_AWARD_DEADEYE fAccuracy: ", fAccuracy) ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_DEADEYE as accuracy:", fAccuracy) ENDIF ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_DEADEYE as a level was replayed") ENDIF ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_DEADEYE as not TLG_ARE_ALL_LEVELS_COMPLETE") ENDIF ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Already awarded MP_AWARD_DEADEYE") bDeadeyeAwarded = TRUE ENDIF //-- Complete ‘Light Gun Game’ using only pistols. CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS]") CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Check MP_AWARD_PISTOLSATDAWN:") IF NOT GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_PISTOLSATDAWN) IF TLG_ARE_ALL_LEVELS_COMPLETE() IF NOT TLG_WAS_ANY_LEVEL_REPLAYED() IF NOT TLG_WAS_A_SPECIAL_WEAPON_USED_ON_ANY_LEVEL() TLG_AWARD_PISTOLS_AT_DAWN() bPistolsAtDawnAwarded = TRUE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] {DSW} Awarding MP_AWARD_PISTOLSATDAWN. ") ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_PISTOLSATDAWN as TLG_WAS_A_SPECIAL_WEAPON_USED_ON_ANY_LEVEL") ENDIF ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_PISTOLSATDAWN as TLG_WAS_ANY_LEVEL_REPLAYED") ENDIF ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Not awarding MP_AWARD_PISTOLSATDAWN as not TLG_ARE_ALL_LEVELS_COMPLETE") ENDIF ELSE bPistolsAtDawnAwarded = TRUE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Already awarded MP_AWARD_PISTOLSATDAWN") ENDIF //-- T-shirt / trophy for completing everything BOOL bOwnsPenthouse IF bSharpshooterAwarded AND bPistolsAtDawnAwarded AND bDeadeyeAwarded bOwnsPenthouse = DOES_PLAYER_OWN_A_CASINO_APARTMENT(PLAYER_ID()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_MAINTAIN_PLAYER_AWARDS] Everything achieved, unlocking final t-shirt / trophy. Penthouse? ", bOwnsPenthouse) ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_BADLANDS_COMPLETE) ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TROPHY_HELP(ARCADE_GAME_TROPHY_BADLANDS, bOwnsPenthouse) sTLGData.bWonTrophyThisSession = TRUE ENDIF ENDPROC ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Util ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FUNC BOOL TLG_SHOULD_REMOVE_COVER_WHEN_OFF_SCREEN(INT iCover) TLG_ASSET_TYPES eType = sTLGData.sCoverData[iCover].eType SWITCH eType CASE TLG_ASSET_OUTHOUSE CASE TLG_ASSET_COFFIN IF sTLGData.sCoverData[iCover].iHitCount > 0 RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL TLG_IS_COVER_ASSET_TYPE_BUILDING(TLG_ASSET_TYPES eCover) RETURN (TLG_IS_COVER_TYPE_LARGE_BUILDING(eCover) OR TLG_IS_COVER_TYPE_SMALL_BUILDING(eCover)) ENDFUNC FUNC BOOL TLG_SHOULD_CHECK_FOR_PED_BEHIND_COVER_TYPE(TLG_ASSET_TYPES eCover) SWITCH eCover CASE TLG_ASSET_CRATE_1 CASE TLG_ASSET_COFFIN CASE TLG_ASSET_OUTHOUSE CASE TLG_ASSET_WATER_TOWER CASE TLG_ASSET_BUILDING_1 CASE TLG_ASSET_BUILDING_2 CASE TLG_ASSET_BUILDING_3 CASE TLG_ASSET_BUILDING_4 CASE TLG_ASSET_FOREST_TREE_1 CASE TLG_ASSET_FOREST_TREE_2 CASE TLG_ASSET_STACKED_CRATES_2 CASE TLG_ASSET_BIG_TOMB CASE TLG_ASSET_TOMBSTONE_2 CASE TLG_ASSET_TOMBSTONE_1 // CASE TLG_ASSET_BUILDING_5 // CASE TLG_ASSET_BUILDING_6 // CASE TLG_ASSET_BUILDING_7 // CASE TLG_ASSET_BUILDING_8 RETURN TRUE ENDSWITCH RETURN FALSE ENDFUNC FUNC FLOAT TLG_GET_COVER_TYPE_SCALE_FOR_LANE(TLG_ASSET_TYPES eType, INT iLane) FLOAT fScale = 1.0 SWITCH iLane CASE ciTLG_LANE_BACKGROUND IF eType = TLG_ASSET_COFFIN fScale = 1.1 ELSE fScale = 0.75 ENDIF BREAK CASE ciTLG_LANE_MIDDLE IF eType = TLG_ASSET_OUTHOUSE OR eType = TLG_ASSET_COFFIN fScale = 1.1 ENDIF BREAK CASE ciTLG_LANE_FOREGROUND fScale = 2.5 BREAK CASE ciTLG_LANE_POPUP_RHS CASE ciTLG_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 = sTLGData.sCoverData[iBlockingCover].fCoverWidth FLOAT fNewXOffset //FLOAT fScale // FLOAT fTemp1 //FLOAT fTemp2 // FLOAT fEnemyX = sTLGData.sEnemyData[iEnemy].vSpritePos.x // FLOAT fEnemyWidth = sTLGData.sEnemyData[iEnemy].vSize.x INT iLane = sTLGData.sEnemyData[iEnemy].iEnemyLane #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_HANDLE_ENEMIES] [TLG_ACTIVE] [SET_ENEMY_NEW_STOPPING_POINT_AFTER_BLOCKED_COVER] {dsw} ") CDEBUG1LN(DEBUG_MINIGAME, "[TLG_HANDLE_ENEMIES] [TLG_ACTIVE] [SET_ENEMY_NEW_STOPPING_POINT_AFTER_BLOCKED_COVER] {dsw} Enemy: ",iEnemy, " Old Stopping pos: ", sTLGData.sEnemyData[iEnemy].fStoppingX, " Lane: ",sTLGData.sEnemyData[iEnemy].iEnemyLane, " Type:", TLG_GET_ENEMY_TYPE_AS_STRING(sTLGData.sEnemyData[iEnemy].iEnemyType)," Blocked by cover. ", iBlockingCover, " Cover Type: ", TLG_GET_ASSET_TYPE_AS_STRING(sTLGData.sCoverData[iBlockingCover].eType), " Width / 2: ", (fCoverWidth/2.0)) #ENDIF SWITCH TLG_GET_CURRENT_LEVEL() CASE TLG_LEVEL_FOREST fNewXOffset = cfBASE_SCREEN_WIDTH IF NOT sTLGData.sEnemyData[iEnemy].bReverse sTLGData.sEnemyData[iEnemy].fStoppingX -= fNewXOffset ELSE sTLGData.sEnemyData[iEnemy].fStoppingX += fNewXOffset ENDIF BREAK CASE TLG_LEVEL_GRAVEYARD IF iLane = 0 IF sTLGData.sEnemyData[iEnemy].bReverse sTLGData.sEnemyData[iEnemy].fStoppingX += 16.0 //(fEnemyX - fTemp2) - fEnemyWidth ELSE sTLGData.sEnemyData[iEnemy].fStoppingX -= 20.0 //(fTemp1 - fEnemyX) + fEnemyWidth ENDIF ELIF iLane = 1 IF sTLGData.sEnemyData[iEnemy].bReverse sTLGData.sEnemyData[iEnemy].fStoppingX += 11.0 //(fEnemyX - fTemp2) - fEnemyWidth ELSE sTLGData.sEnemyData[iEnemy].fStoppingX -= 15.0 //(fTemp1 - fEnemyX) + fEnemyWidth ENDIF ENDIF BREAK DEFAULT fNewXOffset = fCoverWidth * 0.75 IF NOT sTLGData.sEnemyData[iEnemy].bReverse sTLGData.sEnemyData[iEnemy].fStoppingX -= fNewXOffset ELSE sTLGData.sEnemyData[iEnemy].fStoppingX += fNewXOffset ENDIF BREAK ENDSWITCH #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_HANDLE_ENEMIES] [TLG_ACTIVE] [SET_ENEMY_NEW_STOPPING_POINT_AFTER_BLOCKED_COVER] {dsw} Reverse: ", sTLGData.sEnemyData[iEnemy].bReverse, " New stopping pos: ", sTLGData.sEnemyData[iEnemy].fStoppingX, " Current Pos: ", sTLGData.sEnemyData[iEnemy].vSpritePos.x) #ENDIF ENDPROC FUNC BOOL TLG_IS_COORD_BLOCKED_BY_COVER(INT iLane, FLOAT fXCoord, INT &iBlockingCover) INT i #IF IS_DEBUG_BUILD FLOAT fTemp1, fTemp2 #ENDIF FLOAT fScale REPEAT ciTLG_MAX_COVER i IF sTLGData.sCoverData[i].iCoverLane = iLane IF TLG_SHOULD_CHECK_FOR_PED_BEHIND_COVER_TYPE(sTLGData.sCoverData[i].eType) fScale = TLG_GET_COVER_TYPE_SCALE_FOR_LANE(sTLGData.sCoverData[i].eType, iLane) #IF IS_DEBUG_BUILD IF sTLGData.sCoverData[i].eType = TLG_ASSET_COFFIN fTemp1 = sTLGData.sCoverData[i].vSpritePos.x + ((sTLGData.sCoverData[i].fCoverWidth * fScale) / 2.0) fTemp2 = sTLGData.sCoverData[i].vSpritePos.x - ((sTLGData.sCoverData[i].fCoverWidth * fScale) / 2.0) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_IS_COORD_BLOCKED_BY_COVER] Checking COFFIN ", i, " Lane: ", iLane, " Pos: ", sTLGData.sCoverData[i].vSpritePos.x, " +Width/2: ", fTemp1, " -Width/2: ", fTemp2, " Compare with ", fXCoord, " Never render? ", sTLGData.sCoverData[i].bNeverRender) ELIF sTLGData.sCoverData[i].eType = TLG_ASSET_FOREST_TREE_2 fTemp1 = sTLGData.sCoverData[i].vSpritePos.x + ((sTLGData.sCoverData[i].fCoverWidth * fScale) / 2.0) fTemp2 = sTLGData.sCoverData[i].vSpritePos.x - ((sTLGData.sCoverData[i].fCoverWidth * fScale) / 2.0) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_IS_COORD_BLOCKED_BY_COVER] Checking TREE2 ", i, " Lane: ", iLane, " Pos: ", sTLGData.sCoverData[i].vSpritePos.x, " +Width/2: ", fTemp1, " -Width/2: ", fTemp2, " Compare with ", fXCoord) ENDIF #ENDIF FLOAT fMaxCover = sTLGData.sCoverData[i].vSpritePos.x + ((sTLGData.sCoverData[i].fCoverWidth * fScale) / 2.0) FLOAT fMinCover = sTLGData.sCoverData[i].vSpritePos.x - ((sTLGData.sCoverData[i].fCoverWidth * fScale) / 2.0) IF fXCoord >= fMinCover AND fXCoord <= fMaxCover #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_IS_COORD_BLOCKED_BY_COVER] {DSW} X Coord ", fXCoord, " Lane: ", iLane, " Blocked by cover ", i, " Type: ", TLG_GET_ASSET_TYPE_AS_STRING(sTLGData.sCoverData[i].eType), " Cover X pos:", sTLGData.sCoverData[i].vSpritePos.x, " Width / 2: ", ((sTLGData.sCoverData[i].fCoverWidth * fScale) / 2.0)) #ENDIF iBlockingCover = i RETURN TRUE ENDIF ENDIF #IF IS_DEBUG_BUILD ELSE IF sTLGData.sCoverData[i].eType = TLG_ASSET_COFFIN CDEBUG1LN(DEBUG_MINIGAME, "[TLG_IS_COORD_BLOCKED_BY_COVER] Not Checking TLG_ASSET_COFFIN", i, " as cover lane ", sTLGData.sCoverData[i].iCoverLane, " <> ", iLane) ELIF sTLGData.sCoverData[i].eType = TLG_ASSET_FOREST_TREE_2 CDEBUG1LN(DEBUG_MINIGAME, "[TLG_IS_COORD_BLOCKED_BY_COVER] Not Checking TREE2", i, " as cover lane ", sTLGData.sCoverData[i].iCoverLane, " <> ", iLane) ENDIF #ENDIF ENDIF ENDREPEAT RETURN FALSE ENDFUNC FUNC BOOL TLG_IS_COVER_ASSET_TYPE_SUITABLE_FOR_COVER(TLG_ASSET_TYPES eType) SWITCH eType CASE TLG_ASSET_BARRELS CASE TLG_ASSET_FENCE CASE TLG_ASSET_ROCK_SMALL CASE TLG_ASSET_ROCK_LARGE CASE TLG_ASSET_BUSH_2 CASE TLG_ASSET_SPECIAL_TNT_BARREL_1 CASE TLG_ASSET_STACKED_CRATES_1 RETURN TRUE BREAK CASE TLG_ASSET_BUSH_1 IF TLG_GET_CURRENT_LEVEL() != TLG_LEVEL_GRAVEYARD RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL TLG_IS_POSITION_ON_SCREEN(VECTOR_2D vPos, FLOAT fTolerance = 0.0) FLOAT fMinOnScreen = cfLEFT_SCREEN_LIMIT + fTolerance FLOAT fMaxOnScreen = cfRIGHT_SCREEN_LIMIT - fTolerance // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_IS_POSITION_ON_SCREEN] ") // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_IS_POSITION_ON_SCREEN] fMinOnScreen: ",fMinOnScreen, " fMaxOnScreen: ", fMaxOnScreen) // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_IS_POSITION_ON_SCREEN] vPos.x : ", vPos.x ) RETURN (vPos.x > fMinOnScreen AND vPos.x < fMaxOnScreen) ENDFUNC FUNC BOOL TLG_IS_COVER_ON_SCREEN(INT iCover, FLOAT fTolerance = 0.0) RETURN TLG_IS_POSITION_ON_SCREEN(sTLGData.sCoverData[iCover].vSpritePos, fTolerance) ENDFUNC FUNC BOOL TLG_IS_COVER_SET_TO_RENDER(INT iCover) RETURN sTLGData.sCoverData[iCover].bRendering ENDFUNC FUNC BOOL TOG_IS_ENEMY_ON_SCREEN(INT iEnemy, FLOAT fTolerance = 0.0) RETURN TLG_IS_POSITION_ON_SCREEN(sTLGData.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 TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE(INT iCover, INT iEnemy) IF sTLGData.sEnemyData[iEnemy].iEnemyLane = 2 RETURN FALSE ENDIF // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " Cover: ", iCover) TLG_ASSET_TYPES eCover = sTLGData.sCoverData[iCover].eType //-- Can't use cover that's in a different lane IF sTLGData.sEnemyData[iEnemy].iEnemyLane != sTLGData.sCoverData[iCOver].iCoverLane //CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", TLG_GET_ASSET_TYPE_AS_STRING(eCover), " Lane doesn't match. Enemy Lane: ", sTLGData.sEnemyData[iEnemy].iEnemyLane, " Cover Lane :", sTLGData.sCoverData[iCOver].iCoverLane) RETURN FALSE ENDIF //-- Some cover types not suitable for cover IF NOT TLG_IS_COVER_ASSET_TYPE_SUITABLE_FOR_COVER(eCover) //CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", TLG_GET_ASSET_TYPE_AS_STRING(eCover), " Type not suitable for cover ") RETURN FALSE ENDIF IF NOT TLG_IS_COVER_SET_TO_RENDER(iCover) RETURN FALSE ENDIF VECTOR_2D vEnemy = sTLGData.sEnemyData[iEnemy].vSpritePos VECTOR_2D vCover = sTLGData.sCoverData[iCover].vSpritePos FLOAT fCoverWidth = sTLGData.sCoverData[iCover].fCoverWidth FLOAT fMaxCover FLOAT fMinCover FLOAT fScale = TLG_GET_COVER_TYPE_SCALE_FOR_LANE(eCover, sTLGData.sCoverData[iCOver].iCoverLane) fCoverWidth *= fScale FLOAT fYDiff = ABSF(vEnemy.y - vCover.y) IF NOT TLG_IS_COVER_ON_SCREEN(iCover) //CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", TLG_GET_ASSET_TYPE_AS_STRING(eCover), " Cover not on screen") RETURN FALSE ENDIF BOOL bFromLeft = sTLGData.sEnemyData[iEnemy].bReverse //-- 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 //CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", TLG_GET_ASSET_TYPE_AS_STRING(eCover), " as enemy coming from left and cover < cfBASE_SCREEN_WIDTH / 3") RETURN FALSE ENDIF ELSE IF vCover.x > cfRIGHT_SCREEN_LIMIT - 100 //CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", TLG_GET_ASSET_TYPE_AS_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 //CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", TLG_GET_ASSET_TYPE_AS_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 CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] [TLG_HANDLE_ENEMIES] Enemy ", iEnemy, " Stopping to use cover ", iCover, " Cover type: ", TLG_GET_ASSET_TYPE_AS_STRING(eCover), " Enemy pos: ", sTLGData.sEnemyData[iEnemy].vSpritePos.x) #ENDIF RETURN TRUE ELSE //CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ", iEnemy, " NOT Stopping to use cover ", iCover, " Cover type: ", TLG_GET_ASSET_TYPE_AS_STRING(eCover), " Xpos not sufficient. Enemy x: ", vEnemy.x, " Cover Min: ", fMinCover, " Cover Max: ", fMaxCover) ENDIF RETURN FALSE ENDFUNC FUNC BOOL TLG_SHOULD_COUNT_ENEMY_AS_ALIVE(INT iEnemy) SWITCH sTLGData.sEnemyData[iEnemy].iEnemyType CASE TLG_OUTHOUSE_ENEMY CASE TLG_COFFIN_ENEMY IF sTLGData.sEnemyData[iEnemy].eState != TLG_DYING AND sTLGData.sEnemyData[iEnemy].eState != TLG_INACTIVE RETURN TRUE ENDIF BREAK DEFAULT IF sTLGData.sEnemyData[iEnemy].eState != TLG_INACTIVE RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC INT TLG_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_STAGE() INT iStage = TLG_GET_CURRENT_LEVEL_STAGE() INT i = 0 INT iCount = 0 FOR i = 0 TO ciTLG_MAX_ENEMIES - 1 IF sTLGData.sEnemyData[i].iLevelStage = iStage IF TLG_SHOULD_COUNT_ENEMY_AS_ALIVE(i) iCount++ ENDIF ENDIF ENDFOR // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] [GD] Number of enemies active in stage ", iStage, ": ",iCount) RETURN iCount ENDFUNC FUNC INT TLG_GET_TOTAL_NUMBER_OF_ENEMIES_ALIVE() INT i, iCount INT iNumStages = TLG_GET_CURRENT_LEVEL_NUMBER_OF_STAGES() IF iNumStages <= 1 FOR i = 0 TO ciTLG_MAX_ENEMIES - 1 IF sTLGData.sEnemyData[i].eState != TLG_INACTIVE iCount ++ ENDIF ENDFOR ELSE IF TLG_GET_CURRENT_LEVEL_STAGE() < (iNumStages - 1) RETURN 99 ELSE FOR i = 0 TO ciTLG_MAX_ENEMIES - 1 IF TLG_SHOULD_COUNT_ENEMY_AS_ALIVE(i) iCount ++ ENDIF ENDFOR ENDIF ENDIF // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] [GD] Number of enemies active: ",iCount) RETURN iCount ENDFUNC FUNC FLOAT TLG_GET_ENEMY_TYPE_SCALE_FOR_LANE(TLG_ENEMY_TYPES eType, INT iLane) FLOAT fScale = 1.0 IF iLane = 0 IF eType = TLG_OUTHOUSE_ENEMY fScale = 1.0 ELSE fScale = 0.9 ENDIF ELIF iLane = 1 IF eType = TLG_OUTHOUSE_ENEMY OR eType = TLG_COFFIN_ENEMY fScale = 1.1 //TLG_GET_DEBUG_FLOAT() ELSE fScale = 1.2 ENDIF ELIF iLane = 2 fScale = 1.2 ELIF iLane = ciTLG_LANE_POPUP_RHS OR iLane = ciTLG_LANE_POPUP_LHS fScale = 0.9 ENDIF RETURN fScale ENDFUNC PROC TLG_KILL_ALL_ENEMIES_IN_RANGE(VECTOR_2D vPos, FLOAT fMaxDist = 250.0) INT i VECTOR_2D vEnemyPos FLOAT fXDist FLOAT fYDist FLOAT fDist2 REPEAT ciTLG_MAX_ENEMIES i IF sTLGData.sEnemyData[i].eState = TLG_ACTIVE OR sTLGData.sEnemyData[i].eState = TLG_SHOOTING IF sTLGData.sEnemyData[i].iEnemyType != TLG_OUTHOUSE_ENEMY vEnemyPos = sTLGData.sEnemyData[i].vSpritePos fXDist = vEnemyPos.x - vPos.x fYDist = vEnemyPos.y - vPos.y fDist2 = (fXDist * fXDist) + (fYDist * fYDist) CPRINTLN(DEBUG_MINIGAME, "[TLG_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 sTLGData.sEnemyData[i].iHealth = 0 sTLGData.sEnemyData[i].eState = TLG_DYING TLG_ADD_TO_LOCAL_PLAYER_SCORE(TLG_SCORE_TYPE_ENEMY_EXPLOSION) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MINIGAME, "[TLG_KILL_ALL_ENEMIES_IN_RANGE] {dsw} Enemy ", i, " set as Dying as killed by explosion. Type: ", TLG_GET_ENEMY_TYPE_AS_STRING(sTLGData.sEnemyData[i].iEnemyType)) #ENDIF // ENDIF ENDIF ENDIF ENDIF ENDREPEAT ENDPROC //PROC TLG_KILL_ALL_ENEMIES_IN_AREA(VECTOR_2D vPos, VECTOR_2D vSize, FLOAT fScale = 1.0) // INT i // VECTOR_2D vEnemyPos // FLOAT x1, y1, x2, y2 // // vSize.x *= fScale // vSize.y *= fScale // // x1 = vPos.x - vSize.x / 2.0 // y1 = vPos.y - vSize.y / 2.0 // x2 = vPos.x + vSize.x / 2.0 // y2 = vPos.y - vSize.y / 2.0 // // REPEAT ciTLG_MAX_ENEMIES i // IF sTLGData.sEnemyData[i].eState = TLG_ACTIVE // OR sTLGData.sEnemyData[i].eState = TLG_SHOOTING // IF sTLGData.sEnemyData[i].iEnemyType != TLG_OUTHOUSE_ENEMY // vEnemyPos = sTLGData.sEnemyData[i].vSpritePos // IF vEnemyPos.x >= x1 AND vEnemyPos.y >= y1 // IF vEnemyPos.x <= x2 AND vEnemyPos.y <= y2 // sTLGData.sEnemyData[i].iHealth = 0 // sTLGData.sEnemyData[i].eState = TLG_DYING // TLG_ADD_TO_LOCAL_PLAYER_SCORE(TLG_SCORE_TYPE_ENEMY_EXPLOSION) // #IF IS_DEBUG_BUILD // CPRINTLN(DEBUG_MINIGAME, "[TLG_KILL_ALL_ENEMIES_IN_AREA] {dsw} Enemy ", i, " set as Dying as iHealth <= 0. Type: ", TLG_GET_ENEMY_TYPE_AS_STRING(sTLGData.sEnemyData[i].iEnemyType)) // #ENDIF // ENDIF // ENDIF // ENDIF // ENDIF // ENDREPEAT // //ENDPROC FUNC INT TLG_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 ciTLG_MAX_COVER i distanceX = vCoord.x - sTLGData.sCoverData[i].vSpritePos.x distanceY = vCoord.y - sTLGData.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 TLG_IS_PLAYER_PLAYING() RETURN sTLGData.eClientState = TLG_ARCADE_CLIENT_STATE_PLAYING ENDFUNC FUNC FLOAT TLG_GET_PLAYER_DAMAGE_FOR_TYPE(TLG_DAMAGE_PLAYER_TYPES eType) SWITCH eType CASE TLG_DAMAGE_PLAYER_TYPE_BULLET RETURN 0.1 CASE TLG_DAMAGE_PLAYER_TYPE_DYNAMITE RETURN 0.3 CASE TLG_DAMAGE_PLAYER_TYPE_BEAR RETURN 0.2 CASE TLG_DAMAGE_PLAYER_TYPE_SNAKE_OIL RETURN 0.2 ENDSWITCH RETURN 0.0 ENDFUNC PROC TLG_DAMAGE_PLAYER(TLG_DAMAGE_PLAYER_TYPES eType, FLOAT fModifier = 1.0) IF TLG_IS_PLAYER_BIT_SET(TLG_PLAYER_BIT_INVULNERABILE) #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_DAMAGE_PLAYER] Not Damaging as TLG_PLAYER_BIT_INVULNERABILE is set") #ENDIF EXIT ENDIF IF eType = TLG_DAMAGE_PLAYER_TYPE_SNAKE_OIL #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_DAMAGE_PLAYER] Not Damaging as TLG_DAMAGE_PLAYER_TYPE_SNAKE_OIL and health too low") #ENDIF IF TLG_GET_LOCAL_PLAYER_HEALTH() <= 0.3 EXIT ENDIF ENDIF FLOAT fDamage = TLG_GET_PLAYER_DAMAGE_FOR_TYPE(eType) #IF IS_DEBUG_BUILD CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_DAMAGE_PLAYER] Called. Type: ", TLG_GET_DAMAGE_PLAYER_TYPE_AS_STRING(eType), " Damage: ", fDamage, " Modifier: ", fModifier) #ENDIF fDamage *= fModifier sTLGData.sPlayerData[0].fHealth = CLAMP(sTLGData.sPlayerData[0].fHealth - fDamage, 0.0, 1.0) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_DAMAGE_PLAYER] New health: ", sTLGData.sPlayerData[0].fHealth) //-- Play audio for player taking damage IF sTLGData.sPlayerData[0].fHealth > 0.0 TLG_PLAY_PLAYER_TAKE_DAMAGE_AUDIO(sTLGData.sPlayerData[0].fHealth) ENDIF IF sTLGData.sPlayerData[0].fHealth = 0 sTLGData.sPlayerData[0].iHitCountdown = 128 ELSE sTLGData.sPlayerData[0].iHitCountdown = 3 ENDIF ENDPROC FUNC BOOL TLG_IS_BEAR(INT i) RETURN sTLGData.sEnemyData[i].iEnemyType = TLG_FOREGROUND_ENEMY_BEAR ENDFUNC FUNC BOOL TLG_IS_GUN_CART(INT i) RETURN sTLGData.sEnemyData[i].iEnemyType = TLG_CART_1 ENDFUNC FUNC BOOL TLG_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() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SHOULD_SKIP_LEADERBOARD] True - IS_ACCOUNT_OVER_17_FOR_UGC") RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC TLG_SEND_TELEMETRY() // 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_CH_LAST_GUNSLINGERS") sTelemetry.matchId = tlgServerBd.iMatchId IF IS_BIT_SET(tlgServerBd.iServerBitset, ENUM_TO_INT(TLG_SERVER_BIT_TWO_PLAYERS_JOINED)) sTelemetry.numPlayers = 2 ELSE sTelemetry.numPlayers = 1 ENDIF IF TLG_ARE_ALL_LEVELS_COMPLETE() sTelemetry.level = 5 ELSE REPEAT TLG_MAX_LEVELS i IF TLG_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 = TLG_GET_TOTAL_ENEMY_HITS_FOR_ALL_LEVELS() + TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_ALL_LEVELS() sTelemetry.timePlayed = GET_GAME_TIMER() - sTLGData.iTotalTimePlayed sTelemetry.score = TLG_GET_LOCAL_PLAYER_HI_SCORE_FOR_ALL_LEVELS() // TLG_CHALLENGE_SHARPSHOOTER = 0 // TLG_CHALLENGE_DEADEYE, // TLG_CHALLENGE_PISTOLS_AT_DAWN sTelemetry.challenges = sTLGData.iChallengesBitsetForTelemetry sTelemetry.powerUps = TLG_GET_TOTAL_NUMBER_OF_POWERUPS_COLLECTED_FOR_ALL_LEVELS() IF sTLGData.bWonTrophyThisSession sTelemetry.reward = ARCADE_GAME_GET_TROPHY_ID_FOR_TELEMETRY(ARCADE_GAME_TROPHY_BADLANDS) ELSE sTelemetry.reward = 0 ENDIf IF PLAYER_ID() != INVALID_PLAYER_INDEX() IF IS_PLAYER_IN_AUTO_SHOP(PLAYER_ID()) sTelemetry.location = HASH("SIMPLE_INTERIOR_TYPE_AUTO_SHOP") ELIF IS_PLAYER_IN_ARCADE_PROPERTY(PLAYER_ID()) sTelemetry.location = HASH("SIMPLE_INTERIOR_TYPE_ARCADE") ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] [TLG_SEND_TELEMETRY] not in auto shop or arcade, setting sRoadArcadeTelemetry.location = 0") sTelemetry.location = 0 ENDIF ELSE CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] [TLG_SEND_TELEMETRY] Invalid Player ID, setting sTelemetry.location = 0") sTelemetry.location = 0 ENDIF CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY]") CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.gameType: ", sTelemetry.gameType) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.matchId: ", sTelemetry.matchId) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.numPlayers: ", sTelemetry.numPlayers) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.level: ", sTelemetry.level) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.kills: ", sTelemetry.kills) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.timePlayed: ", sTelemetry.timePlayed) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.score: ", sTelemetry.score) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.challenges: ", sTelemetry.score) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.powerUps: ", sTelemetry.powerUps) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.reward: ", sTelemetry.reward) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_SEND_TELEMETRY] sTelemetry.reward: ", sTelemetry.location) PLAYSTATS_ARCADE_CABINET(sTelemetry) ENDPROC #IF IS_DEBUG_BUILD PROC TLG_OUTPUT_LEVEL_COMPLETE_DATA() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Level complete..... ", TLG_GET_LEVEL_NAME_AS_STRING(sTLGData.eCurrentLevel)) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Shots Fired: ", TLG_GET_TOTAL_SHOTS_FIRED_IN_CURRENT_LEVEL()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Enemies Hit: ", TLG_GET_TOTAL_ENEMY_HITS_FOR_CURRENT_LEVEL()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Hostages Saved: ", TLG_GET_TOTAL_NUMBER_OF_HOSTAGES_SAVED_FOR_CURRENT_LEVEL()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Birds Killed: ", TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_CURRENT_LEVEL()) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Accuracy: ", TLG_GET_PLAYER_ACCURACY_FOR_CURRENT_LEVEL()) ENDPROC PROC TLG_OUTPUT_ALL_LEVELS_COMPLETE_DATA() // INT i // TLG_LEVELS eLevel INT iTotalEnemyHits INT iTotalShots INT iTotalAnimals FLOAT fAccuracy iTotalShots = TLG_GET_TOTAL_SHOTS_FIRED_IN_ALL_LEVELS() iTotalEnemyHits = TLG_GET_TOTAL_ENEMY_HITS_FOR_ALL_LEVELS() iTotalAnimals = TLG_GET_TOTAL_NUMBER_OF_BIRDS_KILLED_FOR_ALL_LEVELS() fAccuracy = TLG_GET_PLAYER_ACCURACY_FOR_ALL_LEVELS() CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] All levels complete..... ") CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Total Shots: ",iTotalShots) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Total Hits: ",iTotalEnemyHits) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Total Animals: ",iTotalAnimals) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_ARCADE] {DSW} [TLG_OUTPUT_LEVEL_COMPLETE_DATA] Accuracy: ",fAccuracy) ENDPROC #ENDIF