mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-19 20:06:28 +01:00
Ghostrap update and minor fixes (#2019)
-moves skeleton minions,wizard familiars and syndicate borgs to the ghost trap system -allow syndicate command and deathsquid to deploy their suit fully when equipped -fix some wrong hardsuit modules names in rd -fix immortal skeletons being able to spam immortality -removes the alien death proc -fix items not dropping when hands, feet or heads are cut off -removes the paint from cargo spam
This commit is contained in:
@@ -29,13 +29,10 @@ var/datum/antagonist/deathsquad/mercenary/commandos
|
||||
under.attackby(hold, player)
|
||||
|
||||
player.equip_to_slot_or_del(under, slot_w_uniform)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(player), slot_shoes)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(player), slot_gloves)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(player), slot_glasses)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(player), slot_wear_mask)
|
||||
player.equip_to_slot_or_del(new /obj/item/ammo_magazine/c45m(player), slot_l_store)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(player), slot_r_store)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/rig/merc(player), slot_back)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/rifle/sts35(player), slot_l_hand)
|
||||
|
||||
var/obj/item/weapon/storage/belt/military/syndie_belt = new(player)
|
||||
@@ -49,6 +46,25 @@ var/datum/antagonist/deathsquad/mercenary/commandos
|
||||
syndie_belt.contents += new /obj/item/weapon/grenade/frag
|
||||
syndie_belt.contents += new /obj/item/weapon/plastique
|
||||
player.equip_to_slot_or_del(syndie_belt, slot_belt)
|
||||
|
||||
var/obj/item/weapon/rig/merc/mercrig = new(get_turf(player))
|
||||
mercrig.seal_delay = 0
|
||||
player.put_in_hands(mercrig)
|
||||
player.equip_to_slot_or_del(mercrig,slot_back)
|
||||
if(mercrig)
|
||||
mercrig.toggle_seals(src,1)
|
||||
mercrig.seal_delay = initial(mercrig.seal_delay)
|
||||
|
||||
if(istype(player.back,/obj/item/weapon/rig))
|
||||
var/obj/item/weapon/rig/rig = player.back
|
||||
if(rig.air_supply)
|
||||
player.internal = rig.air_supply
|
||||
|
||||
spawn(10)
|
||||
if(player.internal)
|
||||
player.internals.icon_state = "internal1"
|
||||
else
|
||||
player << "<span class='danger'>You forgot to turn on your internals! Quickly, toggle the valve!</span>"
|
||||
|
||||
var/obj/item/weapon/card/id/id = create_id("Commando", player)
|
||||
id.access |= get_all_accesses()
|
||||
|
||||
@@ -39,9 +39,7 @@ var/datum/antagonist/deathsquad/deathsquad
|
||||
under.attackby(hold, player)
|
||||
|
||||
player.equip_to_slot_or_del(under, slot_w_uniform)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(player), slot_shoes)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(player), slot_gloves)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(player), slot_glasses)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/tactical(player), slot_glasses)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(player), slot_wear_mask)
|
||||
player.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert(player), slot_l_ear)
|
||||
if (player.mind == leader)
|
||||
@@ -51,7 +49,6 @@ var/datum/antagonist/deathsquad/deathsquad
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/plastique(player), slot_l_store)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(player), slot_r_store)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/rifle/pulse(player), slot_l_hand)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/rig/ert/assetprotection(player), slot_back)
|
||||
|
||||
var/obj/item/weapon/storage/belt/security/tactical/commando_belt = new(player)
|
||||
commando_belt.contents += new /obj/item/ammo_magazine/a357
|
||||
@@ -65,6 +62,25 @@ var/datum/antagonist/deathsquad/deathsquad
|
||||
commando_belt.contents += new /obj/item/weapon/grenade/frag
|
||||
player.equip_to_slot_or_del(commando_belt, slot_belt)
|
||||
|
||||
var/obj/item/weapon/rig/ert/assetprotection/mercrig = new(get_turf(player))
|
||||
mercrig.seal_delay = 0
|
||||
player.put_in_hands(mercrig)
|
||||
player.equip_to_slot_or_del(mercrig,slot_back)
|
||||
if(mercrig)
|
||||
mercrig.toggle_seals(src,1)
|
||||
mercrig.seal_delay = initial(mercrig.seal_delay)
|
||||
|
||||
if(istype(player.back,/obj/item/weapon/rig))
|
||||
var/obj/item/weapon/rig/rig = player.back
|
||||
if(rig.air_supply)
|
||||
player.internal = rig.air_supply
|
||||
|
||||
spawn(10)
|
||||
if(player.internal)
|
||||
player.internals.icon_state = "internal1"
|
||||
else
|
||||
player << "<span class='danger'>You forgot to turn on your internals! Quickly, toggle the valve!</span>"
|
||||
|
||||
var/obj/item/weapon/card/id/id = create_id("Asset Protection", player)
|
||||
if(id)
|
||||
id.access |= get_all_station_access()
|
||||
|
||||
@@ -10,10 +10,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 1.0
|
||||
var/used = 0
|
||||
|
||||
/obj/item/weapon/antag_spawner/proc/spawn_antag(var/client/C, var/turf/T, var/type = "")
|
||||
return
|
||||
var/uses = 1
|
||||
|
||||
/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target as mob)
|
||||
return
|
||||
@@ -23,56 +20,24 @@
|
||||
desc = "A single-use teleporter used to deploy a Syndicate Cyborg on the field. Due to budget restrictions, it is only possible to deploy a single cyborg at time."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "locator"
|
||||
var/searching = 0
|
||||
var/askDelay = 10 * 60 * 1
|
||||
|
||||
/obj/item/weapon/antag_spawner/borg_tele/attack_self(mob/user)
|
||||
|
||||
if(uses == 0)
|
||||
usr << "This teleporter is out of uses."
|
||||
return
|
||||
|
||||
user << "<span class='notice'>The syndicate robot teleporter is attempting to locate an available cyborg.</span>"
|
||||
searching = 1
|
||||
for(var/mob/dead/observer/O in player_list)
|
||||
if(!O.MayRespawn())
|
||||
continue
|
||||
if(jobban_isbanned(O, "Antagonist") && jobban_isbanned(O, "Mercenary") && jobban_isbanned(O, "Cyborg"))
|
||||
continue
|
||||
if(O.client && O.client.prefs && (MODE_MERCENARY in O.client.prefs.be_special_role))
|
||||
question(O.client)
|
||||
|
||||
var/datum/ghosttrap/ghost = get_ghost_trap("syndicate cyborg")
|
||||
uses--
|
||||
|
||||
var/mob/living/silicon/robot/syndicate/F = new(get_turf(usr))
|
||||
spark(F, 4, alldirs)
|
||||
ghost.request_player(F,"An operative is requesting a syndicate cyborg.", 60 SECONDS)
|
||||
F.faction = usr.faction
|
||||
spawn(600)
|
||||
searching = 0
|
||||
if(!used)
|
||||
user << "<span class='warning'>Unable to connect to the Syndicate Command. Perhaps you could try again later?</span>"
|
||||
|
||||
|
||||
/obj/item/weapon/antag_spawner/borg_tele/proc/question(var/client/C)
|
||||
spawn(0)
|
||||
if(!C)
|
||||
return
|
||||
var/response = alert(C, "Someone is requesting a syndicate cyborg Would you like to play as one?",
|
||||
"Syndicate robot request","Yes", "No", "Never for this round")
|
||||
if(response == "Yes")
|
||||
response = alert(C, "Are you sure you want to play as a syndicate cyborg?", "Syndicate cyborg request", "Yes", "No")
|
||||
if(!C || used || !searching)
|
||||
return
|
||||
if(response == "Yes")
|
||||
spawn_antag(C, get_turf(src))
|
||||
else if (response == "Never for this round")
|
||||
C.prefs.be_special_role ^= MODE_MERCENARY
|
||||
|
||||
obj/item/weapon/antag_spawner/borg_tele/spawn_antag(client/C, turf/T)
|
||||
spark(T, 4, alldirs)
|
||||
var/mob/living/silicon/robot/H = new /mob/living/silicon/robot/syndicate(T)
|
||||
H.key = C.key
|
||||
var/newname = sanitizeSafe(input(H,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN)
|
||||
if (newname != "")
|
||||
H.real_name = newname
|
||||
H.name = H.real_name
|
||||
H << "<b>You are a syndicate cyborg, bound to help and follow the orders of the mercenaries that are deploying you. Remember to speak to the other mercenaries to know more about their plans, you are also able to change your name using the name pick command.</b>"
|
||||
|
||||
spawn(1)
|
||||
used = 1
|
||||
qdel(src)
|
||||
H << "<b>You are a syndicate cyborg, bound to help and follow the orders of the mercenaries that are deploying you. Remember to speak to the other mercenaries to know more about their plans, you are also able to change your name using the name pick command.</b>"
|
||||
|
||||
spawn(1)
|
||||
used = 1
|
||||
qdel(src)
|
||||
if(F)
|
||||
if(!F.ckey || !F.client)
|
||||
F.visible_message("With no working brain to keep \the [F] working, it is teleported back.")
|
||||
qdel(F)
|
||||
uses++
|
||||
|
||||
@@ -44,13 +44,13 @@
|
||||
user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."
|
||||
if (!(HULK in user.mutations))
|
||||
user.mutations.Add(HULK)
|
||||
user << "\blue Your muscles hurt."
|
||||
user << "<span class='notice'>Your muscles hurt.</span>"
|
||||
if (!(LASER in user.mutations))
|
||||
user.mutations.Add(LASER)
|
||||
user << "\blue You feel pressure building behind your eyes."
|
||||
user << "<span class='notice'>You feel pressure building behind your eyes.</span>"
|
||||
if (!(COLD_RESISTANCE in user.mutations))
|
||||
user.mutations.Add(COLD_RESISTANCE)
|
||||
user << "\blue Your body feels warm."
|
||||
user << "<span class='notice'>Your body feels warm.</span>"
|
||||
if (!(TK in user.mutations))
|
||||
user.mutations.Add(TK)
|
||||
if(!(HEAL in user.mutations))
|
||||
@@ -59,7 +59,7 @@
|
||||
user.mutations.Add(XRAY)
|
||||
user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
|
||||
user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
user << "\blue The walls suddenly disappear."
|
||||
user << "<span class='notice'>The walls suddenly disappear.</span>"
|
||||
user.set_species("Shadow")
|
||||
user.mind.special_role = "Avatar of the Wish Granter"
|
||||
if("I want to be rich")
|
||||
@@ -80,7 +80,7 @@
|
||||
user.mind.special_role = "Avatar of the Wish Granter"
|
||||
user.hallucination += 10
|
||||
user.adjustBrainLoss(30)
|
||||
user.show_message("<b>[user]</b> screams!")
|
||||
user.emote("screams!")
|
||||
playsound(user, 'sound/hallucinations/wail.ogg', 40, 1)
|
||||
sleep(30)
|
||||
user << "<span class='warning'>Your mind is assaulted by endless horrors, your only desire is to end it, you must fulfill the Wish Granter's desires!</span>"
|
||||
@@ -114,6 +114,7 @@
|
||||
C << "<span class='notice'>You're not dead yet!</span>"
|
||||
return
|
||||
C << "<span class='notice'>Death is not your end!</span>"
|
||||
C.verbs -= /mob/living/carbon/proc/immortality
|
||||
|
||||
spawn(rand(400,800))
|
||||
if(C.stat == DEAD)
|
||||
@@ -125,4 +126,5 @@
|
||||
C << "<span class='notice'>You have regenerated.</span>"
|
||||
C.visible_message("<span class='warning'>[usr] appears to wake from the dead, having healed all wounds.</span>")
|
||||
C.update_canmove()
|
||||
C.verbs += /mob/living/carbon/proc/immortality
|
||||
return 1
|
||||
|
||||
@@ -134,7 +134,6 @@ var/list/global/random_stock_common = list(
|
||||
"paicard" = 2,
|
||||
"phoronsheets" = 2,
|
||||
"hide" = 1,
|
||||
"paint" = 0.5,
|
||||
"nothing" = 0)
|
||||
|
||||
var/list/global/random_stock_uncommon = list(
|
||||
@@ -989,18 +988,6 @@ var/list/global/random_stock_large = list(
|
||||
if ("hide")
|
||||
new /obj/item/stack/material/animalhide(L, rand(5,50))
|
||||
|
||||
if ("paint")
|
||||
var/list/paints = list(
|
||||
/obj/item/weapon/reagent_containers/glass/paint/red,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/yellow,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/green,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/blue,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/purple,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/black,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/white
|
||||
)
|
||||
var/type = pick(paints)
|
||||
new type(L)
|
||||
|
||||
//Uncommon items below here
|
||||
//=============================================================
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
/datum/gear/ears/m_skrell/New()
|
||||
..()
|
||||
var/m_chains = list()
|
||||
m_chains["headtail bands"] = /obj/item/clothing/ears/skrell/chain
|
||||
m_chains["headtail bands"] = /obj/item/clothing/ears/skrell/band
|
||||
m_chains["headtail cloth"] = /obj/item/clothing/ears/skrell/cloth_male
|
||||
m_chains["red-jeweled bands"] = /obj/item/clothing/ears/skrell/redjeweled_band
|
||||
m_chains["ebony bands"] = /obj/item/clothing/ears/skrell/ebony_band
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
reagents.splash(A, 1) //get a small amount of liquid on the thing we're wiping.
|
||||
update_name()
|
||||
if(do_after(user,30))
|
||||
user.visible_message("\The [user] finishes wiping off the [A]!")
|
||||
user.visible_message("\The [user] finishes wiping off \the [A]!")
|
||||
A.clean_blood()
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag)
|
||||
|
||||
@@ -190,7 +190,7 @@ datum/ghosttrap/drone/transfer_personality(var/mob/candidate, var/mob/living/sil
|
||||
/***********************************
|
||||
* Syndicate Cyborg *
|
||||
***********************************/
|
||||
/*
|
||||
|
||||
/datum/ghosttrap/syndicateborg
|
||||
object = "syndicate cyborg"
|
||||
ban_checks = list("Antagonist","AI","Cyborg")
|
||||
@@ -198,7 +198,9 @@ datum/ghosttrap/drone/transfer_personality(var/mob/candidate, var/mob/living/sil
|
||||
ghost_trap_message = "They are occupying a syndicate cyborg now."
|
||||
ghost_trap_role = "Syndicate Cyborg"
|
||||
can_set_own_name = TRUE
|
||||
*/
|
||||
|
||||
/datum/ghosttrap/syndicateborg/welcome_candidate(var/mob/target)
|
||||
target << "<span class='notice'><B>You are a syndicate cyborg, bound to help and follow the orders of the mercenaries that are deploying you. Remember to speak to the other mercenaries to know more about their plans</B></span>"
|
||||
|
||||
/**************
|
||||
* pAI *
|
||||
@@ -214,3 +216,32 @@ datum/ghosttrap/pai/assess_candidate(var/mob/observer/ghost/candidate, var/mob/t
|
||||
|
||||
datum/ghosttrap/pai/transfer_personality(var/mob/candidate, var/mob/living/silicon/robot/drone/drone)
|
||||
return 0
|
||||
|
||||
/**************
|
||||
* Wizard Familiar *
|
||||
**************/
|
||||
|
||||
/datum/ghosttrap/familiar
|
||||
object = "wizard familiar"
|
||||
pref_check = MODE_WIZARD
|
||||
ghost_trap_message = "They are occupying a familiar now."
|
||||
ghost_trap_role = "Wizard Familiar"
|
||||
ban_checks = list(MODE_WIZARD)
|
||||
|
||||
/datum/ghosttrap/familiar/welcome_candidate(var/mob/target)
|
||||
return 0
|
||||
|
||||
/**************
|
||||
* Skeleton minion *
|
||||
**************/
|
||||
|
||||
/datum/ghosttrap/skeleton
|
||||
object = "skeleton minion"
|
||||
pref_check = MODE_WIZARD
|
||||
ghost_trap_message = "They are occupying a skeleton minion."
|
||||
ghost_trap_role = "Skeleton Minion"
|
||||
ban_checks = list(MODE_WIZARD)
|
||||
can_set_own_name = FALSE
|
||||
|
||||
/datum/ghosttrap/skeleton/welcome_candidate(var/mob/target)
|
||||
return 0
|
||||
|
||||
@@ -90,11 +90,6 @@
|
||||
damage = 30
|
||||
icon_state = "toxin"
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/death()
|
||||
..()
|
||||
visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...")
|
||||
playsound(src, 'sound/voice/hiss6.ogg', 100, 1)
|
||||
|
||||
// Xenoarch aliens.
|
||||
/mob/living/simple_animal/hostile/samak
|
||||
name = "samak"
|
||||
|
||||
@@ -1122,171 +1122,3 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if(6 to INFINITY)
|
||||
flavor_text += "a ton of [wound]\s"
|
||||
return english_list(flavor_text)
|
||||
|
||||
/****************************************************
|
||||
ORGAN DEFINES
|
||||
****************************************************/
|
||||
|
||||
/obj/item/organ/external/chest
|
||||
name = "upper body"
|
||||
limb_name = "chest"
|
||||
icon_name = "torso"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
w_class = 5
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
amputation_point = "spine"
|
||||
joint = "neck"
|
||||
dislocated = -1
|
||||
gendered_icon = 1
|
||||
cannot_amputate = 1
|
||||
parent_organ = null
|
||||
encased = "ribcage"
|
||||
|
||||
/obj/item/organ/external/groin
|
||||
name = "lower body"
|
||||
limb_name = "groin"
|
||||
icon_name = "groin"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
w_class = 5
|
||||
body_part = LOWER_TORSO
|
||||
vital = 1
|
||||
parent_organ = "chest"
|
||||
amputation_point = "lumbar"
|
||||
joint = "hip"
|
||||
dislocated = -1
|
||||
gendered_icon = 1
|
||||
|
||||
/obj/item/organ/external/arm
|
||||
limb_name = "l_arm"
|
||||
name = "left arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 50
|
||||
min_broken_damage = 30
|
||||
w_class = 3
|
||||
body_part = ARM_LEFT
|
||||
parent_organ = "chest"
|
||||
joint = "left elbow"
|
||||
amputation_point = "left shoulder"
|
||||
can_grasp = 1
|
||||
|
||||
/obj/item/organ/external/arm/right
|
||||
limb_name = "r_arm"
|
||||
name = "right arm"
|
||||
icon_name = "r_arm"
|
||||
body_part = ARM_RIGHT
|
||||
joint = "right elbow"
|
||||
amputation_point = "right shoulder"
|
||||
|
||||
/obj/item/organ/external/leg
|
||||
limb_name = "l_leg"
|
||||
name = "left leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 50
|
||||
min_broken_damage = 30
|
||||
w_class = 3
|
||||
body_part = LEG_LEFT
|
||||
icon_position = LEFT
|
||||
parent_organ = "groin"
|
||||
joint = "left knee"
|
||||
amputation_point = "left hip"
|
||||
can_stand = 1
|
||||
|
||||
/obj/item/organ/external/leg/right
|
||||
limb_name = "r_leg"
|
||||
name = "right leg"
|
||||
icon_name = "r_leg"
|
||||
body_part = LEG_RIGHT
|
||||
icon_position = RIGHT
|
||||
joint = "right knee"
|
||||
amputation_point = "right hip"
|
||||
|
||||
/obj/item/organ/external/foot
|
||||
limb_name = "l_foot"
|
||||
name = "left foot"
|
||||
icon_name = "l_foot"
|
||||
min_broken_damage = 15
|
||||
w_class = 2
|
||||
body_part = FOOT_LEFT
|
||||
icon_position = LEFT
|
||||
parent_organ = "l_leg"
|
||||
joint = "left ankle"
|
||||
amputation_point = "left ankle"
|
||||
can_stand = 1
|
||||
|
||||
/obj/item/organ/external/foot/removed()
|
||||
if(owner) owner.u_equip(owner.shoes)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/right
|
||||
limb_name = "r_foot"
|
||||
name = "right foot"
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
icon_position = RIGHT
|
||||
parent_organ = "r_leg"
|
||||
joint = "right ankle"
|
||||
amputation_point = "right ankle"
|
||||
|
||||
/obj/item/organ/external/hand
|
||||
limb_name = "l_hand"
|
||||
name = "left hand"
|
||||
icon_name = "l_hand"
|
||||
min_broken_damage = 15
|
||||
w_class = 2
|
||||
body_part = HAND_LEFT
|
||||
parent_organ = "l_arm"
|
||||
joint = "left wrist"
|
||||
amputation_point = "left wrist"
|
||||
can_grasp = 1
|
||||
|
||||
/obj/item/organ/external/hand/removed()
|
||||
owner.u_equip(owner.gloves)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
limb_name = "r_hand"
|
||||
name = "right hand"
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
parent_organ = "r_arm"
|
||||
joint = "right wrist"
|
||||
amputation_point = "right wrist"
|
||||
|
||||
/obj/item/organ/external/head
|
||||
limb_name = "head"
|
||||
icon_name = "head"
|
||||
name = "head"
|
||||
max_damage = 75
|
||||
min_broken_damage = 35
|
||||
w_class = 3
|
||||
body_part = HEAD
|
||||
vital = 1
|
||||
parent_organ = "chest"
|
||||
joint = "jaw"
|
||||
amputation_point = "neck"
|
||||
gendered_icon = 1
|
||||
encased = "skull"
|
||||
|
||||
/obj/item/organ/external/head/removed()
|
||||
if(owner)
|
||||
name = "[owner.real_name]'s head"
|
||||
owner.u_equip(owner.glasses)
|
||||
owner.u_equip(owner.head)
|
||||
owner.u_equip(owner.l_ear)
|
||||
owner.u_equip(owner.r_ear)
|
||||
owner.u_equip(owner.wear_mask)
|
||||
spawn(1)
|
||||
owner.update_hair()
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
|
||||
..(brute, burn, sharp, edge, used_weapon, forbidden_limbs)
|
||||
if (!disfigured)
|
||||
if (brute_dam > 40)
|
||||
if (prob(50))
|
||||
disfigure("brute")
|
||||
if (burn_dam > 40)
|
||||
disfigure("burn")
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
can_stand = 1
|
||||
|
||||
/obj/item/organ/external/foot/removed()
|
||||
if(owner) owner.u_equip(owner.shoes)
|
||||
if(owner) owner.drop_from_inventory(owner.shoes)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/right
|
||||
@@ -120,7 +120,7 @@
|
||||
can_grasp = 1
|
||||
|
||||
/obj/item/organ/external/hand/removed()
|
||||
owner.u_equip(owner.gloves)
|
||||
owner.drop_from_inventory(owner.gloves)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
@@ -151,11 +151,11 @@
|
||||
/obj/item/organ/external/head/removed()
|
||||
if(owner)
|
||||
name = "[owner.real_name]'s head"
|
||||
owner.u_equip(owner.glasses)
|
||||
owner.u_equip(owner.head)
|
||||
owner.u_equip(owner.l_ear)
|
||||
owner.u_equip(owner.r_ear)
|
||||
owner.u_equip(owner.wear_mask)
|
||||
owner.drop_from_inventory(owner.glasses)
|
||||
owner.drop_from_inventory(owner.head)
|
||||
owner.drop_from_inventory(owner.l_ear)
|
||||
owner.drop_from_inventory(owner.r_ear)
|
||||
owner.drop_from_inventory(owner.wear_mask)
|
||||
spawn(1)
|
||||
owner.update_hair()
|
||||
..()
|
||||
|
||||
@@ -650,7 +650,7 @@
|
||||
build_path = /obj/item/rig_module/vision/meson
|
||||
|
||||
/datum/design/hardsuitmodules/sechud_module
|
||||
name = "hardsuit meson scanner"
|
||||
name = "hardsuit security hud"
|
||||
desc = "A simple tactical information system for a hardsuit."
|
||||
id = "sechud_module"
|
||||
req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 2, TECH_MAGNET = 3)
|
||||
@@ -674,7 +674,7 @@
|
||||
build_path = /obj/item/rig_module/vision/nvg
|
||||
|
||||
/datum/design/hardsuitmodules/healthscanner_module
|
||||
name = "hardsuit night vision interface"
|
||||
name = "hardsuit health scanner"
|
||||
desc = "A hardsuit-mounted health scanner."
|
||||
id = "healthscanner_module"
|
||||
req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 3, TECH_MAGNET = 2)
|
||||
@@ -730,9 +730,9 @@
|
||||
build_path = /obj/item/rig_module/mounted/taser
|
||||
|
||||
/datum/design/hardsuitmodules/egun_module
|
||||
name = "mounted taser"
|
||||
name = "mounted energy gun"
|
||||
desc = "A forearm-mounted energy projector."
|
||||
id = "egun_module"
|
||||
req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 4, TECH_COMBAT = 4, TECH_MAGNET = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL= 7000, "glass"= 2250, "uranium"= 3250, "gold"= 2500)
|
||||
build_path = /obj/item/rig_module/mounted/egun
|
||||
build_path = /obj/item/rig_module/mounted/egun
|
||||
|
||||
@@ -59,39 +59,33 @@
|
||||
if(uses == 0)
|
||||
usr << "This book is out of uses."
|
||||
return
|
||||
var/client/C = get_player()
|
||||
if(!C)
|
||||
usr << "There are no souls willing to become a familiar."
|
||||
return
|
||||
|
||||
var/datum/ghosttrap/ghost = get_ghost_trap("wizard familiar")
|
||||
var path = text2path(href_list["path"])
|
||||
if(!ispath(path))
|
||||
usr << "Invalid mob path in [src]. Contact a coder."
|
||||
return
|
||||
|
||||
if(!(path in monster))
|
||||
return
|
||||
|
||||
var/mob/living/simple_animal/familiar/F = new path(get_turf(src))
|
||||
F.ckey = C.ckey
|
||||
F.faction = usr.faction
|
||||
F.add_spell(new /spell/contract/return_master(usr),"const_spell_ready")
|
||||
if(C.mob && C.mob.mind)
|
||||
C.mob.mind.transfer_to(F)
|
||||
F << "<B>You are [F], a familiar to [usr]. He is your master and your friend. Aid him in his wizarding duties to the best of your ability.</B>"
|
||||
var/newname = input(F,"Please choose a name. Leaving it blank or canceling will choose the default.", "Name",F.name) as null|text
|
||||
if(newname)
|
||||
F.name = newname
|
||||
temp = "You have summoned \the [F]"
|
||||
var/mob/living/simple_animal/F = new path(get_turf(src))
|
||||
temp = "You have attempted summoning \the [F]"
|
||||
ghost.request_player(F,"A wizard is requesting a familiar.", 60 SECONDS)
|
||||
uses--
|
||||
spawn(600)
|
||||
if(F)
|
||||
if(!F.ckey || !F.client)
|
||||
F.visible_message("With no soul to keep \the [F] linked to this plane, it fades away.")
|
||||
qdel(F)
|
||||
uses++
|
||||
else
|
||||
F.faction = usr.faction
|
||||
F.add_spell(new /spell/contract/return_master(usr), "const_spell_ready")
|
||||
F << "<B>You are [F], a familiar to [usr]. He is your master and your friend. Aid him in his wizarding duties to the best of your ability.</B>"
|
||||
|
||||
if(Adjacent(usr))
|
||||
src.interact(usr)
|
||||
|
||||
if(Adjacent(usr))
|
||||
src.interact(usr)
|
||||
else
|
||||
usr << browse(null,"window=monstermanual")
|
||||
|
||||
/obj/item/weapon/monster_manual/proc/get_player()
|
||||
for(var/mob/O in dead_mob_list)
|
||||
if(O.client)
|
||||
var/getResponse = alert(O,"A wizard is requesting a familiar. Would you like to play as one?", "Wizard familiar summons","Yes","No")
|
||||
if(getResponse == "Yes")
|
||||
return O.client
|
||||
return null
|
||||
else
|
||||
usr << browse(null,"window=monstermanual")
|
||||
|
||||
@@ -106,13 +106,18 @@
|
||||
var/mob/living/carbon/human/skeleton/F = new(get_turf(target))
|
||||
target.visible_message("<span class='cult'>\The [target] explodes in a shower of gore, a skeleton emerges from the remains!</span>")
|
||||
target.gib()
|
||||
var/client/C = get_player()
|
||||
F.ckey = C.ckey
|
||||
F.faction = usr.faction
|
||||
if(C.mob && C.mob.mind)
|
||||
C.mob.mind.transfer_to(F)
|
||||
F << "<B>You are a skeleton minion to [usr], they are your master. Obey and protect your master at all costs, you have no free will.</B>"
|
||||
|
||||
var/datum/ghosttrap/ghost = get_ghost_trap("skeleton minion")
|
||||
ghost.request_player(F,"A wizard is requesting a skeleton minion.", 60 SECONDS)
|
||||
spawn(600)
|
||||
if(F)
|
||||
if(!F.ckey || !F.client)
|
||||
F.visible_message("With no soul to keep \the [F] linked to this plane, it turns into dust.")
|
||||
F.dust()
|
||||
|
||||
else
|
||||
F << "<B>You are a skeleton minion to [usr], they are your master. Obey and protect your master at all costs, you have no free will.</B>"
|
||||
F.faction = usr.faction
|
||||
|
||||
//equips the skeleton war gear
|
||||
F.equip_to_slot_or_del(new /obj/item/clothing/under/gladiator(F), slot_w_uniform)
|
||||
F.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(F), slot_shoes)
|
||||
@@ -120,14 +125,6 @@
|
||||
F.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/bone(F), slot_head)
|
||||
F.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/bone(F), slot_wear_suit)
|
||||
|
||||
/spell/targeted/raise_dead/proc/get_player()
|
||||
for(var/mob/O in dead_mob_list)
|
||||
if(O.client)
|
||||
var/getResponse = alert(O,"A wizard is requesting a skeleton minion. Would you like to play as one?", "Skeleton minion summons","Yes","No")
|
||||
if(getResponse == "Yes")
|
||||
return O.client
|
||||
return null
|
||||
|
||||
/spell/targeted/lichdom
|
||||
name = "Lichdom"
|
||||
desc = "Trade your life and soul for immortality and power."
|
||||
|
||||
Reference in New Issue
Block a user