TG: (Might very possibly be broken. Didn't port most of the stuff due to it having been rewritten. - Erthilo)

Adds BS12 dismemberment.  Not all features of it are implemented yet, but it
should be equal to our previous system.
Adds greater changeling code, but doesn't change the genome count yet on it.
Renames registered to registered_name on IDs because bs12 had it and it seemed
like a good idea to do last night.  For some reason.
Adds an afterattack to mobs that can be used.  (In fairness, lots of shit in
attack_hand should be in there instead, like stungloves and stuff, to minimize
duplicated code)
Revision: r3537
Author: 	 VivianFoxfoot
This commit is contained in:
Erthilo
2012-05-06 22:53:39 +01:00
parent 0505efb4c4
commit 026074d6c5
43 changed files with 521 additions and 172 deletions

View File

@@ -538,13 +538,13 @@
#include "code\game\machinery\computer\atmos_alert.dm"
#include "code\game\machinery\computer\buildandrepair.dm"
#include "code\game\machinery\computer\camera_monitor.dm"
#include "code\game\machinery\computer\card.dm"
#include "code\game\machinery\computer\cloning.dm"
#include "code\game\machinery\computer\communications.dm"
#include "code\game\machinery\computer\computer.dm"
#include "code\game\machinery\computer\crew.dm"
#include "code\game\machinery\computer\HolodeckControl.dm"
#include "code\game\machinery\computer\hologram.dm"
#include "code\game\machinery\computer\id.dm"
#include "code\game\machinery\computer\law.dm"
#include "code\game\machinery\computer\lockdown.dm"
#include "code\game\machinery\computer\medical.dm"

View File

@@ -2,7 +2,7 @@
name = "tajaran"
real_name = "tajaran"
voice_name = "tajaran"
icon = 'mob.dmi'
icon = 'tajaran.dmi'
icon_state = "m-none"
var/list/tajspeak_letters
//
@@ -41,10 +41,10 @@
var/fat = ""
/*if (mutations & FAT)
fat = "fat"*/
/*
if (mutations & HULK)
overlays += image("icon" = 'genetics.dmi', "icon_state" = "hulk[fat][!lying ? "_s" : "_l"]")
*/
if (mutations & COLD_RESISTANCE)
overlays += image("icon" = 'genetics.dmi', "icon_state" = "fire[fat][!lying ? "_s" : "_l"]")
@@ -489,6 +489,8 @@
stand_icon = new /icon('tajaran.dmi', "torso_[g]_s")
lying_icon = new /icon('tajaran.dmi', "torso_[g]_l")
var/husk = (mutations & HUSK)
//var/obese = (mutations & FAT)
@@ -620,4 +622,94 @@
del(eyes_s)
/mob/living/carbon/human/tajaran/co2overloadtime = null
/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70
/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70
//I just need this for some vars, please don't hurt me. -- Erthilo
/mob/living/carbon/human/tajaran/Emissary/
unacidable = 1
var/aegis = 1
/mob/living/carbon/human/tajaran/Emissary/New()
..()
reagents.add_reagent("hyperzine", 5000) //From the dark, to the light, it's a supersonic flight!
// Gotta keep it going!
if (!(mutations & HULK))
mutations |= HULK
if (!(mutations & LASER))
mutations |= LASER
if (!(mutations & XRAY))
mutations |= XRAY
sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
see_in_dark = 8
see_invisible = 2
if (!(mutations & COLD_RESISTANCE))
mutations |= COLD_RESISTANCE
if (!(mutations & TK))
mutations |= TK
if(!(mutations & HEAL))
mutations |= HEAL
spawn(0)
while(src)
adjustBruteLoss(-10)
adjustToxLoss(-10)
adjustOxyLoss(-10)
adjustFireLoss(-10)
sleep(10)
/mob/living/carbon/human/tajaran/Emissary/ex_act()
return
/mob/living/carbon/human/tajaran/Emissary/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
if(istype(target , /obj/machinery/door/airlock))
if(target:locked)
target:locked = 0
if(!target:density)
return 1
if(target:operating > 0)
return
if(!ticker)
return 0
if(!target:operating)
target:operating = 1
target:animate("opening")
target:sd_SetOpacity(0)
sleep(10)
target:layer = 2.7
target:density = 0
target:update_icon()
target:sd_SetOpacity(0)
target:update_nearby_tiles()
target:operating = -1
user << "You force the door open, shearing the bolts and burning out the motor."
if(target:operating)
target:operating = -1
else if(istype(target , /obj/machinery/door/firedoor))
target:open()
/mob/living/carbon/human/tajaran/Emissary/Life()
..()
if (!(mutations & HULK))
mutations |= HULK
if((stat == 2) && aegis)
src.show_message("\red [src]'s eyes open suddenlly.", 3, "\red \"I gave a solemn vow to never die for long.\"", 2)
src.heal_overall_damage(9001,9001)
src.stat = 0
aegis = 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -972,6 +972,10 @@ var/global/datum/tension/tension_master
//del(spawn_location) // Commenting this out for multiple commando teams.
return new_syndicate_commando
/proc/create_borg_death_commando(obj/spawn_location, name)
var/mob/living/silicon/robot/new_borg_deathsquad = new(spawn_location.loc, 1)

View File

@@ -91,7 +91,8 @@ datum/shuttle_controller
emergency_shuttle
process()
if(!online) return
if(!online)
return
var/timeleft = timeleft()
if(timeleft > 1e5) // midnight rollover protection
timeleft = 0

View File

@@ -71,32 +71,6 @@
var/h_b = 245.0
/obj/machinery/computer/secure_data
name = "Security Records"
desc = "Used to view and edit personnel's security records"
icon_state = "security"
req_access = list(access_security)
circuit = "/obj/item/weapon/circuitboard/secure_data"
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/disk/records/disk = null
var/authenticated = null
var/rank = null
var/screen = null
var/datum/data/record/active1 = null
var/datum/data/record/active2 = null
var/a_id = null
var/temp = null
var/printing = null
var/can_change_id = 0
var/list/Perp
var/tempname = null
/obj/machinery/computer/secure_data/detective_computer
icon = 'computer.dmi'
icon_state = "messyfiles"
/obj/machinery/computer/security
name = "Security Cameras"
desc = "Used to access the various cameras on the station."

View File

@@ -77,6 +77,7 @@
if(B != src)
del(B)
/obj/effect/decal/cleanable/blood/drip
name = "drips of blood"
desc = "It's red."

View File

@@ -572,7 +572,8 @@
icon_state = "id"
item_state = "card-id"
var/access = list()
var/registered_name = null
var/registered_name = null // The name registered_name on the card
var/assignment = null
var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit
var/dorm = 0 // determines if this ID has claimed a dorm already

View File

@@ -740,9 +740,9 @@ Turf and target are seperate in case you want to teleport some distance from a t
pda.name = "PDA-[newname] ([pda.ownjob])"
break
for(var/obj/item/weapon/card/id/id in M.contents)
if(id.registered == oldname)
id.registered = newname
id.name = "[id.registered]'s ID Card ([id.assignment])"
if(id.registered_name == oldname)
id.registered_name = newname
id.name = "[id.registered_name]'s ID Card ([id.assignment])"
break*/
/proc/ionnum()

View File

@@ -678,6 +678,25 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
if ( !animal.restrained() )
attack_animal(animal)
/atom/DblClick(location, control, params) //TODO: DEFERRED: REWRITE
// world << "checking if this shit gets called at all"
@@ -908,7 +927,18 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
// ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND -------
if (istype(usr, /mob/living/carbon/human))
// ------- YOU ARE HUMAN -------
/* if(usr.hand) // if he's using his left hand.
var/datum/organ/external/temp = usr:get_organ("l_hand")
if(temp.destroyed)
usr << "\blue You look at your stump."
return
else
var/datum/organ/external/temp = usr:get_organ("r_hand")
if(temp.destroyed)
usr << "\blue You look at your stump."
return*/
src.attack_hand(usr, usr.hand)
// usr:afterattack(src, usr, (t5 ? 1 : 0), params)
else
// ------- YOU ARE NOT HUMAN. WHAT ARE YOU - DETERMINED HERE AND PROPER ATTACK_MOBTYPE CALLED -------
if (istype(usr, /mob/living/carbon/monkey))

View File

@@ -403,6 +403,117 @@
del(usr)
return
/*
/client/proc/changeling_greater_form() // Oh shit, it's on now.
set category = "Changeling"
set name = "Greater Form"
set desc = "Become onto the Goddess"
if (usr.monkeyizing)
return
for(var/obj/item/W in src)
usr.drop_from_slot(W)
usr.update_clothing()
usr.monkeyizing = 1
usr.canmove = 0
usr.icon = null
usr.invisibility = 101
for(var/datum/organ/external/organ in usr:organs)
del(organ)
var/atom/movable/overlay/animation = new /atom/movable/overlay( usr.loc )
animation.icon_state = "blank"
animation.icon = 'mob.dmi'
animation.master = src
flick("h2monkey", animation)
sleep(48)
//animation = null
var/mob/living/carbon/human/tajaran/Emissary/O = new /mob/living/carbon/human/tajaran/Emissary( src )
del(animation)
O.real_name = usr.real_name
O.name = usr.name
O.dna = usr.dna
usr.dna = null
O.changeling = usr.changeling
updateappearance(O,O.dna.uni_identity)
O.loc = usr.loc
O.viruses = usr.viruses
usr.viruses = list()
for(var/datum/disease/D in O.viruses)
D.affected_mob = O
O.universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans
if (usr.client)
usr.client.mob = O
if(usr.mind)
usr.mind.transfer_to(O)
spawn(300)
command_alert("Extreme danger. A level four biological entity has been detected on board the station. Emergancy evacuation procedures have begun. Civilian staff, do NOT engage the creature if spotted. Renforcements are on route.")
emergency_shuttle.online = 1
emergency_shuttle.settimeleft(10)
spawn(10)
var/list/candidates = list()
for(var/mob/dead/observer/G in world)
candidates += G
for(var/mob/dead/observer/G in candidates)
if(!G.client || !G.key)
candidates.Remove(G)
for(var/obj/structure/stool/bed/chair/C in locate(/area/shuttle/escape/transit))
var/mob/living/carbon/human/new_commando = create_death_commando(C, 0)
if(candidates.len)
var/mob/dead/observer/G = pick(candidates)
new_commando.mind.key = G.key//For mind stuff.
new_commando.key = G.key
new_commando.internal = new_commando.s_store
new_commando.internals.icon_state = "internal1"
candidates -= G
del(G)
else
break
//So they don't forget their code or mission.
new_commando.mind.store_memory("<B>Mission:</B> \red Assist in mobilizing station crew against the hostile entity. Do not allow the hostile entity to escape. Do not leave or permit anyone to leave until the entity is contained.")
new_commando << "\blue You are a Special Ops Commando in the service of Central Command. \nYour current mission is: \red<B>Assist in mobilizing station crew against the hostile entity. Do not allow the hostile entity to escape. Do not leave or permit anyone to leave until the entity is contained.</B>"
spawn(100)
emergency_shuttle.online = 0
command_alert("The emergancy shuttle will hold until the hostile entity has been terminated. During evacuation, do NOT use escape pods. To avoid the chance of a hostile entity escaping, the Thunderchild will be firing on and destorying any escape pods leaving the station")
O << "Your way out has arrived. Obtain the ID of three heads to override the holding protocol and escape. Let none stand in your way, for you are a perfect creature."
for(var/datum/objective/objective in O.mind.objectives)
O.mind.objectives.Remove(objective)
del(objective)
var/datum/objective/new_objective = null
new_objective = new /datum/objective/escape
new_objective.owner = O.mind
O.mind.objectives += new_objective
spawn(0)
while(emergency_shuttle.online == 0)
sleep(10)
command_alert("Authorization codes recieved, confirming hostile entity terminated. The emergancy shuttle is now departing.")
spawn(900)
for(var/mob/M in locate(/area/shuttle/escape_pod1/transit))
M.gib()
for(var/mob/M in locate(/area/shuttle/escape_pod2/transit))
M.gib()
for(var/mob/M in locate(/area/shuttle/escape_pod3/transit))
M.gib()
for(var/mob/M in locate(/area/shuttle/escape_pod5/transit))
M.gib()
while(emergency_shuttle.online == 1)
sleep(10)
if((locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/shuttle/escape/centcom)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/evac)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/control) ) )
command_alert("What the fu- Shoot it! SHOOT IT! CENTRAL COMMAND TRANSMITTING DIST- *static* Nevermind previous transmission, Nanotrasen. We're all good here. Subject contained. Standing down alert status.")
*/
/client/proc/changeling_fakedeath()
set category = "Changeling"
set name = "Regenerative Stasis (20)"

View File

@@ -47,7 +47,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance."
genomecost = 250
// doesn't happen lol. Yet!
// verbpath = /client/proc/changeling_greater_form
/obj/effect/proc_holder/power/fakedeath
name = "Fake Death"

View File

@@ -2,22 +2,17 @@
name = "Identification Computer"
desc = "A computer used to modify ID cards."
icon_state = "id"
circuit = "/obj/item/weapon/circuitboard/card"
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/card/id/modify = null
var/authenticated = 0.0
var/mode = 0.0
var/printing = null
req_access = list(access_change_ids)
circuit = "/obj/item/weapon/circuitboard/card"
var
obj/item/weapon/card/id/scan = null
obj/item/weapon/card/id/modify = null
authenticated = 0.0
mode = 0.0
printing = null
/obj/machinery/computer/card/centcom
name = "CentCom Identification Computer"
circuit = "/obj/item/weapon/circuitboard/card/centcom"
req_access = list(access_cent_captain)
/obj/machinery/computer/card/attackby(O as obj, user as mob)
/obj/machinery/computer/card/attackby(O as obj, user as mob)//TODO:SANITY
if(istype(O, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/idcard = O
if(access_change_ids in idcard.access)
@@ -37,12 +32,15 @@
else
..()
/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/card/attack_paw(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/card/attack_hand(var/mob/user as mob)
if(..())
return
@@ -169,6 +167,7 @@
onclose(user, "id_com")
return
/obj/machinery/computer/card/Topic(href, href_list)
if(..())
return
@@ -267,4 +266,12 @@
if (modify)
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
updateUsrDialog()
return
return
/obj/machinery/computer/card/centcom
name = "CentCom Identification Computer"
circuit = "/obj/item/weapon/circuitboard/card/centcom"
req_access = list(access_cent_captain)

View File

@@ -1,3 +1,25 @@
/obj/machinery/computer/secure_data
name = "Security Records"
desc = "Used to view and edit personnel's security records"
icon_state = "security"
req_access = list(access_security)
circuit = "/obj/item/weapon/circuitboard/secure_data"
var
obj/item/weapon/card/id/scan = null
obj/item/weapon/disk/records/disk = null
authenticated = null
rank = null
screen = null
datum/data/record/active1 = null
datum/data/record/active2 = null
a_id = null
temp = null
printing = null
can_change_id = 0
list/Perp
tempname = null
/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob)
if(istype(O, /obj/item/weapon/card/id) && !scan)
usr.drop_item()
@@ -523,6 +545,10 @@ What a mess.*/
updateUsrDialog()
return
/obj/machinery/computer/secure_data/detective_computer
icon = 'computer.dmi'
icon_state = "messyfiles"
/obj/item/weapon/disk/records
name = "Crew Records Disk"
desc = "Stores security and medical records."

View File

@@ -39,6 +39,7 @@
message_admins("[key_name_admin(user)] has launched the shuttle")
log_game("[user.ckey] has launched the shuttle early")
world << "\blue <B>Alert: Shuttle launch time shortened to 10 seconds!</B>"
emergency_shuttle.online = 1
emergency_shuttle.settimeleft(10)
//src.authorized = null
del(src.authorized)

View File

@@ -1,4 +1,4 @@
/obj/structure/closet/secure_closet/personal/var/registered = null
/obj/structure/closet/secure_closet/personal/var/registered_name = null
/obj/structure/closet/secure_closet/personal/req_access = list(access_all_personal_lockers)
/obj/structure/closet/secure_closet/personal/New()
@@ -42,14 +42,14 @@
return
var/obj/item/weapon/card/id/I = W
if(!I || !I.registered_name) return
if(src.allowed(user) || !src.registered || (istype(I) && (src.registered == I.registered_name)))
if(src.allowed(user) || !src.registered_name || (istype(I) && (src.registered_name == I.registered_name)))
//they can open all lockers, or nobody owns this, or they own this locker
src.locked = !( src.locked )
if(src.locked) src.icon_state = src.icon_locked
else src.icon_state = src.icon_closed
if(!src.registered)
src.registered = I.registered_name
if(!src.registered_name)
src.registered_name = I.registered_name
src.desc = "Owned by [I.registered_name]."
src.name = "Personal Closet - [I.registered_name]"
else

View File

@@ -463,7 +463,7 @@
if (is_sharp(W))
burst()
/proc/is_sharp(obj/item/W as obj)
/proc/is_sharp(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT?
return ( \
istype(W, /obj/item/weapon/screwdriver) || \
istype(W, /obj/item/weapon/pen) || \
@@ -483,6 +483,7 @@
istype(W, /obj/item/weapon/shard) || \
istype(W, /obj/item/weapon/reagent_containers/syringe) || \
istype(W, /obj/item/weapon/kitchen/utensil/fork) && W.icon_state != "forkloaded" || \
istype(W, /obj/item/weapon/twohanded/fireaxe) || \
istype(W,/obj/item/projectile)\
)

View File

@@ -105,6 +105,7 @@
var/datum/organ/external/temp = user:organs["r_hand"]
if(temp.destroyed)
user << "\blue Yo- wait a minute."
if (istype(src.loc, /obj/item/weapon/storage))
for(var/mob/M in range(1, src.loc))
if (M.s_active == src.loc)

View File

@@ -67,18 +67,39 @@ FINGERPRINT CARD
return
/obj/item/weapon/card/id/syndicate/var/mob/registered_user = null
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
if(!registered_user)
registered_name = input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)
assignment = input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")
name = "[src.registered_name]'s ID Card ([src.assignment])"
if(!src.registered_name)
//Stop giving the players unsanitized unputs! You are giving ways for players to intentionally crash clients! -Nodrak
var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)),1,26)
if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/new_player/prefrences.dm
alert("Invalid name.")
return
src.registered_name = t
var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")),1,MAX_MESSAGE_LEN)
if(!u)
alert("Invalid assignment.")
src.registered_name = ""
return
src.assignment = u
src.name = "[src.registered_name]'s ID Card ([src.assignment])"
user << "\blue You successfully forge the ID card."
registered_user = user
else if(registered_user == user)
switch(alert("Would you like to display the ID, or retitle it?","Choose.","Rename","Show"))
if("Rename")
registered_name = input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)
assignment = input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")
name = "[src.registered_name]'s ID Card ([src.assignment])"
var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)),1,26)
if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/new_player/prefrences.dm
alert("Invalid name.")
return
src.registered_name = t
var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")),1,MAX_MESSAGE_LEN)
if(!u)
alert("Invalid assignment.")
src.registered_name = ""
return
src.assignment = u
src.name = "[src.registered_name]'s ID Card ([src.assignment])"
user << "\blue You successfully forge the ID card."
return
if("Show")

View File

@@ -198,6 +198,7 @@
verbs += /client/proc/toggleadminhelpsound
verbs += /proc/possess
verbs += /proc/release
verbs += /client/proc/make_tajaran
verbs += /client/proc/admin_deny_shuttle
verbs += /client/proc/cmd_admin_christmas
verbs += /client/proc/editappear
@@ -274,7 +275,6 @@
verbs += /client/proc/delbook
verbs += /client/proc/Force_Event_admin
verbs += /client/proc/radioalert
verbs += /client/proc/make_tajaran
verbs += /client/proc/CarbonCopy
verbs += /client/proc/jump_to_dead_group
else return
@@ -431,7 +431,6 @@
verbs -= /client/proc/Force_Event_admin
verbs -= /client/proc/radioalert
verbs -= /client/proc/rnd_check_designs
verbs -= /client/proc/make_tajaran
verbs -= /client/proc/CarbonCopy
verbs -= /proc/possess
verbs -= /proc/release
@@ -451,6 +450,7 @@
verbs -= /client/proc/togglebuildmodeself
verbs -= /client/proc/kill_airgroup
verbs -= /client/proc/debug_master_controller
verbs -= /client/proc/make_tajaran
verbs -= /client/proc/admin_deny_shuttle
verbs -= /client/proc/cmd_admin_christmas
verbs -= /client/proc/editappear

View File

@@ -8,6 +8,7 @@
if(alert("BEGIN THE TOURNAMENT?",,"Yes","No")=="No")
return
//feedback_add_details("admin_verb","TCBOO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
for(var/mob/living/carbon/human/H in world)
if(H.stat == 2 || !(H.client)) continue
if(is_special_character(H)) continue

View File

@@ -135,7 +135,7 @@ var/global/sent_strike_team = 0
if(!(new_commando.mind in ticker.mode.traitors))//If they weren't already an extra traitor.
ticker.mode.traitors += new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list.
new_commando.equip_death_commando(leader_selected)
del(spawn_location)
// del(spawn_location)
return new_commando
/mob/living/carbon/human/proc/equip_death_commando(leader_selected = 0)

View File

@@ -735,29 +735,32 @@ datum
del (M:wear_mask)
M << "\red Your mask melts away but protects you from the acid!"
return
if(!M.unacidable)
if(prob(15) && istype(M, /mob/living/carbon/human) && volume >= 30)
if(prob(15) && istype(M, /mob/living/carbon/human) && volume >= 30)
var/datum/organ/external/head/affecting = M:get_organ("head")
if(affecting)
affecting.disfigured = 1
affecting.take_damage(25, 0)
M:UpdateDamageIcon()
M:emote("scream")
M << "\red Your face has become disfigured!"
M.real_name = "Unknown"
M.warn_flavor_changed()
else
M.take_organ_damage(min(15, volume * 2)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
var/datum/organ/external/head/affecting = M:get_organ("head")
if(affecting)
affecting.disfigured = 1
affecting.take_damage(25, 0)
M:UpdateDamageIcon()
M:emote("scream")
M << "\red Your face has become disfigured!"
M.real_name = "Unknown"
M.warn_flavor_changed()
else
M.take_organ_damage(min(15, volume * 2)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
else
M.take_organ_damage(min(15, volume * 2))
if(!M.unacidable)
M.take_organ_damage(min(15, volume * 2))
reaction_obj(var/obj/O, var/volume)
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(10))
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
I.desc = "Looks like this was \an [O] some time ago."
for(var/mob/M in viewers(5, O))
M << "\red \the [O] melts."
del(O)
if(!O.unacidable)
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
I.desc = "Looks like this was \an [O] some time ago."
for(var/mob/M in viewers(5, O))
M << "\red \the [O] melts."
del(O)
pacid
name = "Polytrinic acid"
@@ -788,42 +791,49 @@ datum
else
M << "\red Your helmet protects you from the acid!"
return
var/datum/organ/external/head/affecting = M:get_organ("head")
affecting.take_damage(15, 0)
M:UpdateDamageIcon()
M:emote("scream")
if(prob(15))
M << "\red Your face has become disfigured!"
M.real_name = "Unknown"
M.warn_flavor_changed()
affecting.disfigured = 1
if(!M.unacidable)
var/datum/organ/external/head/affecting = M:get_organ("head")
affecting.take_damage(15, 0)
M:UpdateDamageIcon()
M:emote("scream")
if(prob(15))
M << "\red Your face has become disfigured!"
M.real_name = "Unknown"
M.warn_flavor_changed()
affecting.disfigured = 1
else
if(istype(M, /mob/living/carbon/monkey) && M:wear_mask)
del (M:wear_mask)
M << "\red Your mask melts away but protects you from the acid!"
return
M.take_organ_damage(min(15, volume * 4)) // same deal as sulphuric acid
if(!M.unacidable)
M.take_organ_damage(min(15, volume * 4)) // same deal as sulphuric acid
else
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/head/affecting = M:get_organ("head")
affecting.take_damage(15, 0)
M:UpdateDamageIcon()
M:emote("scream")
if(prob(15))
M << "\red Your face has become disfigured!"
M.real_name = "Unknown"
M.warn_flavor_changed()
affecting.disfigured = 1
else
M.take_organ_damage(min(15, volume * 4))
if(!M.unacidable)
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/head/affecting = M:get_organ("head")
affecting.take_damage(15, 0)
M:UpdateDamageIcon()
M:emote("scream")
if(prob(15))
M << "\red Your face has become disfigured!"
M.real_name = "Unknown"
M.warn_flavor_changed()
affecting.disfigured = 1
else
M.take_organ_damage(min(15, volume * 4))
reaction_obj(var/obj/O, var/volume)
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)))
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
I.desc = "Looks like this was \an [O] some time ago."
for(var/mob/M in viewers(5, O))
M << "\red \the [O] melts."
del(O)
if(!O.unacidable)
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
I.desc = "Looks like this was \an [O] some time ago."
for(var/mob/M in viewers(5, O))
M << "\red \the [O] melts."
del(O)
glycerol
name = "Glycerol"

View File

@@ -162,6 +162,6 @@
W.name = "Fake Cyborg Card"
W.access = list(access_theatre)
W.assignment = "Kill all humans! Beep. Boop."
W.registered = name
W.registered_name = name
del(src)
*/

View File

@@ -22,7 +22,12 @@ Contains the procs that control attacking critters
if (user.a_intent == "hurt")
TakeDamage(rand(1,2) * brutevuln)
if(istype(user, /mob/living/carbon/human))
if(istajaran(user))
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[user] has slashed at [src]!</B>", 1)
playsound(src.loc, 'slice.ogg', 25, 1, -1)
else if(istype(user, /mob/living/carbon/human))
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[user] has punched [src]!</B>", 1)
playsound(src.loc, pick('punch1.ogg','punch2.ogg','punch3.ogg','punch4.ogg'), 100, 1)
@@ -32,10 +37,7 @@ Contains the procs that control attacking critters
O.show_message("\red <B>[user] has slashed at [src]!</B>", 1)
playsound(src.loc, 'slice.ogg', 25, 1, -1)
else if(user.type == /mob/living/carbon/human/tajaran)
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[user] has slashed at [src]!</B>", 1)
playsound(src.loc, 'slice.ogg', 25, 1, -1)
else
for(var/mob/O in viewers(src, null))

View File

@@ -1,6 +1,6 @@
/mob/living/carbon/brain
var
obj/item/device/mmi/container = null
obj/item/container = null
timeofhostdeath = 0
New()
@@ -31,9 +31,14 @@
return 1
return ..()
Login()
if(!container)
verbs += /mob/proc/ghost
Logout()
verbs -= /mob/proc/ghost
/mob/living/carbon/brain/Login()
..()
if (!isturf(src.loc))
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (!container || !istype(container, /obj/item/device/mmi))
src.verbs += /mob/proc/ghost
return

View File

@@ -1,5 +1,5 @@
/mob/living/carbon/brain/death(gibbed)
if(!gibbed && container)//If not gibbed but in a container.
if(!gibbed && container && istype(container, /obj/item/device/mmi))//If not gibbed but in a container.
for(var/mob/O in viewers(container, null))
O.show_message(text("\red <B>[]'s MMI flatlines!</B>", src), 1, "\red You hear something flatline.", 2)
container.icon_state = "mmi_dead"

View File

@@ -40,6 +40,8 @@
clamp_values()
proc
clamp_values()
@@ -318,4 +320,5 @@
if(bodytemperature > 409)
for(var/datum/disease/D in viruses)
D.cure()
return
return

View File

@@ -1,3 +1,4 @@
/mob/living/carbon/brain/say(var/message)
if(!container) return //No container, can't speak, bucko./N
if(!(container && istype(container, /obj/item/device/mmi)))
return //No MMI, can't speak, bucko./N
else ..()

View File

@@ -193,7 +193,6 @@
var/status = ""
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
if(halloss > 0)
if(prob(30))
brutedamage += halloss
@@ -215,6 +214,9 @@
status += "blistered"
else if(burndamage > 0)
status += "numb"
if(org.destroyed)
status = "MISSING!"
if(status == "")
status = "OK"
src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.getDisplayName(),status),1)

View File

@@ -70,11 +70,17 @@
/mob/living/carbon/human/New()
..()
var/datum/reagents/R = new/datum/reagents(1000)
reagents = R
R.my_atom = src
if(!dna) dna = new /datum/dna(null)
if(!dna)
dna = new /datum/dna(null)
new /datum/organ/external/chest(src)
new /datum/organ/external/groin(src)
@@ -123,19 +129,24 @@
gender = MALE
g = "m"
spawn (1)
if(!stand_icon)
stand_icon = new /icon('human.dmi', "body_[g]_s")
if(!lying_icon)
lying_icon = new /icon('human.dmi', "body_[g]_l")
spawn(1)
stand_icon = new /icon('human.dmi', "body_[g]_s")
lying_icon = new /icon('human.dmi', "body_[g]_l")
icon = stand_icon
update_clothing()
src << "\blue Your icons have been generated!"
spawn(10) // Failsafe for.. weirdness.
update_clothing()
update_body()
vessel = new/datum/reagents(600)
vessel.my_atom = src
vessel.add_reagent("blood",560)
spawn(1) fixblood()
spawn(1)
fixblood()
..()
/*var/known_languages = list()
@@ -267,6 +278,7 @@
var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80
if (hungry >= 70) tally += hungry/50
for(var/organ in list("l_leg","l_foot","r_leg","r_foot"))
var/datum/organ/external/o = organs["[organ]"]
if(o.broken)
@@ -1484,7 +1496,6 @@
del(face_standing)
del(face_lying)
return
if(!facial_hair_style || !hair_style) return//Seems people like to lose their icons, this should stop the runtimes for now
del(face_standing)
del(face_lying)

View File

@@ -119,35 +119,36 @@
if("lizard")
attack_verb = "scratch"
if("plant")
attack_verb = "slash"
attack_verb = "whip"
else
attack_verb = "punch"
if(M.type == /mob/living/carbon/human/tajaran)
if(istajaran(M))
attack_verb = "slash"
var/damage = rand(0, 5)
if(!damage)
if(M.mutantrace == "lizard")
playsound(loc, 'slashmiss.ogg', 25, 1, -1)
else if(M.type != /mob/living/carbon/human/tajaran)
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
else if (M.type == /mob/living/carbon/human/tajaran)
playsound(loc, 'slashmiss.ogg', 25, 1, -1)
switch(attack_verb)
if(("slash") || ("scratch"))
playsound(loc, 'slashmiss.ogg', 25, 1, -1)
else
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
visible_message("\red <B>[M] has attempted to [attack_verb] [src]!</B>")
return 0
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = run_armor_check(affecting, "melee")
if(M.mutations & HULK) damage += 5
if(M.mutantrace == "lizard")
damage += 10
playsound(loc, 'slice.ogg', 25, 1, -1)
else if(M.type != /mob/living/carbon/human/tajaran)
playsound(loc, "punch", 25, 1, -1)
else if (M.type == /mob/living/carbon/human/tajaran)
damage += 10
playsound(loc, 'slice.ogg', 25, 1, -1)
switch(attack_verb)
if(("slash") || ("scratch"))
damage += 10
playsound(loc, 'slice.ogg', 25, 1, -1)
else
playsound(loc, "punch", 25, 1, -1)
visible_message("\red <B>[M] has [attack_verb]ed [src]!</B>")
@@ -157,11 +158,10 @@
apply_effect(2, WEAKEN, armor_block)
UpdateDamageIcon()
if("disarm")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Disarmed [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been disarmed by [M.name] ([M.ckey])</font>")
log_admin("ATTACK: [src] ([src.ckey]) disarmed [M] ([M.ckey]).")
log_attack("<font color='red'>[M.name] ([M.ckey]) disarmed [src.name] ([src.ckey])</font>")
@@ -212,4 +212,7 @@
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
visible_message("\red <B>[M] attempted to disarm [src]!</B>")
update_clothing()
return
/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
return

View File

@@ -119,10 +119,9 @@ emp_act
if(!I || !user) return 0
var/datum/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting))
var/hit_area = affecting.display_name
if((user != src) && check_shields(I.force, "the [I.name]"))
return 0

View File

@@ -1148,22 +1148,41 @@
if (mutantrace == "lizard" || mutantrace == "metroid")
see_in_dark = 3
see_invisible = 1
else if (istajaran(src))
see_in_dark = 8
else if (druggy) // If drugged~
see_in_dark = 2
//see_invisible regulated by drugs themselves.
else
see_in_dark = 2
var/seer = 0
for(var/obj/effect/rune/R in world)
if(loc==R.loc && R.word1==wordsee && R.word2==wordhell && R.word3==wordjoin)
seer = 1
if(!seer)
see_invisible = 0
else if(istype(head, /obj/item/clothing/head/helmet/welding))
var/seer = 0
for(var/obj/effect/rune/R in world)
if(loc==R.loc && R.word1==wordsee && R.word2==wordhell && R.word3==wordjoin)
seer = 1
if(!seer)
see_invisible = 0
else if(istype(head, /obj/item/clothing/head/helmet/welding)) // wat. This is never fucking called.
if(!head:up && tinted_weldhelh)
see_in_dark = 1
/* HUD shit goes here, as long as it doesn't modify src.sight flags */
// The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl
if(istype(glasses, /obj/item/clothing/glasses/hud/health))

View File

@@ -1,4 +1,7 @@
/mob/living/carbon/human/say(var/message)
/* if(src.mutantrace == "lizard")
if(copytext(message, 1, 2) != "*")
message = dd_replaceText(message, "s", stutter("ss"))*///Just here for reference. -- Erthilo
if(src.mutantrace == "metroid" && prob(5))
if(copytext(message, 1, 2) != "*")
if(copytext(message, 1, 2) == ";")

View File

@@ -113,6 +113,7 @@
var/canmove = 1.0
var/eye_stat = null//Living, potentially Carbon
var/lastpuke = 0
var/unacidable = 0
var/name_archive //For admin things like possession

View File

@@ -56,7 +56,7 @@
return 0
/proc/iscat(A)
if(istype(A, /mob/living/simple_animal/cat))
if(istype(A, /mob/living/simple_animal/cat/))
return 1
return 0
@@ -115,12 +115,16 @@ proc/hasorgans(A)
return 1
return 0
/proc/hsl2rgb(h, s, l)
return
/proc/check_zone(zone)
if(!zone) return "chest"
if(!zone)
return "chest"
switch(zone)
if("eyes")
zone = "head"

View File

@@ -91,7 +91,8 @@
brute *= 0.66 //~2/3 damage for ROBOLIMBS
burn *= 0.66 //~2/3 damage for ROBOLIMBS
if(owner && !robot) owner.pain(display_name, (brute+burn)*3, 1)
if(owner && !robot)
owner.pain(display_name, (brute+burn)*3, 1)
if(sharp)
var/nux = brute * rand(10,15)
if(brute_dam >= max_damage)
@@ -382,7 +383,7 @@
destspawn = 1
if(!robot)
owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.",\
"\red <b>Your [display_name] goes flying off!</b>",\
"<span class='moderate'><b>Your [display_name] goes flying off!</b></span>",\
"You hear a terrible sound of ripping tendons and flesh.")
else
owner.visible_message("\red [owner.name]'s [display_name] explodes violently!",\

View File

@@ -84,6 +84,8 @@
min_broken_damage = 15
body_part = HAND_LEFT
obj/item/weapon/organ
icon = 'human.dmi'
@@ -112,6 +114,12 @@ obj/item/weapon/organ/head
var/mob/living/carbon/brain/brainmob
var/brain_op_stage = 0
obj/item/weapon/organ/head/New()
..()
spawn(5)
if(brainmob && brainmob.client)
brainmob.client.screen.len = null //clear the hud
obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->head
brainmob = new(src)
brainmob.name = H.real_name
@@ -119,6 +127,11 @@ obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H)
brainmob.dna = H.dna
if(H.mind)
H.mind.transfer_to(brainmob)
brainmob.container = src
if (brainmob.client)
spawn(10)
if(brainmob.client)
verbs += /mob/proc/ghost
obj/item/weapon/organ/head/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/scalpel))

View File

@@ -119,7 +119,7 @@
src.active1 = null
src.active2 = null
if (src.check_access(src.master.authid))
src.authenticated = src.master.authid.registered
src.authenticated = src.master.authid.registered_name
src.rank = src.master.authid.assignment
src.screen = 1
if (src.authenticated)

View File

@@ -58,7 +58,7 @@
W.name = "[M.real_name]'s ID card (Red Team)"
W.access = access_red
W.assignment = "Red Team"
W.registered = M.real_name
W.registered_name = M.real_name
M.wear_id = W
M.wear_id.layer = 20
if(R)
@@ -98,7 +98,7 @@
W.name = "[M.real_name]'s ID card (Green Team)"
W.access = access_green
W.assignment = "Green Team"
W.registered = M.real_name
W.registered_name = M.real_name
M.wear_id = W
M.wear_id.layer = 20
if(G)

View File

@@ -58,7 +58,7 @@
W.access = get_all_accesses()
W.name = "[newname]'s ID card (Death Commando)"
W.assignment = "Death Commando"
W.registered = newname
W.registered_name = newname
M.equip_if_possible(W, M.slot_wear_id)
..()

View File

@@ -159,8 +159,8 @@
src.cartridge = C
src.updateSelfDialog()
else if (istype(C, /obj/item/weapon/card/id) && !src.owner && C:registered)
src.owner = C:registered
else if (istype(C, /obj/item/weapon/card/id) && !src.owner && C:registered_name)
src.owner = C:registered_name
src.name = "PDA-[src.owner]"
user << "\blue Card scanned."
src.updateSelfDialog()