mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-18 10:33:30 +01:00
First 1/3 of port done.
This commit is contained in:
@@ -558,16 +558,10 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
moblist.Add(M)
|
||||
for(var/mob/new_player/M in sortmob)
|
||||
moblist.Add(M)
|
||||
for(var/mob/living/carbon/monkey/M in sortmob)
|
||||
moblist.Add(M)
|
||||
for(var/mob/living/carbon/slime/M in sortmob)
|
||||
moblist.Add(M)
|
||||
for(var/mob/living/simple_animal/M in sortmob)
|
||||
moblist.Add(M)
|
||||
// for(var/mob/living/silicon/hivebot/M in world)
|
||||
// mob_list.Add(M)
|
||||
// for(var/mob/living/silicon/hive_mainframe/M in world)
|
||||
// mob_list.Add(M)
|
||||
return moblist
|
||||
|
||||
//E = MC^2
|
||||
|
||||
@@ -176,7 +176,7 @@ datum/hud/New(mob/owner)
|
||||
|
||||
if(ishuman(mymob))
|
||||
human_hud(ui_style, ui_color, ui_alpha) // Pass the player the UI style chosen in preferences
|
||||
else if(ismonkey(mymob))
|
||||
else if(issmall(mymob))
|
||||
monkey_hud(ui_style)
|
||||
else if(isbrain(mymob))
|
||||
brain_hud(ui_style)
|
||||
|
||||
@@ -50,39 +50,6 @@
|
||||
/mob/living/RestrainedClickOn(var/atom/A)
|
||||
return
|
||||
|
||||
/*
|
||||
Monkeys
|
||||
*/
|
||||
/mob/living/carbon/monkey/UnarmedAttack(var/atom/A)
|
||||
A.attack_paw(src)
|
||||
/atom/proc/attack_paw(mob/user as mob)
|
||||
return
|
||||
|
||||
/*
|
||||
Monkey RestrainedClickOn() was apparently the
|
||||
one and only use of all of the restrained click code
|
||||
(except to stop you from doing things while handcuffed);
|
||||
moving it here instead of various hand_p's has simplified
|
||||
things considerably
|
||||
*/
|
||||
/mob/living/carbon/monkey/RestrainedClickOn(var/atom/A)
|
||||
if(..())
|
||||
return
|
||||
if(a_intent != "harm" || !ismob(A)) return
|
||||
if(is_muzzled())
|
||||
return
|
||||
var/mob/living/carbon/ML = A
|
||||
var/dam_zone = ran_zone(pick("chest", "l_hand", "r_hand", "l_leg", "r_leg"))
|
||||
var/armor = ML.run_armor_check(dam_zone, "melee")
|
||||
if(prob(75))
|
||||
ML.apply_damage(rand(1,3), BRUTE, dam_zone, armor)
|
||||
for(var/mob/O in viewers(ML, null))
|
||||
O.show_message("\red <B>[name] has bit [ML]!</B>", 1)
|
||||
if(armor >= 2) return
|
||||
else
|
||||
for(var/mob/O in viewers(ML, null))
|
||||
O.show_message("\red <B>[src] has attempted to bite [ML]!</B>", 1)
|
||||
|
||||
/*
|
||||
Aliens
|
||||
Defaults to same as monkey in most places
|
||||
|
||||
@@ -1012,36 +1012,6 @@ datum/mind
|
||||
message_admins("[key_name_admin(usr)] has thrall'ed [current].")
|
||||
log_admin("[key_name(usr)] has thrall'ed [current].")
|
||||
|
||||
else if (href_list["monkey"])
|
||||
var/mob/living/L = current
|
||||
if (L.notransform)
|
||||
return
|
||||
switch(href_list["monkey"])
|
||||
if("healthy")
|
||||
if (usr.client.holder.rights & R_ADMIN)
|
||||
var/mob/living/carbon/human/H = current
|
||||
var/mob/living/carbon/monkey/M = current
|
||||
if (istype(H))
|
||||
log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]")
|
||||
message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]")
|
||||
src = null
|
||||
M = H.monkeyize()
|
||||
src = M.mind
|
||||
//world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!"
|
||||
sleep(0) //because deleting of virus is done through spawn(0)
|
||||
if("human")
|
||||
var/mob/living/carbon/monkey/M = current
|
||||
if (istype(M))
|
||||
log_admin("[key_name(usr)] attempting to humanize [key_name(current)]")
|
||||
message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]")
|
||||
var/obj/item/weapon/dnainjector/m2h/m2h = new
|
||||
var/obj/item/weapon/implant/mobfinder = new(M) //hack because humanizing deletes mind --rastaf0
|
||||
src = null
|
||||
m2h.inject(M)
|
||||
src = mobfinder.loc:mind
|
||||
del(mobfinder)
|
||||
current.radiation -= 50
|
||||
|
||||
else if (href_list["silicon"])
|
||||
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||
switch(href_list["silicon"])
|
||||
@@ -1396,9 +1366,6 @@ datum/mind
|
||||
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
|
||||
mind.active = 1 //indicates that the mind is currently synced with a client
|
||||
|
||||
//MONKEY
|
||||
/mob/living/carbon/monkey/mind_initialize()
|
||||
..()
|
||||
|
||||
//slime
|
||||
/mob/living/carbon/slime/mind_initialize()
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
return
|
||||
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
|
||||
return
|
||||
if (!ishuman(usr) && !ismonkey(usr)) //Make sure they're a mob that has dna
|
||||
if (!ishuman(usr) && !issmall(usr)) //Make sure they're a mob that has dna
|
||||
usr << "\blue Try as you might, you can not climb up into the scanner."
|
||||
return
|
||||
if (src.occupant)
|
||||
|
||||
@@ -16,52 +16,18 @@
|
||||
return
|
||||
user << "<span class='warning'>Our genes cry out!</span>"
|
||||
|
||||
var/mob/living/carbon/C = user
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
//TODO replace with monkeyize proc
|
||||
if(!istype(H) || !H.species.primitive_form)
|
||||
src << "<span class='warning'>We cannot perform this ability in this form!</span>"
|
||||
return
|
||||
|
||||
H.visible_message("<span class='warning'>[H] transforms!</span>")
|
||||
changeling.geneticdamage = 30
|
||||
H << "<span class='warning'>Our genes cry out!</span>"
|
||||
var/list/implants = list() //Try to preserve implants.
|
||||
for(var/obj/item/weapon/implant/W in C)
|
||||
for(var/obj/item/weapon/implant/W in H)
|
||||
implants += W
|
||||
|
||||
C.notransform = 1
|
||||
C.canmove = 0
|
||||
C.icon = null
|
||||
C.overlays.Cut()
|
||||
C.invisibility = 101
|
||||
|
||||
var/atom/movable/overlay/animation = new /atom/movable/overlay( C.loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
flick("h2monkey", animation)
|
||||
sleep(30)
|
||||
del(animation)
|
||||
|
||||
var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey(src)
|
||||
O.dna = C.dna.Clone()
|
||||
C.dna = null
|
||||
|
||||
for(var/obj/item/W in C)
|
||||
C.unEquip(W)
|
||||
for(var/obj/T in C)
|
||||
del(T)
|
||||
|
||||
O.loc = C.loc
|
||||
O.name = "monkey ([copytext(md5(C.real_name), 2, 6)])"
|
||||
O.setToxLoss(C.getToxLoss())
|
||||
O.adjustBruteLoss(C.getBruteLoss())
|
||||
O.setOxyLoss(C.getOxyLoss())
|
||||
O.adjustFireLoss(C.getFireLoss())
|
||||
O.stat = C.stat
|
||||
O.a_intent = "harm"
|
||||
for(var/obj/item/weapon/implant/I in implants)
|
||||
I.loc = O
|
||||
I.implanted = O
|
||||
|
||||
C.mind.transfer_to(O)
|
||||
O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
|
||||
O.changeling_update_languages(changeling.absorbed_languages)
|
||||
|
||||
H.monkeyize()
|
||||
feedback_add_details("changeling_powers","LF")
|
||||
qdel(C)
|
||||
return 1
|
||||
@@ -679,42 +679,6 @@ var/list/sacrificed = list()
|
||||
H.dust()//To prevent the MMI from remaining
|
||||
else
|
||||
H.gib()
|
||||
for(var/mob/living/carbon/monkey/M in src.loc)
|
||||
if (ticker.mode.name == "cult")
|
||||
if(M.mind == ticker.mode:sacrifice_target)
|
||||
if(cultsinrange.len >= 3)
|
||||
sacrificed += M.mind
|
||||
usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete."
|
||||
else
|
||||
usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual."
|
||||
continue
|
||||
else
|
||||
if(prob(20))
|
||||
usr << "\red The Geometer of Blood accepts your meager sacrifice."
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||
usr << "\red However, a mere monkey is not enough to satisfy Him."
|
||||
else
|
||||
usr << "\red The Geometer of Blood accepts your meager sacrifice."
|
||||
if(prob(20))
|
||||
ticker.mode.grant_runeword(usr)
|
||||
M.gib()
|
||||
/* for(var/mob/living/carbon/alien/A)
|
||||
for(var/mob/K in cultsinrange)
|
||||
K.say("Barhah hra zar'garis!")
|
||||
A.dust() /// A.gib() doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need.
|
||||
if (ticker.mode.name == "cult")
|
||||
if(prob(75))
|
||||
usr << "\red The Geometer of Blood accepts your exotic sacrifice."
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
usr << "\red The Geometer of Blood accepts your exotic sacrifice."
|
||||
usr << "\red However, this alien is not enough to gain His favor."
|
||||
else
|
||||
usr << "\red The Geometer of Blood accepts your exotic sacrifice."
|
||||
return
|
||||
return fizzle() */
|
||||
|
||||
/////////////////////////////////////////SIXTEENTH RUNE
|
||||
|
||||
|
||||
@@ -1,167 +1,3 @@
|
||||
//this file left in for legacy support
|
||||
/*
|
||||
/proc/start_events()
|
||||
//changed to a while(1) loop since they are more efficient.
|
||||
//Moved the spawn in here to allow it to be called with advance proc call if it crashes.
|
||||
//and also to stop spawn copying variables from the game ticker
|
||||
spawn(3000)
|
||||
while(1)
|
||||
if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station
|
||||
spawn(1)
|
||||
dust_swarm("weak")
|
||||
if(!event)
|
||||
//CARN: checks to see if random events are enabled.
|
||||
if(config.allow_random_events)
|
||||
if(prob(eventchance))
|
||||
event()
|
||||
hadevent = 1
|
||||
else
|
||||
Holiday_Random_Event()
|
||||
else
|
||||
event = 0
|
||||
sleep(1200)
|
||||
|
||||
/proc/event()
|
||||
event = 1
|
||||
|
||||
var/eventNumbersToPickFrom = list(1,2,4,5,6,7,8,9,10,11,12,13,14, 15) //so ninjas don't cause "empty" events.
|
||||
|
||||
if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
|
||||
eventNumbersToPickFrom += 3
|
||||
switch(pick(eventNumbersToPickFrom))
|
||||
if(1)
|
||||
command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
spawn(100)
|
||||
meteor_wave()
|
||||
spawn_meteors()
|
||||
spawn(700)
|
||||
meteor_wave()
|
||||
spawn_meteors()
|
||||
|
||||
if(2)
|
||||
command_announcement.Announce("Gravitational anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/granomalies.ogg')
|
||||
var/turf/T = pick(blobstart)
|
||||
var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 )
|
||||
spawn(rand(50, 300))
|
||||
del(bh)
|
||||
/*
|
||||
if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO
|
||||
command_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/spanomalies.ogg')
|
||||
var/list/turfs = new
|
||||
var/turf/picked
|
||||
for(var/turf/simulated/floor/T in world)
|
||||
if((T.z in config.station_levels))
|
||||
turfs += T
|
||||
for(var/turf/simulated/floor/T in turfs)
|
||||
if(prob(20))
|
||||
spawn(50+rand(0,3000))
|
||||
picked = pick(turfs)
|
||||
var/obj/effect/portal/P = new /obj/effect/portal( T )
|
||||
P.target = picked
|
||||
P.creator = null
|
||||
P.icon = 'icons/obj/objects.dmi'
|
||||
P.failchance = 0
|
||||
P.icon_state = "anom"
|
||||
P.name = "wormhole"
|
||||
spawn(rand(300,600))
|
||||
del(P)
|
||||
*/
|
||||
if(3)
|
||||
if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
|
||||
space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like.
|
||||
if(4)
|
||||
mini_blob_event()
|
||||
|
||||
if(5)
|
||||
high_radiation_event()
|
||||
if(6)
|
||||
viral_outbreak()
|
||||
if(7)
|
||||
alien_infestation()
|
||||
if(8)
|
||||
prison_break()
|
||||
if(9)
|
||||
carp_migration()
|
||||
if(10)
|
||||
immovablerod()
|
||||
if(11)
|
||||
lightsout(1,2)
|
||||
if(12)
|
||||
appendicitis()
|
||||
if(13)
|
||||
IonStorm()
|
||||
if(14)
|
||||
spacevine_infestation()
|
||||
if(15)
|
||||
communications_blackout()
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
/proc/viral_outbreak(var/virus = null)
|
||||
// command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
var/virus_type
|
||||
if(!virus)
|
||||
virus_type = pick(/datum/disease/dnaspread,/datum/disease/advance/flu,/datum/disease/advance/cold,/datum/disease/brainrot,/datum/disease/magnitis,/datum/disease/pierrot_throat)
|
||||
else
|
||||
switch(virus)
|
||||
if("fake gbs")
|
||||
virus_type = /datum/disease/fake_gbs
|
||||
if("gbs")
|
||||
virus_type = /datum/disease/gbs
|
||||
if("magnitis")
|
||||
virus_type = /datum/disease/magnitis
|
||||
if("rhumba beat")
|
||||
virus_type = /datum/disease/rhumba_beat
|
||||
if("brain rot")
|
||||
virus_type = /datum/disease/brainrot
|
||||
if("cold")
|
||||
virus_type = /datum/disease/advance/cold
|
||||
if("retrovirus")
|
||||
virus_type = /datum/disease/dnaspread
|
||||
if("flu")
|
||||
virus_type = /datum/disease/advance/flu
|
||||
// if("t-virus")
|
||||
// virus_type = /datum/disease/t_virus
|
||||
if("pierrot's throat")
|
||||
virus_type = /datum/disease/pierrot_throat
|
||||
for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
|
||||
|
||||
var/foundAlready = 0 // don't infect someone that already has the virus
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T)
|
||||
continue
|
||||
if(!(T.z in config.station_levels))
|
||||
continue
|
||||
for(var/datum/disease/D in H.viruses)
|
||||
foundAlready = 1
|
||||
if(H.stat == 2 || foundAlready)
|
||||
continue
|
||||
|
||||
if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work.
|
||||
if((!H.dna) || (H.sdisabilities & BLIND)) //A blindness disease would be the worst.
|
||||
continue
|
||||
var/datum/disease/dnaspread/D = new
|
||||
D.strain_data["name"] = H.real_name
|
||||
D.strain_data["UI"] = H.dna.uni_identity
|
||||
D.strain_data["SE"] = H.dna.struc_enzymes
|
||||
D.carrier = 1
|
||||
D.holder = H
|
||||
D.affected_mob = H
|
||||
H.viruses += D
|
||||
break
|
||||
else
|
||||
var/datum/disease/D = new virus_type
|
||||
D.carrier = 1
|
||||
D.holder = H
|
||||
D.affected_mob = H
|
||||
H.viruses += D
|
||||
break
|
||||
spawn(rand(1500, 3000)) //Delayed announcements to keep the crew on their toes.
|
||||
command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
*/
|
||||
|
||||
/proc/alien_infestation(var/spawncount = 1) // -- TLE
|
||||
//command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
|
||||
var/list/vents = list()
|
||||
@@ -218,13 +54,6 @@
|
||||
else
|
||||
randmutg(H)
|
||||
domutcheck(H,null,MUTCHK_FORCED)
|
||||
for(var/mob/living/carbon/monkey/M in living_mob_list)
|
||||
var/turf/T = get_turf(M)
|
||||
if(!T)
|
||||
continue
|
||||
if(!(T.z in config.station_levels))
|
||||
continue
|
||||
M.apply_effect((rand(15,75)),IRRADIATE,0)
|
||||
sleep(100)
|
||||
command_announcement.Announce("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
//if they are holding or wearing a card that has access, that works
|
||||
if(src.check_access(H.get_active_hand()) || src.check_access(H.wear_id))
|
||||
return 1
|
||||
else if(istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/alien/humanoid))
|
||||
else if(istype(M, /mob/living/carbon/alien/humanoid))
|
||||
var/mob/living/carbon/george = M
|
||||
//they can only hold things :(
|
||||
if(src.check_access(george.get_active_hand()))
|
||||
@@ -211,14 +211,14 @@
|
||||
if("Special Operations Officer")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Nanotrasen Navy Representative")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Nanotrasen Navy Officer")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Nanotrasen Navy Captain")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Supreme Commander")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
|
||||
|
||||
/proc/get_syndicate_access(job)
|
||||
switch(job)
|
||||
if("Syndicate Operative")
|
||||
@@ -226,12 +226,12 @@
|
||||
if("Syndicate Operative Leader")
|
||||
return list(access_syndicate, access_syndicate_leader)
|
||||
if("Vox Raider")
|
||||
return list(access_vox)
|
||||
return list(access_vox)
|
||||
if("Vox Trader")
|
||||
return list(access_vox)
|
||||
return list(access_vox)
|
||||
if("Syndicate Commando")
|
||||
return list(access_syndicate, access_syndicate_leader)
|
||||
|
||||
return list(access_syndicate, access_syndicate_leader)
|
||||
|
||||
/proc/get_all_accesses()
|
||||
return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court,
|
||||
access_medical, access_genetics, access_morgue, access_rd,
|
||||
@@ -470,7 +470,7 @@
|
||||
return "Bridge"
|
||||
if(access_cent_commander)
|
||||
return "Commander"
|
||||
|
||||
|
||||
/proc/get_syndicate_access_desc(A)
|
||||
switch(A)
|
||||
if(access_syndicate)
|
||||
@@ -534,7 +534,7 @@
|
||||
return assignment
|
||||
|
||||
return "Unknown"
|
||||
|
||||
|
||||
proc/GetIdCard(var/mob/living/carbon/human/H)
|
||||
if(H.wear_id)
|
||||
var/id = H.wear_id.GetID()
|
||||
|
||||
@@ -577,7 +577,7 @@
|
||||
set name = "Enter Sleeper"
|
||||
set category = null
|
||||
set src in oview(1)
|
||||
if(usr.stat != 0 || !(ishuman(usr) || ismonkey(usr)))
|
||||
if(usr.stat != 0 || !(ishuman(usr) || issmall(usr)))
|
||||
return
|
||||
if(src.occupant)
|
||||
usr << "\blue <B>The sleeper is already occupied!</B>"
|
||||
|
||||
@@ -290,9 +290,6 @@
|
||||
if("jacket")
|
||||
if (check_cost(500/efficiency)) return 0
|
||||
else new/obj/item/clothing/suit/jacket/leather(src.loc)
|
||||
//if("monkey")
|
||||
// if (check_cost(500)) return 0
|
||||
// else new/mob/living/carbon/monkey(src.loc)
|
||||
processing = 0
|
||||
menustat = "complete"
|
||||
update_icon()
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
var/on_store_message = "has entered long-term storage."
|
||||
var/on_store_name = "Cryogenic Oversight"
|
||||
var/on_enter_occupant_message = "You feel cool air surround you. You go numb as your senses turn inward."
|
||||
var/allow_occupant_types = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
var/allow_occupant_types = list(/mob/living/carbon/human)
|
||||
var/disallow_occupant_types = list()
|
||||
|
||||
var/mob/living/occupant = null // Person waiting to be despawned.
|
||||
|
||||
@@ -331,8 +331,7 @@ Class Procs:
|
||||
if(user.lying || user.stat)
|
||||
return 1
|
||||
if ( ! (istype(usr, /mob/living/carbon/human) || \
|
||||
istype(usr, /mob/living/silicon) || \
|
||||
istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
|
||||
istype(usr, /mob/living/silicon)))
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
/*
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
eprojectile = /obj/item/projectile/beam //If it has, going to kill mode
|
||||
eshot_sound = 'sound/weapons/Laser.ogg'
|
||||
egun = 1
|
||||
|
||||
|
||||
if(/obj/item/weapon/gun/energy/gun/turret)
|
||||
eprojectile = /obj/item/projectile/beam //If it has, going to copypaste mode
|
||||
eshot_sound = 'sound/weapons/Laser.ogg'
|
||||
@@ -210,7 +210,7 @@
|
||||
/obj/machinery/porta_turret/proc/HasController()
|
||||
var/area/A = get_area(src)
|
||||
return A && A.turret_controls.len > 0
|
||||
|
||||
|
||||
/obj/machinery/porta_turret/CanUseTopic(var/mob/user)
|
||||
if(HasController())
|
||||
user << "<span class='notice'>Turrets can only be controlled using the assigned turret controller.</span>"
|
||||
@@ -336,9 +336,9 @@
|
||||
spawn()
|
||||
sleep(60)
|
||||
attacked = 0
|
||||
|
||||
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/porta_turret/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
//Emagging the turret makes it go bonkers and stun everyone. It also makes
|
||||
@@ -450,8 +450,8 @@
|
||||
assess_and_assign(ME.occupant, targets, secondarytargets)
|
||||
|
||||
for(var/obj/spacepod/SP in view(7,src))
|
||||
assess_and_assign(SP.occupant, targets, secondarytargets)
|
||||
|
||||
assess_and_assign(SP.occupant, targets, secondarytargets)
|
||||
|
||||
for(var/obj/vehicle/train/T in view(7,src))
|
||||
assess_and_assign(T.load, targets, secondarytargets)
|
||||
|
||||
@@ -502,7 +502,7 @@
|
||||
if(iscuffed(L)) // If the target is handcuffed, leave it alone
|
||||
return TURRET_NOT_TARGET
|
||||
|
||||
if(isanimal(L) || ismonkey(L)) // Animals are not so dangerous
|
||||
if(isanimal(L) || issmall(L)) // Animals are not so dangerous
|
||||
return check_anomalies ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET
|
||||
if(isalien(L)) // Xenos are dangerous
|
||||
return check_anomalies ? TURRET_PRIORITY_TARGET : TURRET_NOT_TARGET
|
||||
@@ -524,8 +524,8 @@
|
||||
var/mob/living/M = pick(targets)
|
||||
targets -= M
|
||||
if(target(M))
|
||||
return 1
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/porta_turret/proc/popUp() //pops the turret up
|
||||
if(disabled)
|
||||
return
|
||||
@@ -562,7 +562,7 @@
|
||||
raised = 0
|
||||
invisibility = INVISIBILITY_LEVEL_TWO
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/porta_turret/on_assess_perp(mob/living/carbon/human/perp)
|
||||
if((check_access || attacked) && !allowed(perp))
|
||||
//if the turret has been attacked or is angry, target all non-authorized personnel, see req_access
|
||||
@@ -616,8 +616,8 @@
|
||||
|
||||
// Lethal/emagged turrets use twice the power due to higher energy beams
|
||||
// Emagged turrets again use twice as much power due to higher firing rates
|
||||
use_power(reqpower * (2 * (emagged || lethal)) * (2 * emagged))
|
||||
|
||||
use_power(reqpower * (2 * (emagged || lethal)) * (2 * emagged))
|
||||
|
||||
//Shooting Code:
|
||||
A.current = T
|
||||
A.yo = U.y - T.y
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
race = "[H.species.name]"
|
||||
|
||||
|
||||
else if(ismonkey(M))
|
||||
else if(issmall(M))
|
||||
race = "Monkey"
|
||||
language = race
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
if(triggered) return
|
||||
|
||||
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
for(var/mob/O in viewers(world.view, src.loc))
|
||||
O << "<font color='red'>[M] triggered the \icon[src] [src]</font>"
|
||||
triggered = 1
|
||||
|
||||
@@ -494,34 +494,6 @@
|
||||
return 0 //Unsupported slot
|
||||
//END HUMAN
|
||||
|
||||
else if(ismonkey(M))
|
||||
//START MONKEY
|
||||
var/mob/living/carbon/monkey/MO = M
|
||||
switch(slot)
|
||||
if(slot_l_hand)
|
||||
if(MO.l_hand)
|
||||
return 0
|
||||
return 1
|
||||
if(slot_r_hand)
|
||||
if(MO.r_hand)
|
||||
return 0
|
||||
return 1
|
||||
if(slot_wear_mask)
|
||||
if(MO.wear_mask)
|
||||
return 0
|
||||
if( !(slot_flags & SLOT_MASK) )
|
||||
return 0
|
||||
return 1
|
||||
if(slot_back)
|
||||
if(MO.back)
|
||||
return 0
|
||||
if( !(slot_flags & SLOT_BACK) )
|
||||
return 0
|
||||
return 1
|
||||
return 0 //Unsupported slot
|
||||
|
||||
//END MONKEY
|
||||
|
||||
|
||||
/obj/item/verb/verb_pickup()
|
||||
set src in oview(1)
|
||||
@@ -586,14 +558,6 @@
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
if(istype(Mo) && ( \
|
||||
(Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \
|
||||
))
|
||||
// you can't stab someone in the eyes wearing a mask!
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N slimes also don't have eyes!
|
||||
user << "\red You cannot locate any eyes on this creature!"
|
||||
return
|
||||
|
||||
@@ -1134,9 +1134,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
JFLOG("[user] used the fingerprint scanner on [C]")
|
||||
if (!istype(C:dna, /datum/dna))
|
||||
user << "\blue No fingerprints found on [C]"
|
||||
else if(!istype(C, /mob/living/carbon/monkey))
|
||||
if(!isnull(C:gloves))
|
||||
user << "\blue No fingerprints found on [C]"
|
||||
else
|
||||
user << text("\blue [C]'s Fingerprints: [md5(C:dna.uni_identity)]")
|
||||
if ( !(C:blood_DNA) )
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
user.visible_message("<span class='notice'>[user] directs [src] to [M]'s eyes.</span>", \
|
||||
"<span class='notice'>You direct [src] to [M]'s eyes.</span>")
|
||||
|
||||
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) //robots and aliens are unaffected
|
||||
if(istype(M, /mob/living/carbon/human)) //robots and aliens are unaffected
|
||||
if(M.stat == DEAD || M.sdisabilities & BLIND) //mob is dead or fully blind
|
||||
user << "<span class='notice'>[M] pupils does not react to the light!</span>"
|
||||
else if(XRAY in M.mutations) //mob has X-RAY vision
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
user << "<span class='danger'>\The [src] cannot be applied to [M]!</span>"
|
||||
return 1
|
||||
|
||||
if (!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon) || istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey"))
|
||||
if (!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
|
||||
user << "<span class='danger'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red [] has been injected with [] by [].", M, src, user), 1)
|
||||
//Foreach goto(192)
|
||||
if (!(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)))
|
||||
if (!(istype(M, /mob/living/carbon/human)))
|
||||
user << "\red Apparently it didn't work."
|
||||
return
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
//returns 1 if the master item's parent's MouseDrop() should be called, 0 otherwise. It's strange, but no other way of
|
||||
//doing it without the ability to call another proc's parent, really.
|
||||
/obj/item/weapon/storage/internal/proc/handle_mousedrop(mob/user as mob, obj/over_object as obj)
|
||||
if (ishuman(user) || ismonkey(user)) //so monkeys can take off their backpacks -- Urist
|
||||
if (ishuman(user) || issmall(user)) //so monkeys can take off their backpacks -- Urist
|
||||
|
||||
if (istype(user.loc,/obj/mecha)) // stops inventory actions in a mech
|
||||
return 0
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
var/use_sound = "rustle" //sound played when used. null for no sound.
|
||||
|
||||
/obj/item/weapon/storage/MouseDrop(obj/over_object as obj)
|
||||
if (ishuman(usr) || ismonkey(usr)) //so monkeys can take off their backpacks -- Urist
|
||||
if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist
|
||||
var/mob/M = usr
|
||||
|
||||
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
|
||||
|
||||
@@ -59,11 +59,16 @@
|
||||
unwield()
|
||||
|
||||
/obj/item/weapon/twohanded/attack_self(mob/user as mob)
|
||||
if( istype(user,/mob/living/carbon/monkey) )
|
||||
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
||||
..()
|
||||
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.species.is_small)
|
||||
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
..()
|
||||
if(wielded) //Trying to unwield it
|
||||
unwield()
|
||||
user << "<span class='notice'>You are now carrying the [name] with one hand.</span>"
|
||||
|
||||
@@ -4,77 +4,57 @@
|
||||
name = "a meat spike"
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "spike"
|
||||
desc = "A spike for collecting meat from animals"
|
||||
desc = "A spike for collecting meat from animals."
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/meat = 0
|
||||
var/occupied = 0
|
||||
var/meattype = 0 // 0 - Nothing, 1 - Monkey, 2 - Xeno
|
||||
var/occupied
|
||||
var/meat_type
|
||||
var/victim_name = "corpse"
|
||||
|
||||
/obj/structure/kitchenspike
|
||||
attack_paw(mob/user as mob)
|
||||
return src.attack_hand(usr)
|
||||
|
||||
attackby(obj/item/weapon/grab/G as obj, mob/user as mob, params)
|
||||
if(!istype(G, /obj/item/weapon/grab))
|
||||
return
|
||||
if(istype(G.affecting, /mob/living/carbon/monkey))
|
||||
if(src.occupied == 0)
|
||||
src.icon_state = "spikebloody"
|
||||
src.occupied = 1
|
||||
src.meat = 5
|
||||
src.meattype = 1
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!"))
|
||||
del(G.affecting)
|
||||
del(G)
|
||||
|
||||
else
|
||||
user << "\red The spike already has something on it, finish collecting its meat first!"
|
||||
else if(istype(G.affecting, /mob/living/carbon/alien))
|
||||
if(src.occupied == 0)
|
||||
src.icon_state = "spikebloodygreen"
|
||||
src.occupied = 1
|
||||
src.meat = 5
|
||||
src.meattype = 2
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!"))
|
||||
del(G.affecting)
|
||||
del(G)
|
||||
else
|
||||
user << "\red The spike already has something on it, finish collecting its meat first!"
|
||||
/obj/structure/kitchenspike/attackby(obj/item/weapon/grab/G as obj, mob/user as mob)
|
||||
if(!istype(G, /obj/item/weapon/grab) || !G.affecting)
|
||||
return
|
||||
if(occupied)
|
||||
user << "<span class = 'danger'>The spike already has something on it, finish collecting its meat first!</span>"
|
||||
else
|
||||
if(spike(G.affecting))
|
||||
visible_message("<span class = 'danger'>[user] has forced [G.affecting] onto the spike, killing them instantly!</span>")
|
||||
del(G.affecting)
|
||||
del(G)
|
||||
else
|
||||
user << "\red They are too big for the spike, try something smaller!"
|
||||
return
|
||||
user << "<span class='danger'>They are too big for the spike, try something smaller!</span>"
|
||||
|
||||
// MouseDrop_T(var/atom/movable/C, mob/user)
|
||||
// if(istype(C, /obj/mob/carbon/monkey)
|
||||
// else if(istype(C, /obj/mob/carbon/alien) && !istype(C, /mob/living/carbon/alien/larva/slime))
|
||||
// else if(istype(C, /obj/livestock/spesscarp
|
||||
/obj/structure/kitchenspike/proc/spike(var/mob/living/victim)
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if(src.occupied)
|
||||
if(src.meattype == 1)
|
||||
if(src.meat > 1)
|
||||
src.meat--
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey( src.loc )
|
||||
usr << "You remove some meat from the monkey."
|
||||
else if(src.meat == 1)
|
||||
src.meat--
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src.loc)
|
||||
usr << "You remove the last piece of meat from the monkey!"
|
||||
src.icon_state = "spike"
|
||||
src.occupied = 0
|
||||
else if(src.meattype == 2)
|
||||
if(src.meat > 1)
|
||||
src.meat--
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/xenomeat( src.loc )
|
||||
usr << "You remove some meat from the alien."
|
||||
else if(src.meat == 1)
|
||||
src.meat--
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src.loc)
|
||||
usr << "You remove the last piece of meat from the alien!"
|
||||
src.icon_state = "spike"
|
||||
src.occupied = 0
|
||||
if(!istype(victim))
|
||||
return
|
||||
|
||||
if(istype(victim, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = victim
|
||||
if(!H.species.is_small)
|
||||
return 0
|
||||
meat_type = H.species.meat_type
|
||||
icon_state = "spikebloody"
|
||||
else if(istype(victim, /mob/living/carbon/alien))
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
||||
icon_state = "spikebloodygreen"
|
||||
else
|
||||
return 0
|
||||
|
||||
victim_name = victim.name
|
||||
occupied = 1
|
||||
meat = 5
|
||||
return 1
|
||||
|
||||
/obj/structure/kitchenspike/attack_hand(mob/user as mob)
|
||||
if(..() || !occupied)
|
||||
return
|
||||
meat--
|
||||
new meat_type(get_turf(src))
|
||||
if(src.meat > 1)
|
||||
user << "You remove some meat from \the [victim_name]."
|
||||
else if(src.meat == 1)
|
||||
user << "You remove the last piece of meat from \the [victim_name]!"
|
||||
icon_state = "spike"
|
||||
occupied = 0
|
||||
|
||||
@@ -40,6 +40,11 @@ var/list/mechtoys = list(
|
||||
density = 0
|
||||
anchored = 1
|
||||
layer = 4
|
||||
var/list/mobs_can_pass = list(
|
||||
/mob/living/carbon/slime,
|
||||
/mob/living/simple_animal/mouse,
|
||||
/mob/living/silicon/robot/drone
|
||||
)
|
||||
|
||||
/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
|
||||
if(istype(A) && A.checkpass(PASSGLASS))
|
||||
@@ -52,10 +57,19 @@ var/list/mechtoys = list(
|
||||
if(istype(A, /obj/vehicle)) //no vehicles
|
||||
return 0
|
||||
|
||||
if(istype(A, /mob/living)) // You Shall Not Pass!
|
||||
var/mob/living/M = A
|
||||
if(!M.lying && !istype(M, /mob/living/carbon/monkey) && !istype(M, /mob/living/carbon/slime) && !istype(M, /mob/living/simple_animal/mouse) && !istype(M, /mob/living/silicon/robot/drone)) //If your not laying down, or a small creature, no pass.
|
||||
return 0
|
||||
var/mob/living/M = A
|
||||
if(istype(M))
|
||||
if(M.lying)
|
||||
return ..()
|
||||
for(var/mob_type in mobs_can_pass)
|
||||
if(istype(A, mob_type))
|
||||
return ..()
|
||||
if(istype(A, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.species.is_small)
|
||||
return ..()
|
||||
return 0
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/plasticflaps/ex_act(severity)
|
||||
|
||||
@@ -167,9 +167,7 @@
|
||||
|
||||
// Only adds blood on the floor -- Skie
|
||||
/turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob)
|
||||
if(istype(M, /mob/living/carbon/monkey))
|
||||
blood_splatter(src,M,1)
|
||||
else if( istype(M, /mob/living/carbon/alien ))
|
||||
if( istype(M, /mob/living/carbon/alien ))
|
||||
var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src)
|
||||
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
|
||||
else if( istype(M, /mob/living/silicon/robot ))
|
||||
|
||||
@@ -101,32 +101,6 @@
|
||||
death(0)
|
||||
suiciding = 0
|
||||
|
||||
/mob/living/carbon/monkey/verb/suicide()
|
||||
set hidden = 1
|
||||
|
||||
if (stat == 2)
|
||||
src << "You're already dead!"
|
||||
return
|
||||
|
||||
if (!ticker)
|
||||
src << "You can't commit suicide before the game starts!"
|
||||
return
|
||||
|
||||
if (suiciding)
|
||||
src << "You're already committing suicide! Be patient!"
|
||||
return
|
||||
|
||||
var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No")
|
||||
|
||||
if(confirm == "Yes")
|
||||
if(!canmove || restrained())
|
||||
src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
|
||||
return
|
||||
suiciding = 1
|
||||
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
|
||||
viewers(src) << "\red <b>[src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide.</b>"
|
||||
adjustOxyLoss(max(175- getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
||||
updatehealth()
|
||||
|
||||
/mob/living/silicon/ai/verb/suicide()
|
||||
set hidden = 1
|
||||
|
||||
@@ -101,7 +101,7 @@ var/global/nologevent = 0
|
||||
body += "<br>"
|
||||
|
||||
//Monkey
|
||||
if(ismonkey(M))
|
||||
if(issmall(M))
|
||||
body += "<B>Monkeyized</B> | "
|
||||
else
|
||||
body += "<A href='?src=\ref[src];monkeyone=\ref[M]'>Monkeyize</A> | "
|
||||
|
||||
@@ -436,9 +436,10 @@ var/list/admin_verbs_mentor = list(
|
||||
var/mob/living/carbon/human/H = T
|
||||
if (H.species)
|
||||
D.affected_species = list(H.species.name)
|
||||
if(istype(T,/mob/living/carbon/monkey))
|
||||
var/mob/living/carbon/monkey/M = T
|
||||
D.affected_species = list(M.greaterform)
|
||||
if(H.species.primitive_form)
|
||||
D.affected_species |= H.species.primitive_form
|
||||
if(H.species.greater_form)
|
||||
D.affected_species |= H.species.greater_form
|
||||
infect_virus2(T,D,1)
|
||||
|
||||
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
M_job = M.job
|
||||
else if(isslime(M))
|
||||
M_job = "slime"
|
||||
else if(ismonkey(M))
|
||||
else if(issmall(M))
|
||||
M_job = "Monkey"
|
||||
else if(isalien(M)) //aliens
|
||||
if(islarva(M))
|
||||
@@ -355,7 +355,7 @@
|
||||
dat += "<td>New Player</td>"
|
||||
else if(isobserver(M))
|
||||
dat += "<td>Ghost</td>"
|
||||
else if(ismonkey(M))
|
||||
else if(issmall(M))
|
||||
dat += "<td>Monkey</td>"
|
||||
else if(isalien(M))
|
||||
dat += "<td>Alien</td>"
|
||||
|
||||
@@ -306,7 +306,7 @@
|
||||
if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob, 1 )
|
||||
if("human") M.change_mob_type( /mob/living/carbon/human/human , null, null, delmob, 1 )
|
||||
if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob, 1 )
|
||||
if("monkey") M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob, 1 )
|
||||
if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob, 1 )
|
||||
if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob, 1 )
|
||||
if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob, 1 )
|
||||
if("runtime") M.change_mob_type( /mob/living/simple_animal/cat/Runtime , null, null, delmob, 1 )
|
||||
@@ -1440,44 +1440,6 @@
|
||||
show_player_panel(H)
|
||||
//H.regenerate_icons()
|
||||
|
||||
/***************** BEFORE**************
|
||||
|
||||
if (href_list["l_players"])
|
||||
var/dat = "<B>Name/Real Name/Key/IP:</B><HR>"
|
||||
for(var/mob/M in world)
|
||||
var/foo = ""
|
||||
if (ismob(M) && M.client)
|
||||
if(!M.client.authenticated && !M.client.authenticating)
|
||||
foo += text("\[ <A HREF='?src=\ref[];adminauth=\ref[]'>Authorize</A> | ", src, M)
|
||||
else
|
||||
foo += text("\[ <B>Authorized</B> | ")
|
||||
if(M.start)
|
||||
if(!istype(M, /mob/living/carbon/monkey))
|
||||
foo += text("<A HREF='?src=\ref[];monkeyone=\ref[]'>Monkeyize</A> | ", src, M)
|
||||
else
|
||||
foo += text("<B>Monkeyized</B> | ")
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
foo += text("<B>Is an AI</B> | ")
|
||||
else
|
||||
foo += text("<A HREF='?src=\ref[];makeai=\ref[]'>Make AI</A> | ", src, M)
|
||||
if(!(M.z in config.admin_levels))
|
||||
foo += text("<A HREF='?src=\ref[];sendtoprison=\ref[]'>Prison</A> | ", src, M)
|
||||
foo += text("<A HREF='?src=\ref[];sendtomaze=\ref[]'>Maze</A> | ", src, M)
|
||||
else
|
||||
foo += text("<B>On Z = 2</B> | ")
|
||||
else
|
||||
foo += text("<B>Hasn't Entered Game</B> | ")
|
||||
foo += text("<A HREF='?src=\ref[];revive=\ref[]'>Heal/Revive</A> | ", src, M)
|
||||
|
||||
foo += text("<A HREF='?src=\ref[];forcespeech=\ref[]'>Say</A> \]", src, M)
|
||||
dat += text("N: [] R: [] (K: []) (IP: []) []<BR>", M.name, M.real_name, (M.client ? M.client : "No client"), M.lastKnownIP, foo)
|
||||
|
||||
usr << browse(dat, "window=players;size=900x480")
|
||||
|
||||
*****************AFTER******************/
|
||||
|
||||
// Now isn't that much better? IT IS NOW A PROC, i.e. kinda like a big panel like unstable
|
||||
|
||||
else if(href_list["adminplayeropts"])
|
||||
var/mob/M = locate(href_list["adminplayeropts"])
|
||||
show_player_panel(M)
|
||||
@@ -2000,7 +1962,7 @@
|
||||
where = "onfloor"
|
||||
|
||||
if ( where == "inhand" ) //Can only give when human or monkey
|
||||
if ( !( ishuman(usr) || ismonkey(usr) ) )
|
||||
if ( !( ishuman(usr) || issmall(usr) ) )
|
||||
usr << "Can only spawn in hand when you're a human or a monkey."
|
||||
where = "onfloor"
|
||||
else if ( usr.get_active_hand() )
|
||||
|
||||
@@ -415,18 +415,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
message_admins("\blue [key_name_admin(usr)] has respawned [new_xeno.key] as a filthy xeno.", 1)
|
||||
return //all done. The ghost is auto-deleted
|
||||
|
||||
//check if they were a monkey
|
||||
else if(findtext(G_found.real_name,"monkey"))
|
||||
if(alert("This character appears to have been a monkey. Would you like to respawn them as such?",,"Yes","No")=="Yes")
|
||||
var/mob/living/carbon/monkey/new_monkey = new(pick(latejoin))
|
||||
G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use
|
||||
new_monkey.key = G_found.key
|
||||
new_monkey << "You have been fully respawned. Enjoy the game."
|
||||
message_admins("\blue [key_name_admin(usr)] has respawned [new_monkey.key] as a filthy xeno.", 1)
|
||||
return //all done. The ghost is auto-deleted
|
||||
|
||||
|
||||
//Ok, it's not a xeno or a monkey. So, spawn a human.
|
||||
var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned.
|
||||
|
||||
var/datum/data/record/record_found //Referenced to later to either randomize or not randomize the character.
|
||||
|
||||
@@ -413,13 +413,13 @@ BLIND // can't see anything
|
||||
A.attack_hand(user)
|
||||
return
|
||||
|
||||
if ((ishuman(usr) || ismonkey(usr)) && src.loc == user) //make it harder to accidentally undress yourself
|
||||
if ((ishuman(usr) || issmall(usr)) && src.loc == user) //make it harder to accidentally undress yourself
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/clothing/under/MouseDrop(obj/over_object as obj)
|
||||
if (ishuman(usr) || ismonkey(usr))
|
||||
if (ishuman(usr) || issmall(usr))
|
||||
//makes sure that the clothing is equipped so that we can't drag it into our hand from miles away.
|
||||
if (!(src.loc == usr))
|
||||
return
|
||||
|
||||
@@ -58,14 +58,6 @@
|
||||
randmutg(H) // Applies good mutation
|
||||
domutcheck(H,null,1)
|
||||
|
||||
|
||||
for(var/mob/living/carbon/monkey/M in living_mob_list)
|
||||
var/turf/T = get_turf(M)
|
||||
if(!T)
|
||||
continue
|
||||
if(!(T.z in config.station_levels))
|
||||
continue
|
||||
M.apply_effect((rand(5,25)),IRRADIATE,0)
|
||||
sleep(100)
|
||||
|
||||
|
||||
|
||||
@@ -570,4 +570,28 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/datum/language/human/monkey
|
||||
name = "Chimpanzee"
|
||||
desc = "Ook ook ook."
|
||||
speech_verb = "chimpers"
|
||||
ask_verb = "chimpers"
|
||||
exclaim_verb = "screeches"
|
||||
key = "6"
|
||||
|
||||
/datum/language/skrell/monkey
|
||||
name = "Neara"
|
||||
desc = "Squik squik squik."
|
||||
key = "8"
|
||||
|
||||
/datum/language/unathi/monkey
|
||||
name = "Stok"
|
||||
desc = "Hiss hiss hiss."
|
||||
key = "7"
|
||||
|
||||
/datum/language/tajaran/monkey
|
||||
name = "Farwa"
|
||||
desc = "Meow meow meow."
|
||||
key = "9"
|
||||
|
||||
|
||||
#undef SCRAMBLE_CACHE_LEN
|
||||
|
||||
@@ -256,10 +256,11 @@
|
||||
if(getBrainLoss() >= 60)
|
||||
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
|
||||
|
||||
if(!key && brain_op_stage != 4 && stat != DEAD)
|
||||
msg += "<span class='deadsay'>[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.</span>\n"
|
||||
else if(!client && brain_op_stage != 4 && stat != DEAD)
|
||||
msg += "[t_He] [t_has] suddenly fallen asleep.\n"
|
||||
if(species.show_ssd && (!species.has_organ["brain"] || has_brain()) && stat != DEAD)
|
||||
if(!key)
|
||||
msg += "<span class='deadsay'>[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.</span>\n"
|
||||
else if(!client)
|
||||
msg += "[t_He] [t_has] suddenly fallen asleep.\n"
|
||||
|
||||
var/list/wound_flavor_text = list()
|
||||
var/list/is_destroyed = list()
|
||||
|
||||
@@ -122,6 +122,18 @@
|
||||
h_style = "Nucleation Crystals"
|
||||
..(new_loc, "Nucleation")
|
||||
|
||||
/mob/living/carbon/human/monkey/New(var/new_loc)
|
||||
..(new_loc, "Monkey")
|
||||
|
||||
/mob/living/carbon/human/farwa/New(var/new_loc)
|
||||
..(new_loc, "Farwa")
|
||||
|
||||
/mob/living/carbon/human/neara/New(var/new_loc)
|
||||
..(new_loc, "Neara")
|
||||
|
||||
/mob/living/carbon/human/stok/New(var/new_loc)
|
||||
..(new_loc, "Stok")
|
||||
|
||||
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)
|
||||
if ((!( yes ) || now_pushing))
|
||||
return
|
||||
|
||||
@@ -345,10 +345,6 @@
|
||||
name = "human"
|
||||
var/mob/living/carbon/human/target = null
|
||||
|
||||
/obj/effect/equip_e/monkey
|
||||
name = "monkey"
|
||||
var/mob/living/carbon/monkey/target = null
|
||||
|
||||
/obj/effect/equip_e/process()
|
||||
return
|
||||
|
||||
|
||||
@@ -124,6 +124,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
|
||||
handle_heartattack()
|
||||
|
||||
if(!client)
|
||||
species.handle_npc(src)
|
||||
|
||||
if(stat == DEAD)
|
||||
handle_decay()
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
/obj/item/clothing/under/punpun
|
||||
name = "fancy uniform"
|
||||
desc = "It looks like it was tailored for a monkey."
|
||||
icon_state = "punpun"
|
||||
item_color = "punpun"
|
||||
species_restricted = list("Monkey")
|
||||
|
||||
/mob/living/carbon/human/monkey/punpun/New()
|
||||
..()
|
||||
spawn(1)
|
||||
name = "Pun Pun"
|
||||
real_name = name
|
||||
w_uniform = new /obj/item/clothing/under/punpun(src)
|
||||
@@ -0,0 +1,88 @@
|
||||
/datum/species/monkey
|
||||
name = "Monkey"
|
||||
name_plural = "Monkeys"
|
||||
blurb = "Ook."
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_monkey.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_monkey.dmi'
|
||||
damage_overlays = 'icons/mob/human_races/masks/dam_monkey.dmi'
|
||||
damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi'
|
||||
blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi'
|
||||
language = null
|
||||
default_language = "Chimpanzee"
|
||||
greater_form = "Human"
|
||||
is_small = 1
|
||||
has_fine_manipulation = 0
|
||||
show_ssd = 0
|
||||
eyes = "blank_eyes"
|
||||
|
||||
gibbed_anim = "gibbed-m"
|
||||
dusted_anim = "dust-m"
|
||||
death_message = "lets out a faint chimper as it collapses and stops moving..."
|
||||
tail = "chimptail"
|
||||
|
||||
unarmed_types = list(/datum/unarmed_attack/bite, /datum/unarmed_attack/claws)
|
||||
inherent_verbs = list(/mob/living/proc/ventcrawl)
|
||||
hud_type = /datum/hud_data/monkey
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
|
||||
|
||||
rarity_value = 0.1
|
||||
total_health = 75
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
|
||||
flags = IS_RESTRICTED
|
||||
|
||||
/datum/species/monkey/handle_npc(var/mob/living/carbon/human/H)
|
||||
if(H.stat != CONSCIOUS)
|
||||
return
|
||||
if(prob(33) && H.canmove && isturf(H.loc) && !H.pulledby) //won't move if being pulled
|
||||
step(H, pick(cardinal))
|
||||
if(prob(1))
|
||||
H.emote(pick("scratch","jump","roll","tail"))
|
||||
|
||||
/datum/species/monkey/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
H.real_name = "[lowertext(name)] ([rand(100,999)])"
|
||||
H.name = H.real_name
|
||||
..()
|
||||
|
||||
/datum/species/monkey/tajaran
|
||||
name = "Farwa"
|
||||
name_plural = "Farwa"
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_farwa.dmi'
|
||||
|
||||
greater_form = "Tajaran"
|
||||
default_language = "Farwa"
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
tail = "farwatail"
|
||||
|
||||
/datum/species/monkey/skrell
|
||||
name = "Neara"
|
||||
name_plural = "Neara"
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_neara.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_neara.dmi'
|
||||
|
||||
greater_form = "Skrell"
|
||||
default_language = "Neara"
|
||||
flesh_color = "#8CD7A3"
|
||||
blood_color = "#1D2CBF"
|
||||
reagent_tag = IS_SKRELL
|
||||
tail = null
|
||||
|
||||
/datum/species/monkey/unathi
|
||||
name = "Stok"
|
||||
name_plural = "Stok"
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_stok.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_stok.dmi'
|
||||
|
||||
tail = "stoktail"
|
||||
greater_form = "Unathi"
|
||||
default_language = "Stok"
|
||||
flesh_color = "#34AF10"
|
||||
base_color = "#066000"
|
||||
reagent_tag = IS_UNATHI
|
||||
@@ -0,0 +1,457 @@
|
||||
/datum/species/human
|
||||
name = "Human"
|
||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_human.dmi'
|
||||
primitive_form = "Monkey"
|
||||
path = /mob/living/carbon/human/human
|
||||
language = "Sol Common"
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
bodyflags = HAS_SKIN_TONE
|
||||
dietflags = DIET_OMNI
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \
|
||||
colonies across a wide swathe of space. They hold a wide range of forms and creeds.<br/><br/> \
|
||||
While the central Sol government maintains control of its far-flung people, powerful corporate \
|
||||
interests, rampant cyber and bio-augmentation and secretive factions make life on most human \
|
||||
worlds tumultous at best."
|
||||
|
||||
/datum/species/unathi
|
||||
name = "Unathi"
|
||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_lizard.dmi'
|
||||
path = /mob/living/carbon/human/unathi
|
||||
default_language = "Galactic Common"
|
||||
language = "Sinta'unathi"
|
||||
tail = "sogtail"
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
primitive_form = "Stok"
|
||||
darksight = 3
|
||||
|
||||
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
|
||||
Uuosa-Eso system, which roughly translates to 'burning mother'.<br/><br/>Coming from a harsh, radioactive \
|
||||
desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \
|
||||
else, frequently even their own lives. They prefer warmer temperatures than most species and \
|
||||
their native tongue is a heavy hissing laungage called Sinta'Unathi."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
bodyflags = FEET_CLAWS | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
dietflags = DIET_CARN
|
||||
|
||||
cold_level_1 = 280 //Default 260 - Lower is better
|
||||
cold_level_2 = 220 //Default 200
|
||||
cold_level_3 = 140 //Default 120
|
||||
|
||||
heat_level_1 = 380 //Default 360 - Higher is better
|
||||
heat_level_2 = 420 //Default 400
|
||||
heat_level_3 = 480 //Default 460
|
||||
heat_level_3_breathe = 1100 //Default 1000
|
||||
|
||||
flesh_color = "#34AF10"
|
||||
|
||||
reagent_tag = IS_UNATHI
|
||||
base_color = "#066000"
|
||||
|
||||
/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/tajaran
|
||||
name = "Tajaran"
|
||||
icobase = 'icons/mob/human_races/r_tajaran.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
|
||||
path = /mob/living/carbon/human/tajaran
|
||||
default_language = "Galactic Common"
|
||||
language = "Siik'tajr"
|
||||
tail = "tajtail"
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
darksight = 8
|
||||
|
||||
blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \
|
||||
S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \
|
||||
influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \
|
||||
of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \
|
||||
using unique inflections their mouths form."
|
||||
|
||||
cold_level_1 = 240
|
||||
cold_level_2 = 180
|
||||
cold_level_3 = 100
|
||||
|
||||
heat_level_1 = 340
|
||||
heat_level_2 = 380
|
||||
heat_level_3 = 440
|
||||
heat_level_3_breathe = 900
|
||||
|
||||
primitive_form = "Farwa"
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
dietflags = DIET_OMNI
|
||||
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
|
||||
/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/vulpkanin
|
||||
name = "Vulpkanin"
|
||||
icobase = 'icons/mob/human_races/r_vulpkanin.dmi'
|
||||
deform = 'icons/mob/human_races/r_vulpkanin.dmi'
|
||||
path = /mob/living/carbon/human/vulpkanin
|
||||
default_language = "Galactic Common"
|
||||
language = "Canilunzt"
|
||||
tail = "vulptail"
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
darksight = 8
|
||||
|
||||
blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \
|
||||
dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \
|
||||
culture both feared and respected for their scientific breakthroughs. Discovery, loyalty, and utilitarianism dominates their lifestyles \
|
||||
to the degree it can cause conflict with more rigorous and strict authorities. They speak a guttural language known as 'Canilunzt' \
|
||||
which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
dietflags = DIET_OMNI
|
||||
|
||||
flesh_color = "#966464"
|
||||
base_color = "#BE8264"
|
||||
|
||||
/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/skrell
|
||||
name = "Skrell"
|
||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_skrell.dmi'
|
||||
path = /mob/living/carbon/human/skrell
|
||||
default_language = "Galactic Common"
|
||||
language = "Skrellian"
|
||||
primitive_form = "Neara"
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \
|
||||
the royals' or 'Light of the Crown'.<br/><br/>Skrell are a highly advanced and logical race who live under the rule \
|
||||
of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \
|
||||
herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
|
||||
the secrets of their empire to their allies."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
bodyflags = HAS_SKIN_COLOR
|
||||
dietflags = DIET_HERB
|
||||
|
||||
flesh_color = "#8CD7A3"
|
||||
blood_color = "#1D2CBF"
|
||||
reagent_tag = IS_SKRELL
|
||||
|
||||
/datum/species/vox
|
||||
name = "Vox"
|
||||
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_vox.dmi'
|
||||
path = /mob/living/carbon/human/vox
|
||||
|
||||
default_language = "Galactic Common"
|
||||
language = "Vox-pidgin"
|
||||
speech_sounds = list('sound/voice/shriek1.ogg')
|
||||
speech_chance = 20
|
||||
|
||||
unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too.
|
||||
|
||||
blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \
|
||||
scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \
|
||||
alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \
|
||||
refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \
|
||||
smell.<br/><br/>Most humans will never meet a Vox raider, instead learning of this insular species through \
|
||||
dealing with their traders and merchants; those that do rarely enjoy the experience."
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = 0
|
||||
|
||||
cold_level_1 = 80
|
||||
cold_level_2 = 50
|
||||
cold_level_3 = 0
|
||||
|
||||
eyes = "vox_eyes_s"
|
||||
|
||||
breath_type = "nitrogen"
|
||||
poison_type = "oxygen"
|
||||
|
||||
flags = NO_SCAN | IS_WHITELISTED
|
||||
dietflags = DIET_OMNI
|
||||
|
||||
blood_color = "#2299FC"
|
||||
flesh_color = "#808D11"
|
||||
|
||||
reagent_tag = IS_VOX
|
||||
|
||||
makeName(var/gender,var/mob/living/carbon/human/H=null)
|
||||
var/sounds = rand(2,8)
|
||||
var/i = 0
|
||||
var/newname = ""
|
||||
|
||||
while(i<=sounds)
|
||||
i++
|
||||
newname += pick(vox_name_syllables)
|
||||
return capitalize(newname)
|
||||
/*
|
||||
/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
|
||||
H.verbs += /mob/living/carbon/human/proc/leap
|
||||
..() */
|
||||
|
||||
/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
|
||||
H.verbs += /mob/living/carbon/human/proc/gut
|
||||
..()
|
||||
|
||||
/datum/species/vox/armalis
|
||||
name = "Vox Armalis"
|
||||
icobase = 'icons/mob/human_races/r_armalis.dmi'
|
||||
deform = 'icons/mob/human_races/r_armalis.dmi'
|
||||
path = /mob/living/carbon/human/voxarmalis
|
||||
unarmed_type = /datum/unarmed_attack/claws/armalis
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = 0
|
||||
|
||||
cold_level_1 = 80
|
||||
cold_level_2 = 50
|
||||
cold_level_3 = 0
|
||||
|
||||
heat_level_1 = 2000
|
||||
heat_level_2 = 3000
|
||||
heat_level_3 = 4000
|
||||
heat_level_3_breathe = 4000
|
||||
|
||||
brute_mod = 0.2
|
||||
burn_mod = 0.2
|
||||
|
||||
eyes = "blank_eyes"
|
||||
breath_type = "nitrogen"
|
||||
poison_type = "oxygen"
|
||||
|
||||
flags = NO_SCAN | NO_BLOOD | HAS_TAIL | NO_PAIN | IS_WHITELISTED
|
||||
dietflags = DIET_OMNI //should inherit this from vox, this is here just in case
|
||||
|
||||
blood_color = "#2299FC"
|
||||
flesh_color = "#808D11"
|
||||
|
||||
reagent_tag = IS_VOX
|
||||
|
||||
tail = "armalis_tail"
|
||||
icon_template = 'icons/mob/human_races/r_armalis.dmi'
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"lungs" = /obj/item/organ/lungs,
|
||||
"liver" = /obj/item/organ/liver,
|
||||
"kidneys" = /obj/item/organ/kidneys,
|
||||
"brain" = /obj/item/organ/brain,
|
||||
"eyes" = /obj/item/organ/eyes,
|
||||
"stack" = /obj/item/organ/stack/vox
|
||||
)
|
||||
|
||||
/datum/species/kidan
|
||||
name = "Kidan"
|
||||
icobase = 'icons/mob/human_races/r_kidan.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_kidan.dmi'
|
||||
path = /mob/living/carbon/human/kidan
|
||||
default_language = "Galactic Common"
|
||||
language = "Chittin"
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
|
||||
brute_mod = 0.8
|
||||
|
||||
flags = IS_WHITELISTED
|
||||
bodyflags = FEET_CLAWS
|
||||
dietflags = DIET_HERB
|
||||
|
||||
blood_color = "#FB9800"
|
||||
|
||||
|
||||
/datum/species/slime
|
||||
name = "Slime People"
|
||||
default_language = "Galactic Common"
|
||||
language = "Bubblish"
|
||||
icobase = 'icons/mob/human_races/r_slime.dmi'
|
||||
deform = 'icons/mob/human_races/r_slime.dmi'
|
||||
path = /mob/living/carbon/human/slime
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN
|
||||
bodyflags = HAS_SKIN_COLOR
|
||||
bloodflags = BLOOD_SLIME
|
||||
dietflags = DIET_CARN
|
||||
|
||||
//ventcrawler = 1 //ventcrawling commented out
|
||||
|
||||
has_organ = list(
|
||||
"brain" = /obj/item/organ/brain/slime
|
||||
)
|
||||
|
||||
/datum/species/grey
|
||||
name = "Grey"
|
||||
icobase = 'icons/mob/human_races/r_grey.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_grey.dmi'
|
||||
default_language = "Galactic Common"
|
||||
//language = "Grey" // Perhaps if they ever get a hivemind
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
darksight = 5 // BOOSTED from 2
|
||||
eyes = "grey_eyes_s"
|
||||
|
||||
brute_mod = 1.25 //greys are fragile
|
||||
|
||||
default_genes = list(REMOTE_TALK)
|
||||
|
||||
|
||||
flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
dietflags = DIET_HERB
|
||||
|
||||
blood_color = "#A200FF"
|
||||
|
||||
/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove)
|
||||
if(!remove)
|
||||
C.dna.SetSEState(REMOTETALKBLOCK,1,1)
|
||||
C.mutations |= REMOTE_TALK
|
||||
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
|
||||
else
|
||||
C.dna.SetSEState(REMOTETALKBLOCK,0,1)
|
||||
C.mutations -= REMOTE_TALK
|
||||
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
|
||||
C.update_mutations()
|
||||
..()
|
||||
|
||||
/datum/species/diona
|
||||
name = "Diona"
|
||||
icobase = 'icons/mob/human_races/r_diona.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_plant.dmi'
|
||||
path = /mob/living/carbon/human/diona
|
||||
default_language = "Galactic Common"
|
||||
language = "Rootspeak"
|
||||
unarmed_type = /datum/unarmed_attack/diona
|
||||
//primitive_form = "Nymph"
|
||||
slowdown = 5
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = -1
|
||||
|
||||
cold_level_1 = 50
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
heat_level_1 = 300
|
||||
heat_level_2 = 340
|
||||
heat_level_3 = 400
|
||||
heat_level_3_breathe = 700
|
||||
|
||||
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
|
||||
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
|
||||
there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
|
||||
Minoris primary being ringed with a cloud of singing space-station-sized entities.<br/><br/>The Dionaea coexist peacefully with \
|
||||
all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \
|
||||
even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \
|
||||
water and other radiation."
|
||||
|
||||
flags = NO_BREATHE | REQUIRE_LIGHT | IS_PLANT | RAD_ABSORB | NO_BLOOD | NO_PAIN
|
||||
dietflags = 0 //Diona regenerate nutrition in light, no diet necessary
|
||||
|
||||
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
|
||||
|
||||
blood_color = "#004400"
|
||||
flesh_color = "#907E4A"
|
||||
|
||||
reagent_tag = IS_DIONA
|
||||
|
||||
has_organ = list(
|
||||
"nutrient channel" = /obj/item/organ/diona/nutrients,
|
||||
"neural strata" = /obj/item/organ/diona/strata,
|
||||
"response node" = /obj/item/organ/diona/node,
|
||||
"gas bladder" = /obj/item/organ/diona/bladder,
|
||||
"polyp segment" = /obj/item/organ/diona/polyp,
|
||||
"anchoring ligament" = /obj/item/organ/diona/ligament
|
||||
)
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/diona/chest),
|
||||
"groin" = list("path" = /obj/item/organ/external/diona/groin),
|
||||
"head" = list("path" = /obj/item/organ/external/diona/head),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/diona/arm),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/diona/arm/right),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/diona/leg),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/diona/leg/right),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/diona/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/diona/hand/right),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/diona/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
|
||||
)
|
||||
|
||||
/datum/species/diona/can_understand(var/mob/other)
|
||||
var/mob/living/carbon/monkey/diona/D = other
|
||||
if(istype(D))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
H.gender = NEUTER
|
||||
|
||||
return ..()
|
||||
|
||||
/* //overpowered and dumb as hell; they get cloning back, though.
|
||||
/datum/species/diona/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
var/mob/living/carbon/monkey/diona/S = new(get_turf(H))
|
||||
|
||||
if(H.mind)
|
||||
H.mind.transfer_to(S)
|
||||
else
|
||||
S.key = H.key
|
||||
|
||||
for(var/mob/living/carbon/monkey/diona/D in H.contents)
|
||||
if(D.client)
|
||||
D.loc = H.loc
|
||||
else
|
||||
del(D)
|
||||
|
||||
H.visible_message("\red[H] splits apart with a wet slithering noise!") */
|
||||
|
||||
/datum/species/machine
|
||||
name = "Machine"
|
||||
icobase = 'icons/mob/human_races/r_machine.dmi'
|
||||
deform = 'icons/mob/human_races/r_machine.dmi'
|
||||
path = /mob/living/carbon/human/machine
|
||||
default_language = "Galactic Common"
|
||||
language = "Trinary"
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
eyes = "blank_eyes"
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
|
||||
cold_level_1 = 50
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
heat_level_1 = 500 //gives them about 25 seconds in space before taking damage
|
||||
heat_level_2 = 540
|
||||
heat_level_3 = 600
|
||||
heat_level_3_breathe = 600
|
||||
|
||||
synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
|
||||
|
||||
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC | NO_INTORGANS
|
||||
dietflags = 0 //IPCs can't eat, so no diet
|
||||
blood_color = "#1F181F"
|
||||
flesh_color = "#AAAAAA"
|
||||
|
||||
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
|
||||
H.emote("deathgasp")
|
||||
for(var/organ_name in H.organs_by_name)
|
||||
if (organ_name == "head") // do the head last as that's when the user will be transfered to the posibrain
|
||||
continue
|
||||
var/obj/item/organ/external/O = H.organs_by_name[organ_name]
|
||||
if(O && (O.body_part != UPPER_TORSO) && (O.body_part != LOWER_TORSO)) // We're making them fall apart, not gibbing them!
|
||||
O.droplimb(1)
|
||||
var/obj/item/organ/external/O = H.organs_by_name["head"]
|
||||
if(O) O.droplimb(1)
|
||||
@@ -7,10 +7,17 @@
|
||||
var/path // Species path
|
||||
var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set.
|
||||
var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set.
|
||||
|
||||
// Damage overlay and masks.
|
||||
var/damage_overlays = 'icons/mob/human_races/masks/dam_human.dmi'
|
||||
var/damage_mask = 'icons/mob/human_races/masks/dam_mask_human.dmi'
|
||||
var/blood_mask = 'icons/mob/human_races/masks/blood_human.dmi'
|
||||
|
||||
var/eyes = "eyes_s" // Icon for eyes.
|
||||
var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen.
|
||||
|
||||
var/primitive // Lesser form, if any (ie. monkey for humans)
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
var/tail // Name of tail image in species effects icon file.
|
||||
var/unarmed //For empty hand harm-intent attack
|
||||
var/unarmed_type = /datum/unarmed_attack
|
||||
@@ -60,12 +67,15 @@
|
||||
var/blood_color = "#A10808" //Red.
|
||||
var/flesh_color = "#FFC896" //Pink.
|
||||
var/single_gib_type = /obj/effect/decal/cleanable/blood/gibs
|
||||
var/meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human
|
||||
|
||||
var/base_color //Used when setting species.
|
||||
|
||||
//Used in icon caching.
|
||||
var/race_key = 0
|
||||
var/icon/icon_template
|
||||
var/is_small
|
||||
var/show_ssd = 1
|
||||
|
||||
// Language/culture vars.
|
||||
var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers.
|
||||
@@ -314,467 +324,9 @@
|
||||
/datum/species/proc/can_understand(var/mob/other)
|
||||
return
|
||||
|
||||
/datum/species/human
|
||||
name = "Human"
|
||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_human.dmi'
|
||||
primitive = /mob/living/carbon/monkey
|
||||
path = /mob/living/carbon/human/human
|
||||
language = "Sol Common"
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
bodyflags = HAS_SKIN_TONE
|
||||
dietflags = DIET_OMNI
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \
|
||||
colonies across a wide swathe of space. They hold a wide range of forms and creeds.<br/><br/> \
|
||||
While the central Sol government maintains control of its far-flung people, powerful corporate \
|
||||
interests, rampant cyber and bio-augmentation and secretive factions make life on most human \
|
||||
worlds tumultous at best."
|
||||
|
||||
/datum/species/unathi
|
||||
name = "Unathi"
|
||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_lizard.dmi'
|
||||
path = /mob/living/carbon/human/unathi
|
||||
default_language = "Galactic Common"
|
||||
language = "Sinta'unathi"
|
||||
tail = "sogtail"
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
primitive = /mob/living/carbon/monkey/unathi
|
||||
darksight = 3
|
||||
|
||||
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
|
||||
Uuosa-Eso system, which roughly translates to 'burning mother'.<br/><br/>Coming from a harsh, radioactive \
|
||||
desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \
|
||||
else, frequently even their own lives. They prefer warmer temperatures than most species and \
|
||||
their native tongue is a heavy hissing laungage called Sinta'Unathi."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
bodyflags = FEET_CLAWS | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
dietflags = DIET_CARN
|
||||
|
||||
cold_level_1 = 280 //Default 260 - Lower is better
|
||||
cold_level_2 = 220 //Default 200
|
||||
cold_level_3 = 140 //Default 120
|
||||
|
||||
heat_level_1 = 380 //Default 360 - Higher is better
|
||||
heat_level_2 = 420 //Default 400
|
||||
heat_level_3 = 480 //Default 460
|
||||
heat_level_3_breathe = 1100 //Default 1000
|
||||
|
||||
flesh_color = "#34AF10"
|
||||
|
||||
reagent_tag = IS_UNATHI
|
||||
base_color = "#066000"
|
||||
|
||||
/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/tajaran
|
||||
name = "Tajaran"
|
||||
icobase = 'icons/mob/human_races/r_tajaran.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
|
||||
path = /mob/living/carbon/human/tajaran
|
||||
default_language = "Galactic Common"
|
||||
language = "Siik'tajr"
|
||||
tail = "tajtail"
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
darksight = 8
|
||||
|
||||
blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \
|
||||
S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \
|
||||
influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \
|
||||
of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \
|
||||
using unique inflections their mouths form."
|
||||
|
||||
cold_level_1 = 240
|
||||
cold_level_2 = 180
|
||||
cold_level_3 = 100
|
||||
|
||||
heat_level_1 = 340
|
||||
heat_level_2 = 380
|
||||
heat_level_3 = 440
|
||||
heat_level_3_breathe = 900
|
||||
|
||||
primitive = /mob/living/carbon/monkey/tajara
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
dietflags = DIET_OMNI
|
||||
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
|
||||
/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/vulpkanin
|
||||
name = "Vulpkanin"
|
||||
icobase = 'icons/mob/human_races/r_vulpkanin.dmi'
|
||||
deform = 'icons/mob/human_races/r_vulpkanin.dmi'
|
||||
path = /mob/living/carbon/human/vulpkanin
|
||||
default_language = "Galactic Common"
|
||||
language = "Canilunzt"
|
||||
primitive = /mob/living/carbon/monkey/vulpkanin
|
||||
tail = "vulptail"
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
darksight = 8
|
||||
|
||||
blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \
|
||||
dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \
|
||||
culture both feared and respected for their scientific breakthroughs. Discovery, loyalty, and utilitarianism dominates their lifestyles \
|
||||
to the degree it can cause conflict with more rigorous and strict authorities. They speak a guttural language known as 'Canilunzt' \
|
||||
which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
dietflags = DIET_OMNI
|
||||
|
||||
flesh_color = "#966464"
|
||||
base_color = "#BE8264"
|
||||
|
||||
/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/skrell
|
||||
name = "Skrell"
|
||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_skrell.dmi'
|
||||
path = /mob/living/carbon/human/skrell
|
||||
default_language = "Galactic Common"
|
||||
language = "Skrellian"
|
||||
primitive = /mob/living/carbon/monkey/skrell
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \
|
||||
the royals' or 'Light of the Crown'.<br/><br/>Skrell are a highly advanced and logical race who live under the rule \
|
||||
of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \
|
||||
herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
|
||||
the secrets of their empire to their allies."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
bodyflags = HAS_SKIN_COLOR
|
||||
dietflags = DIET_HERB
|
||||
|
||||
flesh_color = "#8CD7A3"
|
||||
blood_color = "#1D2CBF"
|
||||
reagent_tag = IS_SKRELL
|
||||
|
||||
/datum/species/vox
|
||||
name = "Vox"
|
||||
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_vox.dmi'
|
||||
path = /mob/living/carbon/human/vox
|
||||
|
||||
default_language = "Galactic Common"
|
||||
language = "Vox-pidgin"
|
||||
speech_sounds = list('sound/voice/shriek1.ogg')
|
||||
speech_chance = 20
|
||||
|
||||
unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too.
|
||||
|
||||
blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \
|
||||
scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \
|
||||
alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \
|
||||
refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \
|
||||
smell.<br/><br/>Most humans will never meet a Vox raider, instead learning of this insular species through \
|
||||
dealing with their traders and merchants; those that do rarely enjoy the experience."
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = 0
|
||||
|
||||
cold_level_1 = 80
|
||||
cold_level_2 = 50
|
||||
cold_level_3 = 0
|
||||
|
||||
eyes = "vox_eyes_s"
|
||||
|
||||
breath_type = "nitrogen"
|
||||
poison_type = "oxygen"
|
||||
|
||||
flags = NO_SCAN | IS_WHITELISTED
|
||||
dietflags = DIET_OMNI
|
||||
|
||||
blood_color = "#2299FC"
|
||||
flesh_color = "#808D11"
|
||||
|
||||
reagent_tag = IS_VOX
|
||||
|
||||
makeName(var/gender,var/mob/living/carbon/human/H=null)
|
||||
var/sounds = rand(2,8)
|
||||
var/i = 0
|
||||
var/newname = ""
|
||||
|
||||
while(i<=sounds)
|
||||
i++
|
||||
newname += pick(vox_name_syllables)
|
||||
return capitalize(newname)
|
||||
/*
|
||||
/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
|
||||
H.verbs += /mob/living/carbon/human/proc/leap
|
||||
..() */
|
||||
|
||||
/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
|
||||
H.verbs += /mob/living/carbon/human/proc/gut
|
||||
..()
|
||||
|
||||
/datum/species/vox/armalis
|
||||
name = "Vox Armalis"
|
||||
icobase = 'icons/mob/human_races/r_armalis.dmi'
|
||||
deform = 'icons/mob/human_races/r_armalis.dmi'
|
||||
path = /mob/living/carbon/human/voxarmalis
|
||||
unarmed_type = /datum/unarmed_attack/claws/armalis
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = 0
|
||||
|
||||
cold_level_1 = 80
|
||||
cold_level_2 = 50
|
||||
cold_level_3 = 0
|
||||
|
||||
heat_level_1 = 2000
|
||||
heat_level_2 = 3000
|
||||
heat_level_3 = 4000
|
||||
heat_level_3_breathe = 4000
|
||||
|
||||
brute_mod = 0.2
|
||||
burn_mod = 0.2
|
||||
|
||||
eyes = "blank_eyes"
|
||||
breath_type = "nitrogen"
|
||||
poison_type = "oxygen"
|
||||
|
||||
flags = NO_SCAN | NO_BLOOD | HAS_TAIL | NO_PAIN | IS_WHITELISTED
|
||||
dietflags = DIET_OMNI //should inherit this from vox, this is here just in case
|
||||
|
||||
blood_color = "#2299FC"
|
||||
flesh_color = "#808D11"
|
||||
|
||||
reagent_tag = IS_VOX
|
||||
|
||||
tail = "armalis_tail"
|
||||
icon_template = 'icons/mob/human_races/r_armalis.dmi'
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"lungs" = /obj/item/organ/lungs,
|
||||
"liver" = /obj/item/organ/liver,
|
||||
"kidneys" = /obj/item/organ/kidneys,
|
||||
"brain" = /obj/item/organ/brain,
|
||||
"eyes" = /obj/item/organ/eyes,
|
||||
"stack" = /obj/item/organ/stack/vox
|
||||
)
|
||||
|
||||
/datum/species/kidan
|
||||
name = "Kidan"
|
||||
icobase = 'icons/mob/human_races/r_kidan.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_kidan.dmi'
|
||||
path = /mob/living/carbon/human/kidan
|
||||
default_language = "Galactic Common"
|
||||
language = "Chittin"
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
|
||||
brute_mod = 0.8
|
||||
|
||||
flags = IS_WHITELISTED
|
||||
bodyflags = FEET_CLAWS
|
||||
dietflags = DIET_HERB
|
||||
|
||||
blood_color = "#FB9800"
|
||||
|
||||
|
||||
/datum/species/slime
|
||||
name = "Slime People"
|
||||
default_language = "Galactic Common"
|
||||
language = "Bubblish"
|
||||
icobase = 'icons/mob/human_races/r_slime.dmi'
|
||||
deform = 'icons/mob/human_races/r_slime.dmi'
|
||||
path = /mob/living/carbon/human/slime
|
||||
primitive = /mob/living/carbon/slime
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN
|
||||
bodyflags = HAS_SKIN_COLOR
|
||||
bloodflags = BLOOD_SLIME
|
||||
dietflags = DIET_CARN
|
||||
|
||||
//ventcrawler = 1 //ventcrawling commented out
|
||||
|
||||
has_organ = list(
|
||||
"brain" = /obj/item/organ/brain/slime
|
||||
)
|
||||
|
||||
/datum/species/grey
|
||||
name = "Grey"
|
||||
icobase = 'icons/mob/human_races/r_grey.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_grey.dmi'
|
||||
default_language = "Galactic Common"
|
||||
//language = "Grey" // Perhaps if they ever get a hivemind
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
darksight = 5 // BOOSTED from 2
|
||||
eyes = "grey_eyes_s"
|
||||
|
||||
brute_mod = 1.25 //greys are fragile
|
||||
|
||||
default_genes = list(REMOTE_TALK)
|
||||
|
||||
primitive = /mob/living/carbon/monkey // TODO
|
||||
|
||||
flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
dietflags = DIET_HERB
|
||||
|
||||
blood_color = "#A200FF"
|
||||
|
||||
/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove)
|
||||
if(!remove)
|
||||
C.dna.SetSEState(REMOTETALKBLOCK,1,1)
|
||||
C.mutations |= REMOTE_TALK
|
||||
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
|
||||
else
|
||||
C.dna.SetSEState(REMOTETALKBLOCK,0,1)
|
||||
C.mutations -= REMOTE_TALK
|
||||
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
|
||||
C.update_mutations()
|
||||
..()
|
||||
|
||||
/datum/species/diona
|
||||
name = "Diona"
|
||||
icobase = 'icons/mob/human_races/r_diona.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_plant.dmi'
|
||||
path = /mob/living/carbon/human/diona
|
||||
default_language = "Galactic Common"
|
||||
language = "Rootspeak"
|
||||
unarmed_type = /datum/unarmed_attack/diona
|
||||
primitive = /mob/living/carbon/monkey/diona
|
||||
slowdown = 5
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = -1
|
||||
|
||||
cold_level_1 = 50
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
heat_level_1 = 300
|
||||
heat_level_2 = 340
|
||||
heat_level_3 = 400
|
||||
heat_level_3_breathe = 700
|
||||
|
||||
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
|
||||
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
|
||||
there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
|
||||
Minoris primary being ringed with a cloud of singing space-station-sized entities.<br/><br/>The Dionaea coexist peacefully with \
|
||||
all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \
|
||||
even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \
|
||||
water and other radiation."
|
||||
|
||||
flags = NO_BREATHE | REQUIRE_LIGHT | IS_PLANT | RAD_ABSORB | NO_BLOOD | NO_PAIN
|
||||
dietflags = 0 //Diona regenerate nutrition in light, no diet necessary
|
||||
|
||||
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
|
||||
|
||||
blood_color = "#004400"
|
||||
flesh_color = "#907E4A"
|
||||
|
||||
reagent_tag = IS_DIONA
|
||||
|
||||
has_organ = list(
|
||||
"nutrient channel" = /obj/item/organ/diona/nutrients,
|
||||
"neural strata" = /obj/item/organ/diona/strata,
|
||||
"response node" = /obj/item/organ/diona/node,
|
||||
"gas bladder" = /obj/item/organ/diona/bladder,
|
||||
"polyp segment" = /obj/item/organ/diona/polyp,
|
||||
"anchoring ligament" = /obj/item/organ/diona/ligament
|
||||
)
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/diona/chest),
|
||||
"groin" = list("path" = /obj/item/organ/external/diona/groin),
|
||||
"head" = list("path" = /obj/item/organ/external/diona/head),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/diona/arm),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/diona/arm/right),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/diona/leg),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/diona/leg/right),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/diona/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/diona/hand/right),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/diona/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
|
||||
)
|
||||
|
||||
/datum/species/diona/can_understand(var/mob/other)
|
||||
var/mob/living/carbon/monkey/diona/D = other
|
||||
if(istype(D))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
H.gender = NEUTER
|
||||
|
||||
return ..()
|
||||
|
||||
/* //overpowered and dumb as hell; they get cloning back, though.
|
||||
/datum/species/diona/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
var/mob/living/carbon/monkey/diona/S = new(get_turf(H))
|
||||
|
||||
if(H.mind)
|
||||
H.mind.transfer_to(S)
|
||||
else
|
||||
S.key = H.key
|
||||
|
||||
for(var/mob/living/carbon/monkey/diona/D in H.contents)
|
||||
if(D.client)
|
||||
D.loc = H.loc
|
||||
else
|
||||
del(D)
|
||||
|
||||
H.visible_message("\red[H] splits apart with a wet slithering noise!") */
|
||||
|
||||
/datum/species/machine
|
||||
name = "Machine"
|
||||
icobase = 'icons/mob/human_races/r_machine.dmi'
|
||||
deform = 'icons/mob/human_races/r_machine.dmi'
|
||||
path = /mob/living/carbon/human/machine
|
||||
default_language = "Galactic Common"
|
||||
language = "Trinary"
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
eyes = "blank_eyes"
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
|
||||
cold_level_1 = 50
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
heat_level_1 = 500 //gives them about 25 seconds in space before taking damage
|
||||
heat_level_2 = 540
|
||||
heat_level_3 = 600
|
||||
heat_level_3_breathe = 600
|
||||
|
||||
synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
|
||||
|
||||
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC | NO_INTORGANS
|
||||
dietflags = 0 //IPCs can't eat, so no diet
|
||||
blood_color = "#1F181F"
|
||||
flesh_color = "#AAAAAA"
|
||||
|
||||
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
|
||||
H.emote("deathgasp")
|
||||
for(var/organ_name in H.organs_by_name)
|
||||
if (organ_name == "head") // do the head last as that's when the user will be transfered to the posibrain
|
||||
continue
|
||||
var/obj/item/organ/external/O = H.organs_by_name[organ_name]
|
||||
if(O && (O.body_part != UPPER_TORSO) && (O.body_part != LOWER_TORSO)) // We're making them fall apart, not gibbing them!
|
||||
O.droplimb(1)
|
||||
var/obj/item/organ/external/O = H.organs_by_name["head"]
|
||||
if(O) O.droplimb(1)
|
||||
|
||||
// Called in life() when the mob has no client.
|
||||
/datum/species/proc/handle_npc(var/mob/living/carbon/human/H)
|
||||
return
|
||||
|
||||
//Species unarmed attacks
|
||||
|
||||
|
||||
Reference in New Issue
Block a user