mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-16 02:17:06 +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:
@@ -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