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