From 00eb823fe6c80dd078b7ed4286ec562c459a292c Mon Sep 17 00:00:00 2001 From: BrickTheHooman <106778834+BrickTheHooman@users.noreply.github.com> Date: Mon, 29 Dec 2025 21:43:42 +0800 Subject: [PATCH] migrates arcade battle to tgui (#31186) * migrate arcade battle ui * fixes a weird comment * changes according to review * fixes autodocs comments --- code/game/machinery/computer/arcade.dm | 256 +++++++++--------- .../packages/tgui/interfaces/ArcadeBattle.tsx | 148 ++++++++++ tgui/public/tgui.bundle.js | 2 +- 3 files changed, 274 insertions(+), 132 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/ArcadeBattle.tsx diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index c8f4cefbb9f..7c477a36099 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -54,158 +54,160 @@ icon_screen = "battle" circuit = /obj/item/circuitboard/arcade/battle var/enemy_name = "Space Villain" - var/temp = "Winners Don't Use Spacedrugs" //Temporary message, for attack messages, etc - var/player_hp = 30 //Player health/attack points + /// event message for attack messages, etc + var/previous_event = "Make your move!" + /// Player health/attack points + var/player_hp = 30 + /// the highest amount of health that the player has held + var/player_max_hp = 30 + /// player magic points var/player_mp = 10 - var/enemy_hp = 45 //Enemy health/attack points + /// the highest amount of mana that the player has held + var/player_max_mp = 10 + /// Enemy health/attack points + var/enemy_hp = 45 + /// the highest amount of health that the enemy achieves - this never changes, but avoids magic numbers + var/enemy_max_hp = 45 + /// enemy magic points var/enemy_mp = 20 - var/gameover = 0 - var/blocked = 0 //Player cannot attack/heal while set - var/turtle = 0 + var/gameover = FALSE + /// a counter of whether the last few player inputs were to heal, incurs a turtling penalty when emagged + var/passive_streak = 0 + COOLDOWN_DECLARE(spam_cooldown) -/obj/machinery/computer/arcade/battle/Reset() - var/name_action - var/name_part1 - var/name_part2 +/obj/machinery/computer/arcade/battle/proc/generate_name() + var/name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") - name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") - - name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") - name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") + var/name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") + var/name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "Slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") enemy_name = replacetext((name_part1 + name_part2), "the ", "") name = (name_action + name_part1 + name_part2) +/obj/machinery/computer/arcade/battle/Reset() + previous_event = initial(previous_event) + player_hp = initial(player_hp) + player_max_hp = initial(player_max_hp) + player_mp = initial(player_mp) + player_max_mp = initial(player_max_mp) + enemy_hp = initial(enemy_hp) + enemy_max_hp = initial(enemy_max_hp) + enemy_mp = initial(enemy_mp) + gameover = initial(gameover) + passive_streak = initial(enemy_mp) + +/obj/machinery/computer/arcade/battle/Initialize(mapload) + . = ..() + generate_name() + /obj/machinery/computer/arcade/battle/attack_hand(mob/user as mob) if(..()) return - user.set_machine(src) - var/dat = "Close" - dat += "
'+(t?e:_(e,!0))+"\n":""+(t?e:_(e,!0))+"\n"}},{key:"blockquote",value:function(e){return"\n".concat(e,"\n")}},{key:"html",value:function(e){return e}},{key:"heading",value:function(e,n,t,r){if(this.options.headerIds){var i=this.options.headerPrefix+r.slug(t);return"
".concat(e,"
\n")}},{key:"table",value:function(e,n){return n&&(n="".concat(n,"")),"".concat(e,"")}},{key:"br",value:function(){return this.options.xhtml?"