mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
* Fixes capitalisation on throwing stuff in disposals * in fact, fixes it for everything * even more * outta here
622 lines
18 KiB
Plaintext
622 lines
18 KiB
Plaintext
/mob/living/carbon/monkey
|
|
name = "monkey"
|
|
voice_name = "monkey"
|
|
//speak_emote = list("chimpers")
|
|
icon_state = "monkey1"
|
|
icon = 'icons/mob/monkey.dmi'
|
|
gender = NEUTER
|
|
pass_flags = PASSTABLE | PASSRAILING
|
|
update_icon = 0 ///no need to call regenerate_icon
|
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/animal/monkey
|
|
species_type = /mob/living/carbon/monkey
|
|
treadmill_speed = 0.8 //Slow apes!
|
|
var/attack_text = "bites"
|
|
var/languagetoadd = LANGUAGE_MONKEY
|
|
var/namenumbers = TRUE
|
|
var/flag = 0
|
|
|
|
mob_bump_flag = MONKEY
|
|
mob_swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
|
mob_push_flags = MONKEY|SLIME|SIMPLE_ANIMAL|ALIEN
|
|
|
|
flags = HEAR_ALWAYS | PROXMOVE
|
|
|
|
size = SIZE_SMALL
|
|
|
|
var/canWearClothes = 1
|
|
var/canWearHats = 1
|
|
var/canWearGlasses = 1
|
|
var/canWearMasks = 1
|
|
var/canWearBack = 1
|
|
|
|
var/obj/item/clothing/monkeyclothes/uniform = null
|
|
var/obj/item/clothing/head/hat = null
|
|
var/obj/item/clothing/glasses/glasses = null
|
|
|
|
var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie
|
|
var/greaterform = "Human" // Used when humanizing a monkey.
|
|
icon_state = "monkey1"
|
|
//var/uni_append = "12C4E2" // Small appearance modifier for different species.
|
|
var/list/uni_append = list(0x12C,0x4E2) // Same as above for DNA2.
|
|
var/update_muts = 1 // Monkey gene must be set at start.
|
|
var/alien = 0 //Used for reagent metabolism.
|
|
var/canPossess = FALSE
|
|
var/unmonkey_anim = "monkey2h"
|
|
|
|
/mob/living/carbon/monkey/New()
|
|
var/datum/reagents/R = new/datum/reagents(1000)
|
|
reagents = R
|
|
R.my_atom = src
|
|
|
|
if(namenumbers)
|
|
name = "[name] ([rand(1, 1000)])"
|
|
real_name = name
|
|
|
|
if (!(dna))
|
|
if(gender == NEUTER)
|
|
setGender(pick(MALE, FEMALE))
|
|
dna = new /datum/dna( null )
|
|
dna.real_name = real_name
|
|
dna.b_type = random_blood_type()
|
|
dna.ResetSE()
|
|
dna.ResetUI()
|
|
//dna.uni_identity = "00600200A00E0110148FC01300B009"
|
|
//dna.SetUI(list(0x006,0x002,0x00A,0x00E,0x011,0x014,0x8FC,0x013,0x00B,0x009))
|
|
//dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6"
|
|
//dna.SetSE(list(0x433,0x591,0x567,0x561,0x31E,0x137,0x633,0x34D,0x1C3,0x690,0x120,0x321,0x64D,0x4FE,0x4CD,0x615,0x44B,0x6C0,0x3F2,0x51B,0x6C6,0x0A4,0x282,0x1D2,0x6BA,0x3B0,0xFD6))
|
|
dna.unique_enzymes = md5(name) //Possibly not working?
|
|
|
|
// We're a monkey
|
|
dna.SetSEState(MONKEYBLOCK, 1)
|
|
dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF)
|
|
// Fix gender
|
|
dna.SetUIState(DNA_UI_GENDER, gender != MALE, 1)
|
|
|
|
// Set the blocks to uni_append, if needed.
|
|
if(uni_append.len>0)
|
|
for(var/b=1;b<=uni_append.len;b++)
|
|
dna.SetUIValue(DNA_UI_LENGTH-(uni_append.len-b),uni_append[b], 1)
|
|
dna.UpdateUI()
|
|
|
|
update_muts=1
|
|
|
|
add_language(languagetoadd)
|
|
default_language = all_languages[languagetoadd]
|
|
init_language = default_language
|
|
|
|
hud_list[HEALTH_HUD] = new/image/hud('icons/mob/hud.dmi', src, "hudhealth100")
|
|
hud_list[STATUS_HUD] = new/image/hud('icons/mob/hud.dmi', src, "hudhealthy")
|
|
|
|
..()
|
|
update_icons()
|
|
return
|
|
|
|
/mob/living/carbon/monkey/Destroy()
|
|
..()
|
|
uniform = null
|
|
hat = null
|
|
glasses = null
|
|
|
|
/mob/living/carbon/monkey/get_butchering_products()
|
|
return list(/datum/butchering_product/skin/monkey, /datum/butchering_product/teeth/few)
|
|
|
|
/mob/living/carbon/monkey/abiotic()
|
|
for(var/obj/item/I in held_items)
|
|
if(I.abstract)
|
|
continue
|
|
|
|
return 1
|
|
|
|
return (wear_mask || back || uniform || hat)
|
|
|
|
/mob/living/carbon/monkey/punpun
|
|
name = "Pun Pun"
|
|
namenumbers = FALSE
|
|
|
|
/mob/living/carbon/monkey/punpun/New()
|
|
var/obj/item/clothing/monkeyclothes/suit = new /obj/item/clothing/monkeyclothes
|
|
equip_to_slot(suit, slot_w_uniform)
|
|
..()
|
|
|
|
/mob/living/carbon/monkey/tajara
|
|
name = "farwa"
|
|
voice_name = "farwa"
|
|
speak_emote = list("mews")
|
|
icon_state = "tajkey1"
|
|
uni_append = list(0x0A0,0xE00) // 0A0E00
|
|
species_type = /mob/living/carbon/monkey/tajara
|
|
languagetoadd = LANGUAGE_CATBEAST
|
|
greaterform = "Tajaran"
|
|
|
|
/mob/living/carbon/monkey/tajara/New()
|
|
..()
|
|
add_language(LANGUAGE_MOUSE)
|
|
dna.mutantrace = "tajaran"
|
|
|
|
/mob/living/carbon/monkey/skrell
|
|
name = "neaera"
|
|
voice_name = "neaera"
|
|
speak_emote = list("squicks")
|
|
icon_state = "skrellkey1"
|
|
uni_append = list(0x01C,0xC92) // 01CC92
|
|
species_type = /mob/living/carbon/monkey/skrell
|
|
languagetoadd = LANGUAGE_SKRELLIAN
|
|
greaterform = "Skrell"
|
|
|
|
/mob/living/carbon/monkey/skrell/New()
|
|
..()
|
|
dna.mutantrace = "skrell"
|
|
|
|
/mob/living/carbon/monkey/unathi
|
|
name = "stok"
|
|
voice_name = "stok"
|
|
speak_emote = list("hisses")
|
|
icon_state = "stokkey1"
|
|
uni_append = list(0x044,0xC5D) // 044C5D
|
|
canWearClothes = 0
|
|
species_type = /mob/living/carbon/monkey/unathi
|
|
languagetoadd = LANGUAGE_UNATHI
|
|
greaterform = "Unathi"
|
|
|
|
/mob/living/carbon/monkey/unathi/New()
|
|
..()
|
|
dna.mutantrace = "lizard"
|
|
|
|
/mob/living/carbon/monkey/grey
|
|
name = "greyling"
|
|
voice_name = "greyling"
|
|
icon_state = "grey"
|
|
canWearGlasses = 0
|
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/grey
|
|
languagetoadd = LANGUAGE_GREY
|
|
greaterform = "Grey"
|
|
|
|
/mob/living/carbon/monkey/grey/passive_emote()
|
|
emote(pick("scratch","jump","roll"))
|
|
|
|
///mob/living/carbon/monkey/diona/New()
|
|
//Moved to it's duplicate declaration modules\mob\living\carbon\monkey\diona.dm
|
|
|
|
/mob/living/carbon/monkey/base_movement_tally()
|
|
. = ..()
|
|
if(reagents.has_any_reagents(HYPERZINES))
|
|
return // Hyperzine ignores slowdown
|
|
if(istype(loc, /turf/space))
|
|
return // Space ignores slowdown
|
|
|
|
if (bodytemperature < 283.222)
|
|
. += (283.222 - bodytemperature) / 10 * 1.75
|
|
|
|
/mob/living/carbon/monkey/show_inv(mob/living/carbon/user as mob)
|
|
user.set_machine(src)
|
|
|
|
var/dat
|
|
|
|
for(var/i = 1 to held_items.len) //Hands
|
|
var/obj/item/I = held_items[i]
|
|
dat += "<B>[capitalize(get_index_limb_name(i))]</B> <A href='?src=\ref[src];hands=[i]'>[makeStrippingButton(I)]</A><BR>"
|
|
|
|
dat += "<BR><B>Back:</B> <A href='?src=\ref[src];item=[slot_back]'>[makeStrippingButton(back)]</A>"
|
|
|
|
dat += "<BR>"
|
|
|
|
if(canWearHats)
|
|
dat += "<br><b>Headwear:</b> <A href='?src=\ref[src];item=[slot_head]'>[makeStrippingButton(hat)]</A>"
|
|
|
|
dat += "<BR><B>Mask:</B> <A href='?src=\ref[src];item=[slot_wear_mask]'>[makeStrippingButton(wear_mask)]</A>"
|
|
if(has_breathing_mask())
|
|
dat += "<BR>[HTMLTAB]↳<B>Internals:</B> [src.internal ? "On" : "Off"] <A href='?src=\ref[src];internals=1'>(Toggle)</A>"
|
|
|
|
if(canWearGlasses)
|
|
dat += "<br><b>Glasses:</b> <A href='?src=\ref[src];item=[slot_glasses]'>[makeStrippingButton(glasses)]</A>"
|
|
|
|
if(canWearClothes)
|
|
dat += "<br><b>Uniform:</b> <A href='?src=\ref[src];item=[slot_w_uniform]'>[makeStrippingButton(uniform)]</A>"
|
|
|
|
if(handcuffed || mutual_handcuffs)
|
|
dat += "<BR><B>Handcuffed:</B> <A href='?src=\ref[src];item=[slot_handcuffed]'>Remove</A>"
|
|
|
|
dat += {"
|
|
<BR>
|
|
<BR><A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
|
|
"}
|
|
|
|
var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 340, 500)
|
|
popup.set_content(dat)
|
|
popup.open()
|
|
|
|
//mob/living/carbon/monkey/bullet_act(var/obj/item/projectile/Proj)taken care of in living
|
|
|
|
/mob/living/carbon/monkey/getarmor(var/def_zone, var/type)
|
|
|
|
var/armorscore = 0
|
|
if((def_zone == LIMB_HEAD) || (def_zone == "eyes") || (def_zone == LIMB_HEAD))
|
|
if(hat)
|
|
armorscore = hat.armor[type]
|
|
else
|
|
if(uniform)
|
|
armorscore = uniform.armor[type]
|
|
return armorscore
|
|
|
|
/mob/living/carbon/monkey/getarmorabsorb(var/def_zone, var/type)
|
|
return getarmor(def_zone, type)
|
|
|
|
/mob/living/carbon/monkey/attack_paw(mob/living/M)
|
|
..()
|
|
|
|
switch(M.a_intent)
|
|
if(I_HELP)
|
|
help_shake_act(M)
|
|
if(I_HURT)
|
|
M.unarmed_attack_mob(src)
|
|
if(I_DISARM)
|
|
M.disarm_mob(src)
|
|
if(I_GRAB)
|
|
M.grab_mob(src)
|
|
|
|
/mob/living/carbon/monkey/attack_hand(var/mob/living/carbon/human/M)
|
|
var/touch_zone = get_part_from_limb(M.zone_sel.selecting)
|
|
var/block = 0
|
|
if (M.check_contact_sterility(HANDS) || check_contact_sterility(touch_zone))//only one side has to wear protective clothing to prevent contact infection
|
|
block = 1
|
|
share_contact_diseases(M,block,0)//monkeys can't bleed right now
|
|
|
|
switch(M.a_intent)
|
|
if(I_HELP)
|
|
help_shake_act(M)
|
|
|
|
if(I_HURT)
|
|
M.unarmed_attack_mob(src)
|
|
|
|
if(I_GRAB)
|
|
M.grab_mob(src)
|
|
|
|
if(I_DISARM)
|
|
M.disarm_mob(src)
|
|
return
|
|
|
|
/mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
|
switch(M.a_intent)
|
|
if (I_HELP)
|
|
visible_message("<span class='notice'>[M] caresses [src] with its scythe like arm.</span>")
|
|
|
|
if (I_HURT)
|
|
return M.unarmed_attack_mob(src)
|
|
|
|
if (I_GRAB)
|
|
return M.grab_mob(src)
|
|
|
|
if (I_DISARM)
|
|
return M.disarm_mob(src)
|
|
|
|
/mob/living/carbon/monkey/attack_slime(mob/living/carbon/slime/M)
|
|
M.unarmed_attack_mob(src)
|
|
|
|
/mob/living/carbon/monkey/attack_ghost(var/mob/dead/observer/O)
|
|
if(canPossess)
|
|
if(!(src.key))
|
|
if(O.can_reenter_corpse)
|
|
var/response = alert(O,"Do you want to take over \the [src]?","Monkey Madness","Yes","No")
|
|
if(response == "Yes")
|
|
if(!(src.key))
|
|
ckey = O.ckey
|
|
canPossess = FALSE
|
|
var/newname = input(src,"Enter a name, or leave blank for the default name.", "Name change","") as text
|
|
newname = copytext(sanitize(newname),1,MAX_NAME_LEN)
|
|
if (newname != "")
|
|
fully_replace_character_name(newname = newname)
|
|
else if(src.key)
|
|
to_chat(src, "<span class='notice'>Somebody jumped your claim on \the [src] and is already controlling it. Try another </span>")
|
|
else if(!(O.can_reenter_corpse))
|
|
to_chat(O,"<span class='notice'>While \the [src] may be mindless, you have recently ghosted and thus are not allowed to take over for now.</span>")
|
|
|
|
/mob/living/carbon/monkey/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone, var/originator = null, var/crit = FALSE, var/flavor)
|
|
if(!..())
|
|
return
|
|
|
|
if(istype(I.attack_verb, /list) && I.attack_verb.len && !(I.flags & NO_ATTACK_MSG))
|
|
visible_message("<span class='danger'>\The [user] [flavor ? "[flavor] " : ""][pick(I.attack_verb)] [user == src ? "[get_reflexive_pronoun(user.gender)]" : "\the [src]"] with \the [I]!</span>", \
|
|
"<span class='userdanger'>[user == src ? "You" : "\The [user]"] [flavor ? "[flavor] " : ""][user == src ? "[shift_verb_tense(pick(I.attack_verb))] yourself": "[pick(I.attack_verb)] you"] with \the [I]!</span>")
|
|
else if(!(I.flags & NO_ATTACK_MSG))
|
|
visible_message("<span class='danger'>\The [user] [flavor ? "[flavor] " : ""]attacks [user == src ? "[get_reflexive_pronoun(user.gender)]" : "\the [src]"] with \the [I.name]!</span>", \
|
|
"<span class='userdanger'>[user == src ? "You" : "\The [user]"] [flavor ? "[flavor] " : ""]attack[user == src ? " yourself" : "s you"] with \the [I.name]!</span>")
|
|
|
|
I.disease_contact(src,get_part_from_limb(def_zone))
|
|
|
|
/mob/living/carbon/monkey/Stat()
|
|
..()
|
|
if(statpanel("Status"))
|
|
stat(null, text("Intent: []", a_intent))
|
|
stat(null, text("Move Mode: []", m_intent))
|
|
/*if(client && mind)
|
|
if (client.statpanel == "Status")
|
|
if(mind.changeling)
|
|
stat("Chemical Storage", mind.changeling.chem_charges)
|
|
stat("Genetic Damage Time", mind.changeling.geneticdamage)
|
|
return
|
|
*/
|
|
|
|
|
|
/mob/living/carbon/monkey/verb/removeinternal()
|
|
set name = "Remove Internals"
|
|
set category = "IC"
|
|
internal = null
|
|
return
|
|
|
|
/mob/living/carbon/monkey/var/co2overloadtime = null
|
|
|
|
/mob/living/carbon/monkey/emp_act(severity)
|
|
for(var/obj/item/stickybomb/B in src)
|
|
if(B.stuck_to)
|
|
visible_message("<span class='warning'>\The [B] stuck on \the [src] suddenly deactivates itself and falls to the ground.</span>")
|
|
B.deactivate()
|
|
B.unstick()
|
|
|
|
if(flags & INVULNERABLE)
|
|
return
|
|
|
|
if(wear_id)
|
|
wear_id.emp_act(severity)
|
|
..()
|
|
|
|
/mob/living/carbon/monkey/adjustBruteLoss(damage)
|
|
..()
|
|
if (damage > 0)
|
|
damageoverlaytemp = 20
|
|
|
|
/mob/living/carbon/monkey/ex_act(severity)
|
|
if(flags & INVULNERABLE)
|
|
return
|
|
|
|
if(!blinded)
|
|
flash_eyes(visual = 1)
|
|
|
|
switch(severity)
|
|
if(1.0)
|
|
if (stat != 2)
|
|
adjustBruteLoss(200)
|
|
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
|
|
if(2.0)
|
|
if (stat != 2)
|
|
adjustBruteLoss(60)
|
|
adjustFireLoss(60)
|
|
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
|
|
if(3.0)
|
|
if (stat != 2)
|
|
adjustBruteLoss(30)
|
|
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
|
|
if (prob(50))
|
|
Paralyse(10)
|
|
else
|
|
return
|
|
|
|
/mob/living/carbon/monkey/blob_act()
|
|
if(flags & INVULNERABLE)
|
|
return
|
|
..()
|
|
playsound(loc, 'sound/effects/blobattack.ogg',50,1)
|
|
if (stat != DEAD)
|
|
adjustFireLoss(60)
|
|
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
|
|
if (prob(50))
|
|
Paralyse(10)
|
|
if (stat == DEAD && client)
|
|
gib()
|
|
return
|
|
if (stat == DEAD && !client)
|
|
gibs(loc, virus2)
|
|
qdel(src)
|
|
return
|
|
|
|
|
|
// Get ALL accesses available.
|
|
/mob/living/carbon/monkey/GetAccess()
|
|
var/list/ACL=list()
|
|
var/obj/item/I = get_active_hand()
|
|
if(istype(I))
|
|
ACL |= I.GetAccess()
|
|
return ACL
|
|
|
|
/mob/living/carbon/monkey/get_visible_id()
|
|
var/id = null
|
|
for(var/obj/item/I in held_items)
|
|
id = I.GetID()
|
|
if(id)
|
|
break
|
|
return id
|
|
|
|
/mob/living/carbon/monkey/assess_threat(var/obj/machinery/bot/secbot/judgebot, var/lasercolor)
|
|
if(judgebot.emagged == 2)
|
|
return 10 //Everyone is a criminal!
|
|
var/threatcount = 0
|
|
|
|
//Lasertag bullshit
|
|
if(lasercolor)
|
|
if(lasercolor == "b")//Lasertag turrets target the opposing team, how great is that? -Sieve
|
|
if(find_held_item_by_type(/obj/item/weapon/gun/energy/tag/red))
|
|
threatcount += 4
|
|
|
|
if(lasercolor == "r")
|
|
if(find_held_item_by_type(/obj/item/weapon/gun/energy/tag/blue))
|
|
threatcount += 4
|
|
|
|
return threatcount
|
|
|
|
//Check for weapons
|
|
if(judgebot.weaponscheck)
|
|
for(var/obj/item/I in held_items)
|
|
if(judgebot.check_for_weapons(I))
|
|
threatcount += 4
|
|
|
|
//Loyalty implants imply trustworthyness
|
|
if(is_loyalty_implanted())
|
|
threatcount -= 1
|
|
|
|
return threatcount
|
|
|
|
/mob/living/carbon/monkey/dexterity_check()
|
|
if(stat != CONSCIOUS)
|
|
return FALSE
|
|
if(ticker.mode.name == "monkey")//monkey mode override
|
|
return TRUE
|
|
if(reagents.has_reagent(METHYLIN))
|
|
return TRUE
|
|
if(is_dexterous)
|
|
return TRUE
|
|
return FALSE//monkeys can't use complex things by default unless they're high on methylin
|
|
|
|
/mob/living/carbon/monkey/reset_layer()
|
|
if(lying)
|
|
plane = LYING_MOB_PLANE
|
|
else
|
|
plane = MOB_PLANE
|
|
loc.adjust_layer(src)
|
|
|
|
/mob/living/carbon/monkey/send_to_past(var/duration)
|
|
..()
|
|
var/static/list/resettable_vars = list(
|
|
"uniform",
|
|
"hat",
|
|
"glasses",
|
|
"wear_id")
|
|
|
|
reset_vars_after_duration(resettable_vars, duration)
|
|
|
|
/mob/living/carbon/monkey/can_wield(obj/item/I)
|
|
//used for making wield exceptions for 2 handed items
|
|
if (istype(I,/obj/item/device/instrument/drum/drum_makeshift/bongos))
|
|
return 1
|
|
|
|
|
|
/mob/living/carbon/monkey/mushroom
|
|
name = "walking mushroom"
|
|
icon = 'icons/mob/animal.dmi'
|
|
icon_state = "mushroom"
|
|
greaterform = "Mushroom"
|
|
species_type = /mob/living/carbon/monkey/mushroom
|
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/hugemushroomslice/mushroom_man
|
|
canWearClothes = 0
|
|
canWearHats = 0
|
|
canWearGlasses = 0
|
|
canWearMasks = 0
|
|
canWearBack = 0
|
|
held_items = list()
|
|
flag = NO_BREATHE
|
|
canPossess = TRUE
|
|
var/growth = 0
|
|
|
|
/mob/living/carbon/monkey/mushroom/say()
|
|
return 0
|
|
|
|
/mob/living/carbon/monkey/mushroom/put_in_hand_check(var/obj/item/W)
|
|
return 0
|
|
|
|
/mob/living/carbon/monkey/mushroom/Life()
|
|
..()
|
|
if(!isDead() && !gcDestroyed && client)
|
|
var/light_amount = 0
|
|
if(isturf(loc))
|
|
var/turf/T = loc
|
|
light_amount = T.get_lumcount() * 10
|
|
|
|
growth = clamp(growth + rand(1,3)/(10*light_amount>1 ? light_amount : 1),0,100)
|
|
|
|
if(growth >= 100)
|
|
growth = 0
|
|
var/mob/living/carbon/human/adult = new()
|
|
adult.alpha = 0
|
|
var/matrix/smol = matrix()
|
|
smol.Scale(0)
|
|
var/matrix/large = matrix()
|
|
var/matrix/M = adult.transform
|
|
M.Scale(0)
|
|
adult.set_species("Mushroom")
|
|
adult.my_appearance.h_style = "Plump Helmet"
|
|
adult.my_appearance.r_hair = 60
|
|
adult.my_appearance.g_hair = 40
|
|
adult.my_appearance.b_hair = 80
|
|
for(var/datum/language/L in languages)
|
|
adult.add_language(L.name)
|
|
|
|
adult.regenerate_icons()
|
|
adult.forceMove(get_turf(src))
|
|
animate(src, alpha = 0, transform = smol, time = 3 SECONDS, easing = SINE_EASING)
|
|
animate(adult, alpha = 255, transform = large, time = 3 SECONDS, easing = SINE_EASING)
|
|
transferImplantsTo(adult)
|
|
transferBorers(adult)
|
|
|
|
if(istype(loc,/obj/item/weapon/holder))
|
|
var/obj/item/weapon/holder/L = loc
|
|
src.forceMove(get_turf(L))
|
|
L = null
|
|
qdel(L)
|
|
|
|
if(mind)
|
|
src.mind.transfer_to(adult)
|
|
adult.fully_replace_character_name(newname = src.real_name)
|
|
src.drop_all()
|
|
qdel(src)
|
|
|
|
/mob/living/carbon/monkey/mushroom/Stat()
|
|
..()
|
|
if(statpanel("Status"))
|
|
stat(null, "Growth completing: [growth]%")
|
|
|
|
/mob/living/carbon/monkey/mushroom/passive_emote()
|
|
emote(pick("scratch","jump","roll"))
|
|
|
|
/mob/living/carbon/monkey/can_be_infected()
|
|
return 1
|
|
|
|
/mob/living/carbon/monkey/turn_into_mannequin(var/material = "marble",var/forever = FALSE)
|
|
if (greaterform != "Human")
|
|
return FALSE
|
|
|
|
var/turf/T = get_turf(src)
|
|
var/obj/structure/mannequin/new_mannequin
|
|
|
|
var/list/mannequin_clothing = list(
|
|
SLOT_MANNEQUIN_ICLOTHING,
|
|
SLOT_MANNEQUIN_FEET,
|
|
SLOT_MANNEQUIN_GLOVES,
|
|
SLOT_MANNEQUIN_EARS,
|
|
SLOT_MANNEQUIN_OCLOTHING,
|
|
SLOT_MANNEQUIN_EYES,
|
|
SLOT_MANNEQUIN_BELT,
|
|
SLOT_MANNEQUIN_MASK,
|
|
SLOT_MANNEQUIN_HEAD,
|
|
SLOT_MANNEQUIN_BACK,
|
|
SLOT_MANNEQUIN_ID,
|
|
)
|
|
|
|
mannequin_clothing[SLOT_MANNEQUIN_ICLOTHING] = uniform
|
|
mannequin_clothing[SLOT_MANNEQUIN_HEAD] = hat
|
|
mannequin_clothing[SLOT_MANNEQUIN_EYES] = glasses
|
|
mannequin_clothing[SLOT_MANNEQUIN_MASK] = wear_mask
|
|
mannequin_clothing[SLOT_MANNEQUIN_BACK] = back
|
|
|
|
var/list/mannequin_held_items = list(null, null)
|
|
|
|
for (var/i = 1 to mannequin_held_items.len)
|
|
var/obj/O = held_items[i]
|
|
if (O)
|
|
drop_item(O,T,TRUE)
|
|
mannequin_held_items[i] = O
|
|
|
|
for (var/obj/O in get_all_slots())
|
|
drop_item(O,T,TRUE)
|
|
|
|
switch (material)
|
|
if ("marble")
|
|
new_mannequin = new /obj/structure/mannequin/monkey(T,null,null,mannequin_clothing,mannequin_held_items,src,forever)
|
|
if ("wood")
|
|
new_mannequin = new /obj/structure/mannequin/wood/monkey(T,null,null,mannequin_clothing,mannequin_held_items,src,forever)
|
|
|
|
if (new_mannequin)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/mob/living/carbon/monkey/make_meat(location)
|
|
var/ourMeat = new meat_type(location, src)
|
|
return ourMeat
|