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(>)