From e793af5719f76e69281a04a070b2d3ac646de5f5 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Tue, 1 Dec 2015 19:31:08 -0500 Subject: [PATCH 01/14] Adds giving custom rank to heir --- code/game/gamemodes/nations/nationsdatums.dm | 1 + code/game/gamemodes/nations/nationsprocs.dm | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/nations/nationsdatums.dm b/code/game/gamemodes/nations/nationsdatums.dm index 0e94ac28e8a..d7c211f829d 100644 --- a/code/game/gamemodes/nations/nationsdatums.dm +++ b/code/game/gamemodes/nations/nationsdatums.dm @@ -5,6 +5,7 @@ var/current_leader var/list/membership = list() var/leader_rank = "Leader" + var/heir_rank = "Heir" var/member_rank = "Member" var/heir diff --git a/code/game/gamemodes/nations/nationsprocs.dm b/code/game/gamemodes/nations/nationsprocs.dm index a0784a3ca08..ae9e5a19174 100644 --- a/code/game/gamemodes/nations/nationsprocs.dm +++ b/code/game/gamemodes/nations/nationsprocs.dm @@ -32,16 +32,16 @@ var/mob/living/carbon/human/H = src if(H.mind && H.mind.nation && H.mind.nation.current_leader == H) - var/type = input(H, "What rank do you want to change?", "Rename Rank", "") in list("Leader","Member") + var/type = input(H, "What rank do you want to change?", "Rename Rank", "") in list("Leader", "Heir", "Member") var/input = stripped_input(H,"What rank do you want?", ,"", MAX_NAME_LEN) if(input) if(type == "Leader") H.mind.nation.leader_rank = input - H.mind.nation.update_nation_id() - + if(type == "Heir") + H.mind.nation.heir_rank = input if(type == "Member") H.mind.nation.member_rank = input - H.mind.nation.update_nation_id() + H.mind.nation.update_nation_id() H << "You changed the [type] rank of your nation to [input]." return 1 @@ -68,6 +68,7 @@ newheir.verbs += /mob/living/carbon/human/proc/takeover newheir << "You have been selected to be the heir to your nation's leadership!" H << "You have selected [heir] to be your heir!" + H.mind.nation.update_nation_id() /mob/living/carbon/human/proc/takeover() @@ -106,6 +107,9 @@ if(M == current_leader) I.name = "[I.registered_name]'s ID Card ([current_name] [leader_rank])" I.assignment = "[current_name] [leader_rank]" + else if(M == heir) + I.name = "[I.registered_name]'s ID Card ([current_name] [heir_rank])" + I.assignment = "[current_name] [heir_rank]" else I.name = "[I.registered_name]'s ID Card ([current_name] [member_rank])" I.assignment = "[current_name] [member_rank]" From 11562a8e039122fed7777f0b335f51e7a088c3b4 Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Tue, 1 Dec 2015 22:19:54 -0800 Subject: [PATCH 02/14] Lets the ore reclaimer make plasma glass from plasma and glass --- code/modules/mining/equipment_locker.dm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index f86c3e2d6c2..b7c6969da70 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -169,6 +169,11 @@ var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma] if(min(metalstack.amount, plasmastack.amount)) dat += text("Plasteel Alloy (Metal + Plasma): Smelt
") + if((/obj/item/stack/sheet/glass in stack_list) && (/obj/item/stack/sheet/mineral/plasma in stack_list)) + var/obj/item/stack/sheet/glassstack = stack_list[/obj/item/stack/sheet/glass] + var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma] + if(min(glassstack.amount, plasmastack.amount)) + dat += "Plasma Glass (Glass + Plasma): Smelt
" dat += text("
Mineral Value List:
[get_ore_values()]
") @@ -238,6 +243,22 @@ unload_mineral(plasteelout) else usr << "Required access not found." + if(href_list["plasglass"]) + if(check_access(inserted_i) || allowed(usr)) + if(!(/obj/item/stack/sheet/glass in stack_list)) return + if(!(/obj/item/stack/sheet/mineral/plasma in stack_list)) return + var/obj/item/stack/sheet/glassstack = stack_list[/obj/item/stack/sheet/glass] + var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/plasma] + + var/desired = input("How much?", "How much would you like to smelt?", 1) as num + var/obj/item/stack/sheet/plasmaglass/plasglassout = new + plasglassout.amount = min(desired, 50, glassstack.amount, plasmastack.amount) + if(plasglassout.amount >= 1) + glassstack.amount -= plasglassout.amount + plasmastack.amount -= plasglass.amount + unload_mineral(plasglassout) + else + use << "Required access not found." updateUsrDialog() return From b12ce7eb5acec62d4477ab308c05368847e317b1 Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Tue, 1 Dec 2015 22:48:10 -0800 Subject: [PATCH 03/14] i r a gud pro gammer --- code/modules/mining/equipment_locker.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index b7c6969da70..d410bf2fd97 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -244,21 +244,21 @@ else usr << "Required access not found." if(href_list["plasglass"]) - if(check_access(inserted_i) || allowed(usr)) + if(check_access(inserted_id) || allowed(usr)) if(!(/obj/item/stack/sheet/glass in stack_list)) return if(!(/obj/item/stack/sheet/mineral/plasma in stack_list)) return var/obj/item/stack/sheet/glassstack = stack_list[/obj/item/stack/sheet/glass] - var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/plasma] + var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma] var/desired = input("How much?", "How much would you like to smelt?", 1) as num var/obj/item/stack/sheet/plasmaglass/plasglassout = new plasglassout.amount = min(desired, 50, glassstack.amount, plasmastack.amount) if(plasglassout.amount >= 1) glassstack.amount -= plasglassout.amount - plasmastack.amount -= plasglass.amount + plasmastack.amount -= plasglassout.amount unload_mineral(plasglassout) else - use << "Required access not found." + usr << "Required access not found." updateUsrDialog() return From c41140c636b2bace1c4bdd3c9dc18d7a9318467b Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Wed, 2 Dec 2015 09:30:03 -0800 Subject: [PATCH 04/14] This should let MMI mechs move again Need to give this a test, but it looks like the else case of the mecha check was hijacked by the MMI check, which then prevented brains in a mech from moving --- code/modules/mob/living/carbon/brain/brain.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 608f9b4a8e7..61879d81f52 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -54,7 +54,7 @@ if(in_contents_of(/obj/mecha)) canmove = 1 use_me = 1 //If it can move, let it emote - if(istype(loc, /obj/item/device/mmi)) canmove = 1 //mmi won't move anyways so whatever + else if(istype(loc, /obj/item/device/mmi)) canmove = 1 //mmi won't move anyways so whatever else canmove = 0 return canmove From 13e24369340e2fac829966d2d5ece9398169b033 Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Wed, 2 Dec 2015 13:30:07 -0800 Subject: [PATCH 05/14] Gives MMI Odysseus' medhuds, adds mech wreckage disassembly MMIs can also be extracted without destroying the mech should they permit maintenance protocols --- code/game/mecha/mecha.dm | 21 +++++++++++++++ code/game/mecha/mecha_wreckage.dm | 12 +++++++-- code/game/mecha/medical/odysseus.dm | 28 ++++---------------- code/modules/mob/living/carbon/brain/MMI.dm | 5 ++-- code/modules/mob/living/carbon/brain/life.dm | 5 ++++ 5 files changed, 44 insertions(+), 27 deletions(-) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index bc461924377..045e5498ca3 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -794,7 +794,16 @@ else if(state==3) state=2 user << "You close the hatch to the power unit" + else if(state==4 && pilot_is_mmi()) + // Since having maint protocols available is controllable by the MMI, I see this as a consensual way to remove an MMI without destroying the mech + user.visible_message("[user] begins levering out the MMI from the [src].", "You begin to lever out the MMI from the [src].") + occupant << "[user] is prying you out of the exosuit!" + if(do_after(user,80,target=src)) + user.visible_message("[user] pries the MMI out of the [src]!", "You finish removing the MMI from the [src]!") + go_out() return + + else if(istype(W, /obj/item/stack/cable_coil)) if(state == 3 && hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) var/obj/item/stack/cable_coil/CC = W @@ -1265,6 +1274,18 @@ else return 0 +/obj/mecha/proc/pilot_is_mmi() + var/atom/movable/mob_container + if(istype(occupant, /mob/living/carbon/brain)) + var/mob/living/carbon/brain/brain = occupant + mob_container = brain.container + if(istype(mob_container, /obj/item/device/mmi)) + return 1 + return 0 + +/obj/mecha/proc/pilot_mmi_hud(var/mob/living/carbon/brain/pilot) + return + /obj/mecha/verb/view_stats() set name = "View Stats" set category = "Exosuit Interface" diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index b2c4b0bc0db..7adc9592d03 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -34,9 +34,17 @@ if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W if(salvage_num <= 0) - user << "You don't see anything that can be cut with [W]." + user.visible_message("[user] begins to slice apart the now completely stripped [src].", "You begin to slice apart the [src].", "You hear the sound of a welder nearby.") + if(do_after(user,80,target=src)) + user.visible_message("The now-dilapidated [src] falls apart in a clatter.", "As you slice apart the final support structures, the [src] falls apart in a heap.", "You hear metal clanking to the floor.") + new /obj/item/stack/sheet/metal(src.loc) + var/obj/item/stack/rods/rods = new /obj/item/stack/rods(src.loc) + rods.amount = 2 + qdel(src) return - if (!isemptylist(welder_salvage) && WT.remove_fuel(0,user)) + if (isemptylist(welder_salvage)) + user << "What's left on the [src] cannot be removed with a welder, besides the frame itself" + else if(WT.remove_fuel(0,user)) var/type = prob(70)?pick(welder_salvage):null if(type) var/N = new type(get_turf(user)) diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index 5bbcb367291..d5a4e91ed47 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -27,6 +27,11 @@ else return 0 + pilot_mmi_hud(var/mob/living/carbon/brain/pilot) + pilot.regular_hud_updates() + process_med_hud(pilot, 1) + return ..() + go_out() if(ishuman(occupant)) var/mob/living/carbon/human/H = occupant @@ -34,29 +39,6 @@ H.glasses = null ..() return -/* - verb/set_perspective() - set name = "Set client perspective." - set category = "Exosuit Interface" - set src = usr.loc - var/perspective = input("Select a perspective type.", - "Client perspective", - occupant.client.perspective) in list(MOB_PERSPECTIVE,EYE_PERSPECTIVE) - world << "[perspective]" - occupant.client.perspective = perspective - return - - verb/toggle_eye() - set name = "Toggle eye." - set category = "Exosuit Interface" - set src = usr.loc - if(occupant.client.eye == occupant) - occupant.client.eye = src - else - occupant.client.eye = occupant - world << "[occupant.client.eye]" - return -*/ //TODO - Check documentation for client.eye and client.perspective... /obj/item/clothing/glasses/hud/health/mech diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index c9fe5410abf..3160ff56cc3 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -12,8 +12,9 @@ var/alien = 0 var/syndiemmi = 0 //Whether or not this is a Syndicate MMI var/mob/living/carbon/brain/brainmob = null//The current occupant. - var/mob/living/silicon/robot = null//Appears unused. - var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm. + var/mob/living/silicon/robot/robot = null//Appears unused. + var/obj/mecha/mecha = null//This does not appear to be used outside of reference in mecha.dm. +// I'm using this for mechs giving MMIs HUDs now attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/organ/brain/crystal )) diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index 203039250d7..2a191c46217 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -93,5 +93,10 @@ sight &= ~SEE_OBJS see_in_dark = 2 see_invisible = SEE_INVISIBLE_LIVING + if (container && istype(container, /obj/item/device/mmi)) + var/obj/item/device/mmi/mmi = container + if (mmi.mecha) + var/obj/mecha/piloted = mmi.mecha + piloted.pilot_mmi_hud(src) handle_hud_icons_health() \ No newline at end of file From 69e2567e747e77cc7b8ef4a4694cdd0302545702 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 3 Dec 2015 02:00:55 -0500 Subject: [PATCH 06/14] Trying to figure outwhy admin version is not working --- .../living/simple_animal/guardian/guardian.dm | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 8837919167a..d0e2cd1d0ec 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -118,6 +118,7 @@ /mob/living/simple_animal/hostile/guardian/proc/Manifest() if(cooldown > world.time) return + if(!summoner) return if(loc == summoner) loc = get_turf(summoner) src.client.eye = loc @@ -131,6 +132,7 @@ /mob/living/simple_animal/hostile/guardian/proc/Recall() if(cooldown > world.time) return + if(!summoner) return loc = summoner buckled = null cooldown = world.time + 30 @@ -633,6 +635,7 @@ if(random) gaurdiantype = pick(possible_guardians) if(adminseal) + world << "[user] [key]" gaurdiantype = pick("StandardSeal","SupportSeal") else gaurdiantype = input(user, "Pick the type of [mob_name]", "[mob_name] Creation") as null|anything in possible_guardians @@ -755,17 +758,20 @@ /obj/item/weapon/guardiancreator/adminbus/attack_self(mob/living/user) - var/list/targets = list() + //var/list/targets = list() var/target = null - targets += getmobs() //Fill list, prompt user with list - target = input("Select a Player to guard!", "Player list", null, null) as null|anything in targets + //targets += living_mob_list //Fill list, prompt user with list + target = input("Select a Player to guard!", "Player list", null, null) as null|anything in living_mob_list - if(!target) return - var/mob/living/carbon/human/H = target - if(H.mind ) + if(target) + //user.ghostize() + var/mob/living/carbon/human/H = target + //if(H.mind ) spawn_guardian(H,user.key) + //else + // user << "Target has no mind. Aborting." else - user << "Target has no mind. Aborting." + return /obj/item/weapon/paper/guardian From ec61de0a2037008ee63f477b55afc9b37850a2e5 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 3 Dec 2015 15:11:42 -0500 Subject: [PATCH 07/14] Star Fox told me some things i couldn't do..i fixeded them. --- .../living/simple_animal/guardian/guardian.dm | 21 ++++-------------- icons/obj/projectiles.dmi | Bin 26126 -> 26372 bytes 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index d0e2cd1d0ec..a5e8510abfb 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -25,8 +25,8 @@ min_n2 = 0 max_n2 = INFINITY attacktext = "punches" - maxHealth = 100000 //The spirit itself is invincible - health = 100000 + maxHealth = INFINITY //The spirit itself is invincible + health = INFINITY environment_smash = 0 melee_damage_lower = 15 melee_damage_upper = 15 @@ -46,16 +46,6 @@ ..() if(summoner) if(summoner.stat == DEAD) - // src << "Your summoner has died!" - // visible_message("The [src] dies along with its user!") - // summoner.visible_message("[summoner]'s body is completely consumed by the strain of sustaining [src]!") - // for(var/obj/item/W in summoner) - // if(!summoner.unEquip(W)) - // qdel(W) - //summoner.dust() - //ghostize() - //qdel(src) - //else src << "Your summoner has died!" visible_message("The [src] dies along with its user!") ghostize() @@ -106,13 +96,10 @@ /mob/living/simple_animal/hostile/guardian/gib() if(summoner) summoner << "Your [src] was blown up!" - summoner.gib() + summoner.Weaken(10)// your fermillier has died! ROLL FOR CON LOSS! ghostize() qdel(src) -/mob/living/simple_animal/hostile/guardian/start_pulling(var/atom/movable/AM) - return //no pulling things fo you! - //Manifest, Recall, Communicate /mob/living/simple_animal/hostile/guardian/proc/Manifest() @@ -672,8 +659,8 @@ G << "While personally invincible, you will die if [user.real_name] does, and any damage dealt to you will have a portion passed on to them as you feed upon them to sustain yourself." G << "[G.playstyle_string]" user.verbs += /mob/living/proc/guardian_comm + user.verbs += /mob/living/proc/guardian_recall if(!adminseal) - user.verbs += /mob/living/proc/guardian_recall user.verbs += /mob/living/proc/guardian_reset switch (theme) if("magic") diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 0e067d1e6f21bd3cd4c64558b4bea5fb1885c0ae..578e722986dac01fbc98e0e4917c33a7e4c8ae71 100644 GIT binary patch delta 5786 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 delta 5538 zcmYj#byQSc|2;8uqlC0{gCHg9&?O)U3=KmIN(?m!!W}}oQ@Xpm8B|I_N;;*H5+nx( zzC7>qd*AiD>)v(F=bpHG?Y+$%9A#@Kv0vQCvY6UI~`F>q`}+pfLx!A65`IZN@ZRUHA;}a#Wad8dkO-PKSm4 z?6#7Q<}S9g+i9AXjwU38A>7}^-)GX;p9mVw)RPzsOcvmcpBA@TQdoYlc(F5cj8Gc{t}T=mhyJGpXBUxFs@*Wqj^H(5lyr_{%0-inYR zGv6SKqf-9*Yb2E zb@WUWCWSSbj$S%5;VjOR^c++Kj=8cNY=AEqv2DuuHou}fWH57YG4AD$OBKv%}?E=jP=4HUlw z>E*c#IJPBYRZcEFi#0%u)K7@|J zQrdf1CE|ISiYz!tu9dzq+0RZsrxs~0F<3zhh+cDrZh)DCl?CM=aA!GMPYzWK486Z+ zFm<_pJ4ImO5WegDzB#e)h`9t&uZQKY1=PYAt{&a#d5i`+hf}H=*4YSUob}bMzWpK} zAMw;D?Dcnnkjn-YjO+LrBUQvk-K-92*gpF}uN>v&#tVLOkgA{=$iTs$Wf{9RTEA{) zIf*%*KP>(-V|O>}une_5_Tr&{N^LO1d2Bw4AaJ+r(Z~!=?8?oRhn^Un*2|C`Apj1T zJR>`-As6LDtLXqmv(`Z;UFL)F-Se_V}QqUF)x= zoI}QNbR8a_J+E*~q+`2i9mEp1D4@lYyvbV!ma3t^X7m5urC zwpz;5d%E#B>wfc|{U=3R(V|j5k-%>0BTe;@Kamp-X*bkVF~iX$Eyidp;yl7b2(s1h zO3$Skg+r@AwOHwgiK~qRFE>YYmIS;GXlqA2gMpTe*od(mWJ~&`_gwpyHe<3fz$YYG zeyqCB^qz|{zm#&@n8_EqjPQKbmD|Xq?NQdID4CWAHW>hZ_)_oB;dm5I0lB4*vKX>0 zo!m3j3}j=XA4I=?A|dt-wo0ybv?&j_?k1@mb&s(tE@qxZraV2RUpS3M z9y{H~zP_MDqkW!DhS=RtC`Ls&qU!6(_E&hK@=)k!JNr8B{gglDdDXOEvt4*>UM9tb zp$dXDcf%En9LS9n^-gzy*#U|q7_Y{nPHkS5K$03xr#Bn&bMu1R-{;ejp$YO<3B%FR zqBzEY;qExBsGl>HO=309?B&lpE$?$GtdBG${?87y1YWU-@rvY?%gUJQ>8jueP$iN? zQaV1&)eFjV$0?N4tF|x0)SVArEqhEXy+fh3@=gCs7NcmqjZ@hhz=pL#Yul`%@GD`X zQ6?;*RdrB&l|XDZdz)ZNr*{ST*#q5thdrIWgS;h^nL=Cyv5esJMw4rd@aiQIQppt( zD3;13mgOl(zsJZ^d_Y;0TUAJ9%2-M;9cs_-}dZ>*-qtvHjdoO(N7d^lqL$9hEJj2Oj)n zP?OfR92?A49OET>ln7!W#0lUI0rjFrF$y251w!a58J|5V!Jw@zd7wzTf4q+n4s#rv z?^e)IXLy_mTEh=Z`#d71J|X^i8Sw%yGexEn6SJ4>EkZ6oQ>m0yQ47I+_=(UM{9UnH zNh%7GBd4$1wFKWkxmkYcquDmP1XzuZOE~?F~8#cAXZ`dDGQDs0?fO-%sjGF z%to#UpRQFMUkf4Lj0eOS&rF;zr8h`G2E-x4^nBKEXUe6vtfoxsvHW5HwKVqpI{67y zN9(uQI1vKBti8#A$MtBbEUI}nA>-npetTmxVq0&0U&?}j+WciT-TJn5t?;IZ*Og_} zoTE7{m@A_4#J3H zk{P5jB)bXLKrj}_W6j)fQy?=m6ftQ2qk7^ju6Z;o;ja))(iVWl&o9vZiKFd6WT%gL z;Vi{$Zu)4BF9Ry7yx4VXSblcZ-|+JK^UmLxuqt5ML29iDIYd-Quh#Ai&uwaZfx=6ud%ya+^%G0{G#OV#NyxhVGIF{ zOZsS13w|^NegRmU`Ftt%=o7oA)h0zB{(4JO*3lLuAdkk6@98tQ zLWIk`XA%f?8jmftGI3*Obj92a(2JK|DXBT%`;L)i?>=ySDGq<2 zP)=aW6cik<4B6yomxJ2l!=6Ug!%_4yBdqwEJp2J35Cx(DZOOo~-#HAS+N_*_P=HPV zhTweQU!xWbW9^=y?%ob$1?_4QPRpM`@ySku;NMoS2^;(k2G;hn8!Zd*6>8*?F<{5u zuO$HP^Lm!&*YO@Kru|Vf6da+n{He5wb$LCl>S5ykIqca!wh!aO45A)z^%;t6yU2$A z1T|O0aSiCtA8g4jF4&EJ|KPg5;PO~ z2|4=JP=}{OR(?t{UIAHkWI_?^N-!FqhCNCeXq%B>Xi-L@Qk^OFX?wXxHY zoId1KpJ_t0_sb^f_t|g`gQTA91W1;xlf#Y7u6>SV;<95mSySCl>M^wmeO=MUJKz() zO2@%jmY~`d;cUG#O!0hAByz%fZ~_LgVRi3WHBpp0;8lzCj1P}1`^{Y(DJkOkBu_XW z>cgx0JPYqZLb0VH6~DmAySG(45r~nSMrFHZnqOwjT4(JV0L#=-@-3olMF5SdhrBqw z$U*ty735PqU{ej4qFe6{*Rh9w2O2=-7GgKw`)qGgTbmdh8`g&I%TkeN)cJ2Je$##d zk=lXm=2aM2BGAuON7t3)oN6>qN^%vQ+LqQiTV*eFF|Q5DvwRid^%=+cD!Q^t3=js0 zh{%&Nt4hu9?v|BK()p21{-N4DO3JiUY`h+tHvVjGJcg?-Fe)iutX3mnnCKj6_wkeo zS$sPaq3pJhzcAy5+rfry=6=|}kX8*Y07ebmS3ZQ^!qvvB+j{YSugoCrT2_2&Zhg@{ z#mGx?bnorX9Z$2%_YdmdkOFPboh)4^ zrQ1`+uek(4Lqmhk!+Bk8;OeFkv36g7qG7jIpwh5@lLyn&aFC-jiWF&KAQ>R|27%1iHp!XS}keI<;wIhF{0&ESiRQtwjF{EiW3} zI{O6i8RF$*sbd%}K@SUNwLj5!hFw2yIRfJK=en?#Uqr?H=<+}*o8L_PB=k#lUf~@1 z?p>16AYsP~g}X7?zI&%DPLp@_>tK`j2bH(wQLTh7v|fZ>$segxF{?0U5J?g=&PR?Q z7&!3hiV5JdMYOruMP?PdMT8#mZ8ur8jlNTI%4&)>g@5+YFj7^?;0PmD73qIn1q2V> zZP>OlJX_O#T*bvMt1=IxHSUjI?m;Zh1kT;k zIZrO$oWZlu2cm!>`fm!x?K5;b{1!cUZ=BIdR$)| zA&-y2H|uK$@MQs2r1QG-Q#xNTIA%MiraZ|d>ex-9tv{mjZ@(w->;>?4v{UyEy^Ta` zAb_hsmDz&Je#OJSJbaVh4xW+Y9}xC0#E5ivU~JK*Insh2hOvf-=vR!JW?GD=moKt% zq5a5)sQRepTjY6Ge(Eh}vH9iwBO_{BCa%l*v!@52?brPsl=hiLBBu^tCnY$H-GWv1 zb6dl9d+lMoY|IL<{)o`iOiTcV)dJ^2IJJZ5+=NQ6=B|pP-S&Ie8GK-Vp0}lai?3`1 zUCN@LcuTTpkP;O4)4m|qMVaq1!ov7du_tm9Kf8t3rVFT8^NU*6221`ok`a9*zB zEZ~s#b;h&42gRD2FYXvNA<(I`vMIieJBKnzu?hA>>JZ@0uS))k(pqpbkzSVA`-W*$ z%S8(=Pyazg^7h8UHVe<|zVlpI?!zN%G4_m~J1|77OME=ZKzL&qyWvHPy5sqmdmb#H zaNLfXgVq8n9-MX2;f#;rTrn8K!fuqbTq{u}#Jq%5xF8H}U6t>TN~p@8Rps9c?@&+H zcXUh)VBWFeCveq#M)LA&+XKOzMLI&`0jO-nBk0`H^FNH^(Z1R6`7 zLLBj8=XJ3gDbE-~Jya~(EO{gX{)gPfD^n;f{V5kl)nCN~*M7<(!AANzizk=o{1_P6 z2vr4HU5qy=^YLelv4j(yce-k=xX=F|G;|@s%gy?cg~cqK%fwOfD_72rZB%VUy;yS= zRu3TfLv5O-yG{?&ibn#Q>AyVHv`yStulMzgkaj0+anUD!tX~*tN)T&a-epQD)i68o zbdHgOnb_j|_Zwo+Yt_BUD058{d+d)BDEB~DA-UFM$EKM@BdoEy5ypdHq%m$w`(+m` zvfph?ssuM9mHVC9);DSZ5mv|fVwu#t8I|7jsB(S^1f3N3>0&$+9N!r7Z@(7O<%Wx9 z-5->H6@d@D?Q{mFK`i--e$GX8D(OvgCbi{`h$2UE9=ND0jvCw2tfKv36cqP`UyL2M zWC`vf?%JKH57MwA&|n4&D?(-ygrb^7a|U?aUHEDvh)RQ96=jSHgWL^b zukQbvNn@2%Sij*&%N3XSsc}(b)4|8V3JeZ6!}&N(!q`^+!bSTpflSDL(T5DW*wNoL zF1*LPlb*wU_Hzz*ylGt?7H|Kt3C zMI#j@K+lmr!GCTU8eezzX#YQnyG`{6OW)t;Siaem$q`!VmDoy1>RNA~Ko68l3Qi(S ztn=T0bNo!wY{5#O)JZ@8FZ0q>2pS Date: Thu, 3 Dec 2015 18:06:49 -0500 Subject: [PATCH 08/14] Fixes borg issues --- code/modules/mob/living/silicon/robot/robot.dm | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index ce0e238fb31..8f41996606e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -220,8 +220,10 @@ var/list/robot_verbs_default = list( if(security_level == (SEC_LEVEL_GAMMA || SEC_LEVEL_EPSILON) || crisis) src << "\red Crisis mode active. Combat module available." modules+="Combat" - if(get_nations_mode()) - modules = list("Peacekeeper") + if(ticker && ticker.mode && ticker.mode.name == "nations") + var/datum/game_mode/nations/N = ticker.mode + if(N.kickoff) + modules = list("Peacekeeper") if(mmi != null && mmi.alien) modules = "Hunter" modtype = input("Please, select a module!", "Robot", null, null) in modules @@ -297,12 +299,13 @@ var/list/robot_verbs_default = list( if("Combat") module = new /obj/item/weapon/robot_module/combat(src) module.channels = list("Security" = 1) - module_sprites["Combat Android"] = "droidcombat" + icon_state = "droidcombat" if("Peacekeeper") module= new /obj/item/weapon/robot_module/peacekeeper(src) + icon_state = "droidpeace" module.channels = list() - module_sprites["Peacekeeper Android"] = "droidpeace" + icon_state = "droidpeace" if("Hunter") updatename(module) @@ -313,6 +316,7 @@ var/list/robot_verbs_default = list( modtype = "Xeno-Hu" feedback_inc("xeborg_hunter",1) + //languages module.add_languages(src) //subsystems @@ -326,7 +330,7 @@ var/list/robot_verbs_default = list( feedback_inc("cyborg_[lowertext(modtype)]",1) updatename() - if(modtype == "Medical" || modtype == "Security" || modtype == "Combat") + if(modtype == "Medical" || modtype == "Security" || modtype == "Combat" || modtype == "Peacekeeper") status_flags &= ~CANPUSH choose_icon(6,module_sprites) From 96e3f1a1b93832377b9ab3d24156194a1a996f6e Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 3 Dec 2015 23:57:29 -0500 Subject: [PATCH 09/14] URK --- .../living/simple_animal/guardian/guardian.dm | 79 ++++++------------- 1 file changed, 24 insertions(+), 55 deletions(-) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index a5e8510abfb..5acf61d6813 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -41,6 +41,7 @@ var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!" var/bio_fluff_string = "Your scarabs fail to mutate. This shouldn't happen! Submit a bug report!" var/admin_fluff_string = "URK URF!"//the wheels on the bus... + var/adminseal = FALSE /mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies ..() @@ -260,13 +261,21 @@ /mob/living/simple_animal/hostile/guardian/punch/sealpunch + name = "Seal Sprit" + real_name = "Seal Sprit" + icon = 'icons/mob/animal.dmi' + icon_living = "seal" + icon_state = "seal" + attacktext = "slaps" + speak_emote = list("barks") melee_damage_lower = 0 melee_damage_upper = 0 melee_damage_type = STAMINA - damage_transfer = 0.2 + damage_transfer = 0 playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls." environment_smash = 2 battlecry = "URK" + adminseal = TRUE /mob/living/simple_animal/hostile/guardian/punch/verb/Battlecry() set name = "Set Battlecry" @@ -307,12 +316,20 @@ var/toggle = FALSE /mob/living/simple_animal/hostile/guardian/healer/sealhealer + name = "Seal Sprit" + real_name = "Seal Sprit" + icon = 'icons/mob/animal.dmi' + icon_living = "seal" + icon_state = "seal" + attacktext = "slaps" + speak_emote = list("barks") a_intent = I_HARM friendly = "heals" speed = 0 melee_damage_lower = 0 melee_damage_upper = 0 melee_damage_type = STAMINA + adminseal = TRUE /mob/living/simple_animal/hostile/guardian/healer/New() @@ -342,6 +359,8 @@ a_intent = I_HARM speed = 0 damage_transfer = 0.7 + if(src.adminseal) + damage_transfer = 0 melee_damage_lower = 15 melee_damage_upper = 15 src << "You switch to combat mode." @@ -350,6 +369,8 @@ a_intent = I_HELP speed = 1 damage_transfer = 1 + if(src.adminseal) + damage_transfer = 0 melee_damage_lower = 0 melee_damage_upper = 0 src << "You switch to healing mode." @@ -591,7 +612,6 @@ var/ling_failure = "The deck refuses to respond to a souless creature such as you." var/list/possible_guardians = list("Chaos", "Standard", "Ranged", "Support", "Explosive") var/random = TRUE - var/adminseal = FALSE /obj/item/weapon/guardiancreator/attack_self(mob/living/user) for(var/mob/living/simple_animal/hostile/guardian/G in living_mob_list) @@ -621,9 +641,6 @@ var/gaurdiantype = "Standard" if(random) gaurdiantype = pick(possible_guardians) - if(adminseal) - world << "[user] [key]" - gaurdiantype = pick("StandardSeal","SupportSeal") else gaurdiantype = input(user, "Pick the type of [mob_name]", "[mob_name] Creation") as null|anything in possible_guardians var/pickedtype = /mob/living/simple_animal/hostile/guardian/punch @@ -636,18 +653,12 @@ if("Standard") pickedtype = /mob/living/simple_animal/hostile/guardian/punch - if("StandardSeal") - pickedtype = /mob/living/simple_animal/hostile/guardian/punch/sealpunch - if("Ranged") pickedtype = /mob/living/simple_animal/hostile/guardian/ranged if("Support") pickedtype = /mob/living/simple_animal/hostile/guardian/healer - if("SupportSeal") - pickedtype = /mob/living/simple_animal/hostile/guardian/healer/sealhealer - if("Explosive") pickedtype = /mob/living/simple_animal/hostile/guardian/bomb @@ -660,8 +671,7 @@ G << "[G.playstyle_string]" user.verbs += /mob/living/proc/guardian_comm user.verbs += /mob/living/proc/guardian_recall - if(!adminseal) - user.verbs += /mob/living/proc/guardian_reset + user.verbs += /mob/living/proc/guardian_reset switch (theme) if("magic") G.name = "[mob_name]" @@ -686,16 +696,6 @@ G.icon_state = "headcrab" G.attacktext = "swarms" G.speak_emote = list("chitters") - if("seal") - user << "[G.admin_fluff_string]." - G.name = "[mob_name]" - G.color = picked_color - G.real_name = "[mob_name]" - G.icon = 'icons/mob/animal.dmi' - G.icon_living = "seal" - G.icon_state = "seal" - G.attacktext = "slaps" - G.speak_emote = list("barks") /obj/item/weapon/guardiancreator/choose random = FALSE @@ -730,37 +730,6 @@ random = FALSE -/obj/item/weapon/guardiancreator/adminbus - name = "Avatar deck" - desc = "A mystical deck..oddly all the cards have a form of Bus on them." - icon = 'icons/obj/toy.dmi' - icon_state = "deck_syndicate_full" - theme = "seal" - mob_name = "Avatar" - use_message = "URK!" - used_message = "arf?" - failure_message = "..." - adminseal = TRUE - - -/obj/item/weapon/guardiancreator/adminbus/attack_self(mob/living/user) - - //var/list/targets = list() - var/target = null - //targets += living_mob_list //Fill list, prompt user with list - target = input("Select a Player to guard!", "Player list", null, null) as null|anything in living_mob_list - - if(target) - //user.ghostize() - var/mob/living/carbon/human/H = target - //if(H.mind ) - spawn_guardian(H,user.key) - //else - // user << "Target has no mind. Aborting." - else - return - - /obj/item/weapon/paper/guardian name = "Holoparasite Guide" icon_state = "paper" @@ -885,4 +854,4 @@ /obj/screen/guardian/ToggleLight/Click() if(isguardian(usr)) var/mob/living/simple_animal/hostile/guardian/G = usr - G.ToggleLight() + G.ToggleLight() \ No newline at end of file From 9809a5fc1bf5d520a5a734fc2f027a7fe78c4d8b Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Thu, 3 Dec 2015 23:46:10 -0800 Subject: [PATCH 10/14] Lots of cool fixes! Read below! - Radio MMIs can now talk on the radio like a regular person does - Same for MMIs in mechs - A posibrain in a mecha doesn't lose its ability to hear binary chat - Mechs now consume power when moving again - Disassembling mecha wreckage now doesn't have a bunch of annoying "hit by" messages - MMIs in someone's grasp no longer cause a rigsuit-related runtime --- code/game/mecha/mecha.dm | 5 ++- code/game/mecha/mecha_wreckage.dm | 36 ++++++++--------- code/modules/clothing/spacesuits/rig/rig.dm | 5 ++- code/modules/mob/living/carbon/brain/MMI.dm | 13 +------ code/modules/mob/living/carbon/brain/brain.dm | 28 ++++++++++++- code/modules/mob/living/carbon/brain/say.dm | 39 ++++++++++++------- 6 files changed, 75 insertions(+), 51 deletions(-) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 045e5498ca3..75a94859983 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -323,6 +323,7 @@ move_result = mechstep(direction) if(move_result) can_move = 0 + use_power(step_energy_drain) if(mecha_do_after(step_in)) can_move = 1 return 1 @@ -803,7 +804,7 @@ go_out() return - + else if(istype(W, /obj/item/stack/cable_coil)) if(state == 3 && hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) var/obj/item/stack/cable_coil/CC = W @@ -1250,7 +1251,7 @@ return 0 if(!user.unEquip(mmi_as_oc)) user << "\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]" - return + return 0 var/mob/brainmob = mmi_as_oc.brainmob brainmob.reset_view(src) /* diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 7adc9592d03..8287db928f1 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -35,29 +35,28 @@ var/obj/item/weapon/weldingtool/WT = W if(salvage_num <= 0) user.visible_message("[user] begins to slice apart the now completely stripped [src].", "You begin to slice apart the [src].", "You hear the sound of a welder nearby.") - if(do_after(user,80,target=src)) + if(WT.remove_fuel(0,user) && do_after(user,80,target=src)) user.visible_message("The now-dilapidated [src] falls apart in a clatter.", "As you slice apart the final support structures, the [src] falls apart in a heap.", "You hear metal clanking to the floor.") new /obj/item/stack/sheet/metal(src.loc) var/obj/item/stack/rods/rods = new /obj/item/stack/rods(src.loc) rods.amount = 2 qdel(src) - return - if (isemptylist(welder_salvage)) - user << "What's left on the [src] cannot be removed with a welder, besides the frame itself" - else if(WT.remove_fuel(0,user)) - var/type = prob(70)?pick(welder_salvage):null - if(type) - var/N = new type(get_turf(user)) - user.visible_message("[user] cuts [N] from [src]", "You cut [N] from [src]", "You hear a sound of welder nearby") - if(istype(N, /obj/item/mecha_parts/part)) - welder_salvage -= type - salvage_num-- - else - user << "You failed to salvage anything valuable from [src]." else - user << "\blue You need more welding fuel to complete this task." - return - if(istype(W, /obj/item/weapon/wirecutters)) + if (isemptylist(welder_salvage)) + user << "What's left on the [src] cannot be removed with a welder, besides the frame itself" + else if(WT.remove_fuel(0,user)) + var/type = prob(70)?pick(welder_salvage):null + if(type) + var/N = new type(get_turf(user)) + user.visible_message("[user] cuts [N] from [src]", "You cut [N] from [src]", "You hear a sound of welder nearby") + if(istype(N, /obj/item/mecha_parts/part)) + welder_salvage -= type + salvage_num-- + else + user << "You failed to salvage anything valuable from [src]." + else + user << "\blue You need more welding fuel to complete this task." + else if(istype(W, /obj/item/weapon/wirecutters)) if(salvage_num <= 0) user << "You don't see anything that can be cut with [W]." return @@ -69,14 +68,13 @@ salvage_num-- else user << "You failed to salvage anything valuable from [src]." - if(istype(W, /obj/item/weapon/crowbar)) + else if(istype(W, /obj/item/weapon/crowbar)) if(!isemptylist(crowbar_salvage)) var/obj/S = pick(crowbar_salvage) if(S) S.loc = get_turf(user) crowbar_salvage -= S user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].") - return else user << "You don't see anything that can be pried with [W]." else diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 3c315119555..114ad9d7b35 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -890,7 +890,10 @@ return src /mob/living/carbon/human/get_rig() - return back + if(istype(back,/obj/item/weapon/rig)) + return back + else + return null #undef ONLY_DEPLOY #undef ONLY_RETRACT diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 3160ff56cc3..5e6b142038c 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -55,6 +55,7 @@ if(brainmob) O.attack(brainmob, user)//Oh noooeeeee + // Brainmobs can take damage, but they can't actually die. Maybe should fix. return ..() @@ -111,18 +112,6 @@ radio.broadcasting = 1//So it's broadcasting from the start. verb//Allows the brain to toggle the radio functions. - Toggle_Broadcasting() - set name = "Toggle Broadcasting" - set desc = "Toggle broadcasting channel on or off." - set category = "MMI" - set src = usr.loc//In user location, or in MMI in this case. - set popup_menu = 0//Will not appear when right clicking. - - if(brainmob.stat)//Only the brainmob will trigger these so no further check is necessary. - brainmob << "Can't do that while incapacitated or dead." - - radio.broadcasting = radio.broadcasting==1 ? 0 : 1 - brainmob << "\blue Radio is [radio.broadcasting==1 ? "now" : "no longer"] broadcasting." Toggle_Listening() set name = "Toggle Listening" diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 61879d81f52..4e9e7c4c63d 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -64,10 +64,34 @@ /mob/living/carbon/brain/blob_act() return - /mob/living/carbon/brain/on_forcemove(atom/newloc) if(container) container.loc = newloc else //something went very wrong. CRASH("Brainmob without container.") - loc = container \ No newline at end of file + loc = container + +/* +This will return true if the brain has a container that leaves it less helpless than a naked brain + +I'm using this for Stat to give it a more nifty interface to work with +*/ +/mob/living/carbon/brain/proc/has_synthetic_assistance() + return (container && istype(container, /obj/item/device/mmi)) || in_contents_of(/obj/mecha) + +/mob/living/carbon/brain/Stat() + ..() + if(has_synthetic_assistance()) + statpanel("Status") + stat(null, "Station Time: [worldtime2text()]") + + if(emergency_shuttle) + var/eta_status = emergency_shuttle.get_status_panel_eta() + if(eta_status) + stat(null, eta_status) + if(client.statpanel == "Status") + //Knowing how well-off your mech is doing is really important as an MMI + if(istype(src.loc, /obj/mecha)) + var/obj/mecha/M = src.loc + stat("Exosuit Charge:", "[istype(M.cell) ? "[M.cell.charge] / [M.cell.maxcharge]" : "No cell detected"]") + stat("Exosuit Integrity", "[!M.health ? "0" : "[(M.health / initial(M.health)) * 100]"]%") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm index 083ce847a52..f2f2c1b15c3 100644 --- a/code/modules/mob/living/carbon/brain/say.dm +++ b/code/modules/mob/living/carbon/brain/say.dm @@ -12,26 +12,35 @@ else message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher - if(istype(container, /obj/item/device/mmi/radio_enabled)) - var/radio_MMI_message = message //split off so the MMI can get a trimmed message without fucking up living/say() - if(!speaking) - speaking = parse_language(message) - if(speaking) - radio_MMI_message = copytext(message, 2 + length(speaking.key)) - else - speaking = get_default_language() - - var/obj/item/device/mmi/radio_enabled/R = container - if(R.radio) - spawn(0) R.radio.hear_talk(src, trim(sanitize(radio_MMI_message)), say_quote(radio_MMI_message), speaking) - ..(message) /mob/living/carbon/brain/can_speak(var/datum/language/speaking) - if(speaking == all_languages["Robot Talk"] && istype(loc, /obj/item/device/mmi/posibrain)) //so posibrains can speak binary; less messy than adding the language + if(speaking == all_languages["Robot Talk"] && (container && istype(container, /obj/item/device/mmi/posibrain))) //so posibrains can speak binary; less messy than adding the language return 1 else return ..() /mob/living/carbon/brain/binarycheck() - return istype(loc, /obj/item/device/mmi/posibrain) \ No newline at end of file + return (container && istype(container, /obj/item/device/mmi/posibrain)) + +/mob/living/carbon/brain/handle_message_mode(var/message_mode, var/message, var/verb, var/speaking, var/used_radios, var/alt_name) + switch(message_mode) + if("headset") + var/radio_worked = 0 // If any of the radios our brainmob could use functioned, this is set true so that we don't use any others + // I'm doing it this way so that if the mecha radio fails for some reason, a radio MMI still has the built-in fallback + if (container && istype(container,/obj/item/device/mmi)) + var/obj/item/device/mmi/c = container + if (!radio_worked && c.mecha) + var/obj/mecha/metalgear = c.mecha + if(metalgear.radio) + radio_worked = metalgear.radio.talk_into(src, message, message_mode, verb, speaking) + + else if(!radio_worked && istype(c, /obj/item/device/mmi/radio_enabled)) + var/obj/item/device/mmi/radio_enabled/R = c + if(R.radio) + radio_worked = R.radio.talk_into(src, message, message_mode, verb, speaking) + return radio_worked + if ("whisper") + whisper_say(message, speaking, alt_name) + return 1 + else return 0 \ No newline at end of file From b26ed9a9503ab1d960d3f1c6a98557f81bee710c Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Fri, 4 Dec 2015 11:54:38 -0800 Subject: [PATCH 11/14] Testing out a new item declaration syntax Let me know what you think, I think this would work quite well for furniture disassembly --- code/game/mecha/mecha_wreckage.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 8287db928f1..d6a6aaf2824 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -38,8 +38,7 @@ if(WT.remove_fuel(0,user) && do_after(user,80,target=src)) user.visible_message("The now-dilapidated [src] falls apart in a clatter.", "As you slice apart the final support structures, the [src] falls apart in a heap.", "You hear metal clanking to the floor.") new /obj/item/stack/sheet/metal(src.loc) - var/obj/item/stack/rods/rods = new /obj/item/stack/rods(src.loc) - rods.amount = 2 + new /obj/item/stack/rods { amount = 2 } (src.loc) qdel(src) else if (isemptylist(welder_salvage)) From 78c187254d7df99cad6ed8e08b0c0a687f808823 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Fri, 4 Dec 2015 15:10:20 -0500 Subject: [PATCH 12/14] Fixes #2726 --- code/game/gamemodes/nations/nationsprocs.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/gamemodes/nations/nationsprocs.dm b/code/game/gamemodes/nations/nationsprocs.dm index ae9e5a19174..baf3e91ed29 100644 --- a/code/game/gamemodes/nations/nationsprocs.dm +++ b/code/game/gamemodes/nations/nationsprocs.dm @@ -9,6 +9,7 @@ if(!mode.kickoff) return 1 var/mob/living/carbon/human/H = src + if(H.stat==2) return if(H.mind && H.mind.nation && H.mind.nation.current_leader == H) var/input = stripped_input(H,"What do you want to name your nation?", ,"", MAX_NAME_LEN) @@ -31,6 +32,7 @@ if(!mode.kickoff) return 1 var/mob/living/carbon/human/H = src + if(H.stat==2) return if(H.mind && H.mind.nation && H.mind.nation.current_leader == H) var/type = input(H, "What rank do you want to change?", "Rename Rank", "") in list("Leader", "Heir", "Member") var/input = stripped_input(H,"What rank do you want?", ,"", MAX_NAME_LEN) @@ -56,6 +58,7 @@ if(!mode.kickoff) return 1 var/mob/living/carbon/human/H = src + if(H.stat==2) return if(H.mind && H.mind.nation && H.mind.nation.current_leader == H) var/heir = input(H, "Who do you wish to make your heir?", "Choose Heir", "") as null|anything in H.mind.nation.membership if(heir) @@ -82,6 +85,7 @@ if(!mode.kickoff) return 1 var/mob/living/carbon/human/H = src + if(H.stat==2) return if(H.mind && H.mind.nation && H.mind.nation.heir == H) var/confirmation = input(H, "Are you sure you want to take over leadership?", "Become Leader", "") as null|anything in list("Yes", "No") if(confirmation == "Yes") From 6d44983a3e19fc7b75e2b4e25500a025fd15214e Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Fri, 4 Dec 2015 12:52:31 -0800 Subject: [PATCH 13/14] Revert "Testing out a new item declaration syntax" This reverts commit b26ed9a9503ab1d960d3f1c6a98557f81bee710c. --- code/game/mecha/mecha_wreckage.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index d6a6aaf2824..8287db928f1 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -38,7 +38,8 @@ if(WT.remove_fuel(0,user) && do_after(user,80,target=src)) user.visible_message("The now-dilapidated [src] falls apart in a clatter.", "As you slice apart the final support structures, the [src] falls apart in a heap.", "You hear metal clanking to the floor.") new /obj/item/stack/sheet/metal(src.loc) - new /obj/item/stack/rods { amount = 2 } (src.loc) + var/obj/item/stack/rods/rods = new /obj/item/stack/rods(src.loc) + rods.amount = 2 qdel(src) else if (isemptylist(welder_salvage)) From f7bb7600ac46001a15f21746c181bde1b98e409f Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Fri, 4 Dec 2015 15:57:05 -0500 Subject: [PATCH 14/14] Renamed 2 to DEAD --- code/game/gamemodes/nations/nationsprocs.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/nations/nationsprocs.dm b/code/game/gamemodes/nations/nationsprocs.dm index baf3e91ed29..66cd66cab3b 100644 --- a/code/game/gamemodes/nations/nationsprocs.dm +++ b/code/game/gamemodes/nations/nationsprocs.dm @@ -9,7 +9,7 @@ if(!mode.kickoff) return 1 var/mob/living/carbon/human/H = src - if(H.stat==2) return + if(H.stat==DEAD) return if(H.mind && H.mind.nation && H.mind.nation.current_leader == H) var/input = stripped_input(H,"What do you want to name your nation?", ,"", MAX_NAME_LEN) @@ -32,7 +32,7 @@ if(!mode.kickoff) return 1 var/mob/living/carbon/human/H = src - if(H.stat==2) return + if(H.stat==DEAD) return if(H.mind && H.mind.nation && H.mind.nation.current_leader == H) var/type = input(H, "What rank do you want to change?", "Rename Rank", "") in list("Leader", "Heir", "Member") var/input = stripped_input(H,"What rank do you want?", ,"", MAX_NAME_LEN) @@ -58,7 +58,7 @@ if(!mode.kickoff) return 1 var/mob/living/carbon/human/H = src - if(H.stat==2) return + if(H.stat==DEAD) return if(H.mind && H.mind.nation && H.mind.nation.current_leader == H) var/heir = input(H, "Who do you wish to make your heir?", "Choose Heir", "") as null|anything in H.mind.nation.membership if(heir) @@ -85,7 +85,7 @@ if(!mode.kickoff) return 1 var/mob/living/carbon/human/H = src - if(H.stat==2) return + if(H.stat==DEAD) return if(H.mind && H.mind.nation && H.mind.nation.heir == H) var/confirmation = input(H, "Are you sure you want to take over leadership?", "Become Leader", "") as null|anything in list("Yes", "No") if(confirmation == "Yes")