localised resources and remaining scenes

This commit is contained in:
2025-08-21 18:41:32 +10:00
parent 2859b6dd43
commit 57a57d2b91
38 changed files with 484 additions and 129 deletions

Binary file not shown.

View File

@@ -123,12 +123,13 @@ msgstr "Lock all content"
msgid "BUTTON_ACHIEVEMENTS" msgid "BUTTON_ACHIEVEMENTS"
msgstr "Achievements" msgstr "Achievements"
#: Scenes/Menus/MainMenu/main_menu.tscn #: Scenes/Menus/MainMenu/main_menu.tscn Scenes/Menus/options_menu.tscn
msgid "BUTTON_CANCEL" msgid "BUTTON_CANCEL"
msgstr "Cancel" msgstr "Cancel"
#: Scenes/Menus/MainMenu/main_menu.tscn #: Scenes/Menus/MainMenu/main_menu.tscn
#: Scenes/Menus/CharacterSelect/character_select.tscn #: Scenes/Menus/CharacterSelect/character_select.tscn
#: Scenes/Menus/options_menu.tscn
msgid "BUTTON_CONFIRM" msgid "BUTTON_CONFIRM"
msgstr "Confirm" msgstr "Confirm"
@@ -177,14 +178,6 @@ msgstr "Total Games:"
msgid "BUTTON_RESTART" msgid "BUTTON_RESTART"
msgstr "Play Again" msgstr "Play Again"
#: Scenes/Menus/CharacterSelect/character_select.tscn
msgid "character name"
msgstr ""
#: Scenes/Menus/CharacterSelect/character_select.tscn
msgid "------------------------"
msgstr ""
#: Scenes/Menus/CharacterSelect/character_select.tscn #: Scenes/Menus/CharacterSelect/character_select.tscn
msgid "BUTTON_PREVIOUS" msgid "BUTTON_PREVIOUS"
msgstr "Prev" msgstr "Prev"
@@ -297,18 +290,305 @@ msgstr "Borderless Windowed"
msgid "OPTION_FULLSCREEN" msgid "OPTION_FULLSCREEN"
msgstr "Fullscreen" msgstr "Fullscreen"
#: Scenes/Menus/keybind_options.tscn
msgid "Action"
msgstr ""
#: Scenes/Menus/keybind_options.tscn
msgid "Primary Bind"
msgstr ""
#: Scenes/Menus/keybind_options.tscn
msgid "Secondary Bind"
msgstr ""
#: Scenes/UI/keybind_popup.tscn #: Scenes/UI/keybind_popup.tscn
msgid "LABEL_BIND_KEY" msgid "LABEL_BIND_KEY"
msgstr "Press a key to bind action" msgstr "Press a key to bind action"
#: choose_card_screen.tscn
msgid "LABEL_CHOOSE_CARD"
msgstr "Currently Playing..."
#: choose_card_screen.tscn
msgid "BUTTON_VIEW_TOWER"
msgstr "Side A"
#: choose_card_screen.tscn
msgid "BUTTON_VIEW_WEAPON"
msgstr "Side B"
#: choose_card_screen.tscn
msgid "BUTTON_FINALIZE_CARD_CHOICE"
msgstr "Record"
#: choose_card_screen.tscn
msgid "LABEL_CARD_DESCRIPTION"
msgstr "Description"
#: choose_card_screen.tscn
msgid "LABEL_CARD_FEATURES"
msgstr "Features"
#: choose_card_screen.tscn
msgid "LABEL_TARGET_LIST"
msgstr "Can Target"
#: Classes/Engineer/class.tres
msgid "CLASS_NAME_ENGINEER"
msgstr "Engineer"
#: Classes/Mage/class.tres
msgid "CLASS_NAME_MAGE"
msgstr "Mage"
#: Cards/ascension.tres
msgid "CARD_NAME_PLATFORM_DASH"
msgstr "Ascension"
#: Towers/Ascension/tower_stats.tres
msgid "DESC_TOWER_PLATFORM_DASH"
msgstr "Grants access to a stable high canopy"
#: Weapons/Ascension/weapon_stats.tres
msgid "DESC_WEAPON_PLATFORM_DASH"
msgstr "Send yourself flying"
#: Cards/assault.tres
msgid "CARD_NAME_BASIC_GUN"
msgstr "Pipe Rifle"
#: Towers/Assault/tower_stats.tres
msgid "DESC_TOWER_BASIC_GUN"
msgstr ""
"Fires a shot every %Fire Delay% seconds dealing %Damage% damage at a range "
"of %Range%m"
#: Weapons/Assault/weapon_stats.tres
msgid "DESC_WEAPON_BASIC_GUN"
msgstr ""
"Fires a shot every %Fire Delay% seconds dealing %Damage% damage at a range "
"of %Range%m"
#: Cards/blowdart.tres
msgid "CARD_NAME_POISON"
msgstr "Blowdart"
#: Towers/Blowdart/tower_stats.tres
msgid "DESC_TOWER_POISON"
msgstr ""
"Fires every %Fire Delay%s, applying one stack of Poison at a range of "
"%Range%m"
#: Weapon/Blowdart/weapon_stats.tres
msgid "DESC_WEAPON_POISON"
msgstr ""
"Fires every %Fire Delay%s, applying one stack of Poison at a range of "
"%Range%m"
#: Cards/bomb_launcher.tres
msgid "CARD_NAME_BOMB"
msgstr "Bomb Launcher"
#: Towers/BombLauncher/tower_stats.tres
msgid "DESC_TOWER_BOMB"
msgstr "Launch a bomb that deals %Damage% damage every %Fire Delay% seconds"
#: Weapon/BombLauncher/weapon_stats.tres
msgid "DESC_WEAPON_BOMB"
msgstr "Launch a bomb that deals %Damage% damage every %Fire Delay% seconds"
#: Cards/fireball.tres
msgid "CARD_NAME_FIREBALL"
msgstr "Fireball"
#: Towers/Fireball/tower_stats.tres
msgid "DESC_TOWER_FIREBALL"
msgstr ""
"Conjures a fireball every %Fire Delay%s that deals %Damage% and apply "
"Burning to enemies caught in its blast"
#: Weapon/Fireball/weapon_stats.tres
msgid "DESC_WEAPON_FIREBALL"
msgstr ""
"Conjure a fireball every %Fire Delay%s that can be thrown to deal %Damage% "
"and apply Burning to enemies caught in its blast"
#: Cards/flamethrower.tres
msgid "CARD_NAME_FLAMETHROWER"
msgstr "Flamethrower"
#: Towers/Flamethrower/tower_stats.tres
msgid "DESC_TOWER_FLAMETHROWER"
msgstr "Applies burning to enemies in front of it"
#: Weapons/Flamethrower/weapon_stats.tres
msgid "DESC_WEAPON_FLAMETHROWER"
msgstr "Hold to apply Burning to enemies in front of you"
#: Cards/gatling.tres
msgid "CARD_NAME_ACCEL"
msgstr "Gatling"
#: Towers/Gatling/tower_stats.tres
msgid "DESC_TOWER_ACCEL"
msgstr ""
"Fires a shot every %Fire Delay% seconds dealing %Damage% damage at a range "
"of %Range%m\n"
"\n"
"While attacking the same target, gradually accelerates to %Speed "
"Multiplier%x the fire rate over %Speed Time%s"
#: Weapons/Gatling/weapon_stats.tres
msgid "DESC_WEAPON_ACCEL"
msgstr ""
"Fires a shot every %Fire Delay% seconds dealing %Damage% damage at a range "
"of %Range%m\n"
"\n"
"While held, gradually accelerates to %Speed Multiplier%x the fire rate over "
"%Speed Time%s"
#: Cards/glue_launcher.tres
msgid "CARD_NAME_GLUE"
msgstr "Glue Launcher"
#: Towers/GlueLauncher/tower_stats.tres
msgid "DESC_TOWER_GLUE"
msgstr ""
"Fires every %Fire Delay%s, making the target Sticky at a range of %Range%m"
#: Weapons/GlueLauncher/weapon_stats.tres
msgid "DESC_WEAPON_GLUE"
msgstr ""
"Fires every %Fire Delay%s, making the target Sticky at a range of %Range%m"
#: Cards/icicle.tres
msgid "CARD_NAME_ICE_SPIKE"
msgstr "Icicle"
#: Towers/Icicle/tower_stats.tres
msgid "DESC_TOWER_ICE_SPIKE"
msgstr ""
"Conjures an icicle every %Fire Delay%s that deals %Damage% and applies Cold "
"to enemies caught in its blast"
#: Weapons/Icicle/weapon_stats.tres
msgid "DESC_WEAPON_ICE_SPIKE"
msgstr ""
"Conjure an icicle every %Fire Delay%s that can be thrown to deal %Damage% "
"and apply Cold to enemies caught in its blast"
#: Cards/overclock.tres
msgid "CARD_NAME_SPEED_INCREASER"
msgstr "Overclock"
#: Towers/Overclock/tower_stats.tres
msgid "DESC_TOWER_SPEED_INCREASER"
msgstr "Speeds up the fire rate of towers within %Range%m by 10%"
#: Weapons/Overclock/weapon_stats.tres
msgid "DESC_WEAPON_SPEED_INCREASER"
msgstr ""
"Fire a machine-energizing pellet every %Fire Delay% seconds that speeds up "
"tower fire rate by 35% for %EffectDuration% seconds at a range of %Range%m"
#: Cards/reactor.tres
msgid "CARD_NAME_RADIATION"
msgstr "Reactor"
#: Towers/Reactor/tower_stats.tres
msgid "DESC_TOWER_RADIATION"
msgstr ""
"Slowly applies Radioactive to enemies around itself at a range of %Range%m"
#: Weapons/Reactor/weapon_stats.tres
msgid "DESC_WEAPON_RADIATION"
msgstr "Hold to apply Radioactive to enemies in front of you"
#: Cards/refrigerator.tres
msgid "CARD_NAME_FREEZER"
msgstr "Refrigerator"
#: Towers/Refrigerator/tower_stats.tres
msgid "DESC_TOWER_FREEZER"
msgstr "Applies Cold to enemies around itself"
#: Weapons/Refrigerator/weapon_stats.tres
msgid "DESC_WEAPON_FREEZER"
msgstr "Hold to apply Cold to enemies in front of you"
#: Cards/rocket_launcher.tres
msgid "CARD_NAME_ROCKET"
msgstr "Fireworks"
#: Towers/RocketLauncher/tower_stats.tres
msgid "DESC_TOWER_ROCKET"
msgstr ""
"Every %Fire Delay%s, fires a homing rocket at up to %Target Limit% flying "
"enemies up to %Range%m away that deal %Damage% damage"
#: Weapons/RocketLauncher/weapon_stats.tres
msgid "DESC_WEAPON_ROCKET"
msgstr ""
"Every %Fire Delay%s, hold to target up to %Target Limit% enemies and release "
"to fire homing rockets that deal %Damage% damage"
#: Cards/sniper.tres
msgid "CARD_NAME_SNIPER"
msgstr "Sniper"
#: Towers/Sniper/tower_stats.tres
msgid "DESC_TOWER_SNIPER"
msgstr ""
"Fires a shot every %Fire Delay% seconds dealing %Damage%damage at a range of "
"%Range%m"
#: Weapons/Sniper/weapon_stats.tres
msgid "DESC_WEAPON_SNIPER"
msgstr ""
"Fires a shot every %Fire Delay% seconds dealing %Damage% damage at a range "
"of %Range%m"
#: Scripts/options_menu.gd
msgid "OPTIONS_TAB_GAMEPLAY"
msgstr "Gameplay"
#: Scripts/options_menu.gd
msgid "OPTIONS_TAB_GRAPHICS"
msgstr "Graphics"
#: Scripts/options_menu.gd
msgid "OPTIONS_TAB_KEYBINDS"
msgstr "Keybinds"
#: Scripts/options_menu.gd
msgid "OPTIONS_TAB_AUDIO"
msgstr "Audio"
#: PCs/hud.gd
msgid "PROMPT_START_WAVE"
msgstr "Press %Ready% to start wave"
#: Enemies/BabyEyeDog/baby_eye_dog.tres
msgid "ENEMY_FAST_BABY"
msgstr "Baby Eye Dog"
#: Enemies/Crystalisk/crystalisk.tres
msgid "ENEMY_FLYING_CRYSTAL"
msgstr "Crystalisk"
#: Enemies/ElderEyeDog/elder_eye_dog.tres
msgid "ENEMY_HEAVY_WALKER"
msgstr "Heavy Eye Dog"
#: Enemies/EyeDog/eye_dog.tres
msgid "ENEMY_DOG"
msgstr "Eye Dog"
#: Scenes/CardPrinter/card_printer.gd
msgid "PROMPT_RADIO_INTERACT"
msgstr "%Interact% Insert blank cassette"
#: Scenes/ShopStand/shop_stand.gd
msgid "PROMPT_BUY_BLANK"
msgstr "%Interact% Buy blank cassette for ${Blank_Cost}"
msgid "PROMPT_BUY_CARD"
msgstr "%Interact% Buy {Card_Name} for ${Card_Cost}"
#: UI/enemybox.gd
msgid "LABEL_WAVE"
msgstr "Wave {Wave_Number}:"
#, fuzzy
#~| msgid "LABEL_DISPLAY_NAME"
#~ msgid "LABEL_CARD_NAME"
#~ msgstr "Display Name:"

View File

@@ -301,10 +301,6 @@ msgstr ""
msgid "LABEL_CHOOSE_CARD" msgid "LABEL_CHOOSE_CARD"
msgstr "" msgstr ""
#: choose_card_screen.tscn
msgid "LABEL_CARD_NAME"
msgstr ""
#: choose_card_screen.tscn #: choose_card_screen.tscn
msgid "BUTTON_VIEW_TOWER" msgid "BUTTON_VIEW_TOWER"
msgstr "" msgstr ""
@@ -329,22 +325,6 @@ msgstr ""
msgid "LABEL_TARGET_LIST" msgid "LABEL_TARGET_LIST"
msgstr "" msgstr ""
#: Scenes/Menus/options_menu.tscn
msgid "Gameplay"
msgstr ""
#: Scenes/Menus/options_menu.tscn
msgid "Graphics"
msgstr ""
#: Scenes/Menus/options_menu.tscn
msgid "Keybinds"
msgstr ""
#: Scenes/Menus/options_menu.tscn
msgid "Audio"
msgstr ""
#: Classes/Engineer/class.tres #: Classes/Engineer/class.tres
msgid "CLASS_NAME_ENGINEER" msgid "CLASS_NAME_ENGINEER"
msgstr "" msgstr ""
@@ -558,5 +538,16 @@ msgid "ENEMY_DOG"
msgstr "" msgstr ""
#: Scenes/CardPrinter/card_printer.gd #: Scenes/CardPrinter/card_printer.gd
msgid "BUTTON_RADIO_INTERACT" msgid "PROMPT_RADIO_INTERACT"
msgstr ""
#: Scenes/ShopStand/shop_stand.gd
msgid "PROMPT_BUY_BLANK"
msgstr ""
msgid "PROMPT_BUY_CARD"
msgstr ""
#: UI/enemybox.gd
msgid "LABEL_WAVE"
msgstr "" msgstr ""

View File

@@ -379,7 +379,7 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2 mouse_filter = 2
bbcode_enabled = true bbcode_enabled = true
text = "#Primary Fire#" text = "%Primary Fire%"
scroll_active = false scroll_active = false
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
@@ -409,7 +409,7 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2 mouse_filter = 2
bbcode_enabled = true bbcode_enabled = true
text = "#Secondary Fire#" text = "%Secondary Fire%"
scroll_active = false scroll_active = false
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1

View File

@@ -82,9 +82,9 @@ func set_energy_visible(value: bool) -> void:
func _process(_delta: float) -> void: func _process(_delta: float) -> void:
fps_label.text = "FPS: " + str(Engine.get_frames_per_second()) fps_label.text = "FPS: " + str(Engine.get_frames_per_second())
wave_start_label.text = tr(parse_action_tag("PROMPT_START_WAVE")) wave_start_label.text = parse_action_tag(tr("PROMPT_START_WAVE"))
place_text.text = parse_action_tag("[center]#Primary Fire#") place_text.text = parse_action_tag("[center]%Primary Fire%")
swap_text.text = parse_action_tag("[center]#Secondary Fire#") swap_text.text = parse_action_tag("[center]%Secondary Fire%")
func grow_wave_start_label() -> void: func grow_wave_start_label() -> void:
@@ -215,7 +215,7 @@ func pickup(card: Card) -> void:
func parse_action_tag(text: String) -> String: func parse_action_tag(text: String) -> String:
var string_array: PackedStringArray = text.split("#") var string_array: PackedStringArray = text.split("%")
var output: Array[String] = [] var output: Array[String] = []
if string_array.size() > 1: if string_array.size() > 1:
for i: int in InputMap.action_get_events(string_array[1]).size(): for i: int in InputMap.action_get_events(string_array[1]).size():

View File

@@ -12,7 +12,7 @@ var spawned_cards: Array[CardItem] = []
func _ready() -> void: func _ready() -> void:
button.hover_text = tr("BUTTON_RADIO_INTERACT") button.hover_text = tr("PROMPT_RADIO_INTERACT")
func get_faction_cards(faction: Card.Faction) -> Array[Card]: func get_faction_cards(faction: Card.Faction) -> Array[Card]:
@@ -76,9 +76,20 @@ func find_cards(faction: Card.Faction) -> void:
var decided_rarity: int = generate_rarity() var decided_rarity: int = generate_rarity()
var card_choices: Array[Card] = get_faction_cards(faction) var card_choices: Array[Card] = get_faction_cards(faction)
var cards: Array[Card] = [] var cards: Array[Card] = []
var valid_cards_found: bool = false
var testing_rarity: int = decided_rarity
while !valid_cards_found:
for card: Card in card_choices: for card: Card in card_choices:
if card.rarity == decided_rarity: if card.rarity == testing_rarity:
cards.append(card) cards.append(card)
if cards.size() != 0:
valid_cards_found = true
testing_rarity -= 1
if testing_rarity < 0:
testing_rarity = 4
if testing_rarity == decided_rarity:
print("This character doesn't have any cards!")
return
var menu: ChooseCardScreen = card_selection_menu.instantiate() as ChooseCardScreen var menu: ChooseCardScreen = card_selection_menu.instantiate() as ChooseCardScreen
menu.add_cards(cards) menu.add_cards(cards)
menu.card_chosen.connect(output_card) menu.card_chosen.connect(output_card)

View File

@@ -13,10 +13,10 @@ var game_manager: GameManager
func _ready() -> void: func _ready() -> void:
winrate_label.text = "Your 20-game winrate is now: " + str(Data.save_data.winrate) + "%!" winrate_label.text = str(Data.save_data.winrate) + "%"
total_games_label.text = "Total games: " + str(Data.save_data.wins + Data.save_data.losses) total_games_label.text = str(Data.save_data.wins + Data.save_data.losses)
total_wins_label.text = "Total wins: " + str(Data.save_data.wins) total_wins_label.text = str(Data.save_data.wins)
total_losses_label.text = "Total losses: " + str(Data.save_data.losses) total_losses_label.text = str(Data.save_data.losses)
for wave_key: int in game_manager.stats.enemies_undefeated: for wave_key: int in game_manager.stats.enemies_undefeated:
var spawned_box: EnemyBox = box.instantiate() as EnemyBox var spawned_box: EnemyBox = box.instantiate() as EnemyBox
undefeated_enemies.add_child(spawned_box) undefeated_enemies.add_child(spawned_box)

View File

@@ -22,10 +22,10 @@ grow_vertical = 2
script = ExtResource("1_oa7nq") script = ExtResource("1_oa7nq")
box = ExtResource("2_xm8em") box = ExtResource("2_xm8em")
outcome_label = NodePath("VBoxContainer/Labels/OutcomeLabel") outcome_label = NodePath("VBoxContainer/Labels/OutcomeLabel")
winrate_label = NodePath("VBoxContainer/Labels/WinRateLabel") winrate_label = NodePath("VBoxContainer/Labels/VBoxContainer/HBoxContainer/WinRateLabel2")
total_games_label = NodePath("VBoxContainer/Labels/TotalGamesLabel") total_games_label = NodePath("VBoxContainer/Labels/VBoxContainer/HBoxContainer2/WinRateLabel3")
total_wins_label = NodePath("VBoxContainer/Labels/TotalWinsLabel") total_wins_label = NodePath("VBoxContainer/Labels/VBoxContainer/HBoxContainer3/WinRateLabel4")
total_losses_label = NodePath("VBoxContainer/Labels/TotalLossesLabel") total_losses_label = NodePath("VBoxContainer/Labels/VBoxContainer/HBoxContainer4/WinRateLabel5")
undefeated_enemies = NodePath("VBoxContainer/UndefeatedEnemies") undefeated_enemies = NodePath("VBoxContainer/UndefeatedEnemies")
[node name="VBoxContainer" type="VBoxContainer" parent="."] [node name="VBoxContainer" type="VBoxContainer" parent="."]
@@ -42,28 +42,76 @@ text = "LABEL_WIN_MESSAGE"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="WinRateLabel" type="Label" parent="VBoxContainer/Labels"] [node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/Labels"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 4
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/Labels/VBoxContainer"]
layout_mode = 2
[node name="WinRateLabel" type="Label" parent="VBoxContainer/Labels/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "LABEL_WINRATE" text = "LABEL_WINRATE"
horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="TotalGamesLabel" type="Label" parent="VBoxContainer/Labels"] [node name="WinRateLabel2" type="Label" parent="VBoxContainer/Labels/VBoxContainer/HBoxContainer"]
auto_translate_mode = 2
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/Labels/VBoxContainer"]
layout_mode = 2
[node name="TotalGamesLabel" type="Label" parent="VBoxContainer/Labels/VBoxContainer/HBoxContainer2"]
layout_mode = 2
size_flags_horizontal = 3
text = "LABEL_GAMES" text = "LABEL_GAMES"
horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="TotalWinsLabel" type="Label" parent="VBoxContainer/Labels"] [node name="WinRateLabel3" type="Label" parent="VBoxContainer/Labels/VBoxContainer/HBoxContainer2"]
auto_translate_mode = 2
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer/Labels/VBoxContainer"]
layout_mode = 2
[node name="TotalWinsLabel" type="Label" parent="VBoxContainer/Labels/VBoxContainer/HBoxContainer3"]
layout_mode = 2
size_flags_horizontal = 3
text = "LABEL_WINS" text = "LABEL_WINS"
horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="TotalLossesLabel" type="Label" parent="VBoxContainer/Labels"] [node name="WinRateLabel4" type="Label" parent="VBoxContainer/Labels/VBoxContainer/HBoxContainer3"]
auto_translate_mode = 2
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="HBoxContainer4" type="HBoxContainer" parent="VBoxContainer/Labels/VBoxContainer"]
layout_mode = 2
[node name="TotalLossesLabel" type="Label" parent="VBoxContainer/Labels/VBoxContainer/HBoxContainer4"]
layout_mode = 2
size_flags_horizontal = 3
text = "LABEL_LOSSES" text = "LABEL_LOSSES"
horizontal_alignment = 1 vertical_alignment = 1
[node name="WinRateLabel5" type="Label" parent="VBoxContainer/Labels/VBoxContainer/HBoxContainer4"]
auto_translate_mode = 2
layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1 vertical_alignment = 1
[node name="UndefeatedEnemies" type="VBoxContainer" parent="VBoxContainer"] [node name="UndefeatedEnemies" type="VBoxContainer" parent="VBoxContainer"]

View File

@@ -145,9 +145,10 @@ func _on_changelog_button_pressed() -> void:
func load_stats(stats: SaveData) -> void: func load_stats(stats: SaveData) -> void:
$ProfileManager/VBoxContainer/Stats/Wins/Label2.text = str(stats.wins) $ProfileManager/VBoxContainer/Stats/Games/Label2.text = str(Data.save_data.wins + Data.save_data.losses)
$ProfileManager/VBoxContainer/Stats/Losses/Label2.text = str(stats.losses) $ProfileManager/VBoxContainer/Stats/Wins/Label2.text = str(Data.save_data.wins)
$ProfileManager/VBoxContainer/Stats/Winrate/Label2.text = str(stats.winrate) + "%" $ProfileManager/VBoxContainer/Stats/Losses/Label2.text = str(Data.save_data.losses)
$ProfileManager/VBoxContainer/Stats/Winrate/Label2.text = str(Data.save_data.winrate) + "%"
$ProfileManager/VBoxContainer/Stats/EngineerCardsBought/Label2.text = str(stats.engineer_cards_bought) $ProfileManager/VBoxContainer/Stats/EngineerCardsBought/Label2.text = str(stats.engineer_cards_bought)
$ProfileManager/VBoxContainer/Stats/MageCardsBought/Label2.text = str(stats.mage_cards_bought) $ProfileManager/VBoxContainer/Stats/MageCardsBought/Label2.text = str(stats.mage_cards_bought)

View File

@@ -243,6 +243,23 @@ text = "LABEL_STATS"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="Games" type="HBoxContainer" parent="ProfileManager/VBoxContainer/Stats"]
layout_mode = 2
[node name="Label" type="Label" parent="ProfileManager/VBoxContainer/Stats/Games"]
layout_mode = 2
size_flags_horizontal = 3
text = "LABEL_GAMES"
vertical_alignment = 1
[node name="Label2" type="Label" parent="ProfileManager/VBoxContainer/Stats/Games"]
auto_translate_mode = 2
layout_mode = 2
size_flags_horizontal = 3
text = "0"
horizontal_alignment = 2
vertical_alignment = 1
[node name="Wins" type="HBoxContainer" parent="ProfileManager/VBoxContainer/Stats"] [node name="Wins" type="HBoxContainer" parent="ProfileManager/VBoxContainer/Stats"]
layout_mode = 2 layout_mode = 2

View File

@@ -19,6 +19,8 @@ var price_dict: Dictionary = {
var cards_generated: int = 0 var cards_generated: int = 0
var blanks_available: int = 5 var blanks_available: int = 5
var blank_cost: int = 20 var blank_cost: int = 20
var buy_blank_prompt: String = "PROMPT_BUY_BLANK"
var buy_card_prompt: String = "PROMPT_BUY_CARD"
func close() -> void: func close() -> void:
@@ -56,7 +58,7 @@ func randomize_cards() -> void:
cards[x].set_card(chosen_card) cards[x].set_card(chosen_card)
cards[x].view_tower() cards[x].view_tower()
choice_buttons[x].press_cost = price_dict[chosen_card.rarity] choice_buttons[x].press_cost = price_dict[chosen_card.rarity]
choice_buttons[x].hover_text = "#Interact# Spend $" + str(choice_buttons[x].press_cost) + " to acquire " + chosen_card.display_name choice_buttons[x].hover_text = tr(buy_card_prompt).format({Card_Name = tr(chosen_card.display_name), Card_Cost = str(price_dict[chosen_card.rarity])})
if chosen_card.faction == Card.Faction.MAGE: if chosen_card.faction == Card.Faction.MAGE:
Data.save_data.saw_mage_card_in_shop() Data.save_data.saw_mage_card_in_shop()
for x: int in 2: for x: int in 2:
@@ -69,7 +71,7 @@ func randomize_cards() -> void:
cards[x+3].set_card(chosen_card) cards[x+3].set_card(chosen_card)
cards[x+3].view_tower() cards[x+3].view_tower()
choice_buttons[x+3].press_cost = price_dict[chosen_card.rarity] choice_buttons[x+3].press_cost = price_dict[chosen_card.rarity]
choice_buttons[x+3].hover_text = "#Interact# Spend $" + str(choice_buttons[x+3].press_cost) + " to acquire " + chosen_card.display_name choice_buttons[x+3].hover_text = tr(buy_card_prompt).format({Card_Name = tr(chosen_card.display_name), Card_Cost = str(price_dict[chosen_card.rarity])})
if chosen_card.faction == Card.Faction.MAGE: if chosen_card.faction == Card.Faction.MAGE:
Data.save_data.saw_mage_card_in_shop() Data.save_data.saw_mage_card_in_shop()
for x: int in 1: for x: int in 1:
@@ -84,7 +86,7 @@ func randomize_cards() -> void:
cards[x+5].set_card(chosen_card) cards[x+5].set_card(chosen_card)
cards[x+5].view_tower() cards[x+5].view_tower()
choice_buttons[x+5].press_cost = price_dict[chosen_card.rarity] choice_buttons[x+5].press_cost = price_dict[chosen_card.rarity]
choice_buttons[x+5].hover_text = "#Interact# Spend $" + str(choice_buttons[x+5].press_cost) + " to acquire " + chosen_card.display_name choice_buttons[x+5].hover_text = tr(buy_card_prompt).format({Card_Name = tr(chosen_card.display_name), Card_Cost = str(price_dict[chosen_card.rarity])})
if chosen_card.faction == Card.Faction.MAGE: if chosen_card.faction == Card.Faction.MAGE:
Data.save_data.saw_mage_card_in_shop() Data.save_data.saw_mage_card_in_shop()
for x: CollisionShape3D in choice_colliders: for x: CollisionShape3D in choice_colliders:
@@ -93,12 +95,12 @@ func randomize_cards() -> void:
x.visible = true x.visible = true
for x: CSGBox3D in blank_models: for x: CSGBox3D in blank_models:
x.visible = true x.visible = true
blank_button_collider.disabled = false blank_button_collider.set_deferred("disabled", false)
blank_button.hover_text = "#Interact# Spend $" + str(blank_cost) + " to acquire a blank cassette" blank_button.hover_text = tr(buy_blank_prompt).format({Blank_Cost = str(blank_cost)})
func retrieve_card(i: int, callback: Hero) -> void: func retrieve_card(i: int, callback: Hero) -> void:
#close() if callback.currency >= price_dict[cards[i].stats.rarity]:
choice_colliders[i].disabled = true choice_colliders[i].disabled = true
choice_sprites[i].set_visible(false) choice_sprites[i].set_visible(false)
var card: Card = cards[i].stats var card: Card = cards[i].stats
@@ -106,16 +108,11 @@ func retrieve_card(i: int, callback: Hero) -> void:
Data.save_data.bought_engineer_card() Data.save_data.bought_engineer_card()
if card.faction == Card.Faction.MAGE: if card.faction == Card.Faction.MAGE:
Data.save_data.bought_mage_card() Data.save_data.bought_mage_card()
callback.currency -= price_dict[cards[i].stats.rarity]
callback.add_card(card) callback.add_card(card)
#var item: ItemCard = item_card_scene.instantiate() as ItemCard
#item.card = card
#item.position = Vector3(2.128, 0, 0)
#add_child(item)
#button_collider.disabled = false
#button_box.position = Vector3(0,0,0)
func retrieve_blank(i: int, callback: Hero) -> void: func retrieve_blank(_i: int, callback: Hero) -> void:
if callback.currency >= blank_cost: if callback.currency >= blank_cost:
blank_models[5 - blanks_available].visible = false blank_models[5 - blanks_available].visible = false
blanks_available -= 1 blanks_available -= 1

View File

@@ -4,14 +4,13 @@
[ext_resource type="Texture2D" uid="uid://dlqnhs8or4ik2" path="res://Assets/Textures/cardhand.png" id="1_d5oo3"] [ext_resource type="Texture2D" uid="uid://dlqnhs8or4ik2" path="res://Assets/Textures/cardhand.png" id="1_d5oo3"]
[ext_resource type="Texture2D" uid="uid://buf8t5gc7iw3a" path="res://Assets/TextureAtlases/rarityborders.tres" id="3_pclfx"] [ext_resource type="Texture2D" uid="uid://buf8t5gc7iw3a" path="res://Assets/TextureAtlases/rarityborders.tres" id="3_pclfx"]
[node name="Node2D" type="Node2D" node_paths=PackedStringArray("rarity_sprite", "title_text", "description", "target_label", "energy_cost", "duration")] [node name="Node2D" type="Node2D" node_paths=PackedStringArray("rarity_sprite", "title_text", "description", "target_label", "energy_cost")]
script = ExtResource("1_2cfmh") script = ExtResource("1_2cfmh")
rarity_sprite = NodePath("Sprite2D2") rarity_sprite = NodePath("Sprite2D2")
title_text = NodePath("Title") title_text = NodePath("Title")
description = NodePath("Description") description = NodePath("Description")
target_label = NodePath("Title2") target_label = NodePath("Title2")
energy_cost = NodePath("EnergyCost") energy_cost = NodePath("EnergyCost")
duration = NodePath("")
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
texture_filter = 1 texture_filter = 1

View File

@@ -1,7 +1,7 @@
class_name CardText class_name CardText
extends Resource extends Resource
@export var target_type: Data.TargetType @export var target_type: Array[Data.TargetType]
@export var energy_type: Data.EnergyType @export var energy_type: Data.EnergyType
@export var attributes: Array[StatAttribute] @export var attributes: Array[StatAttribute]
@export_multiline var text: String @export_multiline var text: String

View File

@@ -13,7 +13,7 @@ var stats: Card
func set_card(value: Card) -> void: func set_card(value: Card) -> void:
stats = value stats = value
title_text.text = stats.display_name title_text.text = stats.display_name
target_label.text = str(Data.TargetType.keys()[stats.tower_stats.target_type]) target_label.text = "replace me"
rarity_sprite.region_rect = Rect2(64 * stats.rarity, 0, 64, 64) rarity_sprite.region_rect = Rect2(64 * stats.rarity, 0, 64, 64)
energy_cost.text = str(value.cost) energy_cost.text = str(value.cost)
@@ -22,8 +22,7 @@ func process_card_text(card_text: CardText) -> String:
var processed_string: String = card_text.text var processed_string: String = card_text.text
for stat: StatAttribute in card_text.attributes: for stat: StatAttribute in card_text.attributes:
processed_string = processed_string.replace(stat.key, str(stat.value)) processed_string = processed_string.replace(stat.key, str(stat.value))
processed_string = processed_string.replace("/", "[color=red]") processed_string = processed_string.replace("%", "")
processed_string = processed_string.replace("\\", "[color=black]")
return processed_string return processed_string
@@ -34,4 +33,4 @@ func view_weapon() -> void:
func view_tower() -> void: func view_tower() -> void:
description.text = process_card_text(stats.tower_stats) description.text = process_card_text(stats.tower_stats)
target_label.text = str(Data.TargetType.keys()[stats.tower_stats.target_type]) target_label.text = str("go fuck yourself")

View File

@@ -14,7 +14,7 @@ var keymap_data: KeymapData
const DEFAULT_SERVER_PORT: int = 58008 const DEFAULT_SERVER_PORT: int = 58008
enum DamageIndicationType {PLAYER = 0, TOWER = 1, OTHER_PLAYER = 2, STATUS = 3} enum DamageIndicationType {PLAYER = 0, TOWER = 1, OTHER_PLAYER = 2, STATUS = 3}
enum EnergyType {UNDEFINED = 0, DISCRETE = 1, CONTINUOUS = 2} enum EnergyType {UNDEFINED = 0, DISCRETE = 1, CONTINUOUS = 2}
enum TargetType {UNDEFINED = 0, LAND = 1, AIR = 2, BOTH = 3} enum TargetType {UNDEFINED = 0, LAND = 1, AIR = 2}
enum EnemyType {UNDEFINED = 0, LAND = 1, AIR = 2} enum EnemyType {UNDEFINED = 0, LAND = 1, AIR = 2}
enum Rarity {COMMON = 0, UNCOMMON = 1, RARE = 2, EPIC = 3, LEGENDARY = 4} enum Rarity {COMMON = 0, UNCOMMON = 1, RARE = 2, EPIC = 3, LEGENDARY = 4}
enum CardTags {DAMAGE = 0, UTILITY = 1, TARGETS_FLYING = 2} enum CardTags {DAMAGE = 0, UTILITY = 1, TARGETS_FLYING = 2}

View File

@@ -22,7 +22,7 @@ var gamemode: GameMode = null
var level: Level var level: Level
var enemies: int = 0 var enemies: int = 0
var objective_health: int = 120 var objective_health: int = 120
var wave: int = 0 var wave: int
var pot: float var pot: float
var UILayer: CanvasLayer var UILayer: CanvasLayer
var chatbox: Chatbox var chatbox: Chatbox
@@ -161,7 +161,7 @@ func ready_player(player_ready_true: bool) -> void:
func spawn_enemy_wave() -> void: func spawn_enemy_wave() -> void:
level.shop.close() level.shop.close()
wave += 1 #wave += 1
level.disable_all_tower_frames() level.disable_all_tower_frames()
level.flow_field.calculate() level.flow_field.calculate()
for spawn: EnemySpawner in level.enemy_spawns: for spawn: EnemySpawner in level.enemy_spawns:
@@ -174,10 +174,10 @@ func spawn_enemy_wave() -> void:
func set_upcoming_wave() -> void: func set_upcoming_wave() -> void:
if is_multiplayer_authority(): if is_multiplayer_authority():
var spawn_power: int = WaveManager.calculate_spawn_power(wave + 1, connected_players_nodes.size()) var spawn_power: int = WaveManager.calculate_spawn_power(wave, connected_players_nodes.size())
#var new_wave: Dictionary = WaveManager.generate_wave(spawn_power, level.enemy_pool) #var new_wave: Dictionary = WaveManager.generate_wave(spawn_power, level.enemy_pool)
var new_wave: Wave = WaveManager.generate_wave(spawn_power, level.enemy_pool, level.enemy_spawns) var new_wave: Wave = WaveManager.generate_wave(spawn_power, level.enemy_pool, level.enemy_spawns)
temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave + 1, connected_players_nodes.size())) temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave, connected_players_nodes.size()))
#networked_set_upcoming_wave.rpc(new_wave, 6 + floori(spawn_power / 70.0)) #networked_set_upcoming_wave.rpc(new_wave, 6 + floori(spawn_power / 70.0))
@@ -238,11 +238,13 @@ func damage_goal(enemy: Enemy, penalty: int) -> void:
func end_wave() -> void: func end_wave() -> void:
wave += 1
for peer_id: int in connected_players_nodes: for peer_id: int in connected_players_nodes:
var player: Hero = connected_players_nodes[peer_id] as Hero var player: Hero = connected_players_nodes[peer_id] as Hero
player.hud.set_wave_count(wave) player.hud.set_wave_count(wave)
player.currency += ceili(pot / connected_players_nodes.size()) player.currency += ceili(pot / connected_players_nodes.size())
player.energy = Data.player_energy player.energy = Data.player_energy
if wave % 2 == 0:
player.blank_cassettes += 1 player.blank_cassettes += 1
if card_gameplay: if card_gameplay:
player.iterate_duration() player.iterate_duration()
@@ -291,7 +293,7 @@ func setup() -> void:
game_active = false game_active = false
enemies = 0 enemies = 0
objective_health = 120 objective_health = 120
wave = 0 wave = 1
stats = RoundStats.new() stats = RoundStats.new()
game_setup.emit() game_setup.emit()

View File

@@ -49,7 +49,7 @@ func find_multiple_targets() -> Array[EnemyController]:
continue continue
if tower.global_position.distance_to(enemy.global_position) > tower.target_range: if tower.global_position.distance_to(enemy.global_position) > tower.target_range:
continue continue
if !(enemy.stats.target_type & tower.stats.target_type): if !tower.stats.target_type.has(enemy.stats.target_type):
continue continue
#if multiple_targets_cache.has(enemy): #if multiple_targets_cache.has(enemy):
# continue # continue

View File

@@ -23,7 +23,7 @@ metadata/_custom_type_script = "uid://yjb0uv6og430"
[resource] [resource]
script = ExtResource("2_bpl71") script = ExtResource("2_bpl71")
target_type = 2 target_type = Array[int]([])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_tiqmf")]([SubResource("Resource_tiqmf"), SubResource("Resource_bpl71"), SubResource("Resource_imnjp")]) attributes = Array[ExtResource("1_tiqmf")]([SubResource("Resource_tiqmf"), SubResource("Resource_bpl71"), SubResource("Resource_imnjp")])
text = "DESC_TOWER_PLATFORM_DASH" text = "DESC_TOWER_PLATFORM_DASH"

View File

@@ -20,7 +20,7 @@ value = 10.0
[resource] [resource]
script = ExtResource("2_7wr4x") script = ExtResource("2_7wr4x")
target_type = 1 target_type = Array[int]([1])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_qgv2j")]([SubResource("Resource_bukji"), SubResource("Resource_2e75s"), SubResource("Resource_1vpnf")]) attributes = Array[ExtResource("1_qgv2j")]([SubResource("Resource_bukji"), SubResource("Resource_2e75s"), SubResource("Resource_1vpnf")])
text = "DESC_TOWER_BASIC_GUN" text = "DESC_TOWER_BASIC_GUN"

View File

@@ -20,7 +20,7 @@ value = 2.0
[resource] [resource]
script = ExtResource("2_2k5i0") script = ExtResource("2_2k5i0")
target_type = 3 target_type = Array[int]([1, 2])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_otqsh")]([SubResource("Resource_1txa7"), SubResource("Resource_46kv2"), SubResource("Resource_gb76x")]) attributes = Array[ExtResource("1_otqsh")]([SubResource("Resource_1txa7"), SubResource("Resource_46kv2"), SubResource("Resource_gb76x")])
text = "DESC_TOWER_POISON" text = "DESC_TOWER_POISON"

View File

@@ -20,7 +20,7 @@ value = 8.0
[resource] [resource]
script = ExtResource("2_1vuma") script = ExtResource("2_1vuma")
target_type = 1 target_type = Array[int]([1])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_eglp5")]([SubResource("Resource_yb48y"), SubResource("Resource_ewwvw"), SubResource("Resource_qu5dv")]) attributes = Array[ExtResource("1_eglp5")]([SubResource("Resource_yb48y"), SubResource("Resource_ewwvw"), SubResource("Resource_qu5dv")])
text = "DESC_TOWER_BOMB" text = "DESC_TOWER_BOMB"

View File

@@ -20,7 +20,7 @@ value = 15.0
[resource] [resource]
script = ExtResource("2_nconk") script = ExtResource("2_nconk")
target_type = 3 target_type = Array[int]([1, 2])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_wvk31")]([SubResource("Resource_68ba3"), SubResource("Resource_gogvm"), SubResource("Resource_pswb4")]) attributes = Array[ExtResource("1_wvk31")]([SubResource("Resource_68ba3"), SubResource("Resource_gogvm"), SubResource("Resource_pswb4")])
text = "DESC_TOWER_FIREBALL" text = "DESC_TOWER_FIREBALL"

View File

@@ -20,7 +20,7 @@ value = 3.0
[resource] [resource]
script = ExtResource("2_wptab") script = ExtResource("2_wptab")
target_type = 1 target_type = Array[int]([1])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_ikp33")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")]) attributes = Array[ExtResource("1_ikp33")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")])
text = "DESC_TOWER_FLAMETHROWER" text = "DESC_TOWER_FLAMETHROWER"

View File

@@ -30,7 +30,7 @@ value = 3.0
[resource] [resource]
script = ExtResource("2_ky46y") script = ExtResource("2_ky46y")
target_type = 1 target_type = Array[int]([1])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_w20qq")]([SubResource("Resource_oayfg"), SubResource("Resource_fekle"), SubResource("Resource_ud8xi"), SubResource("Resource_cvkxf"), SubResource("Resource_pivwn")]) attributes = Array[ExtResource("1_w20qq")]([SubResource("Resource_oayfg"), SubResource("Resource_fekle"), SubResource("Resource_ud8xi"), SubResource("Resource_cvkxf"), SubResource("Resource_pivwn")])
text = "DESC_TOWER_ACCEL" text = "DESC_TOWER_ACCEL"

View File

@@ -20,7 +20,7 @@ value = 2.0
[resource] [resource]
script = ExtResource("2_226sm") script = ExtResource("2_226sm")
target_type = 1 target_type = Array[int]([1])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_ytycf")]([SubResource("Resource_gbocu"), SubResource("Resource_6a2im"), SubResource("Resource_7npe0")]) attributes = Array[ExtResource("1_ytycf")]([SubResource("Resource_gbocu"), SubResource("Resource_6a2im"), SubResource("Resource_7npe0")])
text = "DESC_TOWER_GLUE" text = "DESC_TOWER_GLUE"

View File

@@ -20,7 +20,7 @@ value = 15.0
[resource] [resource]
script = ExtResource("2_dorn5") script = ExtResource("2_dorn5")
target_type = 3 target_type = Array[int]([1, 2])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_wgjcy")]([SubResource("Resource_68ba3"), SubResource("Resource_gogvm"), SubResource("Resource_pswb4")]) attributes = Array[ExtResource("1_wgjcy")]([SubResource("Resource_68ba3"), SubResource("Resource_gogvm"), SubResource("Resource_pswb4")])
text = "DESC_TOWER_ICE_SPIKE" text = "DESC_TOWER_ICE_SPIKE"

View File

@@ -23,7 +23,7 @@ metadata/_custom_type_script = "uid://yjb0uv6og430"
[resource] [resource]
script = ExtResource("2_fax6y") script = ExtResource("2_fax6y")
target_type = 1 target_type = Array[int]([])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_0swcp")]([SubResource("Resource_0swcp"), SubResource("Resource_fax6y"), SubResource("Resource_v0e26")]) attributes = Array[ExtResource("1_0swcp")]([SubResource("Resource_0swcp"), SubResource("Resource_fax6y"), SubResource("Resource_v0e26")])
text = "DESC_TOWER_SPEED_INCREASER" text = "DESC_TOWER_SPEED_INCREASER"

View File

@@ -20,7 +20,7 @@ value = 30.0
[resource] [resource]
script = ExtResource("2_8w61k") script = ExtResource("2_8w61k")
target_type = 3 target_type = Array[int]([1, 2])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_peekg")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")]) attributes = Array[ExtResource("1_peekg")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")])
text = "DESC_TOWER_RADIATION" text = "DESC_TOWER_RADIATION"

View File

@@ -20,7 +20,7 @@ value = 3.0
[resource] [resource]
script = ExtResource("2_w4q6a") script = ExtResource("2_w4q6a")
target_type = 1 target_type = Array[int]([1])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_wa26m")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")]) attributes = Array[ExtResource("1_wa26m")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")])
text = "DESC_TOWER_FREEZER" text = "DESC_TOWER_FREEZER"

View File

@@ -25,7 +25,7 @@ value = 20.0
[resource] [resource]
script = ExtResource("2_lag26") script = ExtResource("2_lag26")
target_type = 2 target_type = Array[int]([2])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_jajj0")]([SubResource("Resource_4fjm2"), SubResource("Resource_uwj4j"), SubResource("Resource_6qv5v"), SubResource("Resource_y1rtq")]) attributes = Array[ExtResource("1_jajj0")]([SubResource("Resource_4fjm2"), SubResource("Resource_uwj4j"), SubResource("Resource_6qv5v"), SubResource("Resource_y1rtq")])
text = "DESC_TOWER_ROCKET" text = "DESC_TOWER_ROCKET"

View File

@@ -20,7 +20,7 @@ value = 50.0
[resource] [resource]
script = ExtResource("2_5j62t") script = ExtResource("2_5j62t")
target_type = 3 target_type = Array[int]([1, 2])
energy_type = 0 energy_type = 0
attributes = Array[ExtResource("1_5wjgg")]([SubResource("Resource_1ct8q"), SubResource("Resource_erx05"), SubResource("Resource_vfpmb")]) attributes = Array[ExtResource("1_5wjgg")]([SubResource("Resource_1ct8q"), SubResource("Resource_erx05"), SubResource("Resource_vfpmb")])
text = "DESC_TOWER_SNIPER" text = "DESC_TOWER_SNIPER"

View File

@@ -14,8 +14,8 @@ func set_amount(num: int) -> void:
amount_label.text = "x" + str(num) amount_label.text = "x" + str(num)
func set_card(card: Card) -> void: func set_card(new_card: Card) -> void:
self.card = card card = new_card
icon.texture = card.icon icon.texture = card.icon
cost_label.text = str(card.cost) cost_label.text = str(card.cost)
for i: int in tags.get_child_count(): for i: int in tags.get_child_count():

View File

@@ -3,7 +3,7 @@ extends HBoxContainer
func set_wave(wave: int) -> void: func set_wave(wave: int) -> void:
$WaveLabel.text = "Wave " + str(wave) + ": " $WaveLabel.text = tr("LABEL_WAVE").format({Wave_Number = str(wave)})
func add_enemy_tag(enemy: Enemy, num: int) -> void: func add_enemy_tag(enemy: Enemy, num: int) -> void:

View File

@@ -7,4 +7,4 @@ script = ExtResource("1_lcu0c")
[node name="WaveLabel" type="Label" parent="."] [node name="WaveLabel" type="Label" parent="."]
layout_mode = 2 layout_mode = 2
text = "wave 1: " text = "LABEL_WAVE"

View File

@@ -25,7 +25,7 @@ value = 20.0
[resource] [resource]
script = ExtResource("2_k26ta") script = ExtResource("2_k26ta")
target_type = 0 target_type = Array[int]([])
energy_type = 2 energy_type = 2
attributes = Array[ExtResource("1_rbqj6")]([SubResource("Resource_bcrtt"), SubResource("Resource_llper"), SubResource("Resource_7i2dt"), SubResource("Resource_8cirl")]) attributes = Array[ExtResource("1_rbqj6")]([SubResource("Resource_bcrtt"), SubResource("Resource_llper"), SubResource("Resource_7i2dt"), SubResource("Resource_8cirl")])
text = "DESC_WEAPON_BASIC_GUN" text = "DESC_WEAPON_BASIC_GUN"

View File

@@ -23,6 +23,14 @@ func add_cards(cards: Array[Card]) -> void:
choose_card(0) choose_card(0)
func process_card_text(card_text: CardText) -> String:
var processed_string: String = tr(card_text.text)
for stat: StatAttribute in card_text.attributes:
processed_string = processed_string.replace(stat.key, "[color=red]" + str(stat.value) + "[color=black]")
processed_string = processed_string.replace("%", "")
return processed_string
func choose_card(choice: int) -> void: func choose_card(choice: int) -> void:
chosen_card = choices[choice] chosen_card = choices[choice]
card_name_label.text = tr(chosen_card.display_name) card_name_label.text = tr(chosen_card.display_name)
@@ -31,7 +39,7 @@ func choose_card(choice: int) -> void:
func choose_side(side_a_chosen: bool) -> void: func choose_side(side_a_chosen: bool) -> void:
side_a = side_a_chosen side_a = side_a_chosen
card_description_label.text = tr(chosen_card.tower_stats.text) if side_a else tr(chosen_card.weapon_stats.text) card_description_label.text = process_card_text(chosen_card.tower_stats) if side_a else process_card_text(chosen_card.weapon_stats)
func _on_confirm_button_pressed() -> void: func _on_confirm_button_pressed() -> void:

View File

@@ -47,8 +47,8 @@ size_flags_horizontal = 3
size_flags_stretch_ratio = 2.0 size_flags_stretch_ratio = 2.0
[node name="NameLabel" type="Label" parent="PanelContainer/Content/HBoxContainer/VBoxContainer"] [node name="NameLabel" type="Label" parent="PanelContainer/Content/HBoxContainer/VBoxContainer"]
auto_translate_mode = 2
layout_mode = 2 layout_mode = 2
text = "LABEL_CARD_NAME"
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
@@ -86,6 +86,7 @@ text = "LABEL_CARD_DESCRIPTION"
auto_translate_mode = 2 auto_translate_mode = 2
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
bbcode_enabled = true
text = "a long ass example description of a card that goes into honestly way too much detail but at least if we can support a lot of text at a good size then we dont have to worry about really complicated cards fucking up our UI later in developement if we end up needing to explain a lot" text = "a long ass example description of a card that goes into honestly way too much detail but at least if we can support a lot of text at a good size then we dont have to worry about really complicated cards fucking up our UI later in developement if we end up needing to explain a lot"
[node name="FeaturesLabel" type="Label" parent="PanelContainer/Content/HBoxContainer/DescriptionVBox"] [node name="FeaturesLabel" type="Label" parent="PanelContainer/Content/HBoxContainer/DescriptionVBox"]

View File

@@ -209,7 +209,8 @@ Pause={
[internationalization] [internationalization]
locale/translations_pot_files=PackedStringArray("res://Scenes/Menus/MainMenu/main_menu.tscn", "res://Scenes/Menus/PauseMenu/pause_menu.tscn", "res://Scenes/Menus/GameEndScreen/game_end_screen.tscn", "res://Scenes/Menus/CharacterSelect/character_select.tscn", "res://Scenes/Menus/audio_options.tscn", "res://Scenes/Menus/gameplay_options.tscn", "res://Scenes/Menus/graphics_options.tscn", "res://Scenes/Menus/keybind_options.tscn", "res://Scenes/UI/keybind_popup.tscn", "res://choose_card_screen.tscn", "res://Scenes/Menus/options_menu.tscn") locale/translations=PackedStringArray("res://Locales/en.mo")
locale/translations_pot_files=PackedStringArray("res://Scenes/Menus/MainMenu/main_menu.tscn", "res://Scenes/Menus/PauseMenu/pause_menu.tscn", "res://Scenes/Menus/GameEndScreen/game_end_screen.tscn", "res://Scenes/Menus/CharacterSelect/character_select.tscn", "res://Scenes/Menus/audio_options.tscn", "res://Scenes/Menus/gameplay_options.tscn", "res://Scenes/Menus/graphics_options.tscn", "res://Scenes/Menus/keybind_options.tscn", "res://Scenes/UI/keybind_popup.tscn", "res://choose_card_screen.tscn")
pseudolocalization/double_vowels=true pseudolocalization/double_vowels=true
[layer_names] [layer_names]