mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 05:27:01 +01:00
Merge branch 'bleeding-edge-freeze' of https://github.com/Baystation12/Baystation12 into bleeding-edge-freeze
This commit is contained in:
@@ -1692,6 +1692,12 @@
|
||||
log_admin("[key_name(usr)] toggled gravity off.", 1)
|
||||
message_admins("\blue [key_name_admin(usr)] toggled gravity off.", 1)
|
||||
command_alert("Feedback surge detected in mass-distributions systems. Artifical gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.")
|
||||
if("wave")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","Meteor")
|
||||
log_admin("[key_name(usr)] spawned a meteor wave", 1)
|
||||
message_admins("\blue [key_name_admin(usr)] spawned a meteor wave.", 1)
|
||||
new /datum/event/meteor_wave
|
||||
if("power")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","P")
|
||||
|
||||
@@ -484,7 +484,7 @@ client/proc/one_click_antag()
|
||||
new_vox << "\red Don't forget to turn on your nitrogen internals!"
|
||||
|
||||
raiders--
|
||||
if(raiders >= 4)
|
||||
if(raiders > 4)
|
||||
return 0
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -16,10 +16,7 @@
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
|
||||
equip_to_slot_or_del(new /obj/item/device/chameleon(src), slot_l_store)
|
||||
|
||||
var/obj/item/weapon/crossbow/W = new(src)
|
||||
W.cell = new /obj/item/weapon/cell/crap(W)
|
||||
W.cell.charge = 500
|
||||
equip_to_slot_or_del(W, slot_r_hand)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/dartgun/vox/raider, slot_r_hand)
|
||||
|
||||
if(2) // Vox engineer!
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/pressure(src), slot_wear_suit)
|
||||
@@ -28,7 +25,9 @@
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box/emps(src), slot_l_store)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pickaxe/plasmacutter(src), slot_r_hand)
|
||||
var/obj/item/weapon/storage/pneumatic/W = new(src)
|
||||
W.tank = new /obj/item/weapon/tank/nitrogen(W)
|
||||
equip_to_slot_or_del(W, slot_r_hand)
|
||||
|
||||
if(3) // Vox saboteur!
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit)
|
||||
@@ -37,8 +36,9 @@
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
|
||||
equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_l_store)
|
||||
|
||||
var/obj/item/weapon/storage/pneumatic/W = new(src)
|
||||
W.tank = new /obj/item/weapon/tank/nitrogen(W)
|
||||
var/obj/item/weapon/crossbow/W = new(src)
|
||||
W.cell = new /obj/item/weapon/cell/crap(W)
|
||||
W.cell.charge = 500
|
||||
equip_to_slot_or_del(W, slot_r_hand)
|
||||
|
||||
if(4) // Vox medic!
|
||||
@@ -49,7 +49,7 @@
|
||||
equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray(src), slot_l_store)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/circular_saw(src), slot_l_hand)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/toxin(src), slot_r_hand)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/dartgun/vox/medical, slot_r_hand)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/breath/vox(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_back)
|
||||
|
||||
@@ -64,6 +64,7 @@ datum/preferences
|
||||
var/g_eyes = 0 //Eye color
|
||||
var/b_eyes = 0 //Eye color
|
||||
var/species = "Human"
|
||||
var/language = "None" //Secondary language
|
||||
|
||||
//Mob preview
|
||||
var/icon/preview_icon_front = null
|
||||
@@ -251,6 +252,7 @@ datum/preferences
|
||||
dat += "(<a href='?_src_=prefs;preference=all;task=random'>®</A>)"
|
||||
dat += "<br>"
|
||||
dat += "Species: <a href='byond://?src=\ref[user];preference=species;task=input'>[species]</a><br>"
|
||||
dat += "Secondary Language:<br><a href='byond://?src=\ref[user];preference=language;task=input'>[language]</a><br>"
|
||||
dat += "Blood Type: <a href='byond://?src=\ref[user];preference=b_type;task=input'>[b_type]</a><br>"
|
||||
dat += "Skin Tone: <a href='?_src_=prefs;preference=s_tone;task=input'>[-s_tone + 35]/220<br></a>"
|
||||
//dat += "Skin pattern: <a href='byond://?src=\ref[user];preference=skin_style;task=input'>Adjust</a><br>"
|
||||
@@ -851,6 +853,32 @@ datum/preferences
|
||||
|
||||
s_tone = 0
|
||||
|
||||
if("language")
|
||||
var/list/new_language = list("None")
|
||||
var/language_whitelisted = 0
|
||||
if(config.usealienwhitelist)
|
||||
if(is_alien_whitelisted(user, "Language_Soghun"))
|
||||
new_language += "Unathi"
|
||||
language_whitelisted = 1
|
||||
if(is_alien_whitelisted(user, "Language_Tajaran"))
|
||||
new_language += "Tajaran"
|
||||
language_whitelisted = 1
|
||||
if(is_alien_whitelisted(user, "Language_Skrell"))
|
||||
new_language += "Skrell"
|
||||
language_whitelisted = 1
|
||||
if(is_alien_whitelisted(user, "Language_Kidan"))
|
||||
new_language += "Kidan"
|
||||
language_whitelisted = 1
|
||||
|
||||
if(!language_whitelisted)
|
||||
alert(user, "You cannot select a secondary language as you need to be whitelisted. If you wish to enable a language, post in the Alien Whitelist forums.")
|
||||
|
||||
else
|
||||
new_language += "Unathi"
|
||||
new_language += "Tajaran"
|
||||
new_language += "Skrell"
|
||||
new_language += "Kidan"
|
||||
language = input("Please select a secondary language", "Character Generation", null) in new_language
|
||||
|
||||
if("metadata")
|
||||
var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#define SAVEFILE_VERSION_MIN 8
|
||||
#define SAVEFILE_VERSION_MAX 9
|
||||
#define SAVEFILE_VERSION_MAX 10
|
||||
|
||||
//handles converting savefiles to new formats
|
||||
//MAKE SURE YOU KEEP THIS UP TO DATE!
|
||||
@@ -103,6 +103,7 @@
|
||||
S["gender"] >> gender
|
||||
S["age"] >> age
|
||||
S["species"] >> species
|
||||
S["language"] >> language
|
||||
|
||||
//colors to be consolidated into hex strings (requires some work with dna code)
|
||||
S["hair_red"] >> r_hair
|
||||
@@ -152,6 +153,7 @@
|
||||
metadata = sanitize_text(metadata, initial(metadata))
|
||||
real_name = reject_bad_name(real_name)
|
||||
if(isnull(species)) species = "Human"
|
||||
if(isnull(language)) language = "None"
|
||||
if(isnull(nanotrasen_relation)) nanotrasen_relation = initial(nanotrasen_relation)
|
||||
if(!real_name) real_name = random_name()
|
||||
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
|
||||
@@ -206,6 +208,7 @@
|
||||
S["gender"] << gender
|
||||
S["age"] << age
|
||||
S["species"] << species
|
||||
S["language"] << language
|
||||
S["hair_red"] << r_hair
|
||||
S["hair_green"] << g_hair
|
||||
S["hair_blue"] << b_hair
|
||||
|
||||
@@ -145,11 +145,6 @@
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
var/state = "loosely"
|
||||
if(src.flags&NOSLIP)
|
||||
state = "tightly"
|
||||
usr << "The wearer seems to be gripping the floor [state]."
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/magboots/vox/mob_can_equip(M as mob, slot)
|
||||
var/mob/living/carbon/human/U = M
|
||||
|
||||
@@ -226,4 +226,80 @@
|
||||
desc = "Worn brownish synthcotton vest with lots of pockets to unload your hands."
|
||||
icon_state = "vest_brown"
|
||||
color = "vest_brown"
|
||||
slots = 5
|
||||
slots = 5
|
||||
/*
|
||||
Holobadges are worn on the belt or neck, and can be used to show that the holder is an authorized
|
||||
Security agent - the user details can be imprinted on the badge with a Security-access ID card,
|
||||
or they can be emagged to accept any ID for use in disguises.
|
||||
*/
|
||||
|
||||
/obj/item/clothing/tie/holobadge
|
||||
|
||||
name = "holobadge"
|
||||
desc = "This glowing blue badge marks the holder as THE LAW."
|
||||
icon_state = "holobadge"
|
||||
color = "holobadge"
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
var/emagged = 0 //Emagging removes Sec check.
|
||||
var/stored_name = null
|
||||
|
||||
/obj/item/clothing/tie/holobadge/cord
|
||||
icon_state = "holobadge-cord"
|
||||
color = "holobadge-cord"
|
||||
slot_flags = SLOT_MASK
|
||||
|
||||
/obj/item/clothing/tie/holobadge/attack_self(mob/user as mob)
|
||||
if(!stored_name)
|
||||
user << "Waving around a badge before swiping an ID would be pretty pointless."
|
||||
return
|
||||
if(isliving(user))
|
||||
user.visible_message("\red [user] displays their NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.","\red You display your NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.")
|
||||
|
||||
/obj/item/clothing/tie/holobadge/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
|
||||
if (istype(O, /obj/item/weapon/card/emag))
|
||||
if (emagged)
|
||||
user << "\red [src] is already cracked."
|
||||
return
|
||||
else
|
||||
emagged = 1
|
||||
user << "\red You swipe [O] and crack the holobadge security checks."
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda))
|
||||
|
||||
var/obj/item/weapon/card/id/id_card = null
|
||||
|
||||
if(istype(O, /obj/item/weapon/card/id))
|
||||
id_card = O
|
||||
else
|
||||
var/obj/item/device/pda/pda = O
|
||||
id_card = pda.id
|
||||
|
||||
if(access_security in id_card.access || emagged)
|
||||
user << "You imprint your ID details onto the badge."
|
||||
stored_name = id_card.registered_name
|
||||
name = "holobadge ([stored_name])"
|
||||
desc = "This glowing blue badge marks [stored_name] as THE LAW."
|
||||
else
|
||||
user << "[src] rejects your insufficient access rights."
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/clothing/tie/holobadge/attack(mob/living/carbon/human/M, mob/living/user)
|
||||
if(isliving(user))
|
||||
user.visible_message("\red [user] invades [M]'s personal space, thrusting [src] into their face insistently.","\red You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.")
|
||||
|
||||
/obj/item/weapon/storage/box/holobadge
|
||||
name = "holobadge box"
|
||||
desc = "A box claiming to contain holobadges."
|
||||
New()
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
new /obj/item/clothing/tie/holobadge/cord(src)
|
||||
new /obj/item/clothing/tie/holobadge/cord(src)
|
||||
..()
|
||||
return
|
||||
@@ -1044,6 +1044,9 @@
|
||||
O.status &= ~ORGAN_DESTROYED
|
||||
O.wounds.Cut()
|
||||
|
||||
var/datum/organ/external/head/h = organs_by_name["head"]
|
||||
h.disfigured = 0
|
||||
|
||||
vessel.add_reagent("blood",560-vessel.total_volume)
|
||||
fixblood()
|
||||
for (var/obj/item/weapon/organ/head/H in world)
|
||||
@@ -1053,7 +1056,8 @@
|
||||
H.brainmob.mind.transfer_to(src)
|
||||
del(H)
|
||||
|
||||
for(var/datum/organ/internal/I in internal_organs)
|
||||
for(var/E in internal_organs)
|
||||
var/datum/organ/internal/I = internal_organs[E]
|
||||
I.damage = 0
|
||||
|
||||
for (var/datum/disease/virus in viruses)
|
||||
@@ -1222,4 +1226,4 @@ mob/living/carbon/human/yank_out_object()
|
||||
|
||||
organ.status |= ORGAN_BLEEDING
|
||||
organ.take_damage(rand(1,3), 0, 0)
|
||||
src.adjustToxLoss(rand(1,3))
|
||||
src.adjustToxLoss(rand(1,3))
|
||||
|
||||
@@ -323,7 +323,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
stand_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_s"), ICON_OVERLAY)
|
||||
|
||||
//Underwear
|
||||
if(underwear >0 && underwear < 12)
|
||||
if(underwear >0 && underwear < 12 && (src.dna.mutantrace != "vox" && src.dna.mutantrace != "kidan"))
|
||||
if(!fat && !skeleton)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY)
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
update_icon = 0 ///no need to call regenerate_icon
|
||||
|
||||
var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie
|
||||
|
||||
/mob/living/carbon/monkey/tajara
|
||||
name = "farwa"
|
||||
voice_name = "farwa"
|
||||
@@ -28,7 +29,7 @@
|
||||
voice_name = "stok"
|
||||
voice_message = "hisses"
|
||||
say_message = "hisses"
|
||||
icon_state = "stok1"
|
||||
icon_state = "stokkey1"
|
||||
|
||||
/mob/living/carbon/monkey/unathi/New()
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
if("tajaran")
|
||||
ico = "tajkey"
|
||||
if("lizard")
|
||||
ico = "stok"
|
||||
ico = "stokkey"
|
||||
if("skrell")
|
||||
icon_state = "skrellkey"
|
||||
ico = "skrellkey"
|
||||
if(lying)
|
||||
icon_state = ico + "0"
|
||||
for(var/image/I in overlays_lying)
|
||||
|
||||
@@ -94,19 +94,19 @@
|
||||
visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!")
|
||||
src.throw_at(get_edge_target_turf(src,dir),1,momentum)
|
||||
|
||||
if(W.w_class >= 3 && W.sharp && armor < 2) //Projectile is suitable, armour is bypassable.
|
||||
if(istype(W.loc,/mob/living) && W.sharp) //Projectile is embedded and suitable for pinning.
|
||||
|
||||
if(!istype(src,/mob/living/carbon/human)) //Handles embedding for non-humans and simple_animals.
|
||||
O.loc = src
|
||||
src.embedded += O
|
||||
|
||||
var/turf/T = near_wall(dir,2)
|
||||
|
||||
if(T)
|
||||
src.loc = T
|
||||
visible_message("<span class='warning'>[src] is pinned to the wall by [O]!</span>","<span class='warning'>You are pinned to the wall by [O]!</span>")
|
||||
if(!istype(src,/mob/living/carbon/human))
|
||||
O.loc = src
|
||||
src.embedded += O
|
||||
src.anchored = 1
|
||||
src.pinned += O
|
||||
else
|
||||
src.anchored = 1
|
||||
src.pinned += O
|
||||
src.anchored = 1
|
||||
src.pinned += O
|
||||
|
||||
|
||||
/mob/living/proc/near_wall(var/direction,var/distance=1)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
/mob/living/silicon/robot/proc/use_power()
|
||||
|
||||
if (is_component_functioning("power cell"))
|
||||
if (is_component_functioning("power cell") && cell)
|
||||
if(src.cell.charge <= 0)
|
||||
uneq_all()
|
||||
src.stat = 1
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
icon_state = "robot"
|
||||
maxHealth = 300
|
||||
health = 300
|
||||
universal_speak = 1
|
||||
|
||||
var/sight_mode = 0
|
||||
var/custom_name = ""
|
||||
|
||||
@@ -114,13 +116,13 @@
|
||||
cell.maxcharge = 7500
|
||||
cell.charge = 7500
|
||||
|
||||
..()
|
||||
|
||||
if(cell)
|
||||
var/datum/robot_component/cell_component = components["power cell"]
|
||||
cell_component.wrapped = cell
|
||||
cell_component.installed = 1
|
||||
|
||||
..()
|
||||
|
||||
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
|
||||
|
||||
// setup the PDA and its name
|
||||
@@ -696,7 +698,7 @@
|
||||
for(var/V in components)
|
||||
if(V == "power cell") continue
|
||||
var/datum/robot_component/C = components[V]
|
||||
if(C.installed == 1)
|
||||
if(C.installed == 1 || C.installed == -1)
|
||||
removable_components += V
|
||||
|
||||
var/remove = input(user, "Which component do you want to pry out?", "Remove Component") as null|anything in removable_components
|
||||
@@ -723,7 +725,7 @@
|
||||
var/datum/robot_component/C = components["power cell"]
|
||||
if(wiresexposed)
|
||||
user << "Close the panel first."
|
||||
else if(cell || C.installed)
|
||||
else if(cell)
|
||||
user << "There is a power cell already installed."
|
||||
else
|
||||
user.drop_item()
|
||||
@@ -1013,6 +1015,8 @@
|
||||
user.put_in_active_hand(cell)
|
||||
user << "You remove \the [cell]."
|
||||
cell = null
|
||||
cell_component.wrapped = null
|
||||
cell_component.installed = 0
|
||||
updateicon()
|
||||
else if(cell_component.installed == -1)
|
||||
cell_component.installed = 0
|
||||
|
||||
@@ -719,7 +719,7 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
stat(null,"MasterController-ERROR")
|
||||
|
||||
|
||||
if(spell_list.len)
|
||||
if(spell_list && spell_list.len)
|
||||
for(var/obj/effect/proc_holder/spell/S in spell_list)
|
||||
switch(S.charge_type)
|
||||
if("recharge")
|
||||
|
||||
@@ -340,22 +340,36 @@
|
||||
new_character.lastarea = get_area(loc)
|
||||
|
||||
if(client.prefs.species == "Tajaran") //This is like the worst, but it works, so meh. - Erthilo
|
||||
if(is_alien_whitelisted(src, "Tajaran"|| !config.usealienwhitelist))
|
||||
if(is_alien_whitelisted(src, "Tajaran") || !config.usealienwhitelist)
|
||||
new_character.dna.mutantrace = "tajaran"
|
||||
new_character.tajaran_talk_understand = 1
|
||||
if(client.prefs.species == "Unathi")
|
||||
if(is_alien_whitelisted(src, "Soghun"|| !config.usealienwhitelist))
|
||||
if(is_alien_whitelisted(src, "Soghun") || !config.usealienwhitelist)
|
||||
new_character.dna.mutantrace = "lizard"
|
||||
new_character.soghun_talk_understand = 1
|
||||
if(client.prefs.species == "Skrell")
|
||||
if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist))
|
||||
if(is_alien_whitelisted(src, "Skrell") || !config.usealienwhitelist)
|
||||
new_character.dna.mutantrace = "skrell"
|
||||
new_character.skrell_talk_understand = 1
|
||||
if(client.prefs.species == "Kidan")
|
||||
if(is_alien_whitelisted(src, "Kidan"|| !config.usealienwhitelist))
|
||||
if(is_alien_whitelisted(src, "Kidan") || !config.usealienwhitelist)
|
||||
new_character.dna.mutantrace = "kidan"
|
||||
new_character.kidan_talk_understand = 1
|
||||
|
||||
if(client.prefs.language == "Tajaran")
|
||||
if(is_alien_whitelisted(src, "Language_Tajaran") || !config.usealienwhitelist)
|
||||
new_character.tajaran_talk_understand = 1
|
||||
if(client.prefs.language == "Unathi")
|
||||
if(is_alien_whitelisted(src, "Language_Soghun") || !config.usealienwhitelist)
|
||||
new_character.soghun_talk_understand = 1
|
||||
if(client.prefs.language == "Skrell")
|
||||
if(is_alien_whitelisted(src, "Language_Skrell") || !config.usealienwhitelist)
|
||||
new_character.skrell_talk_understand = 1
|
||||
if(client.prefs.language == "Kidan")
|
||||
if(is_alien_whitelisted(src, "Language_Kidan") || !config.usealienwhitelist)
|
||||
new_character.kidan_talk_understand = 1
|
||||
|
||||
|
||||
if(ticker.random_players)
|
||||
new_character.gender = pick(MALE, FEMALE)
|
||||
client.prefs.real_name = random_name()
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
for(var/mob/M in player_list)
|
||||
if(istype(M, /mob/new_player))
|
||||
continue
|
||||
if(M.client && M.client.holder && M.client.holder.rights & R_ADMIN && (M.client.prefs.toggles & CHAT_DEAD)) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above
|
||||
if(M.client && M.client.holder && (M.client.holder.rights & R_ADMIN|R_MOD) && (M.client.prefs.toggles & CHAT_DEAD)) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above
|
||||
M << rendered //Admins can hear deadchat, if they choose to, no matter if they're blind/deaf or not.
|
||||
else if(M.stat == DEAD)
|
||||
M.show_message(rendered, 2) //Takes into account blindness and such.
|
||||
|
||||
@@ -137,7 +137,6 @@
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
regenerate_icons()
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
if(status & ORGAN_BROKEN && prob(40) && brute)
|
||||
owner.emote("scream") //getting hit on broken hand hurts
|
||||
if(used_weapon)
|
||||
add_autopsy_data(used_weapon, brute + burn)
|
||||
add_autopsy_data("[used_weapon]", brute + burn)
|
||||
|
||||
var/can_cut = (prob(brute*2) || sharp) && !(status & ORGAN_ROBOT)
|
||||
// If the limbs can break, make sure we don't exceed the maximum damage a limb can take before breaking
|
||||
@@ -308,6 +308,10 @@
|
||||
|
||||
//Updating wounds. Handles wound natural I had some free spachealing, internal bleedings and infections
|
||||
/datum/organ/external/proc/update_wounds()
|
||||
|
||||
if((status & ORGAN_ROBOT)) //Robotic limbs don't heal or get worse.
|
||||
return
|
||||
|
||||
for(var/datum/wound/W in wounds)
|
||||
// wounds can disappear after 10 minutes at the earliest
|
||||
if(W.damage == 0 && W.created + 10 * 10 * 60 <= world.time)
|
||||
@@ -361,6 +365,7 @@
|
||||
burn_dam += W.damage
|
||||
|
||||
if(!(status & ORGAN_ROBOT) && W.bleeding())
|
||||
W.bleed_timer--
|
||||
status |= ORGAN_BLEEDING
|
||||
|
||||
clamped |= W.clamped
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
|
||||
// amount of damage this wound causes
|
||||
var/damage = 0
|
||||
|
||||
// ticks of bleeding left.
|
||||
var/bleed_timer = 0
|
||||
// amount of damage the current wound type requires(less means we need to apply the next healing stage)
|
||||
var/min_damage = 0
|
||||
|
||||
@@ -71,6 +72,8 @@
|
||||
// this is more robust to changes to the list
|
||||
max_bleeding_stage = src.desc_list.len - max_bleeding_stage
|
||||
|
||||
bleed_timer += damage
|
||||
|
||||
// returns 1 if there's a next stage, 0 otherwise
|
||||
proc/next_stage()
|
||||
if(current_stage + 1 > src.desc_list.len)
|
||||
@@ -136,6 +139,7 @@
|
||||
// opens the wound again
|
||||
proc/open_wound(damage)
|
||||
src.damage += damage
|
||||
bleed_timer += damage
|
||||
|
||||
while(src.current_stage > 1 && src.damage_list[current_stage-1] <= src.damage)
|
||||
src.current_stage--
|
||||
@@ -145,7 +149,7 @@
|
||||
|
||||
proc/bleeding()
|
||||
// internal wounds don't bleed in the sense of this function
|
||||
return (!(bandaged||clamped) && (damage_type == BRUISE && damage >= 20 || damage_type == CUT) && current_stage <= max_bleeding_stage && !src.internal)
|
||||
return ((damage > 30 || bleed_timer > 0) && !(bandaged||clamped) && (damage_type == BRUISE && damage >= 20 || damage_type == CUT && damage >= 5) && current_stage <= max_bleeding_stage && !src.internal)
|
||||
|
||||
/** CUTS **/
|
||||
/datum/wound/cut/small
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
|
||||
|
||||
/obj/machinery/power/smes/interact(mob/user)
|
||||
if(get_dist(src, user) > 1 && !istype(user, /mob/living/silicon/ai))
|
||||
if(get_dist(src, user) > 1 && !istype(user, /mob/living/silicon))
|
||||
user.unset_machine()
|
||||
user << browse(null, "window=smes")
|
||||
return
|
||||
@@ -364,4 +364,4 @@
|
||||
return rate
|
||||
|
||||
|
||||
#undef SMESRATE
|
||||
#undef SMESRATE
|
||||
|
||||
@@ -395,7 +395,7 @@ var/list/solars_list = list()
|
||||
/obj/machinery/power/solar_control/interact(mob/user)
|
||||
if(stat & (BROKEN | NOPOWER)) return
|
||||
if ( (get_dist(src, user) > 1 ))
|
||||
if (!istype(user, /mob/living/silicon/ai))
|
||||
if (!istype(user, /mob/living/silicon))
|
||||
user.unset_machine()
|
||||
user << browse(null, "window=solcon")
|
||||
return
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/vial/B = new(src)
|
||||
B.reagents.add_reagent(chem, 25)
|
||||
beakers += B
|
||||
cartridge = new /obj/item/weapon/dart_cartridge(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/dartgun/examine()
|
||||
set src in view()
|
||||
@@ -207,7 +209,9 @@
|
||||
/obj/item/weapon/gun/dartgun/can_hit(var/mob/living/target as mob, var/mob/living/user as mob)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/dartgun/attack_self(user as mob)
|
||||
/obj/item/weapon/gun/dartgun/attack_self(mob/user)
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat = "<b>[src] mixing control:</b><br><br>"
|
||||
|
||||
if (beakers.len)
|
||||
@@ -235,7 +239,8 @@
|
||||
dat += "<font color='red'>The dart cartridge is empty!</font>"
|
||||
dat += " \[<A href='?src=\ref[src];eject_cart=1'>Eject</A>\]"
|
||||
|
||||
user << browse("[dat]", "window=dartgun_mixing_window")
|
||||
user << browse(dat, "window=dartgun")
|
||||
onclose(user, "dartgun", src)
|
||||
|
||||
/obj/item/weapon/gun/dartgun/proc/check_beaker_mixing(var/obj/item/B)
|
||||
if(!mixing || !beakers)
|
||||
|
||||
@@ -129,9 +129,20 @@
|
||||
return
|
||||
|
||||
if(ismob(target) && target != user)
|
||||
var/time = 30 //Injecting through a hardsuit takes longer due to needing to find a port.
|
||||
if(istype(target,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
|
||||
time = 60
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("\red <B>[] is trying to inject []!</B>", user, target), 1)
|
||||
if(!do_mob(user, target)) return
|
||||
if(time == 30)
|
||||
O.show_message(text("\red <B>[] is trying to inject []!</B>", user, target), 1)
|
||||
else
|
||||
O.show_message(text("\red <B>[] begins hunting for an injection port on []'s suit!</B>", user, target), 1)
|
||||
|
||||
if(!do_mob(user, target, time)) return
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("\red [] injects [] with the syringe!", user, target), 1)
|
||||
src.reagents.reaction(target, INGEST)
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
new_item.name = name
|
||||
new_item.desc = src.desc
|
||||
|
||||
if(talkative)
|
||||
if(talkative && istype(new_item,/obj/item/weapon))
|
||||
new_item.listening_to_players = 1
|
||||
if(prob(25))
|
||||
new_item.speaking_to_players = 1
|
||||
|
||||
Reference in New Issue
Block a user