mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-14 12:13:06 +00:00
Merge pull request #5 from Neerti/4/8/2015_bay_sync
Syncs to Bay (4/8/2015)
This commit is contained in:
@@ -383,7 +383,6 @@
|
|||||||
user << "You are too far away to read the gauge."
|
user << "You are too far away to read the gauge."
|
||||||
if(welded)
|
if(welded)
|
||||||
user << "It seems welded shut."
|
user << "It seems welded shut."
|
||||||
..()
|
|
||||||
|
|
||||||
/obj/machinery/atmospherics/unary/vent_pump/power_change()
|
/obj/machinery/atmospherics/unary/vent_pump/power_change()
|
||||||
var/old_stat = stat
|
var/old_stat = stat
|
||||||
|
|||||||
@@ -277,7 +277,6 @@
|
|||||||
user << "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W"
|
user << "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W"
|
||||||
else
|
else
|
||||||
user << "You are too far away to read the gauge."
|
user << "You are too far away to read the gauge."
|
||||||
..()
|
|
||||||
|
|
||||||
/obj/machinery/atmospherics/unary/vent_scrubber/Del()
|
/obj/machinery/atmospherics/unary/vent_scrubber/Del()
|
||||||
if(initial_loc)
|
if(initial_loc)
|
||||||
|
|||||||
@@ -91,9 +91,11 @@
|
|||||||
|
|
||||||
/obj/item/weapon/cane/concealed/New()
|
/obj/item/weapon/cane/concealed/New()
|
||||||
..()
|
..()
|
||||||
concealed_blade = new/obj/item/weapon/butterfly/switchblade(src)
|
var/obj/item/weapon/butterfly/switchblade/temp_blade = new(src)
|
||||||
|
concealed_blade = temp_blade
|
||||||
|
temp_blade.attack_self()
|
||||||
|
|
||||||
/obj/item/weapon/cane/concealed/attack_self(mob/user)
|
/obj/item/weapon/cane/concealed/attack_self(var/mob/user)
|
||||||
if(concealed_blade)
|
if(concealed_blade)
|
||||||
user.visible_message("<span class='warning'>[user] has unsheathed \a [concealed_blade] from \his [src]!</span>", "You unsheathe \the [concealed_blade] from \the [src].")
|
user.visible_message("<span class='warning'>[user] has unsheathed \a [concealed_blade] from \his [src]!</span>", "You unsheathe \the [concealed_blade] from \the [src].")
|
||||||
// Calling drop/put in hands to properly call item drop/pickup procs
|
// Calling drop/put in hands to properly call item drop/pickup procs
|
||||||
@@ -101,8 +103,9 @@
|
|||||||
user.drop_from_inventory(src)
|
user.drop_from_inventory(src)
|
||||||
user.put_in_hands(concealed_blade)
|
user.put_in_hands(concealed_blade)
|
||||||
user.put_in_hands(src)
|
user.put_in_hands(src)
|
||||||
|
user.update_inv_l_hand(0)
|
||||||
|
user.update_inv_r_hand()
|
||||||
concealed_blade = null
|
concealed_blade = null
|
||||||
update_icon()
|
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,30 @@ proc/log_and_message_admins(var/message as text)
|
|||||||
log_admin(usr ? "[key_name(usr)] [message]" : "EVENT [message]")
|
log_admin(usr ? "[key_name(usr)] [message]" : "EVENT [message]")
|
||||||
message_admins(usr ? "[key_name(usr)] [message]" : "EVENT [message]")
|
message_admins(usr ? "[key_name(usr)] [message]" : "EVENT [message]")
|
||||||
|
|
||||||
|
proc/log_and_message_admins_many(var/list/mob/users, var/message)
|
||||||
|
if(!users || !users.len)
|
||||||
|
return
|
||||||
|
|
||||||
|
var/list/user_keys = list()
|
||||||
|
for(var/mob/user in users)
|
||||||
|
user_keys += key_name(user)
|
||||||
|
|
||||||
|
log_admin("[english_list(user_keys)] [message]")
|
||||||
|
message_admins("[english_list(user_keys)] [message]")
|
||||||
|
|
||||||
proc/admin_log_and_message_admins(var/message as text)
|
proc/admin_log_and_message_admins(var/message as text)
|
||||||
log_admin(usr ? "[key_name_admin(usr)] [message]" : "EVENT [message]")
|
log_admin(usr ? "[key_name_admin(usr)] [message]" : "EVENT [message]")
|
||||||
message_admins(usr ? "[key_name_admin(usr)] [message]" : "EVENT [message]", 1)
|
message_admins(usr ? "[key_name_admin(usr)] [message]" : "EVENT [message]", 1)
|
||||||
|
|
||||||
proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, var/victim_message, var/admin_message)
|
proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, var/victim_message, var/admin_message)
|
||||||
victim.attack_log += text("\[[time_stamp()]\] <font color='orange'>[victim_message] [key_name(attacker)]</font>")
|
victim.attack_log += text("\[[time_stamp()]\] <font color='orange'>[key_name(attacker)] - [victim_message]</font>")
|
||||||
attacker.attack_log += text("\[[time_stamp()]\] <font color='red'>[attacker_message] [key_name(victim)]</font>")
|
attacker.attack_log += text("\[[time_stamp()]\] <font color='red'>[key_name(victim)] - [attacker_message]</font>")
|
||||||
|
|
||||||
msg_admin_attack("[key_name(attacker)] [admin_message] [key_name(victim)] (INTENT: [uppertext(attacker.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[attacker.x];Y=[attacker.y];Z=[attacker.z]'>JMP</a>)")
|
msg_admin_attack("[key_name(attacker)] [admin_message] [key_name(victim)] (INTENT: [uppertext(attacker.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[attacker.x];Y=[attacker.y];Z=[attacker.z]'>JMP</a>)")
|
||||||
|
|
||||||
|
proc/admin_attacker_log_many_victims(var/mob/attacker, var/list/mob/victims, var/attacker_message, var/victim_message, var/admin_message)
|
||||||
|
if(!victims || !victims.len)
|
||||||
|
return
|
||||||
|
|
||||||
|
for(var/mob/victim in victims)
|
||||||
|
admin_attack_log(attacker, victim, attacker_message, victim_message, admin_message)
|
||||||
|
|||||||
@@ -1362,35 +1362,35 @@ area/space/atmosalert()
|
|||||||
icon_state = "security"
|
icon_state = "security"
|
||||||
|
|
||||||
/area/security/lobby
|
/area/security/lobby
|
||||||
name = "\improper Security lobby"
|
name = "\improper Security Lobby"
|
||||||
icon_state = "security"
|
icon_state = "security"
|
||||||
|
|
||||||
/area/security/brig
|
/area/security/brig
|
||||||
name = "\improper Brig"
|
name = "\improper Security - Brig"
|
||||||
icon_state = "brig"
|
icon_state = "brig"
|
||||||
|
|
||||||
/area/security/prison
|
/area/security/prison
|
||||||
name = "\improper Prison Wing"
|
name = "\improper Security - Prison Wing"
|
||||||
icon_state = "sec_prison"
|
icon_state = "sec_prison"
|
||||||
|
|
||||||
/area/security/warden
|
/area/security/warden
|
||||||
name = "\improper Warden"
|
name = "\improper Security - Warden's Office"
|
||||||
icon_state = "Warden"
|
icon_state = "Warden"
|
||||||
|
|
||||||
/area/security/armoury
|
/area/security/armoury
|
||||||
name = "\improper Armory"
|
name = "\improper Security - Armory"
|
||||||
icon_state = "Warden"
|
icon_state = "Warden"
|
||||||
|
|
||||||
/area/security/detectives_office
|
/area/security/detectives_office
|
||||||
name = "\improper Detective's Office"
|
name = "\improper Security - Forensic Office"
|
||||||
icon_state = "detective"
|
icon_state = "detective"
|
||||||
|
|
||||||
/area/security/range
|
/area/security/range
|
||||||
name = "\improper Firing Range"
|
name = "\improper Security - Firing Range"
|
||||||
icon_state = "firingrange"
|
icon_state = "firingrange"
|
||||||
|
|
||||||
/area/security/tactical
|
/area/security/tactical
|
||||||
name = "\improper Tactical Equipment"
|
name = "\improper Security - Tactical Equipment"
|
||||||
icon_state = "Tactical"
|
icon_state = "Tactical"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -166,6 +166,7 @@
|
|||||||
H.f_style = facial_hair_styles_list[beard]
|
H.f_style = facial_hair_styles_list[beard]
|
||||||
|
|
||||||
H.force_update_limbs()
|
H.force_update_limbs()
|
||||||
|
H.update_eyes()
|
||||||
H.update_hair()
|
H.update_hair()
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -235,9 +235,9 @@
|
|||||||
H.r_eyes = hex2num(getblock(structure,8,3))
|
H.r_eyes = hex2num(getblock(structure,8,3))
|
||||||
H.g_eyes = hex2num(getblock(structure,9,3))
|
H.g_eyes = hex2num(getblock(structure,9,3))
|
||||||
H.b_eyes = hex2num(getblock(structure,10,3))
|
H.b_eyes = hex2num(getblock(structure,10,3))
|
||||||
|
|
||||||
if(H.internal_organs_by_name["eyes"])
|
if(H.internal_organs_by_name["eyes"])
|
||||||
var/obj/item/organ/eyes/eyes = H.internal_organs_by_name["eyes"]
|
H.update_eyes()
|
||||||
eyes.eye_colour = list(H.r_eyes,H.g_eyes,H.b_eyes)
|
|
||||||
|
|
||||||
if (isblockon(getblock(structure, 11,3),11 , 1))
|
if (isblockon(getblock(structure, 11,3),11 , 1))
|
||||||
H.gender = FEMALE
|
H.gender = FEMALE
|
||||||
|
|||||||
@@ -463,7 +463,6 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
|||||||
|
|
||||||
// sending display messages
|
// sending display messages
|
||||||
C << "<span class='notice'>We have regenerated.</span>"
|
C << "<span class='notice'>We have regenerated.</span>"
|
||||||
C.visible_message("<span class='warning'>[src] appears to wake from the dead, having healed all wounds.</span>")
|
|
||||||
|
|
||||||
|
|
||||||
feedback_add_details("changeling_powers","FD")
|
feedback_add_details("changeling_powers","FD")
|
||||||
|
|||||||
@@ -457,6 +457,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
|||||||
user << "\red You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world."
|
user << "\red You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world."
|
||||||
user.take_overall_damage((rand(9)+1)/10) // 0.1 to 1.0 damage
|
user.take_overall_damage((rand(9)+1)/10) // 0.1 to 1.0 damage
|
||||||
if(do_after(user, 50))
|
if(do_after(user, 50))
|
||||||
|
var/area/A = get_area(user)
|
||||||
|
log_and_message_admins("created \an [chosen_rune] rune at \the [A.name] - [user.loc.x]-[user.loc.y]-[user.loc.z].")
|
||||||
if(usr.get_active_hand() != src)
|
if(usr.get_active_hand() != src)
|
||||||
return
|
return
|
||||||
var/mob/living/carbon/human/H = user
|
var/mob/living/carbon/human/H = user
|
||||||
@@ -514,6 +516,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
|||||||
var/mob/living/carbon/human/H = user
|
var/mob/living/carbon/human/H = user
|
||||||
R.blood_DNA = list()
|
R.blood_DNA = list()
|
||||||
R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
|
R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
|
||||||
|
var/area/A = get_area(user)
|
||||||
|
log_and_message_admins("created \an [r] rune at \the [A.name] - [user.loc.x]-[user.loc.y]-[user.loc.z].")
|
||||||
switch(r)
|
switch(r)
|
||||||
if("teleport")
|
if("teleport")
|
||||||
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
|
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ var/list/sacrificed = list()
|
|||||||
/////////////////////////////////////////THIRD RUNE
|
/////////////////////////////////////////THIRD RUNE
|
||||||
|
|
||||||
convert()
|
convert()
|
||||||
|
var/mob/attacker = usr
|
||||||
var/mob/living/carbon/target = null
|
var/mob/living/carbon/target = null
|
||||||
for(var/mob/living/carbon/M in src.loc)
|
for(var/mob/living/carbon/M in src.loc)
|
||||||
if(!iscultist(M) && M.stat < DEAD && !(M in converting))
|
if(!iscultist(M) && M.stat < DEAD && !(M in converting))
|
||||||
@@ -123,10 +124,10 @@ var/list/sacrificed = list()
|
|||||||
if(target.getFireLoss() < 100)
|
if(target.getFireLoss() < 100)
|
||||||
target.hallucination = min(target.hallucination, 500)
|
target.hallucination = min(target.hallucination, 500)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
target.take_overall_damage(0, rand(5, 20)) // You dirty resister cannot handle the damage to your mind. Easily. - even cultists who accept right away should experience some effects
|
target.take_overall_damage(0, rand(5, 20)) // You dirty resister cannot handle the damage to your mind. Easily. - even cultists who accept right away should experience some effects
|
||||||
// Resist messages go!
|
// Resist messages go!
|
||||||
if(initial_message) //don't do this stuff right away, only if they resist or hesitate.
|
if(initial_message) //don't do this stuff right away, only if they resist or hesitate.
|
||||||
|
admin_attack_log(attacker, target, "Used a convert rune", "Was subjected to a convert rune", "used a convert rune on")
|
||||||
switch(target.getFireLoss())
|
switch(target.getFireLoss())
|
||||||
if(0 to 25)
|
if(0 to 25)
|
||||||
target << "<span class='danger'>Your blood boils as you force yourself to resist the corruption invading every corner of your mind.</span>"
|
target << "<span class='danger'>Your blood boils as you force yourself to resist the corruption invading every corner of your mind.</span>"
|
||||||
@@ -176,12 +177,13 @@ var/list/sacrificed = list()
|
|||||||
/////////////////////////////////////////FOURTH RUNE
|
/////////////////////////////////////////FOURTH RUNE
|
||||||
|
|
||||||
tearreality()
|
tearreality()
|
||||||
var/cultist_count = 0
|
var/list/cultists = new()
|
||||||
for(var/mob/M in range(1,src))
|
for(var/mob/M in range(1,src))
|
||||||
if(iscultist(M) && !M.stat)
|
if(iscultist(M) && !M.stat)
|
||||||
M.say("Tok-lyr rqa'nap g[pick("'","`")]lt-ulotf!")
|
M.say("Tok-lyr rqa'nap g[pick("'","`")]lt-ulotf!")
|
||||||
cultist_count += 1
|
cultists += 1
|
||||||
if(cultist_count >= 9)
|
if(cultists.len >= 9)
|
||||||
|
log_and_message_admins_many(cultists, "summoned Nar-sie.")
|
||||||
new /obj/machinery/singularity/narsie/large(src.loc)
|
new /obj/machinery/singularity/narsie/large(src.loc)
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
@@ -190,6 +192,7 @@ var/list/sacrificed = list()
|
|||||||
/////////////////////////////////////////FIFTH RUNE
|
/////////////////////////////////////////FIFTH RUNE
|
||||||
|
|
||||||
emp(var/U,var/range_red) //range_red - var which determines by which number to reduce the default emp range, U is the source loc, needed because of talisman emps which are held in hand at the moment of using and that apparently messes things up -- Urist
|
emp(var/U,var/range_red) //range_red - var which determines by which number to reduce the default emp range, U is the source loc, needed because of talisman emps which are held in hand at the moment of using and that apparently messes things up -- Urist
|
||||||
|
log_and_message_admins("activated an EMP rune.")
|
||||||
if(istype(src,/obj/effect/rune))
|
if(istype(src,/obj/effect/rune))
|
||||||
usr.say("Ta'gh fara[pick("'","`")]qha fel d'amar det!")
|
usr.say("Ta'gh fara[pick("'","`")]qha fel d'amar det!")
|
||||||
else
|
else
|
||||||
@@ -211,6 +214,7 @@ var/list/sacrificed = list()
|
|||||||
if(R.word1==cultwords["travel"] && R.word2==cultwords["blood"] && R.word3==cultwords["self"])
|
if(R.word1==cultwords["travel"] && R.word2==cultwords["blood"] && R.word3==cultwords["self"])
|
||||||
for(var/mob/living/carbon/D in R.loc)
|
for(var/mob/living/carbon/D in R.loc)
|
||||||
if(D.stat!=2)
|
if(D.stat!=2)
|
||||||
|
admin_attack_log(usr, D, "Used a blood drain rune.", "Was victim of a blood drain rune.", "used a blood drain rune on")
|
||||||
var/bdrain = rand(1,25)
|
var/bdrain = rand(1,25)
|
||||||
D << "\red You feel weakened."
|
D << "\red You feel weakened."
|
||||||
D.take_overall_damage(bdrain, 0)
|
D.take_overall_damage(bdrain, 0)
|
||||||
@@ -443,6 +447,7 @@ var/list/sacrificed = list()
|
|||||||
D.real_name += " "
|
D.real_name += " "
|
||||||
D.real_name += pick("Apparition", "Aptrgangr", "Dis", "Draugr", "Dybbuk", "Eidolon", "Fetch", "Fylgja", "Ghast", "Ghost", "Gjenganger", "Haint", "Phantom", "Phantasm", "Poltergeist", "Revenant", "Shade", "Shadow", "Soul", "Spectre", "Spirit", "Spook", "Visitant", "Wraith")
|
D.real_name += pick("Apparition", "Aptrgangr", "Dis", "Draugr", "Dybbuk", "Eidolon", "Fetch", "Fylgja", "Ghast", "Ghost", "Gjenganger", "Haint", "Phantom", "Phantasm", "Poltergeist", "Revenant", "Shade", "Shadow", "Soul", "Spectre", "Spirit", "Spook", "Visitant", "Wraith")
|
||||||
|
|
||||||
|
log_and_message_admins("used a manifest rune.")
|
||||||
var/mob/living/user = usr
|
var/mob/living/user = usr
|
||||||
while(this_rune && user && user.stat==CONSCIOUS && user.client && user.loc==this_rune.loc)
|
while(this_rune && user && user.stat==CONSCIOUS && user.client && user.loc==this_rune.loc)
|
||||||
user.take_organ_damage(1, 0)
|
user.take_organ_damage(1, 0)
|
||||||
@@ -657,6 +662,7 @@ var/list/sacrificed = list()
|
|||||||
usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed."
|
usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed."
|
||||||
else
|
else
|
||||||
if(prob(40))
|
if(prob(40))
|
||||||
|
|
||||||
usr << "\red The Geometer of blood accepts this sacrifice."
|
usr << "\red The Geometer of blood accepts this sacrifice."
|
||||||
cult.grant_runeword(usr)
|
cult.grant_runeword(usr)
|
||||||
else
|
else
|
||||||
@@ -853,7 +859,7 @@ var/list/sacrificed = list()
|
|||||||
|
|
||||||
deafen()
|
deafen()
|
||||||
if(istype(src,/obj/effect/rune))
|
if(istype(src,/obj/effect/rune))
|
||||||
var/affected = 0
|
var/list/affected = new()
|
||||||
for(var/mob/living/carbon/C in range(7,src))
|
for(var/mob/living/carbon/C in range(7,src))
|
||||||
if (iscultist(C))
|
if (iscultist(C))
|
||||||
continue
|
continue
|
||||||
@@ -862,17 +868,18 @@ var/list/sacrificed = list()
|
|||||||
continue
|
continue
|
||||||
C.ear_deaf += 50
|
C.ear_deaf += 50
|
||||||
C.show_message("\red The world around you suddenly becomes quiet.", 3)
|
C.show_message("\red The world around you suddenly becomes quiet.", 3)
|
||||||
affected++
|
affected += C
|
||||||
if(prob(1))
|
if(prob(1))
|
||||||
C.sdisabilities |= DEAF
|
C.sdisabilities |= DEAF
|
||||||
if(affected)
|
if(affected.len)
|
||||||
usr.say("Sti[pick("'","`")] kaliedir!")
|
usr.say("Sti[pick("'","`")] kaliedir!")
|
||||||
usr << "\red The world becomes quiet as the deafening rune dissipates into fine dust."
|
usr << "\red The world becomes quiet as the deafening rune dissipates into fine dust."
|
||||||
|
admin_attacker_log_many_victims(usr, affected, "Used a deafen rune.", "Was victim of a deafen rune.", "used a deafen rune on")
|
||||||
del(src)
|
del(src)
|
||||||
else
|
else
|
||||||
return fizzle()
|
return fizzle()
|
||||||
else
|
else
|
||||||
var/affected = 0
|
var/list/affected = new()
|
||||||
for(var/mob/living/carbon/C in range(7,usr))
|
for(var/mob/living/carbon/C in range(7,usr))
|
||||||
if (iscultist(C))
|
if (iscultist(C))
|
||||||
continue
|
continue
|
||||||
@@ -882,10 +889,11 @@ var/list/sacrificed = list()
|
|||||||
C.ear_deaf += 30
|
C.ear_deaf += 30
|
||||||
//talismans is weaker.
|
//talismans is weaker.
|
||||||
C.show_message("\red The world around you suddenly becomes quiet.", 3)
|
C.show_message("\red The world around you suddenly becomes quiet.", 3)
|
||||||
affected++
|
affected += C
|
||||||
if(affected)
|
if(affected.len)
|
||||||
usr.whisper("Sti[pick("'","`")] kaliedir!")
|
usr.whisper("Sti[pick("'","`")] kaliedir!")
|
||||||
usr << "\red Your talisman turns into gray dust, deafening everyone around."
|
usr << "\red Your talisman turns into gray dust, deafening everyone around."
|
||||||
|
admin_attacker_log_many_victims(usr, affected, "Used a deafen rune.", "Was victim of a deafen rune.", "used a deafen rune on")
|
||||||
for (var/mob/V in orange(1,src))
|
for (var/mob/V in orange(1,src))
|
||||||
if(!(iscultist(V)))
|
if(!(iscultist(V)))
|
||||||
V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3)
|
V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3)
|
||||||
@@ -893,7 +901,7 @@ var/list/sacrificed = list()
|
|||||||
|
|
||||||
blind()
|
blind()
|
||||||
if(istype(src,/obj/effect/rune))
|
if(istype(src,/obj/effect/rune))
|
||||||
var/affected = 0
|
var/list/affected = new()
|
||||||
for(var/mob/living/carbon/C in viewers(src))
|
for(var/mob/living/carbon/C in viewers(src))
|
||||||
if (iscultist(C))
|
if (iscultist(C))
|
||||||
continue
|
continue
|
||||||
@@ -907,15 +915,16 @@ var/list/sacrificed = list()
|
|||||||
if(prob(10))
|
if(prob(10))
|
||||||
C.sdisabilities |= BLIND
|
C.sdisabilities |= BLIND
|
||||||
C.show_message("\red Suddenly you see red flash that blinds you.", 3)
|
C.show_message("\red Suddenly you see red flash that blinds you.", 3)
|
||||||
affected++
|
affected += C
|
||||||
if(affected)
|
if(affected.len)
|
||||||
usr.say("Sti[pick("'","`")] kaliesin!")
|
usr.say("Sti[pick("'","`")] kaliesin!")
|
||||||
usr << "\red The rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust."
|
usr << "\red The rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust."
|
||||||
|
admin_attacker_log_many_victims(usr, affected, "Used a blindness rune.", "Was victim of a blindness rune.", "used a blindness rune on")
|
||||||
del(src)
|
del(src)
|
||||||
else
|
else
|
||||||
return fizzle()
|
return fizzle()
|
||||||
else
|
else
|
||||||
var/affected = 0
|
var/list/affected = new()
|
||||||
for(var/mob/living/carbon/C in view(2,usr))
|
for(var/mob/living/carbon/C in view(2,usr))
|
||||||
if (iscultist(C))
|
if (iscultist(C))
|
||||||
continue
|
continue
|
||||||
@@ -925,11 +934,12 @@ var/list/sacrificed = list()
|
|||||||
C.eye_blurry += 30
|
C.eye_blurry += 30
|
||||||
C.eye_blind += 10
|
C.eye_blind += 10
|
||||||
//talismans is weaker.
|
//talismans is weaker.
|
||||||
affected++
|
affected += C
|
||||||
C.show_message("\red You feel a sharp pain in your eyes, and the world disappears into darkness..", 3)
|
C.show_message("\red You feel a sharp pain in your eyes, and the world disappears into darkness..", 3)
|
||||||
if(affected)
|
if(affected.len)
|
||||||
usr.whisper("Sti[pick("'","`")] kaliesin!")
|
usr.whisper("Sti[pick("'","`")] kaliesin!")
|
||||||
usr << "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie."
|
usr << "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie."
|
||||||
|
admin_attacker_log_many_victims(usr, affected, "Used a blindness rune.", "Was victim of a blindness rune.", "used a blindness rune on")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@@ -940,12 +950,13 @@ var/list/sacrificed = list()
|
|||||||
if (istype(H.current,/mob/living/carbon))
|
if (istype(H.current,/mob/living/carbon))
|
||||||
cultists+=H.current
|
cultists+=H.current
|
||||||
*/
|
*/
|
||||||
var/culcount = 0 //also, wording for it is old wording for obscure rune, which is now hide-see-blood.
|
var/list/cultists = new //also, wording for it is old wording for obscure rune, which is now hide-see-blood.
|
||||||
|
var/list/victims = new
|
||||||
// var/list/cultboil = list(cultists-usr) //and for this words are destroy-see-blood.
|
// var/list/cultboil = list(cultists-usr) //and for this words are destroy-see-blood.
|
||||||
for(var/mob/living/carbon/C in orange(1,src))
|
for(var/mob/living/carbon/C in orange(1,src))
|
||||||
if(iscultist(C) && !C.stat)
|
if(iscultist(C) && !C.stat)
|
||||||
culcount++
|
cultists+=C
|
||||||
if(culcount>=3)
|
if(cultists.len>=3)
|
||||||
for(var/mob/living/carbon/M in viewers(usr))
|
for(var/mob/living/carbon/M in viewers(usr))
|
||||||
if(iscultist(M))
|
if(iscultist(M))
|
||||||
continue
|
continue
|
||||||
@@ -954,6 +965,7 @@ var/list/sacrificed = list()
|
|||||||
continue
|
continue
|
||||||
M.take_overall_damage(51,51)
|
M.take_overall_damage(51,51)
|
||||||
M << "\red Your blood boils!"
|
M << "\red Your blood boils!"
|
||||||
|
victims += M
|
||||||
if(prob(5))
|
if(prob(5))
|
||||||
spawn(5)
|
spawn(5)
|
||||||
M.gib()
|
M.gib()
|
||||||
@@ -964,6 +976,8 @@ var/list/sacrificed = list()
|
|||||||
if(iscultist(C) && !C.stat)
|
if(iscultist(C) && !C.stat)
|
||||||
C.say("Dedo ol[pick("'","`")]btoh!")
|
C.say("Dedo ol[pick("'","`")]btoh!")
|
||||||
C.take_overall_damage(15, 0)
|
C.take_overall_damage(15, 0)
|
||||||
|
admin_attacker_log_many_victims(usr, victims, "Used a blood boil rune.", "Was the victim of a blood boil rune.", "used a blood boil rune on")
|
||||||
|
log_and_message_admins_many(cultists - usr, "assisted activating a blood boil rune.")
|
||||||
del(src)
|
del(src)
|
||||||
else
|
else
|
||||||
return fizzle()
|
return fizzle()
|
||||||
@@ -1003,7 +1017,6 @@ var/list/sacrificed = list()
|
|||||||
if(istype(src,/obj/effect/rune)) ///When invoked as rune, flash and stun everyone around.
|
if(istype(src,/obj/effect/rune)) ///When invoked as rune, flash and stun everyone around.
|
||||||
usr.say("Fuu ma[pick("'","`")]jin!")
|
usr.say("Fuu ma[pick("'","`")]jin!")
|
||||||
for(var/mob/living/L in viewers(src))
|
for(var/mob/living/L in viewers(src))
|
||||||
|
|
||||||
if(iscarbon(L))
|
if(iscarbon(L))
|
||||||
var/mob/living/carbon/C = L
|
var/mob/living/carbon/C = L
|
||||||
flick("e_flash", C.flash)
|
flick("e_flash", C.flash)
|
||||||
@@ -1012,11 +1025,13 @@ var/list/sacrificed = list()
|
|||||||
C.Weaken(1)
|
C.Weaken(1)
|
||||||
C.Stun(1)
|
C.Stun(1)
|
||||||
C.show_message("\red The rune explodes in a bright flash.", 3)
|
C.show_message("\red The rune explodes in a bright flash.", 3)
|
||||||
|
admin_attack_log(usr, C, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on")
|
||||||
|
|
||||||
else if(issilicon(L))
|
else if(issilicon(L))
|
||||||
var/mob/living/silicon/S = L
|
var/mob/living/silicon/S = L
|
||||||
S.Weaken(5)
|
S.Weaken(5)
|
||||||
S.show_message("\red BZZZT... The rune has exploded in a bright flash.", 3)
|
S.show_message("\red BZZZT... The rune has exploded in a bright flash.", 3)
|
||||||
|
admin_attack_log(usr, S, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on")
|
||||||
del(src)
|
del(src)
|
||||||
else ///When invoked as talisman, stun and mute the target mob.
|
else ///When invoked as talisman, stun and mute the target mob.
|
||||||
usr.say("Dream sign ''Evil sealing talisman'[pick("'","`")]!")
|
usr.say("Dream sign ''Evil sealing talisman'[pick("'","`")]!")
|
||||||
@@ -1030,7 +1045,7 @@ var/list/sacrificed = list()
|
|||||||
|
|
||||||
if(issilicon(T))
|
if(issilicon(T))
|
||||||
T.Weaken(15)
|
T.Weaken(15)
|
||||||
|
admin_attack_log(usr, T, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on")
|
||||||
else if(iscarbon(T))
|
else if(iscarbon(T))
|
||||||
var/mob/living/carbon/C = T
|
var/mob/living/carbon/C = T
|
||||||
flick("e_flash", C.flash)
|
flick("e_flash", C.flash)
|
||||||
@@ -1038,6 +1053,7 @@ var/list/sacrificed = list()
|
|||||||
C.silent += 15
|
C.silent += 15
|
||||||
C.Weaken(25)
|
C.Weaken(25)
|
||||||
C.Stun(25)
|
C.Stun(25)
|
||||||
|
admin_attack_log(usr, C, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on")
|
||||||
return
|
return
|
||||||
|
|
||||||
/////////////////////////////////////////TWENTY-FIFTH RUNE
|
/////////////////////////////////////////TWENTY-FIFTH RUNE
|
||||||
|
|||||||
@@ -1,4 +1,11 @@
|
|||||||
// PRESETS
|
// PRESETS
|
||||||
|
var/global/list/station_networks = list("SS13","Engineering Outpost","MINE","Research Outpost","Prison","Security")
|
||||||
|
|
||||||
|
/obj/machinery/camera/network/prison
|
||||||
|
network = list("Prison")
|
||||||
|
|
||||||
|
/obj/machinery/camera/network/security
|
||||||
|
network = list("Security")
|
||||||
|
|
||||||
// EMP
|
// EMP
|
||||||
|
|
||||||
@@ -32,13 +39,16 @@
|
|||||||
// AUTONAME
|
// AUTONAME
|
||||||
|
|
||||||
/obj/machinery/camera/autoname/engineering_outpost
|
/obj/machinery/camera/autoname/engineering_outpost
|
||||||
network = list("SS13", "Engineering Outpost")
|
network = list("Engineering Outpost")
|
||||||
|
|
||||||
/obj/machinery/camera/autoname/mining_outpost
|
/obj/machinery/camera/autoname/mining_outpost
|
||||||
network = list("SS13", "MINE")
|
network = list("MINE")
|
||||||
|
|
||||||
/obj/machinery/camera/autoname/research_outpost
|
/obj/machinery/camera/autoname/research_outpost
|
||||||
network = list("SS13", "Research Outpost")
|
network = list("Research Outpost")
|
||||||
|
|
||||||
|
/obj/machinery/camera/autoname/security
|
||||||
|
network = list("Security")
|
||||||
|
|
||||||
/obj/machinery/camera/autoname
|
/obj/machinery/camera/autoname
|
||||||
var/number = 0 //camera number in area
|
var/number = 0 //camera number in area
|
||||||
|
|||||||
@@ -12,11 +12,16 @@
|
|||||||
icon_state = "cameras"
|
icon_state = "cameras"
|
||||||
var/obj/machinery/camera/current = null
|
var/obj/machinery/camera/current = null
|
||||||
var/last_pic = 1.0
|
var/last_pic = 1.0
|
||||||
var/list/network = list("SS13")
|
var/list/network
|
||||||
var/mapping = 0//For the overview file, interesting bit of code.
|
var/mapping = 0//For the overview file, interesting bit of code.
|
||||||
circuit = /obj/item/weapon/circuitboard/security
|
circuit = /obj/item/weapon/circuitboard/security
|
||||||
var/camera_cache = null
|
var/camera_cache = null
|
||||||
|
|
||||||
|
New()
|
||||||
|
if(!network)
|
||||||
|
network = station_networks
|
||||||
|
..()
|
||||||
|
|
||||||
attack_ai(var/mob/user as mob)
|
attack_ai(var/mob/user as mob)
|
||||||
return attack_hand(user)
|
return attack_hand(user)
|
||||||
|
|
||||||
@@ -235,7 +240,7 @@
|
|||||||
name = "engineering camera monitor"
|
name = "engineering camera monitor"
|
||||||
desc = "Used to monitor fires and breaches."
|
desc = "Used to monitor fires and breaches."
|
||||||
icon_state = "engineeringcameras"
|
icon_state = "engineeringcameras"
|
||||||
network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
|
network = list("Engineering","Engineering Outpost","Power Alarms","Atmosphere Alarms","Fire Alarms")
|
||||||
circuit = /obj/item/weapon/circuitboard/security/engineering
|
circuit = /obj/item/weapon/circuitboard/security/engineering
|
||||||
|
|
||||||
/obj/machinery/computer/security/nuclear
|
/obj/machinery/computer/security/nuclear
|
||||||
|
|||||||
@@ -304,6 +304,17 @@
|
|||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/door/examine(mob/user)
|
||||||
|
..()
|
||||||
|
if(src.health < src.maxhealth / 4)
|
||||||
|
user << "\The [src] looks like it's about to break!"
|
||||||
|
else if(src.health < src.maxhealth / 2)
|
||||||
|
user << "\The [src] looks seriously damaged!"
|
||||||
|
else if(src.health < src.maxhealth * 3/4)
|
||||||
|
user << "\The [src] shows signs of damage!"
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/door/proc/set_broken()
|
/obj/machinery/door/proc/set_broken()
|
||||||
stat |= BROKEN
|
stat |= BROKEN
|
||||||
for (var/mob/O in viewers(src, null))
|
for (var/mob/O in viewers(src, null))
|
||||||
|
|||||||
@@ -179,12 +179,15 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/vending/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
/obj/machinery/vending/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
|
||||||
|
var/obj/item/weapon/card/id/I = W.GetID()
|
||||||
|
|
||||||
if (currently_vending && vendor_account && !vendor_account.suspended)
|
if (currently_vending && vendor_account && !vendor_account.suspended)
|
||||||
var/paid = 0
|
var/paid = 0
|
||||||
var/handled = 0
|
var/handled = 0
|
||||||
if(istype(W, /obj/item/weapon/card/id))
|
|
||||||
var/obj/item/weapon/card/id/C = W
|
if (I) //for IDs and PDAs and wallets with IDs
|
||||||
paid = pay_with_card(C)
|
paid = pay_with_card(I,W)
|
||||||
handled = 1
|
handled = 1
|
||||||
else if (istype(W, /obj/item/weapon/spacecash/ewallet))
|
else if (istype(W, /obj/item/weapon/spacecash/ewallet))
|
||||||
var/obj/item/weapon/spacecash/ewallet/C = W
|
var/obj/item/weapon/spacecash/ewallet/C = W
|
||||||
@@ -202,9 +205,12 @@
|
|||||||
nanomanager.update_uis(src)
|
nanomanager.update_uis(src)
|
||||||
return // don't smack that machine with your 2 thalers
|
return // don't smack that machine with your 2 thalers
|
||||||
|
|
||||||
if (istype(W, /obj/item/weapon/card/emag))
|
if (I || istype(W, /obj/item/weapon/spacecash))
|
||||||
|
attack_hand(user)
|
||||||
|
return
|
||||||
|
else if (istype(W, /obj/item/weapon/card/emag))
|
||||||
src.emagged = 1
|
src.emagged = 1
|
||||||
user << "You short out the product lock on [src]"
|
user << "You short out the product lock on \the [src]"
|
||||||
return
|
return
|
||||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||||
src.panel_open = !src.panel_open
|
src.panel_open = !src.panel_open
|
||||||
@@ -224,7 +230,7 @@
|
|||||||
W.loc = src
|
W.loc = src
|
||||||
coin = W
|
coin = W
|
||||||
categories |= CAT_COIN
|
categories |= CAT_COIN
|
||||||
user << "\blue You insert the [W] into the [src]"
|
user << "\blue You insert \the [W] into \the [src]"
|
||||||
nanomanager.update_uis(src)
|
nanomanager.update_uis(src)
|
||||||
return
|
return
|
||||||
else if(istype(W, /obj/item/weapon/wrench))
|
else if(istype(W, /obj/item/weapon/wrench))
|
||||||
@@ -234,9 +240,9 @@
|
|||||||
switch (anchored)
|
switch (anchored)
|
||||||
if (0)
|
if (0)
|
||||||
anchored = 1
|
anchored = 1
|
||||||
user.visible_message("[user] tightens the bolts securing \the [src] to the floor.", "You tighten the bolts securing \the [src] to the floor.")
|
user.visible_message("\The [user] tightens the bolts securing \the [src] to the floor.", "You tighten the bolts securing \the [src] to the floor.")
|
||||||
if (1)
|
if (1)
|
||||||
user.visible_message("[user] unfastens the bolts securing \the [src] to the floor.", "You unfasten the bolts securing \the [src] to the floor.")
|
user.visible_message("\The [user] unfastens the bolts securing \the [src] to the floor.", "You unfasten the bolts securing \the [src] to the floor.")
|
||||||
anchored = 0
|
anchored = 0
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -266,7 +272,7 @@
|
|||||||
if(istype(cashmoney, /obj/item/weapon/spacecash/bundle))
|
if(istype(cashmoney, /obj/item/weapon/spacecash/bundle))
|
||||||
// Bundles can just have money subtracted, and will work
|
// Bundles can just have money subtracted, and will work
|
||||||
|
|
||||||
visible_message("<span class='info'>[usr] inserts some cash into [src].</span>")
|
visible_message("<span class='info'>\The [usr] inserts some cash into \the [src].</span>")
|
||||||
var/obj/item/weapon/spacecash/bundle/cashmoney_bundle = cashmoney
|
var/obj/item/weapon/spacecash/bundle/cashmoney_bundle = cashmoney
|
||||||
cashmoney_bundle.worth -= currently_vending.price
|
cashmoney_bundle.worth -= currently_vending.price
|
||||||
|
|
||||||
@@ -281,7 +287,7 @@
|
|||||||
// This is really dirty, but there's no superclass for all bills, so we
|
// This is really dirty, but there's no superclass for all bills, so we
|
||||||
// just assume that all spacecash that's not something else is a bill
|
// just assume that all spacecash that's not something else is a bill
|
||||||
|
|
||||||
visible_message("<span class='info'>[usr] inserts a bill into [src].</span>")
|
visible_message("<span class='info'>\The [usr] inserts a bill into \the [src].</span>")
|
||||||
var/left = cashmoney.worth - currently_vending.price
|
var/left = cashmoney.worth - currently_vending.price
|
||||||
usr.drop_from_inventory(cashmoney)
|
usr.drop_from_inventory(cashmoney)
|
||||||
del(cashmoney)
|
del(cashmoney)
|
||||||
@@ -300,7 +306,7 @@
|
|||||||
* successful, 0 if failed.
|
* successful, 0 if failed.
|
||||||
*/
|
*/
|
||||||
/obj/machinery/vending/proc/pay_with_ewallet(var/obj/item/weapon/spacecash/ewallet/wallet)
|
/obj/machinery/vending/proc/pay_with_ewallet(var/obj/item/weapon/spacecash/ewallet/wallet)
|
||||||
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
|
visible_message("<span class='info'>\The [usr] swipes \the [wallet] through \the [src].</span>")
|
||||||
if(currently_vending.price > wallet.worth)
|
if(currently_vending.price > wallet.worth)
|
||||||
src.status_message = "Insufficient funds on chargecard."
|
src.status_message = "Insufficient funds on chargecard."
|
||||||
src.status_error = 1
|
src.status_error = 1
|
||||||
@@ -316,8 +322,11 @@
|
|||||||
* Takes payment for whatever is the currently_vending item. Returns 1 if
|
* Takes payment for whatever is the currently_vending item. Returns 1 if
|
||||||
* successful, 0 if failed
|
* successful, 0 if failed
|
||||||
*/
|
*/
|
||||||
/obj/machinery/vending/proc/pay_with_card(var/obj/item/weapon/card/id/I)
|
/obj/machinery/vending/proc/pay_with_card(var/obj/item/weapon/card/id/I, var/obj/item/ID_container)
|
||||||
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
|
if(I==ID_container || ID_container == null)
|
||||||
|
visible_message("<span class='info'>\The [usr] swipes \the [I] through \the [src].</span>")
|
||||||
|
else
|
||||||
|
visible_message("<span class='info'>\The [usr] swipes \the [ID_container] through \the [src].</span>")
|
||||||
var/datum/money_account/customer_account = get_account(I.associated_account_number)
|
var/datum/money_account/customer_account = get_account(I.associated_account_number)
|
||||||
if (!customer_account)
|
if (!customer_account)
|
||||||
src.status_message = "Error: Unable to access account. Please contact technical support if problem persists."
|
src.status_message = "Error: Unable to access account. Please contact technical support if problem persists."
|
||||||
@@ -529,7 +538,7 @@
|
|||||||
return
|
return
|
||||||
if(coin.string_attached)
|
if(coin.string_attached)
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
user << "\blue You successfully pull the coin out before the [src] could swallow it."
|
user << "\blue You successfully pull the coin out before \the [src] could swallow it."
|
||||||
else
|
else
|
||||||
user << "\blue You weren't able to pull the coin out fast enough, the machine ate it, string and all."
|
user << "\blue You weren't able to pull the coin out fast enough, the machine ate it, string and all."
|
||||||
del(coin)
|
del(coin)
|
||||||
@@ -558,7 +567,7 @@
|
|||||||
|
|
||||||
/obj/machinery/vending/proc/stock(var/datum/data/vending_product/R, var/mob/user)
|
/obj/machinery/vending/proc/stock(var/datum/data/vending_product/R, var/mob/user)
|
||||||
if(src.panel_open)
|
if(src.panel_open)
|
||||||
user << "\blue You stock the [src] with \a [R.product_name]"
|
user << "\blue You stock \the [src] with \a [R.product_name]"
|
||||||
R.amount++
|
R.amount++
|
||||||
|
|
||||||
nanomanager.update_uis(src)
|
nanomanager.update_uis(src)
|
||||||
@@ -592,7 +601,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
for(var/mob/O in hearers(src, null))
|
for(var/mob/O in hearers(src, null))
|
||||||
O.show_message("<span class='game say'><span class='name'>[src]</span> beeps, \"[message]\"",2)
|
O.show_message("<span class='game say'><span class='name'>\The [src]</span> beeps, \"[message]\"",2)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/vending/power_change()
|
/obj/machinery/vending/power_change()
|
||||||
|
|||||||
@@ -98,7 +98,7 @@
|
|||||||
<br>
|
<br>
|
||||||
<h2>OPERATING PRINCIPLES</h2>
|
<h2>OPERATING PRINCIPLES</h2>
|
||||||
<br>
|
<br>
|
||||||
<li>The supermatter crystal serves as the fundamental power source of the engine. Upon being charged, it begins to emit large amounts of heat and radiation, as well and oxygen and plasma. As oxygen accelerates the reaction, and plasma carries the risk of fire, these must be filtered out. NOTE: Supermatter radiation will not charge radiation collectors.</li>
|
<li>The supermatter crystal serves as the fundamental power source of the engine. Upon being charged, it begins to emit large amounts of heat and radiation, as well and oxygen and phoron gas. As oxygen accelerates the reaction, and phoron carries the risk of fire, these must be filtered out. NOTE: Supermatter radiation will not charge radiation collectors.</li>
|
||||||
<br>
|
<br>
|
||||||
<li>Air in the reactor chamber housing the supermatter is circulated through the reactor loop, which passes through the filters and thermoelectric generators. The thermoelectric generators transfer heat from the reactor loop to the colder radiator loop, thereby generating power. Additional power is generated from internal turbines in the circulators.</li>
|
<li>Air in the reactor chamber housing the supermatter is circulated through the reactor loop, which passes through the filters and thermoelectric generators. The thermoelectric generators transfer heat from the reactor loop to the colder radiator loop, thereby generating power. Additional power is generated from internal turbines in the circulators.</li>
|
||||||
<br>
|
<br>
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
<br>
|
<br>
|
||||||
<li>The MK 1 Prototype Thermoelectric Supermatter Engine is designed to operate at reactor temperatures of 3000K to 4000K and generate up to 1MW of power. Beyond 1MW, the thermoelectric generators will begin to lose power through electrical discharge, reducing efficiency, but additional power generation remains feasible.</li>
|
<li>The MK 1 Prototype Thermoelectric Supermatter Engine is designed to operate at reactor temperatures of 3000K to 4000K and generate up to 1MW of power. Beyond 1MW, the thermoelectric generators will begin to lose power through electrical discharge, reducing efficiency, but additional power generation remains feasible.</li>
|
||||||
<br>
|
<br>
|
||||||
<li>The crystal structure of the supermatter will begin to liquefy if its temperature exceeds 5000K. This eventually results in a massive release of light, heat and radiation, disintegration of both the supermatter crystal and most of the surrounding area, and as as-of-yet poorly documented psychological effects on all animals within a 2km. Appropriate action should be taken to stabilize or eject the supermatter before such occurs.</li>
|
<li>The crystal structure of the supermatter will begin to liquefy if its temperature exceeds 5000K. This eventually results in a massive release of light, heat and radiation, disintegration of both the supermatter crystal and most of the surrounding area, and as as-of-yet poorly documented psychological effects on all animals within a 2km radius. Appropriate action should be taken to stabilize or eject the supermatter before such occurs.</li>
|
||||||
<br>
|
<br>
|
||||||
<h2>SUPERMATTER HANDLING</h2>
|
<h2>SUPERMATTER HANDLING</h2>
|
||||||
<li>Do not expose supermatter to oxygen.</li>
|
<li>Do not expose supermatter to oxygen.</li>
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
<ol>
|
<ol>
|
||||||
<li>Ensure that radiation protection and meson goggles are worn at all times while working in the engine room.</li>
|
<li>Ensure that radiation protection and meson goggles are worn at all times while working in the engine room.</li>
|
||||||
<li>Ensure that reactor and radiator loops are undamaged and unobstructed.</li>
|
<li>Ensure that reactor and radiator loops are undamaged and unobstructed.</li>
|
||||||
<li>Ensure that plasma and oxygen gas exhaust from filters is properly contained or disposed. Do not allow exhaust pressure to exceed 4500 kPa.</li>
|
<li>Ensure that phoron and oxygen gas exhaust from filters is properly contained or disposed. Do not allow exhaust pressure to exceed 4500 kPa.</li>
|
||||||
<li>Ensure that engine room Area Power Controller (APC) and engine Superconducting Magnetic Energy Storage unit (SMES) are properly charged.</li>
|
<li>Ensure that engine room Area Power Controller (APC) and engine Superconducting Magnetic Energy Storage unit (SMES) are properly charged.</li>
|
||||||
<li>Ensure that reactor temperature does not exceed 5000K. In event of reactor temperature exceeding 5000K, see EMERGENCY COOLING PROCEDURE.</li>
|
<li>Ensure that reactor temperature does not exceed 5000K. In event of reactor temperature exceeding 5000K, see EMERGENCY COOLING PROCEDURE.</li>
|
||||||
<li>In event of imminent and/or unavoidable delamination, see EJECTION PROCEDURE.</li>
|
<li>In event of imminent and/or unavoidable delamination, see EJECTION PROCEDURE.</li>
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ var/list/admin_verbs_mentor = list(
|
|||||||
if(holder.rights & R_SERVER) verbs += admin_verbs_server
|
if(holder.rights & R_SERVER) verbs += admin_verbs_server
|
||||||
if(holder.rights & R_DEBUG)
|
if(holder.rights & R_DEBUG)
|
||||||
verbs += admin_verbs_debug
|
verbs += admin_verbs_debug
|
||||||
if(config.debugparanoid && !check_rights(R_ADMIN))
|
if(config.debugparanoid && !(holder.rights & R_ADMIN))
|
||||||
verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on.
|
verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on.
|
||||||
if(holder.rights & R_POSSESS) verbs += admin_verbs_possess
|
if(holder.rights & R_POSSESS) verbs += admin_verbs_possess
|
||||||
if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions
|
if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions
|
||||||
|
|||||||
@@ -661,6 +661,12 @@ var/global/list/gear_datums = list()
|
|||||||
cost = 2
|
cost = 2
|
||||||
slot = slot_shoes
|
slot = slot_shoes
|
||||||
|
|
||||||
|
/datum/gear/toeless_jackboots
|
||||||
|
display_name = "toe-less jackboots"
|
||||||
|
path = /obj/item/clothing/shoes/jackboots/fluff/kecer_eldraran //permisson of owner of custom item was granted
|
||||||
|
cost = 2
|
||||||
|
slot = slot_shoes
|
||||||
|
|
||||||
/datum/gear/sandal
|
/datum/gear/sandal
|
||||||
display_name = "sandals"
|
display_name = "sandals"
|
||||||
path = /obj/item/clothing/shoes/sandal
|
path = /obj/item/clothing/shoes/sandal
|
||||||
|
|||||||
@@ -105,6 +105,13 @@
|
|||||||
|
|
||||||
// Okay, it wasn't a terminal being touched, check for all the simple insertions.
|
// Okay, it wasn't a terminal being touched, check for all the simple insertions.
|
||||||
if(input_device.type in list(/obj/item/device/paicard, /obj/item/device/mmi, /obj/item/device/mmi/digital/posibrain))
|
if(input_device.type in list(/obj/item/device/paicard, /obj/item/device/mmi, /obj/item/device/mmi/digital/posibrain))
|
||||||
|
if(integrated_ai)
|
||||||
|
integrated_ai.attackby(input_device,user)
|
||||||
|
// If the transfer was successful, we can clear out our vars.
|
||||||
|
if(integrated_ai.loc != src)
|
||||||
|
integrated_ai = null
|
||||||
|
eject_ai()
|
||||||
|
else
|
||||||
integrate_ai(input_device,user)
|
integrate_ai(input_device,user)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/obj/item/device/eftpos
|
/obj/item/device/eftpos
|
||||||
name = "EFTPOS scanner"
|
name = "\improper EFTPOS scanner"
|
||||||
desc = "Swipe your ID card to make purchases electronically."
|
desc = "Swipe your ID card to make purchases electronically."
|
||||||
icon = 'icons/obj/device.dmi'
|
icon = 'icons/obj/device.dmi'
|
||||||
icon_state = "eftpos"
|
icon_state = "eftpos"
|
||||||
@@ -110,11 +110,13 @@
|
|||||||
else
|
else
|
||||||
user << browse(null,"window=eftpos")
|
user << browse(null,"window=eftpos")
|
||||||
|
|
||||||
/obj/item/device/eftpos/attackby(O as obj, user as mob)
|
/obj/item/device/eftpos/attackby(obj/item/O as obj, user as mob)
|
||||||
if(istype(O, /obj/item/weapon/card))
|
|
||||||
|
var/obj/item/weapon/card/id/I = O.GetID()
|
||||||
|
|
||||||
|
if(I)
|
||||||
if(linked_account)
|
if(linked_account)
|
||||||
var/obj/item/weapon/card/I = O
|
scan_card(I, O)
|
||||||
scan_card(I)
|
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>Unable to connect to linked account.</span>"
|
usr << "\icon[src]<span class='warning'>Unable to connect to linked account.</span>"
|
||||||
else if (istype(O, /obj/item/weapon/spacecash/ewallet))
|
else if (istype(O, /obj/item/weapon/spacecash/ewallet))
|
||||||
@@ -124,7 +126,7 @@
|
|||||||
if(transaction_locked && !transaction_paid)
|
if(transaction_locked && !transaction_paid)
|
||||||
if(transaction_amount <= E.worth)
|
if(transaction_amount <= E.worth)
|
||||||
playsound(src, 'sound/machines/chime.ogg', 50, 1)
|
playsound(src, 'sound/machines/chime.ogg', 50, 1)
|
||||||
src.visible_message("\icon[src] The [src] chimes.")
|
src.visible_message("\icon[src] \The [src] chimes.")
|
||||||
transaction_paid = 1
|
transaction_paid = 1
|
||||||
|
|
||||||
//transfer the money
|
//transfer the money
|
||||||
@@ -141,7 +143,7 @@
|
|||||||
T.time = worldtime2text()
|
T.time = worldtime2text()
|
||||||
linked_account.transaction_log.Add(T)
|
linked_account.transaction_log.Add(T)
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>The charge card doesn't have that much money!</span>"
|
usr << "\icon[src]<span class='warning'>\The [O] doesn't have that much money!</span>"
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>Connected account has been suspended.</span>"
|
usr << "\icon[src]<span class='warning'>Connected account has been suspended.</span>"
|
||||||
else
|
else
|
||||||
@@ -225,10 +227,13 @@
|
|||||||
|
|
||||||
src.attack_self(usr)
|
src.attack_self(usr)
|
||||||
|
|
||||||
/obj/item/device/eftpos/proc/scan_card(var/obj/item/weapon/card/I)
|
/obj/item/device/eftpos/proc/scan_card(var/obj/item/weapon/card/I, var/obj/item/ID_container)
|
||||||
if (istype(I, /obj/item/weapon/card/id))
|
if (istype(I, /obj/item/weapon/card/id))
|
||||||
var/obj/item/weapon/card/id/C = I
|
var/obj/item/weapon/card/id/C = I
|
||||||
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
|
if(I==ID_container || ID_container == null)
|
||||||
|
usr.visible_message("<span class='info'>\The [usr] swipes a card through \the [src].</span>")
|
||||||
|
else
|
||||||
|
usr.visible_message("<span class='info'>\The [usr] swipes \the [ID_container] through \the [src].</span>")
|
||||||
if(transaction_locked && !transaction_paid)
|
if(transaction_locked && !transaction_paid)
|
||||||
if(linked_account)
|
if(linked_account)
|
||||||
if(!linked_account.suspended)
|
if(!linked_account.suspended)
|
||||||
@@ -242,7 +247,7 @@
|
|||||||
if(!D.suspended)
|
if(!D.suspended)
|
||||||
if(transaction_amount <= D.money)
|
if(transaction_amount <= D.money)
|
||||||
playsound(src, 'sound/machines/chime.ogg', 50, 1)
|
playsound(src, 'sound/machines/chime.ogg', 50, 1)
|
||||||
src.visible_message("\icon[src] The [src] chimes.")
|
src.visible_message("\icon[src] \The [src] chimes.")
|
||||||
transaction_paid = 1
|
transaction_paid = 1
|
||||||
|
|
||||||
//transfer the money
|
//transfer the money
|
||||||
@@ -283,13 +288,13 @@
|
|||||||
else if (istype(I, /obj/item/weapon/card/emag))
|
else if (istype(I, /obj/item/weapon/card/emag))
|
||||||
if(transaction_locked)
|
if(transaction_locked)
|
||||||
if(transaction_paid)
|
if(transaction_paid)
|
||||||
usr << "\icon[src]<span class='info'>You stealthily swipe [I] through [src].</span>"
|
usr << "\icon[src]<span class='info'>You stealthily swipe \the [I] through \the [src].</span>"
|
||||||
transaction_locked = 0
|
transaction_locked = 0
|
||||||
transaction_paid = 0
|
transaction_paid = 0
|
||||||
else
|
else
|
||||||
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
|
usr.visible_message("<span class='info'>\The [usr] swipes a card through \the [src].</span>")
|
||||||
playsound(src, 'sound/machines/chime.ogg', 50, 1)
|
playsound(src, 'sound/machines/chime.ogg', 50, 1)
|
||||||
src.visible_message("\icon[src] The [src] chimes.")
|
src.visible_message("\icon[src] \The [src] chimes.")
|
||||||
transaction_paid = 1
|
transaction_paid = 1
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
matter = list("metal" = 3750)
|
matter = list("metal" = 3750)
|
||||||
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
|
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
|
||||||
origin_tech = "materials=1;engineering=1"
|
origin_tech = "materials=1;engineering=1"
|
||||||
attack_verb = list("hit", "pierced", "sliced", "attacked", "drilled")
|
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
||||||
var/drill_sound = 'sound/weapons/Genhit.ogg'
|
var/drill_sound = 'sound/weapons/Genhit.ogg'
|
||||||
var/drill_verb = "drilling"
|
var/drill_verb = "drilling"
|
||||||
sharp = 1
|
sharp = 1
|
||||||
@@ -107,6 +107,7 @@
|
|||||||
digspeed = 20
|
digspeed = 20
|
||||||
origin_tech = "materials=4"
|
origin_tech = "materials=4"
|
||||||
desc = "This makes no metallurgic sense."
|
desc = "This makes no metallurgic sense."
|
||||||
|
drill_verb = "picking"
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/plasmacutter
|
/obj/item/weapon/pickaxe/plasmacutter
|
||||||
name = "plasma cutter"
|
name = "plasma cutter"
|
||||||
@@ -127,7 +128,8 @@
|
|||||||
item_state = "dpickaxe"
|
item_state = "dpickaxe"
|
||||||
digspeed = 10
|
digspeed = 10
|
||||||
origin_tech = "materials=6;engineering=4"
|
origin_tech = "materials=6;engineering=4"
|
||||||
desc = "A pickaxe with a diamond pick head, this is just like minecraft."
|
desc = "A pickaxe with a diamond pick head."
|
||||||
|
drill_verb = "picking"
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME!
|
/obj/item/weapon/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME!
|
||||||
name = "diamond mining drill"
|
name = "diamond mining drill"
|
||||||
|
|||||||
@@ -134,6 +134,12 @@
|
|||||||
. = (L in languages)
|
. = (L in languages)
|
||||||
languages.Remove(L)
|
languages.Remove(L)
|
||||||
|
|
||||||
|
/mob/living/remove_language(rem_language)
|
||||||
|
var/datum/language/L = all_languages[rem_language]
|
||||||
|
if(default_language == L)
|
||||||
|
default_language = null
|
||||||
|
return ..()
|
||||||
|
|
||||||
// Can we speak this language, as opposed to just understanding it?
|
// Can we speak this language, as opposed to just understanding it?
|
||||||
/mob/proc/can_speak(datum/language/speaking)
|
/mob/proc/can_speak(datum/language/speaking)
|
||||||
|
|
||||||
@@ -154,4 +160,32 @@
|
|||||||
src << browse(dat, "window=checklanguage")
|
src << browse(dat, "window=checklanguage")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/mob/living/check_languages()
|
||||||
|
var/dat = "<b><font size = 5>Known Languages</font></b><br/><br/>"
|
||||||
|
|
||||||
|
if(default_language)
|
||||||
|
dat += "Current default language: [default_language] - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/><br/>"
|
||||||
|
|
||||||
|
for(var/datum/language/L in languages)
|
||||||
|
if(!(L.flags & NONGLOBAL))
|
||||||
|
if(L == default_language)
|
||||||
|
dat += "<b>[L.name] (:[L.key])</b> - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/>[L.desc]<br/><br/>"
|
||||||
|
else
|
||||||
|
dat += "<b>[L.name] (:[L.key])</b> - <a href='byond://?src=\ref[src];default_lang=[L]'>set default</a><br/>[L.desc]<br/><br/>"
|
||||||
|
|
||||||
|
src << browse(dat, "window=checklanguage")
|
||||||
|
|
||||||
|
/mob/living/Topic(href, href_list)
|
||||||
|
if(href_list["default_lang"])
|
||||||
|
if(href_list["default_lang"] == "reset")
|
||||||
|
set_default_language(null)
|
||||||
|
else
|
||||||
|
var/datum/language/L = all_languages[href_list["default_lang"]]
|
||||||
|
if(L)
|
||||||
|
set_default_language(L)
|
||||||
|
check_languages()
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return ..()
|
||||||
|
|
||||||
#undef SCRAMBLE_CACHE_LEN
|
#undef SCRAMBLE_CACHE_LEN
|
||||||
|
|||||||
@@ -456,6 +456,9 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
/mob/living/carbon/get_default_language()
|
/mob/living/carbon/get_default_language()
|
||||||
|
if(default_language)
|
||||||
|
return default_language
|
||||||
|
|
||||||
if(!species)
|
if(!species)
|
||||||
return null
|
return null
|
||||||
return species.default_language ? all_languages[species.default_language] : null
|
return species.default_language ? all_languages[species.default_language] : null
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
|
|
||||||
mutations.Add(HUSK)
|
mutations.Add(HUSK)
|
||||||
status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools
|
status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools
|
||||||
update_body(0)
|
update_body(1)
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/Drain()
|
/mob/living/carbon/human/proc/Drain()
|
||||||
|
|||||||
@@ -21,7 +21,10 @@
|
|||||||
set_species()
|
set_species()
|
||||||
|
|
||||||
if(species)
|
if(species)
|
||||||
name = species.get_random_name(gender)
|
real_name = species.get_random_name(gender)
|
||||||
|
name = real_name
|
||||||
|
if(mind)
|
||||||
|
mind.name = real_name
|
||||||
|
|
||||||
var/datum/reagents/R = new/datum/reagents(1000)
|
var/datum/reagents/R = new/datum/reagents(1000)
|
||||||
reagents = R
|
reagents = R
|
||||||
@@ -926,23 +929,12 @@
|
|||||||
germ_level += n
|
germ_level += n
|
||||||
|
|
||||||
/mob/living/carbon/human/revive()
|
/mob/living/carbon/human/revive()
|
||||||
for (var/obj/item/organ/external/O in organs)
|
|
||||||
O.status &= ~ORGAN_BROKEN
|
|
||||||
O.status &= ~ORGAN_BLEEDING
|
|
||||||
O.status &= ~ORGAN_SPLINTED
|
|
||||||
O.status &= ~ORGAN_CUT_AWAY
|
|
||||||
O.status &= ~ORGAN_ATTACHABLE
|
|
||||||
O.wounds.Cut()
|
|
||||||
O.heal_damage(1000,1000,1,1)
|
|
||||||
|
|
||||||
var/obj/item/organ/external/head/h = organs_by_name["head"]
|
|
||||||
h.disfigured = 0
|
|
||||||
|
|
||||||
if(species && !(species.flags & NO_BLOOD))
|
if(species && !(species.flags & NO_BLOOD))
|
||||||
vessel.add_reagent("blood",560-vessel.total_volume)
|
vessel.add_reagent("blood",560-vessel.total_volume)
|
||||||
fixblood()
|
fixblood()
|
||||||
|
|
||||||
// Fix up any missing organs.
|
// Fix up all organs.
|
||||||
// This will ignore any prosthetics in the prefs currently.
|
// This will ignore any prosthetics in the prefs currently.
|
||||||
species.create_organs(src)
|
species.create_organs(src)
|
||||||
|
|
||||||
@@ -954,11 +946,9 @@
|
|||||||
H.brainmob.mind.transfer_to(src)
|
H.brainmob.mind.transfer_to(src)
|
||||||
del(H)
|
del(H)
|
||||||
|
|
||||||
for(var/obj/item/organ/I in internal_organs)
|
|
||||||
I.damage = 0
|
|
||||||
|
|
||||||
for (var/datum/disease/virus in viruses)
|
for (var/datum/disease/virus in viruses)
|
||||||
virus.cure()
|
virus.cure()
|
||||||
|
|
||||||
for (var/ID in virus2)
|
for (var/ID in virus2)
|
||||||
var/datum/disease2/disease/V = virus2[ID]
|
var/datum/disease2/disease/V = virus2[ID]
|
||||||
V.cure(src)
|
V.cure(src)
|
||||||
|
|||||||
@@ -100,9 +100,9 @@
|
|||||||
var/hit_zone = H.zone_sel.selecting
|
var/hit_zone = H.zone_sel.selecting
|
||||||
var/obj/item/organ/external/affecting = get_organ(hit_zone)
|
var/obj/item/organ/external/affecting = get_organ(hit_zone)
|
||||||
|
|
||||||
if(!affecting || affecting.status & ORGAN_DESTROYED)
|
if(!affecting || affecting.is_stump() || (affecting.status & ORGAN_DESTROYED))
|
||||||
M << "<span class='danger'>They are missing that limb!</span>"
|
M << "<span class='danger'>They are missing that limb!</span>"
|
||||||
return
|
return 1
|
||||||
|
|
||||||
switch(src.a_intent)
|
switch(src.a_intent)
|
||||||
if(I_HELP)
|
if(I_HELP)
|
||||||
@@ -220,14 +220,14 @@
|
|||||||
|
|
||||||
if (istype(l_hand,/obj/item/weapon/gun))
|
if (istype(l_hand,/obj/item/weapon/gun))
|
||||||
W = l_hand
|
W = l_hand
|
||||||
chance = hand ? 40 : 20
|
chance += hand ? 40 : 20
|
||||||
|
|
||||||
if (istype(r_hand,/obj/item/weapon/gun))
|
else if (istype(r_hand,/obj/item/weapon/gun))
|
||||||
W = r_hand
|
W = r_hand
|
||||||
chance = !hand ? 40 : 20
|
chance += !hand ? 40 : 20
|
||||||
|
|
||||||
if (prob(chance))
|
if (prob(chance))
|
||||||
visible_message("<span class='danger'>[src]'s [W] goes off during struggle!</span>")
|
visible_message("<span class='danger'>[src]'s [W.name] goes off during struggle!")
|
||||||
var/list/turfs = list()
|
var/list/turfs = list()
|
||||||
for(var/turf/T in view())
|
for(var/turf/T in view())
|
||||||
turfs += T
|
turfs += T
|
||||||
@@ -308,7 +308,7 @@
|
|||||||
if(!target_zone)
|
if(!target_zone)
|
||||||
return null
|
return null
|
||||||
var/obj/item/organ/external/organ = get_organ(check_zone(target_zone))
|
var/obj/item/organ/external/organ = get_organ(check_zone(target_zone))
|
||||||
if(!organ || organ.is_dislocated() || organ.dislocated == -1)
|
if(!organ || (organ.dislocated == 2) || (organ.dislocated == -1))
|
||||||
return null
|
return null
|
||||||
var/dislocation_str
|
var/dislocation_str
|
||||||
if(prob(W.force))
|
if(prob(W.force))
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/mob/living/carbon/human/proc/update_eyes()
|
/mob/living/carbon/human/proc/update_eyes()
|
||||||
if(internal_organs_by_name["eyes"])
|
|
||||||
var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"]
|
var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"]
|
||||||
eyes.eye_colour = list(r_eyes,g_eyes,b_eyes)
|
if(eyes)
|
||||||
|
eyes.update_colour()
|
||||||
regenerate_icons()
|
regenerate_icons()
|
||||||
|
|
||||||
/mob/living/carbon/var/list/internal_organs = list()
|
/mob/living/carbon/var/list/internal_organs = list()
|
||||||
@@ -70,12 +70,12 @@
|
|||||||
|
|
||||||
for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot"))
|
for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot"))
|
||||||
var/obj/item/organ/external/E = organs_by_name[limb_tag]
|
var/obj/item/organ/external/E = organs_by_name[limb_tag]
|
||||||
if(!E)
|
if(!E || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD)))
|
||||||
stance_damage += 2
|
|
||||||
else if (E.status & ORGAN_DESTROYED)
|
|
||||||
stance_damage += 2 // let it fail even if just foot&leg
|
stance_damage += 2 // let it fail even if just foot&leg
|
||||||
else if (E.is_malfunctioning() || (E.is_broken() && !(E.status & ORGAN_SPLINTED)) || !E.is_usable())
|
else if (E.is_malfunctioning() || (E.is_broken() && !(E.status & ORGAN_SPLINTED)) || (E.status & ORGAN_MUTATED))
|
||||||
stance_damage += 1
|
stance_damage += 1
|
||||||
|
else if (E.is_dislocated())
|
||||||
|
stance_damage += 0.5
|
||||||
|
|
||||||
// Canes and crutches help you stand (if the latter is ever added)
|
// Canes and crutches help you stand (if the latter is ever added)
|
||||||
// One cane mitigates a broken leg+foot, or a missing foot.
|
// One cane mitigates a broken leg+foot, or a missing foot.
|
||||||
@@ -102,10 +102,14 @@
|
|||||||
if(!E || !E.can_grasp || (E.status & ORGAN_SPLINTED))
|
if(!E || !E.can_grasp || (E.status & ORGAN_SPLINTED))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if(E.is_broken())
|
if(E.is_broken() || E.is_dislocated())
|
||||||
if(E.body_part == HAND_LEFT)
|
if(E.body_part == HAND_LEFT)
|
||||||
|
if(!l_hand)
|
||||||
|
continue
|
||||||
drop_from_inventory(l_hand)
|
drop_from_inventory(l_hand)
|
||||||
else
|
else
|
||||||
|
if(!r_hand)
|
||||||
|
continue
|
||||||
drop_from_inventory(r_hand)
|
drop_from_inventory(r_hand)
|
||||||
|
|
||||||
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
|
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
|
||||||
|
|||||||
@@ -389,7 +389,7 @@
|
|||||||
// Lung damage increases the minimum safe pressure.
|
// Lung damage increases the minimum safe pressure.
|
||||||
if(species.has_organ["lungs"])
|
if(species.has_organ["lungs"])
|
||||||
var/obj/item/organ/lungs/L = internal_organs_by_name["lungs"]
|
var/obj/item/organ/lungs/L = internal_organs_by_name["lungs"]
|
||||||
if(!L)
|
if(isnull(L))
|
||||||
safe_pressure_min = INFINITY //No lungs, how are you breathing?
|
safe_pressure_min = INFINITY //No lungs, how are you breathing?
|
||||||
else if(L.is_broken())
|
else if(L.is_broken())
|
||||||
safe_pressure_min *= 1.5
|
safe_pressure_min *= 1.5
|
||||||
|
|||||||
@@ -168,6 +168,10 @@
|
|||||||
|
|
||||||
/datum/species/proc/get_random_name(var/gender)
|
/datum/species/proc/get_random_name(var/gender)
|
||||||
var/datum/language/species_language = all_languages[language]
|
var/datum/language/species_language = all_languages[language]
|
||||||
|
if(!species_language)
|
||||||
|
species_language = all_languages[default_language]
|
||||||
|
if(!species_language)
|
||||||
|
return "unknown"
|
||||||
return species_language.get_random_name(gender)
|
return species_language.get_random_name(gender)
|
||||||
|
|
||||||
/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs.
|
/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs.
|
||||||
|
|||||||
@@ -45,11 +45,8 @@
|
|||||||
if(prob(1))
|
if(prob(1))
|
||||||
H.emote(pick("scratch","jump","roll","tail"))
|
H.emote(pick("scratch","jump","roll","tail"))
|
||||||
|
|
||||||
/datum/species/monkey/handle_post_spawn(var/mob/living/carbon/human/H)
|
/datum/species/monkey/get_random_name()
|
||||||
H.real_name = "[lowertext(name)] ([rand(100,999)])"
|
return "[lowertext(name)] ([rand(100,999)])"
|
||||||
H.name = H.real_name
|
|
||||||
|
|
||||||
..()
|
|
||||||
|
|
||||||
/datum/species/monkey/tajaran
|
/datum/species/monkey/tajaran
|
||||||
name = "Farwa"
|
name = "Farwa"
|
||||||
|
|||||||
@@ -61,6 +61,9 @@
|
|||||||
var/weeds_heal_rate = 1 // Health regen on weeds.
|
var/weeds_heal_rate = 1 // Health regen on weeds.
|
||||||
var/weeds_plasma_rate = 5 // Plasma regen on weeds.
|
var/weeds_plasma_rate = 5 // Plasma regen on weeds.
|
||||||
|
|
||||||
|
/datum/species/xenos/get_random_name()
|
||||||
|
return "alien [caste_name] ([alien_number])"
|
||||||
|
|
||||||
/datum/species/xenos/can_understand(var/mob/other)
|
/datum/species/xenos/can_understand(var/mob/other)
|
||||||
|
|
||||||
if(istype(other,/mob/living/carbon/alien/larva))
|
if(istype(other,/mob/living/carbon/alien/larva))
|
||||||
|
|||||||
@@ -41,12 +41,12 @@
|
|||||||
if (target.l_hand)
|
if (target.l_hand)
|
||||||
// Disarm left hand
|
// Disarm left hand
|
||||||
//Urist McAssistant dropped the macguffin with a scream just sounds odd. Plus it doesn't work with NO_PAIN
|
//Urist McAssistant dropped the macguffin with a scream just sounds odd. Plus it doesn't work with NO_PAIN
|
||||||
target.visible_message("<span class='danger'>\The [target.l_hand] was knocked right out of [src]'s grasp!</span>")
|
target.visible_message("<span class='danger'>\The [target.l_hand] was knocked right out of [target]'s grasp!</span>")
|
||||||
target.drop_l_hand()
|
target.drop_l_hand()
|
||||||
if("r_arm", "r_hand")
|
if("r_arm", "r_hand")
|
||||||
if (target.r_hand)
|
if (target.r_hand)
|
||||||
// Disarm right hand
|
// Disarm right hand
|
||||||
target.visible_message("<span class='danger'>\The [target.r_hand] was knocked right out of [src]'s grasp!</span>")
|
target.visible_message("<span class='danger'>\The [target.r_hand] was knocked right out of [target]'s grasp!</span>")
|
||||||
target.drop_r_hand()
|
target.drop_r_hand()
|
||||||
if("chest")
|
if("chest")
|
||||||
if(!target.lying)
|
if(!target.lying)
|
||||||
|
|||||||
@@ -237,24 +237,30 @@ var/global/list/damage_icon_parts = list()
|
|||||||
|
|
||||||
//CACHING: Generate an index key from visible bodyparts.
|
//CACHING: Generate an index key from visible bodyparts.
|
||||||
//0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic.
|
//0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic.
|
||||||
|
|
||||||
//Create a new, blank icon for our mob to use.
|
//Create a new, blank icon for our mob to use.
|
||||||
if(stand_icon)
|
if(stand_icon)
|
||||||
del(stand_icon)
|
del(stand_icon)
|
||||||
stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank")
|
stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank")
|
||||||
|
var/icon_key = "[species.race_key][g][s_tone][r_skin][g_skin][b_skin]"
|
||||||
|
var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"]
|
||||||
|
|
||||||
var/icon_key = "[species.race_key][g][s_tone]"
|
if(eyes)
|
||||||
for(var/obj/item/organ/external/part in organs)
|
icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]"
|
||||||
if(part.is_stump() || (part.status & ORGAN_DESTROYED))
|
|
||||||
icon_key = "[icon_key]0"
|
|
||||||
else if(part.status & ORGAN_ROBOT)
|
|
||||||
icon_key = "[icon_key]2[part.model ? "-[part.model]": ""]"
|
|
||||||
else if(part.status & ORGAN_DEAD)
|
|
||||||
icon_key = "[icon_key]3"
|
|
||||||
else
|
else
|
||||||
icon_key = "[icon_key]1"
|
icon_key += "#000000"
|
||||||
|
|
||||||
icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0][s_tone]"
|
for(var/organ_tag in species.has_limbs)
|
||||||
|
var/obj/item/organ/external/part = organs_by_name[organ_tag]
|
||||||
|
if(isnull(part) || part.is_stump() || (part.status & ORGAN_DESTROYED))
|
||||||
|
icon_key += "0"
|
||||||
|
else if(part.status & ORGAN_ROBOT)
|
||||||
|
icon_key += "2[part.model ? "-[part.model]": ""]"
|
||||||
|
else if(part.status & ORGAN_DEAD)
|
||||||
|
icon_key += "3"
|
||||||
|
else
|
||||||
|
icon_key += "1"
|
||||||
|
|
||||||
|
icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]"
|
||||||
|
|
||||||
var/icon/base_icon
|
var/icon/base_icon
|
||||||
if(human_icon_cache[icon_key])
|
if(human_icon_cache[icon_key])
|
||||||
|
|||||||
@@ -10,14 +10,13 @@
|
|||||||
is_adult = 0
|
is_adult = 0
|
||||||
maxHealth = 150
|
maxHealth = 150
|
||||||
revive()
|
revive()
|
||||||
regenerate_icons()
|
|
||||||
if (!client) rabid = 1
|
if (!client) rabid = 1
|
||||||
number = rand(1, 1000)
|
number = rand(1, 1000)
|
||||||
name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])"
|
name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])"
|
||||||
return
|
return
|
||||||
|
|
||||||
. = ..(gibbed, "seizes up and falls limp...")
|
. = ..(gibbed, "seizes up and falls limp...")
|
||||||
|
mood = null
|
||||||
regenerate_icons()
|
regenerate_icons()
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -71,6 +71,7 @@
|
|||||||
mutation_chance = rand(25, 35)
|
mutation_chance = rand(25, 35)
|
||||||
var/sanitizedcolour = replacetext(colour, " ", "")
|
var/sanitizedcolour = replacetext(colour, " ", "")
|
||||||
coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]")
|
coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]")
|
||||||
|
regenerate_icons()
|
||||||
..(location)
|
..(location)
|
||||||
|
|
||||||
/mob/living/carbon/slime/movement_delay()
|
/mob/living/carbon/slime/movement_delay()
|
||||||
|
|||||||
@@ -1,141 +0,0 @@
|
|||||||
//Monkey Overlays Indexes////////
|
|
||||||
#define M_MASK_LAYER 1
|
|
||||||
#define M_BACK_LAYER 2
|
|
||||||
#define M_HANDCUFF_LAYER 3
|
|
||||||
#define M_L_HAND_LAYER 4
|
|
||||||
#define M_R_HAND_LAYER 5
|
|
||||||
#define TARGETED_LAYER 6
|
|
||||||
#define M_FIRE_LAYER 6
|
|
||||||
#define M_TOTAL_LAYERS 7
|
|
||||||
/////////////////////////////////
|
|
||||||
|
|
||||||
/mob/living/carbon/monkey
|
|
||||||
var/list/overlays_lying[M_TOTAL_LAYERS]
|
|
||||||
var/list/overlays_standing[M_TOTAL_LAYERS]
|
|
||||||
|
|
||||||
/mob/living/carbon/monkey/regenerate_icons()
|
|
||||||
..()
|
|
||||||
update_inv_wear_mask(0)
|
|
||||||
update_inv_back(0)
|
|
||||||
update_inv_r_hand(0)
|
|
||||||
update_inv_l_hand(0)
|
|
||||||
update_inv_handcuffed(0)
|
|
||||||
update_fire(0)
|
|
||||||
update_icons()
|
|
||||||
//Hud Stuff
|
|
||||||
update_hud()
|
|
||||||
return
|
|
||||||
|
|
||||||
/mob/living/carbon/monkey/update_icons()
|
|
||||||
update_hud()
|
|
||||||
lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again
|
|
||||||
overlays.Cut()
|
|
||||||
for(var/image/I in overlays_standing)
|
|
||||||
overlays += I
|
|
||||||
|
|
||||||
if(lying)
|
|
||||||
var/matrix/M = matrix()
|
|
||||||
M.Turn(90)
|
|
||||||
M.Translate(1,-6)
|
|
||||||
src.transform = M
|
|
||||||
else
|
|
||||||
var/matrix/M = matrix()
|
|
||||||
src.transform = M
|
|
||||||
|
|
||||||
|
|
||||||
////////
|
|
||||||
/mob/living/carbon/monkey/update_inv_wear_mask(var/update_icons=1)
|
|
||||||
if( wear_mask && istype(wear_mask, /obj/item/clothing/mask) )
|
|
||||||
overlays_standing[M_MASK_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "[wear_mask.icon_state]")
|
|
||||||
wear_mask.screen_loc = ui_monkey_mask
|
|
||||||
else
|
|
||||||
overlays_standing[M_MASK_LAYER] = null
|
|
||||||
if(update_icons) update_icons()
|
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/monkey/update_inv_r_hand(var/update_icons=1)
|
|
||||||
if(r_hand)
|
|
||||||
var/t_icon = INV_R_HAND_DEF_ICON
|
|
||||||
if(r_hand.item_icons && (icon_r_hand in r_hand.item_icons))
|
|
||||||
t_icon = r_hand.item_icons[icon_r_hand]
|
|
||||||
|
|
||||||
var/t_state = r_hand.item_state
|
|
||||||
if(!t_state) t_state = r_hand.icon_state
|
|
||||||
|
|
||||||
overlays_standing[M_R_HAND_LAYER] = image("icon" = t_icon, "icon_state" = t_state)
|
|
||||||
r_hand.screen_loc = ui_rhand
|
|
||||||
if (handcuffed) drop_r_hand()
|
|
||||||
else
|
|
||||||
overlays_standing[M_R_HAND_LAYER] = null
|
|
||||||
|
|
||||||
if(update_icons) update_icons()
|
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/monkey/update_inv_l_hand(var/update_icons=1)
|
|
||||||
if(l_hand)
|
|
||||||
var/t_icon = INV_L_HAND_DEF_ICON
|
|
||||||
if(l_hand.item_icons && (icon_l_hand in l_hand.item_icons))
|
|
||||||
t_icon = l_hand.item_icons[icon_l_hand]
|
|
||||||
|
|
||||||
var/t_state = l_hand.item_state
|
|
||||||
if(!t_state) t_state = l_hand.icon_state
|
|
||||||
|
|
||||||
overlays_standing[M_L_HAND_LAYER] = image("icon" = t_icon, "icon_state" = t_state)
|
|
||||||
l_hand.screen_loc = ui_lhand
|
|
||||||
if (handcuffed) drop_l_hand()
|
|
||||||
else
|
|
||||||
overlays_standing[M_L_HAND_LAYER] = null
|
|
||||||
|
|
||||||
if(update_icons) update_icons()
|
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/monkey/update_inv_back(var/update_icons=1)
|
|
||||||
if(back)
|
|
||||||
overlays_standing[M_BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]")
|
|
||||||
back.screen_loc = ui_monkey_back
|
|
||||||
else
|
|
||||||
overlays_standing[M_BACK_LAYER] = null
|
|
||||||
if(update_icons) update_icons()
|
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/monkey/update_inv_handcuffed(var/update_icons=1)
|
|
||||||
if(handcuffed)
|
|
||||||
drop_r_hand()
|
|
||||||
drop_l_hand()
|
|
||||||
stop_pulling()
|
|
||||||
overlays_standing[M_HANDCUFF_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "handcuff1")
|
|
||||||
else
|
|
||||||
overlays_standing[M_HANDCUFF_LAYER] = null
|
|
||||||
if(update_icons) update_icons()
|
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/monkey/update_hud()
|
|
||||||
if (client)
|
|
||||||
client.screen |= contents
|
|
||||||
|
|
||||||
//Call when target overlay should be added/removed
|
|
||||||
/mob/living/carbon/monkey/update_targeted(var/update_icons=1)
|
|
||||||
if (targeted_by && target_locked)
|
|
||||||
overlays_standing[TARGETED_LAYER] = target_locked
|
|
||||||
else if (!targeted_by && target_locked)
|
|
||||||
del(target_locked)
|
|
||||||
if (!targeted_by)
|
|
||||||
overlays_standing[TARGETED_LAYER] = null
|
|
||||||
if(update_icons) update_icons()
|
|
||||||
|
|
||||||
/mob/living/carbon/monkey/update_fire(var/update_icons=1)
|
|
||||||
if(on_fire)
|
|
||||||
overlays_standing[M_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -M_FIRE_LAYER)
|
|
||||||
else
|
|
||||||
overlays_standing[M_FIRE_LAYER] = null
|
|
||||||
if(update_icons) update_icons()
|
|
||||||
//Monkey Overlays Indexes////////
|
|
||||||
#undef M_MASK_LAYER
|
|
||||||
#undef M_BACK_LAYER
|
|
||||||
#undef M_HANDCUFF_LAYER
|
|
||||||
#undef M_L_HAND_LAYER
|
|
||||||
#undef M_R_HAND_LAYER
|
|
||||||
#undef TARGETED_LAYER
|
|
||||||
#undef M_FIRE_LAYER
|
|
||||||
#undef M_TOTAL_LAYERS
|
|
||||||
|
|
||||||
25
code/modules/mob/living/default_language.dm
Normal file
25
code/modules/mob/living/default_language.dm
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/mob/living
|
||||||
|
var/datum/language/default_language
|
||||||
|
|
||||||
|
/mob/living/verb/set_default_language(language as null|anything in languages)
|
||||||
|
set name = "Set Default Language"
|
||||||
|
set category = "IC"
|
||||||
|
|
||||||
|
if(language)
|
||||||
|
src << "<span class='notice'>You will now speak [language] if you do not specify a language when speaking.</span>"
|
||||||
|
else
|
||||||
|
src << "<span class='notice'>You will now speak whatever your standard default language is if you do not specify one when speaking.</span>"
|
||||||
|
default_language = language
|
||||||
|
|
||||||
|
// Silicons can't neccessarily speak everything in their languages list
|
||||||
|
/mob/living/silicon/set_default_language(language as null|anything in speech_synthesizer_langs)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/mob/living/verb/check_default_language()
|
||||||
|
set name = "Check Default Language"
|
||||||
|
set category = "IC"
|
||||||
|
|
||||||
|
if(default_language)
|
||||||
|
src << "<span class='notice'>You are currently speaking [default_language] by default.</span>"
|
||||||
|
else
|
||||||
|
src << "<span class='notice'>Your current default language is your species or mob type default.</span>"
|
||||||
@@ -80,7 +80,7 @@ proc/get_radio_key_from_channel(var/channel)
|
|||||||
if(dongle.translate_binary) return 1
|
if(dongle.translate_binary) return 1
|
||||||
|
|
||||||
/mob/living/proc/get_default_language()
|
/mob/living/proc/get_default_language()
|
||||||
return null
|
return default_language
|
||||||
|
|
||||||
/mob/living/proc/handle_speech_problems(var/message, var/verb)
|
/mob/living/proc/handle_speech_problems(var/message, var/verb)
|
||||||
var/list/returns[3]
|
var/list/returns[3]
|
||||||
|
|||||||
@@ -478,40 +478,38 @@ var/list/ai_verbs_default = list(
|
|||||||
//Replaces /mob/living/silicon/ai/verb/change_network() in ai.dm & camera.dm
|
//Replaces /mob/living/silicon/ai/verb/change_network() in ai.dm & camera.dm
|
||||||
//Adds in /mob/living/silicon/ai/proc/ai_network_change() instead
|
//Adds in /mob/living/silicon/ai/proc/ai_network_change() instead
|
||||||
//Addition by Mord_Sith to define AI's network change ability
|
//Addition by Mord_Sith to define AI's network change ability
|
||||||
/mob/living/silicon/ai/proc/ai_network_change()
|
/mob/living/silicon/ai/proc/get_camera_network_list()
|
||||||
set category = "AI Commands"
|
|
||||||
set name = "Jump To Network"
|
|
||||||
unset_machine()
|
|
||||||
var/cameralist[0]
|
|
||||||
|
|
||||||
if(check_unable())
|
if(check_unable())
|
||||||
return
|
return
|
||||||
|
|
||||||
var/mob/living/silicon/ai/U = usr
|
var/list/cameralist = new()
|
||||||
|
|
||||||
for (var/obj/machinery/camera/C in cameranet.cameras)
|
for (var/obj/machinery/camera/C in cameranet.cameras)
|
||||||
if(!C.can_use())
|
if(!C.can_use())
|
||||||
continue
|
continue
|
||||||
|
|
||||||
var/list/tempnetwork = difflist(C.network,restricted_camera_networks,1)
|
var/list/tempnetwork = difflist(C.network,restricted_camera_networks,1)
|
||||||
if(tempnetwork.len)
|
|
||||||
for(var/i in tempnetwork)
|
for(var/i in tempnetwork)
|
||||||
cameralist[i] = i
|
cameralist[i] = i
|
||||||
var/old_network = network
|
|
||||||
network = input(U, "Which network would you like to view?") as null|anything in cameralist
|
|
||||||
|
|
||||||
if(!U.eyeobj)
|
cameralist = sortAssoc(cameralist)
|
||||||
U.view_core()
|
return cameralist
|
||||||
|
|
||||||
|
/mob/living/silicon/ai/proc/ai_network_change(var/network in get_camera_network_list())
|
||||||
|
set category = "AI Commands"
|
||||||
|
set name = "Jump To Network"
|
||||||
|
unset_machine()
|
||||||
|
|
||||||
|
if(!network)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!eyeobj)
|
||||||
|
view_core()
|
||||||
return
|
return
|
||||||
|
|
||||||
if(isnull(network))
|
|
||||||
network = old_network // If nothing is selected
|
|
||||||
else
|
|
||||||
for(var/obj/machinery/camera/C in cameranet.cameras)
|
for(var/obj/machinery/camera/C in cameranet.cameras)
|
||||||
if(!C.can_use())
|
if(!C.can_use())
|
||||||
continue
|
continue
|
||||||
if(network in C.network)
|
if(network in C.network)
|
||||||
U.eyeobj.setLoc(get_turf(C))
|
eyeobj.setLoc(get_turf(C))
|
||||||
break
|
break
|
||||||
src << "\blue Switched to [network] camera network."
|
src << "\blue Switched to [network] camera network."
|
||||||
//End of code by Mord_Sith
|
//End of code by Mord_Sith
|
||||||
|
|||||||
@@ -210,9 +210,19 @@
|
|||||||
|
|
||||||
var/dat = "<b><font size = 5>Known Languages</font></b><br/><br/>"
|
var/dat = "<b><font size = 5>Known Languages</font></b><br/><br/>"
|
||||||
|
|
||||||
|
if(default_language)
|
||||||
|
dat += "Current default language: [default_language] - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/><br/>"
|
||||||
|
|
||||||
for(var/datum/language/L in languages)
|
for(var/datum/language/L in languages)
|
||||||
if(!(L.flags & NONGLOBAL))
|
if(!(L.flags & NONGLOBAL))
|
||||||
dat += "<b>[L.name] (:[L.key])</b><br/>Speech Synthesizer: <i>[(L in speech_synthesizer_langs)? "YES":"NOT SUPPORTED"]</i><br/>[L.desc]<br/><br/>"
|
var/default_str
|
||||||
|
if(L == default_language)
|
||||||
|
default_str = " - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a>"
|
||||||
|
else
|
||||||
|
default_str = " - <a href='byond://?src=\ref[src];default_lang=[L]'>set default</a>"
|
||||||
|
|
||||||
|
var/synth = (L in speech_synthesizer_langs)
|
||||||
|
dat += "<b>[L.name] (:[L.key])</b>[synth ? default_str : null]<br/>Speech Synthesizer: <i>[synth ? "YES" : "NOT SUPPORTED"]</i><br/>[L.desc]<br/><br/>"
|
||||||
|
|
||||||
src << browse(dat, "window=checklanguage")
|
src << browse(dat, "window=checklanguage")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -474,6 +474,7 @@
|
|||||||
|
|
||||||
// Do the initial caching of the player's body icons.
|
// Do the initial caching of the player's body icons.
|
||||||
new_character.force_update_limbs()
|
new_character.force_update_limbs()
|
||||||
|
new_character.update_eyes()
|
||||||
new_character.regenerate_icons()
|
new_character.regenerate_icons()
|
||||||
|
|
||||||
new_character.key = key //Manually transfer the key to log them in
|
new_character.key = key //Manually transfer the key to log them in
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ var/list/organ_cache = list()
|
|||||||
/obj/item/organ
|
/obj/item/organ
|
||||||
name = "organ"
|
name = "organ"
|
||||||
icon = 'icons/obj/surgery.dmi'
|
icon = 'icons/obj/surgery.dmi'
|
||||||
|
var/dead_icon
|
||||||
var/mob/living/carbon/human/owner = null
|
var/mob/living/carbon/human/owner = null
|
||||||
var/status = 0
|
var/status = 0
|
||||||
var/vital //Lose a vital limb, die immediately.
|
var/vital //Lose a vital limb, die immediately.
|
||||||
@@ -50,11 +50,12 @@ var/list/organ_cache = list()
|
|||||||
holder.internal_organs |= src
|
holder.internal_organs |= src
|
||||||
|
|
||||||
/obj/item/organ/proc/die()
|
/obj/item/organ/proc/die()
|
||||||
name = "dead [initial(name)]"
|
if(status & ORGAN_ROBOT)
|
||||||
health = 0
|
return
|
||||||
|
damage = max_damage
|
||||||
processing_objects -= src
|
processing_objects -= src
|
||||||
//TODO: Grey out the icon state.
|
if(dead_icon)
|
||||||
//TODO: Inject an organ with peridaxon to make it alive again.
|
icon_state = dead_icon
|
||||||
|
|
||||||
/obj/item/organ/process()
|
/obj/item/organ/process()
|
||||||
|
|
||||||
@@ -75,10 +76,10 @@ var/list/organ_cache = list()
|
|||||||
if(B && prob(40))
|
if(B && prob(40))
|
||||||
reagents.remove_reagent("blood",0.1)
|
reagents.remove_reagent("blood",0.1)
|
||||||
blood_splatter(src,B,1)
|
blood_splatter(src,B,1)
|
||||||
|
damage += rand(1,3)
|
||||||
health -= rand(1,3)
|
if(damage >= max_damage)
|
||||||
if(health <= 0)
|
|
||||||
die()
|
die()
|
||||||
|
|
||||||
else if(owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs
|
else if(owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs
|
||||||
//** Handle antibiotics and curing infections
|
//** Handle antibiotics and curing infections
|
||||||
handle_antibiotics()
|
handle_antibiotics()
|
||||||
@@ -179,8 +180,9 @@ var/list/organ_cache = list()
|
|||||||
else
|
else
|
||||||
src.damage += amount
|
src.damage += amount
|
||||||
|
|
||||||
|
if(owner && parent_organ)
|
||||||
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
|
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
|
||||||
if (!silent)
|
if(parent && !silent)
|
||||||
owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1)
|
owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1)
|
||||||
|
|
||||||
/obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc
|
/obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc
|
||||||
@@ -241,7 +243,7 @@ var/list/organ_cache = list()
|
|||||||
var/obj/item/organ/external/affected = owner.get_organ(parent_organ)
|
var/obj/item/organ/external/affected = owner.get_organ(parent_organ)
|
||||||
if(affected) affected.internal_organs -= src
|
if(affected) affected.internal_organs -= src
|
||||||
|
|
||||||
loc = owner.loc
|
loc = get_turf(owner)
|
||||||
processing_objects |= src
|
processing_objects |= src
|
||||||
rejecting = null
|
rejecting = null
|
||||||
var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list
|
var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list
|
||||||
@@ -255,6 +257,8 @@ var/list/organ_cache = list()
|
|||||||
msg_admin_attack("[user.name] ([user.ckey]) removed a vital organ ([src]) from [owner.name] ([owner.ckey]) (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
msg_admin_attack("[user.name] ([user.ckey]) removed a vital organ ([src]) from [owner.name] ([owner.ckey]) (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||||
owner.death()
|
owner.death()
|
||||||
|
|
||||||
|
owner = null
|
||||||
|
|
||||||
/obj/item/organ/proc/replaced(var/mob/living/carbon/human/target,var/obj/item/organ/external/affected)
|
/obj/item/organ/proc/replaced(var/mob/living/carbon/human/target,var/obj/item/organ/external/affected)
|
||||||
|
|
||||||
if(!istype(target)) return
|
if(!istype(target)) return
|
||||||
@@ -271,13 +275,13 @@ var/list/organ_cache = list()
|
|||||||
transplant_data["blood_DNA"] = transplant_blood.data["blood_DNA"]
|
transplant_data["blood_DNA"] = transplant_blood.data["blood_DNA"]
|
||||||
|
|
||||||
owner = target
|
owner = target
|
||||||
|
loc = owner
|
||||||
processing_objects -= src
|
processing_objects -= src
|
||||||
target.internal_organs |= src
|
target.internal_organs |= src
|
||||||
affected.internal_organs |= src
|
affected.internal_organs |= src
|
||||||
target.internal_organs_by_name[organ_tag] = src
|
target.internal_organs_by_name[organ_tag] = src
|
||||||
status |= ORGAN_CUT_AWAY
|
if(robotic)
|
||||||
|
status |= ORGAN_ROBOT
|
||||||
del(src)
|
|
||||||
|
|
||||||
/obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target)
|
/obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target)
|
||||||
|
|
||||||
@@ -286,7 +290,7 @@ var/list/organ_cache = list()
|
|||||||
target.r_eyes = eye_colour[1]
|
target.r_eyes = eye_colour[1]
|
||||||
target.g_eyes = eye_colour[2]
|
target.g_eyes = eye_colour[2]
|
||||||
target.b_eyes = eye_colour[3]
|
target.b_eyes = eye_colour[3]
|
||||||
target.update_body()
|
target.update_eyes()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/organ/proc/bitten(mob/user)
|
/obj/item/organ/proc/bitten(mob/user)
|
||||||
@@ -298,7 +302,6 @@ var/list/organ_cache = list()
|
|||||||
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list
|
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list
|
||||||
blood_splatter(src,B,1)
|
blood_splatter(src,B,1)
|
||||||
|
|
||||||
|
|
||||||
user.drop_from_inventory(src)
|
user.drop_from_inventory(src)
|
||||||
var/obj/item/weapon/reagent_containers/food/snacks/organ/O = new(get_turf(src))
|
var/obj/item/weapon/reagent_containers/food/snacks/organ/O = new(get_turf(src))
|
||||||
O.name = name
|
O.name = name
|
||||||
|
|||||||
@@ -96,9 +96,14 @@
|
|||||||
dislocated = 0
|
dislocated = 0
|
||||||
if(children && children.len)
|
if(children && children.len)
|
||||||
for(var/obj/item/organ/external/child in children)
|
for(var/obj/item/organ/external/child in children)
|
||||||
|
if(child.dislocated == 1)
|
||||||
child.undislocate()
|
child.undislocate()
|
||||||
if(owner)
|
if(owner)
|
||||||
owner.shock_stage += 20
|
owner.shock_stage += 20
|
||||||
|
for(var/obj/item/organ/external/limb in owner.organs)
|
||||||
|
if(limb.dislocated == 2)
|
||||||
|
return
|
||||||
|
owner.verbs -= /mob/living/carbon/human/proc/undislocate
|
||||||
|
|
||||||
/obj/item/organ/external/update_health()
|
/obj/item/organ/external/update_health()
|
||||||
damage = min(max_damage, (brute_dam + burn_dam))
|
damage = min(max_damage, (brute_dam + burn_dam))
|
||||||
@@ -110,6 +115,8 @@
|
|||||||
if(owner)
|
if(owner)
|
||||||
replaced(owner)
|
replaced(owner)
|
||||||
sync_colour_to_human(owner)
|
sync_colour_to_human(owner)
|
||||||
|
spawn(1)
|
||||||
|
get_icon()
|
||||||
|
|
||||||
/obj/item/organ/external/replaced(var/mob/living/carbon/human/target)
|
/obj/item/organ/external/replaced(var/mob/living/carbon/human/target)
|
||||||
owner = target
|
owner = target
|
||||||
@@ -243,10 +250,10 @@
|
|||||||
status &= ~ORGAN_BROKEN
|
status &= ~ORGAN_BROKEN
|
||||||
perma_injury = 0
|
perma_injury = 0
|
||||||
|
|
||||||
if((brute || burn) && children && children.len && (owner.species.flags & REGENERATES_LIMBS))
|
/*if((brute || burn) && children && children.len && (owner.species.flags & REGENERATES_LIMBS))
|
||||||
var/obj/item/organ/external/stump/S = locate() in children
|
var/obj/item/organ/external/stump/S = locate() in children
|
||||||
if(S)
|
if(S)
|
||||||
world << "Extra healing to go around ([brute+burn]) and [owner] needs a replacement limb."
|
world << "Extra healing to go around ([brute+burn]) and [owner] needs a replacement limb."*/
|
||||||
|
|
||||||
//Sync the organ's damage with its wounds
|
//Sync the organ's damage with its wounds
|
||||||
src.update_damages()
|
src.update_damages()
|
||||||
@@ -634,8 +641,9 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
"<span class='moderate'><b>Your [src.name] explodes in a shower of gore!</b></span>",\
|
"<span class='moderate'><b>Your [src.name] explodes in a shower of gore!</b></span>",\
|
||||||
"<span class='danger'>You hear the sickening splatter of gore.</span>")
|
"<span class='danger'>You hear the sickening splatter of gore.</span>")
|
||||||
|
|
||||||
src.removed(null, ignore_children)
|
var/mob/living/carbon/human/victim = owner //Keep a reference for post-removed().
|
||||||
owner.traumatic_shock += 60
|
removed(null, ignore_children)
|
||||||
|
victim.traumatic_shock += 60
|
||||||
|
|
||||||
wounds.Cut()
|
wounds.Cut()
|
||||||
if(parent)
|
if(parent)
|
||||||
@@ -649,22 +657,22 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
parent.wounds |= W
|
parent.wounds |= W
|
||||||
parent.update_damages()
|
parent.update_damages()
|
||||||
else
|
else
|
||||||
var/obj/item/organ/external/stump/stump = new (owner, 0, src)
|
var/obj/item/organ/external/stump/stump = new (victim, 0, src)
|
||||||
stump.wounds |= W
|
stump.wounds |= W
|
||||||
owner.organs |= stump
|
victim.organs |= stump
|
||||||
stump.update_damages()
|
stump.update_damages()
|
||||||
parent = null
|
parent = null
|
||||||
|
|
||||||
spawn(1)
|
spawn(1)
|
||||||
owner.update_body()
|
victim.updatehealth()
|
||||||
owner.updatehealth()
|
victim.UpdateDamageIcon()
|
||||||
owner.UpdateDamageIcon()
|
victim.regenerate_icons()
|
||||||
dir = 2
|
dir = 2
|
||||||
|
|
||||||
switch(disintegrate)
|
switch(disintegrate)
|
||||||
if(DROPLIMB_EDGE)
|
if(DROPLIMB_EDGE)
|
||||||
compile_icon()
|
compile_icon()
|
||||||
add_blood(owner)
|
add_blood(victim)
|
||||||
var/matrix/M = matrix()
|
var/matrix/M = matrix()
|
||||||
M.Turn(rand(180))
|
M.Turn(rand(180))
|
||||||
src.transform = M
|
src.transform = M
|
||||||
@@ -675,13 +683,13 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
dir = 2
|
dir = 2
|
||||||
return
|
return
|
||||||
if(DROPLIMB_BURN)
|
if(DROPLIMB_BURN)
|
||||||
new /obj/effect/decal/cleanable/ash(get_turf(owner))
|
new /obj/effect/decal/cleanable/ash(get_turf(victim))
|
||||||
if(DROPLIMB_BLUNT)
|
if(DROPLIMB_BLUNT)
|
||||||
var/obj/effect/decal/cleanable/blood/gibs/gore = new owner.species.single_gib_type(get_turf(owner))
|
var/obj/effect/decal/cleanable/blood/gibs/gore = new owner.species.single_gib_type(get_turf(victim))
|
||||||
if(owner.species.flesh_color)
|
if(victim.species.flesh_color)
|
||||||
gore.fleshcolor = owner.species.flesh_color
|
gore.fleshcolor = victim.species.flesh_color
|
||||||
if(owner.species.blood_color)
|
if(victim.species.blood_color)
|
||||||
gore.basecolor = owner.species.blood_color
|
gore.basecolor = victim.species.blood_color
|
||||||
gore.update_icon()
|
gore.update_icon()
|
||||||
gore.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30)
|
gore.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30)
|
||||||
|
|
||||||
@@ -699,25 +707,21 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
/obj/item/organ/external/proc/is_stump()
|
/obj/item/organ/external/proc/is_stump()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/organ/external/replaced()
|
/obj/item/organ/external/proc/release_restraints(var/mob/living/carbon/human/holder)
|
||||||
get_icon()
|
if(!holder)
|
||||||
icon = mob_icon
|
holder = owner
|
||||||
return ..()
|
if(!holder)
|
||||||
|
return
|
||||||
/obj/item/organ/external/proc/release_restraints()
|
if (holder.handcuffed && body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT))
|
||||||
if (owner.handcuffed && body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT))
|
holder.visible_message(\
|
||||||
owner.visible_message(\
|
"\The [holder.handcuffed.name] falls off of [holder.name].",\
|
||||||
"\The [owner.handcuffed.name] falls off of [owner.name].",\
|
"\The [holder.handcuffed.name] falls off you.")
|
||||||
"\The [owner.handcuffed.name] falls off you.")
|
holder.drop_from_inventory(holder.handcuffed)
|
||||||
|
if (holder.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT))
|
||||||
owner.drop_from_inventory(owner.handcuffed)
|
holder.visible_message(\
|
||||||
|
"\The [holder.legcuffed.name] falls off of [holder.name].",\
|
||||||
if (owner.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT))
|
"\The [holder.legcuffed.name] falls off you.")
|
||||||
owner.visible_message(\
|
holder.drop_from_inventory(holder.legcuffed)
|
||||||
"\The [owner.legcuffed.name] falls off of [owner.name].",\
|
|
||||||
"\The [owner.legcuffed.name] falls off you.")
|
|
||||||
|
|
||||||
owner.drop_from_inventory(owner.legcuffed)
|
|
||||||
|
|
||||||
/obj/item/organ/external/proc/bandage()
|
/obj/item/organ/external/proc/bandage()
|
||||||
var/rval = 0
|
var/rval = 0
|
||||||
@@ -838,7 +842,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/organ/external/proc/is_usable()
|
/obj/item/organ/external/proc/is_usable()
|
||||||
return !(status & (ORGAN_DESTROYED|ORGAN_MUTATED|ORGAN_DEAD))
|
return !is_dislocated() && !(status & (ORGAN_DESTROYED|ORGAN_MUTATED|ORGAN_DEAD))
|
||||||
|
|
||||||
/obj/item/organ/external/proc/is_malfunctioning()
|
/obj/item/organ/external/proc/is_malfunctioning()
|
||||||
return ((status & ORGAN_ROBOT) && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam))
|
return ((status & ORGAN_ROBOT) && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam))
|
||||||
@@ -859,11 +863,15 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
|
|
||||||
/obj/item/organ/external/removed(var/mob/living/user, var/ignore_children)
|
/obj/item/organ/external/removed(var/mob/living/user, var/ignore_children)
|
||||||
|
|
||||||
|
if(!owner)
|
||||||
|
return
|
||||||
var/is_robotic = status & ORGAN_ROBOT
|
var/is_robotic = status & ORGAN_ROBOT
|
||||||
|
var/mob/living/carbon/human/victim = owner
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
status |= ORGAN_DESTROYED
|
status |= ORGAN_DESTROYED
|
||||||
owner.bad_external_organs -= src
|
victim.bad_external_organs -= src
|
||||||
|
|
||||||
for(var/implant in implants) //todo: check if this can be left alone
|
for(var/implant in implants) //todo: check if this can be left alone
|
||||||
del(implant)
|
del(implant)
|
||||||
@@ -880,19 +888,19 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
organ.removed()
|
organ.removed()
|
||||||
organ.loc = src
|
organ.loc = src
|
||||||
|
|
||||||
release_restraints()
|
release_restraints(victim)
|
||||||
owner.organs -= src
|
victim.organs -= src
|
||||||
owner.organs_by_name[limb_name] = null // Remove from owner's vars.
|
victim.organs_by_name[limb_name] = null // Remove from owner's vars.
|
||||||
|
|
||||||
//Robotic limbs explode if sabotaged.
|
//Robotic limbs explode if sabotaged.
|
||||||
if(is_robotic && sabotaged)
|
if(is_robotic && sabotaged)
|
||||||
owner.visible_message(
|
victim.visible_message(
|
||||||
"<span class='danger'>\The [owner]'s [src.name] explodes violently!</span>",\
|
"<span class='danger'>\The [victim]'s [src.name] explodes violently!</span>",\
|
||||||
"<span class='danger'>Your [src.name] explodes!</span>",\
|
"<span class='danger'>Your [src.name] explodes!</span>",\
|
||||||
"<span class='danger'>You hear an explosion!</span>")
|
"<span class='danger'>You hear an explosion!</span>")
|
||||||
explosion(get_turf(owner),-1,-1,2,3)
|
explosion(get_turf(owner),-1,-1,2,3)
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||||
spark_system.set_up(5, 0, owner)
|
spark_system.set_up(5, 0, victim)
|
||||||
spark_system.attach(owner)
|
spark_system.attach(owner)
|
||||||
spark_system.start()
|
spark_system.start()
|
||||||
spawn(10)
|
spawn(10)
|
||||||
|
|||||||
@@ -5,13 +5,12 @@ var/global/list/limb_icon_cache = list()
|
|||||||
|
|
||||||
/obj/item/organ/external/proc/compile_icon()
|
/obj/item/organ/external/proc/compile_icon()
|
||||||
overlays.Cut()
|
overlays.Cut()
|
||||||
get_icon()
|
|
||||||
// This is a kludge, only one icon has more than one generation of children though.
|
// This is a kludge, only one icon has more than one generation of children though.
|
||||||
for(var/obj/item/organ/external/organ in contents)
|
for(var/obj/item/organ/external/organ in contents)
|
||||||
if(organ.children && organ.children.len)
|
if(organ.children && organ.children.len)
|
||||||
for(var/obj/item/organ/external/child in organ.children)
|
for(var/obj/item/organ/external/child in organ.children)
|
||||||
overlays += child.get_icon()
|
overlays += child.mob_icon
|
||||||
overlays += organ.get_icon()
|
overlays += organ.mob_icon
|
||||||
|
|
||||||
/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human)
|
/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human)
|
||||||
s_tone = null
|
s_tone = null
|
||||||
@@ -23,6 +22,49 @@ var/global/list/limb_icon_cache = list()
|
|||||||
if(human.species.flags & HAS_SKIN_COLOR)
|
if(human.species.flags & HAS_SKIN_COLOR)
|
||||||
s_col = list(human.r_skin, human.g_skin, human.b_skin)
|
s_col = list(human.r_skin, human.g_skin, human.b_skin)
|
||||||
|
|
||||||
|
/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human)
|
||||||
|
..()
|
||||||
|
var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"]
|
||||||
|
if(eyes) eyes.update_colour()
|
||||||
|
|
||||||
|
/obj/item/organ/external/head/removed()
|
||||||
|
get_icon()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/organ/external/head/get_icon()
|
||||||
|
|
||||||
|
..()
|
||||||
|
if(owner.species.has_organ["eyes"])
|
||||||
|
var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"]
|
||||||
|
if(owner.species.eyes)
|
||||||
|
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', owner.species.eyes)
|
||||||
|
if(eyes)
|
||||||
|
eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD)
|
||||||
|
else
|
||||||
|
eyes_icon.Blend(rgb(128,0,0), ICON_ADD)
|
||||||
|
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
|
||||||
|
|
||||||
|
if(owner.lip_style && (owner.species && (owner.species.flags & HAS_LIPS)))
|
||||||
|
mob_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s"), ICON_OVERLAY)
|
||||||
|
|
||||||
|
if(owner.f_style)
|
||||||
|
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
|
||||||
|
if(facial_hair_style && facial_hair_style.species_allowed && (owner.species.name in facial_hair_style.species_allowed))
|
||||||
|
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||||
|
if(facial_hair_style.do_colouration)
|
||||||
|
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
|
||||||
|
overlays |= facial_s
|
||||||
|
|
||||||
|
if(owner.h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR)))
|
||||||
|
var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style]
|
||||||
|
if(hair_style && (owner.species.name in hair_style.species_allowed))
|
||||||
|
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||||
|
if(hair_style.do_colouration)
|
||||||
|
hair_s.Blend(rgb(owner.r_hair, owner.g_hair, owner.b_hair), ICON_ADD)
|
||||||
|
overlays |= hair_s
|
||||||
|
|
||||||
|
return mob_icon
|
||||||
|
|
||||||
/obj/item/organ/external/proc/get_icon(var/skeletal)
|
/obj/item/organ/external/proc/get_icon(var/skeletal)
|
||||||
|
|
||||||
var/gender
|
var/gender
|
||||||
@@ -66,43 +108,6 @@ var/global/list/limb_icon_cache = list()
|
|||||||
|
|
||||||
return mob_icon
|
return mob_icon
|
||||||
|
|
||||||
/obj/item/organ/external/head/get_icon(var/skeletal)
|
|
||||||
|
|
||||||
if(skeletal || !owner)
|
|
||||||
return
|
|
||||||
|
|
||||||
..()
|
|
||||||
|
|
||||||
if(owner.species.has_organ["eyes"])
|
|
||||||
var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"]
|
|
||||||
if(eyes && owner.species.eyes)
|
|
||||||
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', owner.species.eyes)
|
|
||||||
eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD)
|
|
||||||
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
|
|
||||||
|
|
||||||
if(owner.lip_style && (owner.species && (owner.species.flags & HAS_LIPS)))
|
|
||||||
mob_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s"), ICON_OVERLAY)
|
|
||||||
|
|
||||||
if(owner.f_style)
|
|
||||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
|
|
||||||
if(facial_hair_style)
|
|
||||||
var/icon/facial = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
|
||||||
if(facial_hair_style.do_colouration)
|
|
||||||
facial.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
|
|
||||||
mob_icon.Blend(facial, ICON_OVERLAY)
|
|
||||||
|
|
||||||
if(owner.h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR)))
|
|
||||||
var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style]
|
|
||||||
if(hair_style)
|
|
||||||
var/icon/hair = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
|
||||||
if(hair_style.do_colouration)
|
|
||||||
hair.Blend(rgb(owner.r_hair, owner.g_hair, owner.b_hair), ICON_ADD)
|
|
||||||
|
|
||||||
mob_icon.Blend(hair, ICON_OVERLAY)
|
|
||||||
|
|
||||||
icon = mob_icon
|
|
||||||
return mob_icon
|
|
||||||
|
|
||||||
// new damage icon system
|
// new damage icon system
|
||||||
// adjusted to set damage_state to brute/burn code only (without r_name0 as before)
|
// adjusted to set damage_state to brute/burn code only (without r_name0 as before)
|
||||||
/obj/item/organ/external/update_icon()
|
/obj/item/organ/external/update_icon()
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
icon_state = "heart-on"
|
icon_state = "heart-on"
|
||||||
organ_tag = "heart"
|
organ_tag = "heart"
|
||||||
parent_organ = "chest"
|
parent_organ = "chest"
|
||||||
|
dead_icon = "heart-off"
|
||||||
|
|
||||||
/obj/item/organ/lungs
|
/obj/item/organ/lungs
|
||||||
name = "lungs"
|
name = "lungs"
|
||||||
@@ -69,6 +70,15 @@
|
|||||||
parent_organ = "head"
|
parent_organ = "head"
|
||||||
var/list/eye_colour = list(0,0,0)
|
var/list/eye_colour = list(0,0,0)
|
||||||
|
|
||||||
|
/obj/item/organ/eyes/proc/update_colour()
|
||||||
|
if(!owner)
|
||||||
|
return
|
||||||
|
eye_colour = list(
|
||||||
|
owner.r_eyes ? owner.r_eyes : 0,
|
||||||
|
owner.g_eyes ? owner.g_eyes : 0,
|
||||||
|
owner.b_eyes ? owner.b_eyes : 0
|
||||||
|
)
|
||||||
|
|
||||||
/obj/item/organ/eyes/process() //Eye damage replaces the old eye_stat var.
|
/obj/item/organ/eyes/process() //Eye damage replaces the old eye_stat var.
|
||||||
..()
|
..()
|
||||||
if(!owner)
|
if(!owner)
|
||||||
@@ -78,36 +88,6 @@
|
|||||||
if(is_broken())
|
if(is_broken())
|
||||||
owner.eye_blind = 20
|
owner.eye_blind = 20
|
||||||
|
|
||||||
/obj/item/organ/eyes/New()
|
|
||||||
..()
|
|
||||||
if(owner)
|
|
||||||
eye_colour = list(
|
|
||||||
owner.r_eyes ? owner.r_eyes : 0,
|
|
||||||
owner.g_eyes ? owner.g_eyes : 0,
|
|
||||||
owner.b_eyes ? owner.b_eyes : 0
|
|
||||||
)
|
|
||||||
|
|
||||||
/obj/item/organ/eyes/removed(var/mob/living/target,var/mob/living/user)
|
|
||||||
|
|
||||||
if(!eye_colour)
|
|
||||||
eye_colour = list(0,0,0)
|
|
||||||
|
|
||||||
..() //Make sure target is set so we can steal their eye colour for later.
|
|
||||||
var/mob/living/carbon/human/H = target
|
|
||||||
if(istype(H))
|
|
||||||
eye_colour = list(
|
|
||||||
H.r_eyes ? H.r_eyes : 0,
|
|
||||||
H.g_eyes ? H.g_eyes : 0,
|
|
||||||
H.b_eyes ? H.b_eyes : 0
|
|
||||||
)
|
|
||||||
|
|
||||||
// Leave bloody red pits behind!
|
|
||||||
H.r_eyes = 128
|
|
||||||
H.g_eyes = 0
|
|
||||||
H.b_eyes = 0
|
|
||||||
H.update_body()
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/organ/liver
|
/obj/item/organ/liver
|
||||||
name = "liver"
|
name = "liver"
|
||||||
icon_state = "liver"
|
icon_state = "liver"
|
||||||
@@ -178,14 +158,13 @@
|
|||||||
|
|
||||||
/obj/item/organ/appendix/removed()
|
/obj/item/organ/appendix/removed()
|
||||||
|
|
||||||
..()
|
if(owner)
|
||||||
|
|
||||||
var/inflamed = 0
|
var/inflamed = 0
|
||||||
for(var/datum/disease/appendicitis/appendicitis in owner.viruses)
|
for(var/datum/disease/appendicitis/appendicitis in owner.viruses)
|
||||||
inflamed = 1
|
inflamed = 1
|
||||||
appendicitis.cure()
|
appendicitis.cure()
|
||||||
owner.resistances += appendicitis
|
owner.resistances += appendicitis
|
||||||
|
|
||||||
if(inflamed)
|
if(inflamed)
|
||||||
icon_state = "appendixinflamed"
|
icon_state = "appendixinflamed"
|
||||||
name = "inflamed appendix"
|
name = "inflamed appendix"
|
||||||
|
..()
|
||||||
@@ -323,4 +323,4 @@ datum/wound/cut/massive
|
|||||||
return 0 //cannot be merged
|
return 0 //cannot be merged
|
||||||
|
|
||||||
/datum/wound/lost_limb/small
|
/datum/wound/lost_limb/small
|
||||||
stages = list("ripped stump" = 40, "bloody stump" = 30, "clotted stump" = 15, "scarred stump" = 0)
|
stages = list("ripped hole" = 40, "bloody hole" = 30, "clotted hole" = 15, "scarred hole" = 0)
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/paper/proc/get_signature(var/obj/item/weapon/pen/P, mob/user as mob)
|
/obj/item/weapon/paper/proc/get_signature(var/obj/item/weapon/pen/P, mob/user as mob)
|
||||||
if(P)
|
if(P && istype(P, /obj/item/weapon/pen))
|
||||||
return P.get_signature(user)
|
return P.get_signature(user)
|
||||||
return (user && user.real_name) ? user.real_name : "Anonymous"
|
return (user && user.real_name) ? user.real_name : "Anonymous"
|
||||||
|
|
||||||
@@ -351,6 +351,11 @@
|
|||||||
t = replacetext(t, "\n", "<BR>")
|
t = replacetext(t, "\n", "<BR>")
|
||||||
t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html
|
t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html
|
||||||
|
|
||||||
|
|
||||||
|
if(fields > 50)//large amount of fields creates a heavy load on the server, see updateinfolinks() and addtofield()
|
||||||
|
usr << "<span class='warning'>Too many fields. Sorry, you can't do this.</span>"
|
||||||
|
return
|
||||||
|
|
||||||
if(id!="end")
|
if(id!="end")
|
||||||
addtofield(text2num(id), t) // He wants to edit a field, let him.
|
addtofield(text2num(id), t) // He wants to edit a field, let him.
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
load_method = MAGAZINE
|
load_method = MAGAZINE
|
||||||
|
|
||||||
/obj/item/weapon/gun/projectile/colt/detective
|
/obj/item/weapon/gun/projectile/colt/detective
|
||||||
desc = "A cheap Martian knock-off of a Colt M1911. Uses less-than-lethal .45 rounds."
|
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
|
||||||
magazine_type = /obj/item/ammo_magazine/c45m/rubber
|
magazine_type = /obj/item/ammo_magazine/c45m/rubber
|
||||||
|
|
||||||
/obj/item/weapon/gun/projectile/colt/detective/verb/rename_gun()
|
/obj/item/weapon/gun/projectile/colt/detective/verb/rename_gun()
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/item/weapon/gun/projectile/sec
|
/obj/item/weapon/gun/projectile/sec
|
||||||
desc = "A NanoTrasen designed sidearm, found pretty much everywhere humans are. Uses less-than-lethal .45 rounds."
|
desc = "A NanoTrasen designed sidearm, found pretty much everywhere humans are. Uses .45 rounds."
|
||||||
name = "\improper NT Mk58"
|
name = "\improper NT Mk58"
|
||||||
icon_state = "secguncomp"
|
icon_state = "secguncomp"
|
||||||
magazine_type = /obj/item/ammo_magazine/c45m/rubber
|
magazine_type = /obj/item/ammo_magazine/c45m/rubber
|
||||||
@@ -40,11 +40,10 @@
|
|||||||
|
|
||||||
/obj/item/weapon/gun/projectile/sec/flash
|
/obj/item/weapon/gun/projectile/sec/flash
|
||||||
name = "\improper NT Mk58 signal pistol"
|
name = "\improper NT Mk58 signal pistol"
|
||||||
desc = "A NanoTrasen designed sidearm, found pretty much everywhere humans are. Uses .45 signal flash rounds."
|
|
||||||
magazine_type = /obj/item/ammo_magazine/c45m/flash
|
magazine_type = /obj/item/ammo_magazine/c45m/flash
|
||||||
|
|
||||||
/obj/item/weapon/gun/projectile/sec/wood
|
/obj/item/weapon/gun/projectile/sec/wood
|
||||||
desc = "A Nanotrasen designed sidearm, this one has a sweet wooden grip. Uses less-than-lethal .45 rounds."
|
desc = "A Nanotrasen designed sidearm, this one has a sweet wooden grip. Uses .45 rounds."
|
||||||
name = "\improper Custom NT Mk58"
|
name = "\improper Custom NT Mk58"
|
||||||
icon_state = "secgundark"
|
icon_state = "secgundark"
|
||||||
|
|
||||||
@@ -118,7 +117,7 @@
|
|||||||
|
|
||||||
/obj/item/weapon/gun/projectile/pistol/flash
|
/obj/item/weapon/gun/projectile/pistol/flash
|
||||||
name = "\improper Stechtkin signal pistol"
|
name = "\improper Stechtkin signal pistol"
|
||||||
desc = "A small, easily concealable gun. Uses 9mm signal flash rounds."
|
desc = "A small, easily concealable gun. Uses 9mm rounds."
|
||||||
magazine_type = /obj/item/ammo_magazine/mc9mm/flash
|
magazine_type = /obj/item/ammo_magazine/mc9mm/flash
|
||||||
|
|
||||||
/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob)
|
/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob)
|
||||||
|
|||||||
@@ -149,6 +149,8 @@
|
|||||||
|
|
||||||
//Called when the projectile intercepts a mob. Returns 1 if the projectile hit the mob, 0 if it missed and should keep flying.
|
//Called when the projectile intercepts a mob. Returns 1 if the projectile hit the mob, 0 if it missed and should keep flying.
|
||||||
/obj/item/projectile/proc/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier=0)
|
/obj/item/projectile/proc/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier=0)
|
||||||
|
if(!istype(target_mob))
|
||||||
|
return
|
||||||
//accuracy bonus from aiming
|
//accuracy bonus from aiming
|
||||||
if (istype(shot_from, /obj/item/weapon/gun))
|
if (istype(shot_from, /obj/item/weapon/gun))
|
||||||
var/obj/item/weapon/gun/daddy = shot_from
|
var/obj/item/weapon/gun/daddy = shot_from
|
||||||
@@ -227,7 +229,7 @@
|
|||||||
if(isturf(A))
|
if(isturf(A))
|
||||||
for(var/obj/O in A)
|
for(var/obj/O in A)
|
||||||
O.bullet_act(src)
|
O.bullet_act(src)
|
||||||
for(var/mob/M in A)
|
for(var/mob/living/M in A)
|
||||||
attack_mob(M, distance)
|
attack_mob(M, distance)
|
||||||
|
|
||||||
//penetrating projectiles can pass through things that otherwise would not let them
|
//penetrating projectiles can pass through things that otherwise would not let them
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ Also, you never added distance checking after target is selected. I've went ahea
|
|||||||
var/mob/caster = user//The wizard/whomever doing the body transferring.
|
var/mob/caster = user//The wizard/whomever doing the body transferring.
|
||||||
|
|
||||||
//SPELL LOSS BEGIN
|
//SPELL LOSS BEGIN
|
||||||
admin_attack_log(caster, victim, "Used mind transfer on", "Had mind transfer used on him by", "used mind transfer on")
|
admin_attack_log(caster, victim, "Used mind transfer", "Was the victim of mind transfer", "used mind transfer on")
|
||||||
|
|
||||||
//NOTE: The caster must ALWAYS keep mind transfer, even when other spells are lost.
|
//NOTE: The caster must ALWAYS keep mind transfer, even when other spells are lost.
|
||||||
var/obj/effect/proc_holder/spell/targeted/mind_transfer/m_transfer = locate() in user.spell_list//Find mind transfer directly.
|
var/obj/effect/proc_holder/spell/targeted/mind_transfer/m_transfer = locate() in user.spell_list//Find mind transfer directly.
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
//This is an uguu head restoration surgery TOTALLY not yoinked from chinsky's limb reattacher
|
//This is an uguu head restoration surgery TOTALLY not yoinked from chinsky's limb reattacher
|
||||||
/datum/surgery_step/attach_head/
|
/datum/surgery_step/attach_head/
|
||||||
|
priority = 3 // Must be higher than /datum/surgery_step/internal
|
||||||
allowed_tools = list(/obj/item/organ/external/head = 100)
|
allowed_tools = list(/obj/item/organ/external/head = 100)
|
||||||
can_infect = 0
|
can_infect = 0
|
||||||
|
|
||||||
@@ -7,20 +8,20 @@
|
|||||||
max_duration = 100
|
max_duration = 100
|
||||||
|
|
||||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
if(..())
|
|
||||||
var/obj/item/organ/external/head = target.get_organ(target_zone)
|
var/obj/item/organ/external/head = target.get_organ(target_zone)
|
||||||
return !head && target_zone == "head"
|
return isnull(head) && target_zone == "head" && !isnull(target.species.has_limbs["head"])
|
||||||
|
|
||||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("[user] starts attaching [tool] to [target]'s reshaped neck.", \
|
user.visible_message("[user] starts attaching [tool] to [target]'s neck.", \
|
||||||
"You start attaching [tool] to [target]'s reshaped neck.")
|
"You start attaching [tool] to [target]'s neck.")
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("\blue [user] has attached [target]'s head to the body.", \
|
user.visible_message("\blue [user] has attached [target]'s head to the body.", \
|
||||||
"\blue You have attached [target]'s head to the body.")
|
"\blue You have attached [target]'s head to the body.")
|
||||||
var/obj/item/organ/external/head = tool
|
var/obj/item/organ/external/head = tool
|
||||||
head.loc = target
|
user.drop_from_inventory(head)
|
||||||
head.replaced(target)
|
head.replaced(target)
|
||||||
|
head.loc = target
|
||||||
head.status = 0
|
head.status = 0
|
||||||
target.update_body()
|
target.update_body()
|
||||||
target.updatehealth()
|
target.updatehealth()
|
||||||
|
|||||||
@@ -228,7 +228,7 @@
|
|||||||
var/list/attached_organs = list()
|
var/list/attached_organs = list()
|
||||||
for(var/organ in target.internal_organs_by_name)
|
for(var/organ in target.internal_organs_by_name)
|
||||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||||
if(!I.status && I.parent_organ == target_zone)
|
if(I && !I.status && I.parent_organ == target_zone)
|
||||||
attached_organs |= organ
|
attached_organs |= organ
|
||||||
|
|
||||||
var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs
|
var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs
|
||||||
@@ -347,7 +347,7 @@
|
|||||||
return 0
|
return 0
|
||||||
else if(target.species.has_organ[O.organ_tag])
|
else if(target.species.has_organ[O.organ_tag])
|
||||||
|
|
||||||
if(O.is_damaged())
|
if(O.damage > (O.max_damage * 0.75))
|
||||||
user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted."
|
user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted."
|
||||||
return 2
|
return 2
|
||||||
|
|
||||||
@@ -410,7 +410,7 @@
|
|||||||
var/list/removable_organs = list()
|
var/list/removable_organs = list()
|
||||||
for(var/organ in target.internal_organs_by_name)
|
for(var/organ in target.internal_organs_by_name)
|
||||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||||
if(I.status & ORGAN_CUT_AWAY && I.parent_organ == target_zone)
|
if(I && I.status & ORGAN_CUT_AWAY && I.parent_organ == target_zone)
|
||||||
removable_organs |= organ
|
removable_organs |= organ
|
||||||
|
|
||||||
var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
|
var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
for(var/part_name in L.part)
|
for(var/part_name in L.part)
|
||||||
if(!isnull(target.get_organ(part_name)))
|
if(!isnull(target.get_organ(part_name)))
|
||||||
continue
|
continue
|
||||||
var/list/organ_data = target.species.has_limbs["[target_zone]"]
|
var/list/organ_data = target.species.has_limbs["[part_name]"]
|
||||||
if(!organ_data)
|
if(!organ_data)
|
||||||
continue
|
continue
|
||||||
var/new_limb_type = organ_data["path"]
|
var/new_limb_type = organ_data["path"]
|
||||||
|
|||||||
@@ -56,6 +56,15 @@ should be listed in the changelog upon commit though. Thanks. -->
|
|||||||
|
|
||||||
<!-- DO NOT REMOVE, MOVE, OR COPY THIS COMMENT! THIS MUST BE THE LAST NON-EMPTY LINE BEFORE THE LOGS #ADDTOCHANGELOGMARKER# -->
|
<!-- DO NOT REMOVE, MOVE, OR COPY THIS COMMENT! THIS MUST BE THE LAST NON-EMPTY LINE BEFORE THE LOGS #ADDTOCHANGELOGMARKER# -->
|
||||||
|
|
||||||
|
<div class='commit sansserif'>
|
||||||
|
<h2 class='date'>7 April 2015</h2>
|
||||||
|
<h3 class='author'>RavingManiac updated:</h3>
|
||||||
|
<ul class='changes bgimages16'>
|
||||||
|
<li class='tweak'>You can now pay vending machines and EFTPOS scanners without removing your ID from your PDA or wallet. Clicking on the vending machine with your ID/PDA/wallet/cash also brings up the menu now instead of attacking the vending machine.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class='commit sansserif'>
|
<div class='commit sansserif'>
|
||||||
<h2 class='date'>24 February 2015</h2>
|
<h2 class='date'>24 February 2015</h2>
|
||||||
<h3 class='author'>Zuhayr updated:</h3>
|
<h3 class='author'>Zuhayr updated:</h3>
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 36 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 63 KiB |
File diff suppressed because it is too large
Load Diff
@@ -1074,6 +1074,7 @@
|
|||||||
#include "code\modules\mob\language\station.dm"
|
#include "code\modules\mob\language\station.dm"
|
||||||
#include "code\modules\mob\language\synthetic.dm"
|
#include "code\modules\mob\language\synthetic.dm"
|
||||||
#include "code\modules\mob\living\damage_procs.dm"
|
#include "code\modules\mob\living\damage_procs.dm"
|
||||||
|
#include "code\modules\mob\living\default_language.dm"
|
||||||
#include "code\modules\mob\living\living.dm"
|
#include "code\modules\mob\living\living.dm"
|
||||||
#include "code\modules\mob\living\living_defense.dm"
|
#include "code\modules\mob\living\living_defense.dm"
|
||||||
#include "code\modules\mob\living\living_defines.dm"
|
#include "code\modules\mob\living\living_defines.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user