Files
2025-09-29 00:52:08 +02:00

5344 lines
194 KiB
XML
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
USING "arcade_cabinet_minigame_common.sch"
USING "arcade_games_help_text.sch"
USING "arcade_games_help_text_flow.sch"
USING "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