From cd0cfd0dd7917a20169588e6c4f8531cc759a41f Mon Sep 17 00:00:00 2001
From: Kashargul <144968721+Kashargul@users.noreply.github.com>
Date: Sun, 7 Apr 2024 02:34:06 +0200
Subject: [PATCH] borgs can walk, vtec overhaul, no more borg light and some
glow flicker (#15901)
* borgs can walk, no more borg light flicker
* rework vtec
* small oversight on glow
* .
---
code/_onclick/hud/_defines.dm | 10 +++--
code/_onclick/hud/hud.dm | 2 +
code/_onclick/hud/robot.dm | 41 +++++++++++++++++-
code/_onclick/hud/screen_objects.dm | 13 ++++++
.../objects/items/robot/robot_upgrades.dm | 3 +-
.../human/species/station/prommie_blob.dm | 3 +-
code/modules/mob/living/silicon/robot/life.dm | 10 ++---
.../modules/mob/living/silicon/robot/robot.dm | 10 ++---
.../simple_mob/subtypes/vore/oregrub.dm | 4 ++
.../living/simple_mob/subtypes/vore/scel.dm | 17 --------
.../simple_mob/subtypes/vore/solargrub.dm | 4 ++
.../subtypes/vore/solargrub_larva.dm | 4 ++
icons/mob/screen1_robot.dmi | Bin 129902 -> 132820 bytes
13 files changed, 85 insertions(+), 36 deletions(-)
diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index a3a8d563725..b39c71a7d23 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -58,9 +58,11 @@
#define ui_zonesel "EAST-1:28,SOUTH:5"
#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12)
-#define ui_borg_pull "EAST-3:24,SOUTH+1:7"
-#define ui_borg_module "EAST-2:26,SOUTH+1:7"
-#define ui_borg_panel "EAST-1:28,SOUTH+1:7"
+#define ui_borg_pull "EAST-4:24,SOUTH+1:7" //borgs
+#define ui_borg_radio "EAST-2:26,SOUTH+1:7" //borgs
+#define ui_borg_panel "EAST-1:28,SOUTH+1:7" //borgs
+#define ui_borg_module "EAST-3:24,SOUTH+1:5"//borgs
+#define ui_vtec_control "EAST-3:24,SOUTH:5"//borgs
#define ui_ai_core "SOUTH:6,WEST:16"
#define ui_ai_camera_list "SOUTH:6,WEST+1:16"
@@ -197,4 +199,4 @@
#define ui_mech_deco1_f "WEST+2:-7, SOUTH+8"
#define ui_mech_deco2_f "WEST+2:-7, SOUTH+9"
-#define ui_smallquad "EAST-4:22,SOUTH:5"
\ No newline at end of file
+#define ui_smallquad "EAST-4:22,SOUTH:5"
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 2a997afba07..af265268462 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -176,6 +176,7 @@ var/list/global_huds = list(
var/obj/screen/l_hand_hud_object
var/obj/screen/action_intent
var/obj/screen/move_intent
+ var/obj/screen/control_vtec
var/list/adding
/// Misc hud elements that are hidden when the hud is minimized
@@ -219,6 +220,7 @@ var/list/global_huds = list(
l_hand_hud_object = null
action_intent = null
move_intent = null
+ control_vtec = null
adding = null
other = null
other_important = null
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index ae0f7f4c474..c9cd99ba45c 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -25,7 +25,7 @@ var/obj/screen/robot_inventory
using.color = HUD.ui_color
using.alpha = HUD.ui_alpha
using.icon_state = "radio"
- using.screen_loc = ui_movi
+ using.screen_loc = ui_borg_radio
using.layer = HUD_LAYER
adding += using
@@ -81,6 +81,17 @@ var/obj/screen/robot_inventory
adding += using
HUD.action_intent = using
+ //Move intent (walk/run)
+ using = new /obj/screen()
+ using.name = "mov_intent"
+ using.icon = HUD.ui_style
+ using.icon_state = (m_intent == "run" ? "running" : "walking")
+ using.screen_loc = ui_movi
+ using.color = HUD.ui_color
+ using.alpha = HUD.ui_alpha
+ HUD.adding += using
+ HUD.move_intent = using
+
//Health
healths = new /obj/screen()
healths.icon = HUD.ui_style
@@ -206,6 +217,32 @@ var/obj/screen/robot_inventory
client.screen += HUD.adding + HUD.other
client.screen += client.void
+/datum/hud/proc/toggle_vtec_control()
+ if(!isrobot(mymob))
+ return
+
+ var/mob/living/silicon/robot/R = mymob
+ if(!control_vtec)
+ var/obj/screen/using = new /obj/screen()
+ using.name = "control_vtec"
+ using.icon = ui_style
+ using.screen_loc = ui_vtec_control
+ using.color = ui_color
+ using.alpha = ui_alpha
+ control_vtec = using
+ if(R.vtec_active)
+ if(R.speed == 0)
+ control_vtec.icon_state = "speed_0"
+ else if(R.speed == -0.5)
+ control_vtec.icon_state = "speed_1"
+ else if(R.speed == -1)
+ control_vtec.icon_state = "speed_2"
+ R.m_intent = "run"
+ R.hud_used.move_intent.icon_state = "running"
+ R.client.screen += control_vtec
+ else
+ R.client.screen -= control_vtec
+ R.speed = 0
/datum/hud/proc/toggle_show_robot_modules()
if(!isrobot(mymob))
@@ -276,7 +313,7 @@ var/obj/screen/robot_inventory
else
//Modules display is hidden
//r.client.screen -= robot_inventory //"store" icon
- for(var/atom/A in r.module.modules)
+ for(var/atom/A in r.module?.modules)
if(r.client && (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) )
//Module is not currently active
r.client.screen -= A
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index dde89b98ab5..cd9c4044b6a 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -272,6 +272,19 @@
var/mob/living/L = usr
L.resist()
+ if("control_vtec")
+ if(isrobot(usr))
+ var/mob/living/silicon/robot/R = usr
+ if(R.speed == 0 && R.vtec_active)
+ R.speed = -0.5
+ R.hud_used.control_vtec.icon_state = "speed_1"
+ else if(R.speed == -0.5 && R.vtec_active)
+ R.speed = -1
+ R.hud_used.control_vtec.icon_state = "speed_2"
+ else
+ R.speed = 0
+ R.hud_used.control_vtec.icon_state = "speed_0"
+
if("mov_intent")
if(isliving(usr))
if(iscarbon(usr))
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 34892beab26..aba84bf0005 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -109,7 +109,8 @@
return 0
R.verbs += /mob/living/silicon/robot/proc/toggle_vtec
- R.speed = -1
+ R.vtec_active = TRUE
+ R.hud_used.toggle_vtec_control()
return 1
/obj/item/borg/upgrade/basic/sizeshift
diff --git a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm
index 7006dd9968a..92d6d03e046 100644
--- a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm
+++ b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm
@@ -403,7 +403,8 @@
blob.rad_glow = CLAMP(radiation,0,250)
set_light(0)
blob.set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), blob.color)
- blob.handle_light()
+ else
+ blob.set_light(0)
if(has_hat)
blob.hat = new_hat
new_hat.forceMove(src)
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 276ab699a3e..e69de8b3fdf 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -370,8 +370,8 @@
IgniteMob()
/mob/living/silicon/robot/handle_light()
- . = ..()
- if(. == FALSE) // If no other light sources are on.
- if(lights_on)
- set_light(integrated_light_power, 1, "#FFFFFF")
- return TRUE
+ if(lights_on)
+ set_light(integrated_light_power, 1, "#FFFFFF")
+ return TRUE
+ else
+ . = ..()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 0c0d39c4fdf..284331ce8cb 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -117,6 +117,7 @@
)
var/has_recoloured = FALSE
+ var/vtec_active = FALSE
/mob/living/silicon/robot/New(loc, var/unfinished = 0)
spark_system = new /datum/effect/effect/system/spark_spread()
@@ -533,12 +534,9 @@
/mob/living/silicon/robot/proc/toggle_vtec()
set name = "Toggle VTEC"
set category = "Abilities"
- if(speed == -1)
- to_chat(src, "VTEC module disabled.")
- speed = 0
- else
- to_chat(src, "VTEC module enabled.")
- speed = -1
+ vtec_active = !vtec_active
+ hud_used.toggle_vtec_control()
+ to_chat(src, "VTEC module [vtec_active ? "enabled" : "disabled"].")
// update the status screen display
/mob/living/silicon/robot/Stat()
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm
index 9a13e5e798b..b4a7dc22253 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm
@@ -88,6 +88,8 @@
"rad" = 100
)
+ glow_override = TRUE
+
/mob/living/simple_mob/vore/oregrub/lava
name = "mature lavagrub"
desc = "A mature, rocky lavagrub"
@@ -141,6 +143,8 @@
if(. == 0 && !is_dead())
set_light(2.5, 1, COLOR_ORANGE)
return 1
+ else if(is_dead())
+ glow_override = FALSE
/mob/living/simple_mob/vore/oregrub/lava/death()
set_light(0)
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm
index deef2f06229..7f58ae433a2 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm
@@ -242,20 +242,3 @@
icon_state = "scel_red"
icon_rest = "scel_red-rest"
random_skin = 0
-
-/mob/living/simple_mob/vore/scel/handle_light()
- if(glow_override)
- return FALSE
-
- if(instability >= TECHNOMANCER_INSTABILITY_MIN_GLOW)
- var/distance = round(sqrt(instability / 2))
- if(distance)
- set_light(distance, distance * 4, l_color = "#660066")
- return TRUE
-
- else if(glow_toggle)
- set_light(glow_range, glow_intensity, glow_color)
-
- else
- set_light(0)
- return FALSE
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm
index 55009d5e90b..c1102a60505 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm
@@ -53,6 +53,8 @@ List of things solar grubs should be able to do:
var/shock_chance = 10 // Beware
var/tracked = FALSE
+ glow_override = TRUE
+
/datum/say_list/solargrub
emote_see = list("squelches", "squishes")
@@ -138,6 +140,8 @@ List of things solar grubs should be able to do:
if(. == 0 && !is_dead())
set_light(2.5, 1, COLOR_YELLOW)
return 1
+ else if(is_dead())
+ glow_override = FALSE
/mob/living/simple_mob/vore/solargrub/init_vore()
..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm
index db748e732ae..c3c02c228de 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm
@@ -51,6 +51,8 @@ var/global/list/grub_machine_overlays = list()
ai_holder_type = /datum/ai_holder/simple_mob/solargrub_larva
+ glow_override = TRUE
+
/mob/living/simple_mob/animal/solargrub_larva/New()
..()
existing_solargrubs += src
@@ -186,6 +188,8 @@ var/global/list/grub_machine_overlays = list()
if(. == 0 && !is_dead())
set_light(1.5, 1, COLOR_YELLOW)
return 1
+ else if(is_dead())
+ glow_override = FALSE
/obj/machinery/abstract_grub_machine
diff --git a/icons/mob/screen1_robot.dmi b/icons/mob/screen1_robot.dmi
index 98f475349c8d563c7ba6817ae72937ae4c4792f5..5e8e0f431afc0e8fd898f9b99e3c3d5bc524e661 100644
GIT binary patch
delta 10704
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
RP7nqBD9ETvm%lX&`5z4fb9(>)