From 3ce3f2005cd7f3890bf6ff0bde5f77627e90c981 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 31 May 2020 22:58:51 +0200 Subject: [PATCH] AI Mech Fix (#8997) --- code/game/machinery/mech_recharger.dm | 35 +++++++++---------- code/game/machinery/telecomms/broadcaster.dm | 2 +- code/modules/heavy_vehicle/mecha.dm | 9 ++++- code/modules/mob/hear_say.dm | 4 +-- .../simple_animal/friendly/spiderbot.dm | 34 +++++++++++++++++- html/changelogs/geeves-mech_charge.yml | 8 +++++ 6 files changed, 69 insertions(+), 23 deletions(-) create mode 100644 html/changelogs/geeves-mech_charge.yml diff --git a/code/game/machinery/mech_recharger.dm b/code/game/machinery/mech_recharger.dm index bb968a64bb0..29943736c96 100644 --- a/code/game/machinery/mech_recharger.dm +++ b/code/game/machinery/mech_recharger.dm @@ -4,9 +4,9 @@ desc = "A exosuit recharger, built into the floor." icon = 'icons/mecha/mech_bay.dmi' icon_state = "recharge_floor" - density = 0 + density = FALSE layer = TURF_LAYER + 0.1 - anchored = 1 + anchored = TRUE idle_power_usage = 300 // Some electronics, passive drain. active_power_usage = 90 KILOWATTS // When charging @@ -77,32 +77,31 @@ charging.updatehealth() if(fully_repaired()) for(var/mob/pilot in charging.pilots) - pilot.show_message("Exosuit integrity has been fully restored.") + to_chat(pilot, SPAN_NOTICE("Exosuit integrity has been fully restored.")) var/obj/item/cell/cell = charging.get_cell() - if(cell && !cell.fully_charged() && remaining_energy > 0) + if(cell && remaining_energy > 0) cell.give(remaining_energy * CELLRATE) - if(cell.fully_charged()) - for(var/mob/pilot in charging.pilots) - pilot.show_message("Fully charged.") - - if((!repair || fully_repaired()) && cell.fully_charged()) - stop_charging() // An ugly proc, but apparently mechs don't have maxhealth var of any kind. /obj/machinery/mech_recharger/proc/fully_repaired() return charging && (charging.health == charging.maxHealth) /obj/machinery/mech_recharger/proc/start_charging(var/mob/living/heavy_vehicle/M) - for(var/mob/pilot in M.pilots) - if(stat & (NOPOWER | BROKEN)) - pilot.show_message("Power port not responding. Terminating.") + var/no_power = FALSE + var/obj/item/cell/C = M.get_cell() + if(stat & (NOPOWER | BROKEN)) + no_power = TRUE + if(!no_power && C) + charging = M + update_use_power(2) + for(var/pilot in M.pilots) + if(no_power) + to_chat(pilot, SPAN_WARNING("Power port not responding. Terminating.")) return - if(M.get_cell()) - pilot.show_message("Now charging...") - charging = M - update_use_power(2) + if(C) + to_chat(pilot, SPAN_NOTICE("Now charging...")) /obj/machinery/mech_recharger/proc/stop_charging() update_use_power(1) - charging = null + charging = null \ No newline at end of file diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 0d75da62b19..8eeb9fbcd76 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -288,7 +288,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // Did not understand the message: var/list/heard_voice = list() // voice message (ie "chimpers") var/list/heard_garbled = list() // garbled message (ie "f*c* **u, **i*er!") - var/list/heard_gibberish= list() // completely screwed over message (ie "F%! (O*# *#!<>&**%!") + var/list/heard_gibberish= list() // completely screwed over message ie "F%! (O*# *#!<>&**%!") for (var/mob/R in receive) diff --git a/code/modules/heavy_vehicle/mecha.dm b/code/modules/heavy_vehicle/mecha.dm index 77ee93a1553..7a76afa2672 100644 --- a/code/modules/heavy_vehicle/mecha.dm +++ b/code/modules/heavy_vehicle/mecha.dm @@ -150,7 +150,7 @@ usr.examinate(M, 1) /mob/living/heavy_vehicle/Initialize(mapload, var/obj/structure/heavy_vehicle_frame/source_frame) - . = ..() + ..() if(!access_card) access_card = new (src) @@ -197,6 +197,13 @@ // Build icon. update_icon() + . = INITIALIZE_HINT_LATELOAD + +/mob/living/heavy_vehicle/LateInitialize() + var/obj/machinery/mech_recharger/MR = locate() in get_turf(src) + if(MR) + MR.start_charging(src) + /mob/living/heavy_vehicle/return_air() return (body && body.pilot_coverage >= 100 && hatch_closed) ? body.cockpit : loc.return_air() diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index e5b3f088813..19bdd568e51 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -127,7 +127,7 @@ if(speaker != null) speaker_name = speaker.name else - speaker_name = "unknown" + speaker_name = "Unknown" if(istype(speaker, /mob/living/carbon/human)) var/mob/living/carbon/human/H = speaker @@ -138,7 +138,7 @@ speaker_name = vname if(hard_to_hear) - speaker_name = "unknown" + speaker_name = "Unknown" var/changed_voice diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index a0936a8ac54..e1a5fe5ee31 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -7,6 +7,7 @@ maxbodytemp = 500 mob_size = MOB_SMALL + var/radio_type = /obj/item/device/radio/borg var/obj/item/device/radio/borg/radio = null var/mob/living/silicon/ai/connected_ai = null var/obj/item/cell/cell = null @@ -42,6 +43,7 @@ speed = -1 //Spiderbots gotta go fast. pass_flags = PASSTABLE | PASSDOORHATCH speak_emote = list("beeps","clicks","chirps") + universal_understand = TRUE /mob/living/simple_animal/spiderbot/Initialize() . = ..() @@ -50,6 +52,7 @@ internal_id = new /obj/item/card/id(src) verbs |= /mob/living/proc/ventcrawl verbs |= /mob/living/proc/hide + verbs |= /mob/living/simple_animal/spiderbot/proc/control_integrated_radio /mob/living/simple_animal/spiderbot/attackby(var/obj/item/O as obj, var/mob/user as mob) @@ -189,7 +192,7 @@ /mob/living/simple_animal/spiderbot/Initialize() . = ..() - radio = new /obj/item/device/radio/borg(src) + radio = new radio_type(src) camera = new /obj/machinery/camera(src) camera.c_tag = "spiderbot-[real_name]" camera.replace_networks(list("SS13")) @@ -305,6 +308,35 @@ /mob/living/simple_animal/spiderbot/get_bullet_impact_effect_type(var/def_zone) return BULLET_IMPACT_METAL +/mob/living/simple_animal/spiderbot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) + switch(message_mode) + if("headset") + radio.talk_into(src, message, null, verb, speaking) + used_radios += radio + if("intercom") + var/turf/T = get_turf(src) + for(var/obj/item/device/radio/intercom/I in view(1, T)) + I.talk_into(src, message, null, verb, speaking) + used_radios += I + if(message_mode) + radio.talk_into(src, message, message_mode, verb, speaking) + used_radios += radio + +/mob/living/simple_animal/spiderbot/do_animate_chat(var/message, var/datum/language/language, var/small, var/list/show_to, var/duration, var/list/message_override) + INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, language, small, show_to, duration) + +/mob/living/simple_animal/spiderbot/proc/control_integrated_radio() + set name = "Radio Settings" + set desc = "Allows you to change settings of your radio." + set category = "Spiderbot" + + to_chat(src, SPAN_NOTICE("Accessing Subspace Transceiver control...")) + if(radio) + radio.interact(src) + +/mob/living/simple_animal/spiderbot/ai + radio_type = /obj/item/device/radio/headset/heads/ai_integrated + /mob/living/simple_animal/spiderbot/ai/Initialize() . = ..() internal_id.access = get_all_station_access() \ No newline at end of file diff --git a/html/changelogs/geeves-mech_charge.yml b/html/changelogs/geeves-mech_charge.yml new file mode 100644 index 00000000000..de756bb9ce4 --- /dev/null +++ b/html/changelogs/geeves-mech_charge.yml @@ -0,0 +1,8 @@ +author: Geeves + +delete-after: True + +changes: + - bugfix: "Mechs will now consistently stay fully charged if they're on top of an exosuit dock / mech recharger." + - bugfix: "Spiderbots can now properly hear and speak into the radio." + - bugfix: "Fix spiderbots speaking floating chat." \ No newline at end of file