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..66cd66cab3b 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==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)
@@ -31,17 +32,18 @@
if(!mode.kickoff) return 1
var/mob/living/carbon/human/H = src
+ 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","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
@@ -56,6 +58,7 @@
if(!mode.kickoff) return 1
var/mob/living/carbon/human/H = src
+ 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)
@@ -68,6 +71,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()
@@ -81,6 +85,7 @@
if(!mode.kickoff) return 1
var/mob/living/carbon/human/H = src
+ 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")
@@ -106,6 +111,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]"
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 4133d8eb014..b9d19239284 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
@@ -794,7 +795,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
@@ -1241,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)
/*
@@ -1265,6 +1275,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..8287db928f1 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -34,22 +34,29 @@
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]."
- return
- if (!isemptylist(welder_salvage) && 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]."
+ 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(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)
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
@@ -61,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/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/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/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index f86c3e2d6c2..d410bf2fd97 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_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/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 -= plasglassout.amount
+ unload_mineral(plasglassout)
+ else
+ usr << "Required access not found."
updateUsrDialog()
return
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index c9fe5410abf..5e6b142038c 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 ))
@@ -54,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
..()
@@ -110,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 608f9b4a8e7..4e9e7c4c63d 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
@@ -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/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
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
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 06bd83ed96f..842ff2262a9 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) as null|anything in modules
@@ -299,12 +301,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)
@@ -315,6 +318,7 @@ var/list/robot_verbs_default = list(
modtype = "Xeno-Hu"
feedback_inc("xeborg_hunter",1)
+
//languages
module.add_languages(src)
//subsystems
@@ -328,7 +332,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)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 8837919167a..5acf61d6813 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
@@ -41,21 +41,12 @@
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
..()
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,18 +97,16 @@
/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()
if(cooldown > world.time)
return
+ if(!summoner) return
if(loc == summoner)
loc = get_turf(summoner)
src.client.eye = loc
@@ -131,6 +120,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
@@ -271,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"
@@ -318,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()
@@ -353,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."
@@ -361,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."
@@ -602,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)
@@ -632,8 +641,6 @@
var/gaurdiantype = "Standard"
if(random)
gaurdiantype = pick(possible_guardians)
- if(adminseal)
- 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
@@ -646,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
@@ -669,9 +670,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
- if(!adminseal)
- user.verbs += /mob/living/proc/guardian_recall
- user.verbs += /mob/living/proc/guardian_reset
+ user.verbs += /mob/living/proc/guardian_recall
+ user.verbs += /mob/living/proc/guardian_reset
switch (theme)
if("magic")
G.name = "[mob_name]"
@@ -696,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
@@ -740,34 +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 += getmobs() //Fill list, prompt user with list
- target = input("Select a Player to guard!", "Player list", null, null) as null|anything in targets
-
- if(!target) return
- var/mob/living/carbon/human/H = target
- if(H.mind )
- spawn_guardian(H,user.key)
- else
- user << "Target has no mind. Aborting."
-
-
/obj/item/weapon/paper/guardian
name = "Holoparasite Guide"
icon_state = "paper"
@@ -892,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
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index 0e067d1e6f2..578e722986d 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ