Merge branch 'bleeding-edge-freeze' of https://github.com/Baystation12/Baystation12 into bs12_with_tgport

Conflicts:
	baystation12.dme
	code/defines/procs/global_lists.dm
	code/game/gamemodes/events.dm
	code/game/gamemodes/events/space_ninja.dm
	code/game/mecha/working/ripley.dm
	code/modules/mob/living/carbon/human/human_attackalien.dm
	code/modules/mob/living/carbon/human/life.dm
	code/modules/mob/new_player/preferences.dm
	icons/mob/items_lefthand.dmi
	icons/mob/items_righthand.dmi
	icons/mob/mask.dmi

Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
Cael_Aislinn
2012-12-29 13:06:03 +10:00
81 changed files with 8088 additions and 446 deletions

View File

@@ -26,6 +26,7 @@
var/be_alien = 0 //Check if that guy wants to be an alien
var/be_pai = 1 //Consider client when searching for players to recruit as a pAI
var/be_syndicate = 1 //Consider client for late-game autotraitor
var/be_spaceninja = 0
var/activeslot = 1 //Default active slot!
var/STFU_ghosts //80+ people rounds are fun to admin when text flies faster than airport security
var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security

View File

@@ -4,7 +4,7 @@
icon_state = "capspace"
item_state = "capspacehelmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads."
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags_inv = HIDEFACE
permeability_coefficient = 0.01
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)
@@ -18,11 +18,11 @@
w_class = 4
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = FPRINT | TABLEPASS
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE

View File

@@ -1,3 +1,4 @@
hi
// Add custom items you give to people here, and put their icons in custom_items.dmi
// Remember to change 'icon = 'custom_items.dmi'' for items not using /obj/item/fluff as a base
// Clothing item_state doesn't use custom_items.dmi. Just add them to the normal clothing files.
@@ -66,10 +67,20 @@
desc = "A neatly folded handkerchief embroidered with a 'M'."
icon_state = "maurice_bedford_1"
/obj/item/weapon/book/fluff/johnathan_falcian_1
name = "sketchbook"
desc = "A small, well-used sketchbook."
icon = 'custom_items.dmi'
icon_state = "johnathan_notebook"
dat = "In the notebook there are numerous drawings of various crew-mates, locations, and scenes on the ship. They are of fairly good quality."
author = "Johnathan Falcian"
title = "Falcian's sketchbook"
//////////////////////////////////
////////// Usable Items //////////
//////////////////////////////////
/obj/item/weapon/pen/fluff/multi //spaceman96: Trenna Seber
name = "multicolor pen"
desc = "It's a cool looking pen. Lots of colors!"
@@ -330,10 +341,17 @@
/obj/item/weapon/crowbar/fluff/zelda_creedy_1 //daaneesh: Zelda Creedy
name = "Zelda's Crowbar"
desc = "A pink crow bar that has an engraving that reads, 'To Zelda. Love always, Dawn'"
icon = 'icons/obj/custom_items.dmi'
icon = 'custom_items.dmi'
icon_state = "zeldacrowbar"
item_state = "crowbar"
////// Ripley customisation kit - Butchery Royce - MayeDay
/obj/item/weapon/fluff/butcher_royce_1
name = "Ripley customisation kit"
desc = "A kit containing all the needed tools and parts to turn an APLU Ripley into a Titan's Fist worker mech."
icon = 'custom_items.dmi'
icon_state = "royce_kit"
//////////////////////////////////
//////////// Clothing ////////////
@@ -384,6 +402,19 @@
icon = 'custom_items.dmi'
icon_state = "ian_colm_1"
////// Medical eyepatch - Thysse Ezinwa - Jadepython
/obj/item/clothing/glasses/eyepatch/fluff/thysse_1
name = "medical eyepatch"
desc = "On the strap, EZINWA is written in white block letters."
////// Safety Goggles - Arjun Chopra - MindPhyre - APPROVED
/obj/item/clothing/glasses/fluff/arjun_chopra_1
name = "safety goggles"
desc = "A used pair of leather safety goggles."
icon = 'custom_items.dmi'
icon_state = "arjun_chopra"
item_state = "arjun_chopra"
//////////// Hats ////////////
/obj/item/clothing/head/secsoft/fluff/swatcap //deusdactyl: James Girard
@@ -500,6 +531,50 @@
item_state = "ara_bar_uniform"
color = "ara_bar_uniform"
/////// NT-SID Suit //Zuhayr: Jane Doe
/obj/item/clothing/under/fluff/jane_sidsuit
name = "NT-SID jumpsuit"
desc = "A NanoTrasen Synthetic Intelligence Division jumpsuit, issued to 'volunteers'. On other people it looks fine, but right here a scientist has noted: on you it looks stupid."
icon = 'icons/obj/custom_items.dmi'
icon_state = "jane_sid_suit"
item_state = "jane_sid_suit"
color = "jane_sid_suit"
has_sensor = 2
sensor_mode = 3
flags = FPRINT | TABLEPASS
//Suit roll-down toggle.
/obj/item/clothing/under/fluff/jane_sidsuit/verb/toggle_zipper()
set name = "Toggle Jumpsuit Zipper"
set category = "Object"
set src in usr
if(!usr.canmove || usr.stat || usr.restrained())
return 0
if(src.icon_state == "jane_sid_suit_down")
src.color = "jane_sid_suit"
usr << "You zip up the [src]."
else
src.color = "jane_sid_suit_down"
usr << "You unzip and roll down the [src]."
src.icon_state = "[color]"
src.item_state = "[color]"
usr.update_inv_w_uniform()
////// Wyatt's Ex-Commander Jumpsuit - RawrTaicho
/obj/item/clothing/under/fluff/wyatt_1
name = "ex-commander jumpsuit"
desc = "A standard Central Command Engineering Commander jumpsuit tailored to fight the wearer tightly. It has a Medal of Service pinned onto the left side of it."
icon = 'custom_items.dmi'
icon_state = "wyatt_uniform"
item_state = "wyatt_uniform"
color = "wyatt_uniform"
//////////// Masks ////////////
/*
@@ -522,6 +597,41 @@
flags = FPRINT|TABLEPASS
w_class = 1
////// Small locket - Altair An-Nasaqan - Serithi
/obj/item/clothing/tie/fluff/altair_locket
name = "small locket"
desc = "A small golden locket attached to an Ii'rka-reed string. Inside the locket is a holo-picture of a female Tajaran, and an inscription writtin in Siik'mas."
icon = 'custom_items.dmi'
icon_state = "altair_locket"
item_state = "altair_locket"
color = "altair_locket"
slot_flags = 0
flags = FPRINT|TABLEPASS
w_class = 1
slot_flags = SLOT_MASK
////// Medallion - Nasir Khayyam - Jamini
/obj/item/clothing/tie/fluff/nasir_khayyam_1
name = "medallion"
desc = "This silvered medallion bears the symbol of the Hadii Clan of the Tajaran."
icon = 'custom_items.dmi'
icon_state = "nasir_khayyam_1"
flags = FPRINT|TABLEPASS
w_class = 1
slot_flags = SLOT_MASK
////// Emerald necklace - Ty Foster - Nega
/obj/item/clothing/mask/mara_kilpatrick_1
name = "emerald necklace"
desc = "A brass necklace with a green emerald placed at the end. It has a small inscription on the top of the chain, saying \'Foster\'"
icon = 'custom_items.dmi'
icon_state = "ty_foster"
flags = FPRINT|TABLEPASS
w_class = 1
//////////// Shoes ////////////
/obj/item/clothing/shoes/magboots/fluff/susan_harris_1 //sniperyeti: Susan Harris
@@ -529,22 +639,6 @@
desc = "A colorful pair of magboots with the name Susan Harris clearly written on the back."
icon = 'custom_items.dmi'
icon_state = "atmosmagboots0"
toggle()
set name = "Toggle Magboots"
set category = "Object"
set src in usr
if(src.magpulse)
src.flags &= ~NOSLIP
src.slowdown = SHOES_SLOWDOWN
src.magpulse = 0
icon_state = "atmosmagboots0"
usr << "You disable the mag-pulse traction system."
else
src.flags |= NOSLIP
src.slowdown = 2
src.magpulse = 1
icon_state = "atmosmagboots1"
usr << "You enable the mag-pulse traction system."
//////////// Sets ////////////
@@ -593,3 +687,19 @@
icon_state = "retpoluniform"
color = "retpoluniform"
//////////// Weapons ////////////
///// Colt Peacemaker - Ana Ka'Rimah - SueTheCake
/obj/item/weapon/gun/energy/stunrevolver/fluff/ana_peacemaker
name = "Peacemaker"
desc = "A nickel-plated revolver with pearl grips. It has a certain Old West flair!"
icon = 'custom_items.dmi'
icon_state = "peacemaker"
///// Well-used baton - Oen'g Issek - Donofnyc3
/obj/item/weapon/melee/baton/fluff/oeng_baton
name = "well-used stun baton"
desc = "A stun baton used for incapacitating targets; there seems to be a bunch of tally marks set into the handle."

View File

@@ -254,6 +254,17 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
client.be_pai = 1
src << "You will now be considered a viable candidate when a pAI device requests a new personality, effective until the end of this round."
/mob/dead/observer/verb/toggle_spaceninja_candidate()
set name = "Toggle Be Space Ninja Candidate"
set category = "Ghost"
set desc = "Determines whether you will be a candidate for when a new space ninja spawns. (toggle)"
if(client.be_spaceninja)
client.be_spaceninja = 0
src << "You are now excluded from space ninja candidate lists until end of round."
else
client.be_spaceninja = 1
src << "You are now included in space ninja candidate lists until end of round."
/mob/dead/observer/memory()
set hidden = 1
src << "\red You are dead! You have no mind to store memory!"

View File

@@ -22,7 +22,7 @@
var/move_delay_add = 0 // movement delay to add
status_flags = CANPARALYSE
var/heal_rate = 5
var/heal_rate = 1
var/plasma_rate = 5
var/oxygen_alert = 0

View File

@@ -114,7 +114,7 @@ Doesn't work on other aliens/AI.*/
/mob/living/carbon/alien/humanoid/proc/neurotoxin(mob/target as mob in oview())
set name = "Spit Neurotoxin (50)"
set desc = "Spits neurotoxin at someone, paralyzing them for a short time."
set desc = "Spits neurotoxin at someone, paralyzing them for a short time if they are not wearing protective gear."
set category = "Alien"
if(powerc(50))
@@ -137,12 +137,12 @@ Doesn't work on other aliens/AI.*/
if(!istype(T, /turf))
return
if (U == T)
usr.bullet_act(src, get_organ_target())
usr.bullet_act(new /obj/item/projectile/neurotoxin(usr.loc), get_organ_target())
return
if(!istype(U, /turf))
return
var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(usr.loc)
var/obj/item/projectile/neurotoxin/A = new /obj/item/projectile/neurotoxin(usr.loc)
A.current = U
A.yo = U.y - T.y
@@ -186,4 +186,4 @@ Doesn't work on other aliens/AI.*/
M.loc = loc
//Paralyse(10)
src.visible_message("\green <B>[src] hurls out the contents of their stomach!</B>")
return
return

View File

@@ -94,7 +94,8 @@ var/const/MAX_ACTIVE_TIME = 400
return
/obj/item/clothing/mask/facehugger/throw_impact(atom/hit_atom)
Attach(hit_atom)
if(prob(25))
Attach(hit_atom)
return
/obj/item/clothing/mask/facehugger/proc/Attach(M as mob)
@@ -134,17 +135,21 @@ var/const/MAX_ACTIVE_TIME = 400
for(var/mob/O in viewers(target, null))
O.show_message("\red \b [src] tears [W] off of [target]'s face!", 1)
loc = target
layer = 20
target.wear_mask = src
target.update_inv_wear_mask()
if(prob(75))
loc = target
layer = 20
target.wear_mask = src
target.update_inv_wear_mask()
GoIdle() //so it doesn't jump the people that tear it off
GoIdle() //so it doesn't jump the people that tear it off
if(!sterile) target.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
if(!sterile) target.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME))
Impregnate(target)
spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME))
Impregnate(target)
else
for(var/mob/O in viewers(target, null))
O.show_message("\red \b [src] misses [target]'s face!", 1)
return

View File

@@ -192,7 +192,7 @@
swap_hand()
/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
if (src.health > 0)
if (src.health > config.health_threshold_crit)
if(src == M && istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
src.visible_message( \

View File

@@ -11,6 +11,14 @@
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
for(var/datum/organ/external/E in src.organs)
if(istype(E, /datum/organ/external/chest))
continue
// Only make the limb drop if it's not too damaged
if(prob(100 - E.get_damage()))
// Override the current limb status and don't cause an explosion
E.droplimb(1,1)
flick("gibbed-h", animation)
hgibs(loc, viruses, dna)
@@ -100,4 +108,4 @@
/mob/living/carbon/human/proc/Drain()
ChangeToHusk()
mutations |= NOCLONE
return
return

View File

@@ -38,17 +38,19 @@
apply_damage(damage, BRUTE, affecting, armor_block)
if (damage >= 25)
visible_message("\red <B>[M] has wounded [src]!</B>")
apply_effect(4, WEAKEN, armor_block)
apply_effect(rand(0.5,3), WEAKEN, armor_block)
updatehealth()
if("disarm")
var/randn = rand(1, 100)
if (randn <= 80)
playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
Weaken(10)
visible_message(text("\red <B>[] has tackled down []!</B>", M, src))
if (prob(80)) playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
Weaken(rand(0.5,3))
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1)
if (prob(25))
M.Weaken(rand(2,4))
else
if (randn <= 99)
if (prob(80))
playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1)
drop_item()
visible_message(text("\red <B>[] disarmed []!</B>", M, src))

View File

@@ -113,7 +113,12 @@ emp_act
/mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
if(!I || !user) return 0
var/datum/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting))
var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, src)
if(!target_zone)
visible_message("\red <B>[user] misses [src] with \the [I]!")
return
var/datum/organ/external/affecting = get_organ(target_zone)
if (!affecting)
return
if(affecting.status & ORGAN_DESTROYED)
@@ -148,21 +153,8 @@ emp_act
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(get_dist(H, src) > 1) //people with TK won't get smeared with blood
if(H.wear_suit)
H.wear_suit.add_blood(src)
H.update_inv_wear_suit(0) //updates mob overlays to show the new blood (no refresh)
else if(H.w_uniform)
H.w_uniform.add_blood(src)
H.update_inv_w_uniform(0) //updates mob overlays to show the new blood (no refresh)
if (H.gloves)
H.gloves.add_blood(H)
H.gloves:transfer_blood = 2
H.gloves:bloody_hands_mob = H
else
H.add_blood(H)
H.bloody_hands = 2
H.bloody_hands_mob = H
H.update_inv_gloves() //updates on-mob overlays for bloody hands and/or bloody gloves
H.bloody_body(src)
H.bloody_hands(src)
switch(hit_area)
if("head")//Harder to score a stun but if you do it lasts a bit longer
@@ -189,10 +181,23 @@ emp_act
visible_message("\red <B>[src] has been knocked down!</B>")
if(bloody)
bloody_body(src)
if(wear_suit)
wear_suit.add_blood(src)
update_inv_wear_suit(0)
if(w_uniform)
w_uniform.add_blood(src)
update_inv_w_uniform(0)
/mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2)
if (gloves)
gloves.add_blood(source)
gloves:transfer_blood = amount
gloves:bloody_hands_mob = source
else
add_blood(source)
bloody_hands = amount
bloody_hands_mob = source
update_inv_gloves() //updates on-mob overlays for bloody hands and/or bloody gloves
/mob/living/carbon/human/proc/bloody_body(var/mob/living/source)
if(wear_suit)
wear_suit.add_blood(source)
update_inv_wear_suit(0)
if(w_uniform)
w_uniform.add_blood(source)
update_inv_w_uniform(0)

View File

@@ -304,7 +304,7 @@
/obj/effect/equip_e/human/process()
if (item)
item.add_fingerprint(source)
if (!item)
else
switch(place)
if("mask")
if (!( target.wear_mask ))
@@ -533,7 +533,7 @@ It can still be worn/put on as normal.
if (target.legcuffed)
strip_item = target.legcuffed
if("CPR")
if ((target.health >= -99.0 && target.health <= 0))
if ((target.health > config.health_threshold_dead && target.health < config.health_threshold_crit))
var/suff = min(target.getOxyLoss(), 7)
target.adjustOxyLoss(-suff)
target.updatehealth()

View File

@@ -21,6 +21,11 @@
#define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point
#define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point
var/const/BLOOD_VOLUME_SAFE = 501
var/const/BLOOD_VOLUME_OKAY = 336
var/const/BLOOD_VOLUME_BAD = 224
var/const/BLOOD_VOLUME_SURVIVE = 122
/mob/living/carbon/human
var/oxygen_alert = 0
var/toxins_alert = 0
@@ -153,11 +158,11 @@
switch(blood_volume)
if(501 to 10000)
if(BLOOD_VOLUME_SAFE to 10000)
if(pale)
pale = 0
update_body()
if(336 to 500)
if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
if(!pale)
pale = 1
update_body()
@@ -169,7 +174,7 @@
if(oxyloss < 20)
// hint that they're getting close to suffocation
oxyloss += 3
if(224 to 335)
if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
if(!pale)
pale = 1
update_body()
@@ -181,19 +186,25 @@
Paralyse(rand(1,3))
var/word = pick("dizzy","woosey","faint")
src << "\red You feel extremely [word]"
if(122 to 244)
if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
oxyloss += 5
toxloss += 5
if(prob(15))
var/word = pick("dizzy","woosey","faint")
src << "\red You feel extremely [word]"
if(0 to 122)
if(0 to BLOOD_VOLUME_SURVIVE)
// There currently is a strange bug here. If the mob is not below -100 health
// when death() is called, apparently they will be just fine, and this way it'll
// spam deathgasp. Adjusting toxloss ensures the mob will stay dead.
toxloss += 300 // just to be safe!
death()
// Without enough blood you slowly go hungry.
if(blood_volume < BLOOD_VOLUME_SAFE)
if(nutrition >= 300)
nutrition -= 10
else if(nutrition >= 200)
nutrition -= 3
var/blood_max = 0
for(var/datum/organ/external/temp in organs)
@@ -814,6 +825,10 @@
else
pressure_alert = -1
else if(pressure <= 50)
var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
if(adjusted_pressure < 50)
adjustBruteLoss( (50 - adjusted_pressure) / 50 )
return
/*

View File

@@ -1,4 +1,4 @@
#define SAY_MINIMUM_PRESSURE 10
var/list/department_radio_keys = list(
":r" = "right hand",
":l" = "left hand",
@@ -295,6 +295,13 @@ var/list/department_radio_keys = list(
italics = 1
/////SPECIAL HEADSETS END
var/datum/gas_mixture/environment = loc.return_air()
if(environment)
var/pressure = environment.return_pressure()
if (pressure < SAY_MINIMUM_PRESSURE) //in space no one can hear you scream
italics = 1
message_range = 1
var/list/listening
listening = get_mobs_in_view(message_range, src)

View File

@@ -128,20 +128,15 @@ var/list/ai_list = list()
//if(icon_state == initial(icon_state))
var/icontype = ""
var/list/icons = list("Monochrome", "Blue", "Inverted", "Firewall", "Green", "Red", "Static")
if (src.name == "B.A.N.N.E.D." && src.ckey == "spaceman96")
icons += "B.A.N.N.E.D."
var/list/icons = list("Monochrome", "Blue", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static")
if (src.name == "M00X-BC" && src.ckey == "searif")
icons += "M00X-BC"
if (src.name == "TRIBUNAL" && src.ckey == "serithi")
icons += "Tribunal"
icons += "Tribunal Malfunctioning"
if (src.name == "Skuld" && src.ckey == "ravensdale")
icons += "Skuld"
/* if(icontype == "Clown")
icon_state = "ai-clown2"*/
icontype = input("Please, select a display!", "AI", null/*, null*/) in icons
if(icontype == "Monochrome")
if(icontype == "Clown")
icon_state = "ai-clown2"
else if(icontype == "Monochrome")
icon_state = "ai-mono"
else if(icontype == "Blue")
icon_state = "ai"
@@ -155,12 +150,24 @@ var/list/ai_list = list()
icon_state = "ai-malf"
else if(icontype == "Static")
icon_state = "ai-static"
else if(icontype == "Text")
icon_state = "ai-text"
else if(icontype == "Smiley")
icon_state = "ai-smiley"
else if(icontype == "Matrix")
icon_state = "ai-matrix"
else if(icontype == "Angry")
icon_state = "ai-angryface"
else if(icontype == "Dorf")
icon_state = "ai-dorf"
else if(icontype == "Bliss")
icon_state = "ai-bliss"
else if(icontype == "M00X-BC")
icon_state = "ai-searif"
else if(icontype == "Tribunal")
icon_state = "ai-tribunal"
else if(icontype == "Tribunal Malfunctioning")
icon_state = "ai-tribunal-malf"
else if(icontype == "Triumvirate")
icon_state = "ai-triumvirate"
else if(icontype == "Triumvirate Static")
icon_state = "ai-triumvirate-malf"
else if(icontype == "Skuld")
icon_state = "ai-ravensdale"
//else

View File

@@ -163,6 +163,53 @@ proc/hasorgans(A)
if(prob(probability * 0.75)) return zone
return "chest"
// Emulates targetting a specific body part, and miss chances
// May return null if missed
// miss_chance_mod may be negative.
/proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0)
zone = check_zone(zone)
// you can only miss if your target is standing and not restrained
if(!target.buckled && !target.lying)
var/miss_chance = max(10 + miss_chance_mod, 0)
switch(zone)
if("head")
miss_chance = 40
if("l_leg")
miss_chance = 20
if("r_leg")
miss_chance = 20
if("l_arm")
miss_chance = 20
if("r_arm")
miss_chance = 20
if("l_hand")
miss_chance = 50
if("r_hand")
miss_chance = 50
if("l_foot")
miss_chance = 50
if("r_foot")
miss_chance = 50
if(prob(miss_chance))
if(prob(70))
return null
else
var/t = rand(1, 10)
switch(t)
if(1) return "head"
if(2) return "l_arm"
if(3) return "r_arm"
if(4) return "chest"
if(5) return "l_foot"
if(6) return "r_foot"
if(7) return "l_hand"
if(8) return "r_hand"
if(9) return "l_leg"
if(10) return "r_leg"
return zone
/proc/stars(n, pr)
if (pr == null)

View File

@@ -374,7 +374,11 @@
dat += "Choose from the following open positions:<br>"
for(var/datum/job/job in job_master.occupations)
if(job && IsJobAvailable(job.title))
dat += "<a href='byond://?src=\ref[src];SelectedJob=[job.title]'>[job.title] ([job.current_positions])</a><br>"
var/active = 0
// Only players with the job assigned and AFK for less than 10 minutes count as active
for(var/mob/M in player_list) if(M.mind && M.client && M.mind.assigned_job == job && M.client.inactivity <= 10 * 60 * 10)
active++
dat += "<a href='byond://?src=\ref[src];SelectedJob=[job.title]'>[job.title] ([job.current_positions]) (Active: [active])</a><br>"
dat += "</center>"
src << browse(dat, "window=latechoices;size=300x640;can_close=1")

View File

@@ -12,6 +12,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
"pAI candidate" = 1, // -- TLE // 7
"cultist" = IS_MODE_COMPILED("cult"), // 8
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
"space ninja" = "true", // 10
)
var/global/list/underwear_m = list("White", "Grey", "Green", "Blue", "Black", "Mankini", "Love-Hearts", "Black2", "Grey2", "Stripey", "Kinky", "None") //Curse whoever made male/female underwear diffrent colours
@@ -28,6 +29,7 @@ var/const/BE_ALIEN =(1<<6)
var/const/BE_PAI =(1<<7)
var/const/BE_CULTIST =(1<<8)
var/const/BE_MONKEY =(1<<9)
var/const/BE_SPACENINJA=(1<<10)
var/const/MAX_SAVE_SLOTS = 10
@@ -236,8 +238,8 @@ datum/preferences
dat += "<a href=\"byond://?src=\ref[user];preference=slotname;task=input\">Rename slot</a> - "
dat += "<a href=\"byond://?src=\ref[user];preference=reload\">Reload slot</a>"
//column 1
dat += "</center><hr><table><tr><td width='310px'>"
//COLUMN 1
dat += "</center><hr><table><tr><td width='285px'>"
dat += "<b>Name:</b> "
dat += "<a href=\"byond://?src=\ref[user];preference=name;task=input\"><b>[real_name]</b></a> "
@@ -263,41 +265,68 @@ datum/preferences
dat += "[(sound_adminhelp)?"On":"Off"] <a href='byond://?src=\ref[user];preference=hear_adminhelps'>toggle</a><br>"
if(config.allow_admin_ooccolor && check_rights(R_FUN,0))
dat += "<br><b>OOC</b><br>"
dat += "<a href='byond://?src=\ref[user];preference=ooccolor;task=input'>Change color</a> <font face=\"fixedsys\" size=\"3\" color=\"[ooccolor]\"><table style='display:inline;' bgcolor=\"[ooccolor]\"><tr><td>__</td></tr></table></font><br>"
dat += "<br><a href='byond://?src=\ref[user];preference=ooccolor;task=input'><b>OOC color</b></a> <font face=\"fixedsys\" size=\"3\" color=\"[ooccolor]\"><table style='display:inline;' bgcolor=\"[ooccolor]\"><tr><td>__</td></tr></table></font><br>"
dat += "<br><b>Occupation Choices</b><br>"
dat += "\t<a href=\"byond://?src=\ref[user];preference=job;task=menu\"><b>Set Preferences</b></a><br><br>"
dat += "\t<a href=\"byond://?src=\ref[user];preference=job;task=menu\"><b>Occupation Preferences</b></a><br>"
if(jobban_isbanned(user, "Records"))
dat += "<b>You are banned from using character records.</b><br>"
else
dat += "<b><a href=\"byond://?src=\ref[user];preference=records;record=1\">Character Records</a></b><br><br>"
dat += "<b><a href=\"byond://?src=\ref[user];preference=records;record=1\">Character Records</a></b><br>"
dat += "<b>Flavor Text</b><br>"
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=input'>Change</a><br>"
dat += "\t<a href=\"byond://?src=\ref[user];preference=skills\"><b>Set Skills</b> (<i>[GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"])</i></a><br>"
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=input'><b>Set Flavor Text</b></a><br>"
if(lentext(flavor_text) <= 40)
dat += "[flavor_text]"
if(!lentext(flavor_text))
dat += "\[...\]"
else
dat += "[flavor_text]"
else
dat += "[copytext(flavor_text, 1, 37)]...<br>"
dat += "<br>"
dat += "<b>Skill Choices</b><br>"
dat += "\t<i>[GetSkillClass(used_skillpoints)]</i> ([used_skillpoints])<br>"
dat += "\t<a href=\"byond://?src=\ref[user];preference=skills\"><b>Set Skills</b></a><br><br>"
//column 2
dat += "</td><td width='310px'>" //height='300px'
dat += "<table><tr><td width=100><b>Body</b> "
dat += "(<a href=\"byond://?src=\ref[user];preference=all;task=random\">&reg;</A>)"
//antag
dat += "<br>"
if(jobban_isbanned(user, "Syndicate"))
dat += "<b>You are banned from antagonist roles.</b>"
src.be_special = 0
else
var/n = 0
for (var/i in special_roles)
if(special_roles[i]) //if mode is available on the server
if(jobban_isbanned(user, i))
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
else if(i == "pai candidate")
if(jobban_isbanned(user, "pAI"))
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
else
dat += "<b>Be [i]:</b> <a href=\"byond://?src=\ref[user];preference=be_special;num=[n]\"><b>[src.be_special&(1<<n) ? "Yes" : "No"]</b></a><br>"
n++
dat += "</td>"
//COLUMN 2
dat += "<td>"
dat += "<table><tr>"
dat += "<td width='142px'>"
dat += "<b>Body</b> (<a href=\"byond://?src=\ref[user];preference=all;task=random\">&reg;</A>)<br>"
dat += "Species: <a href='byond://?src=\ref[user];preference=species;task=input'>[species]</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='byond://?src=\ref[user];preference=s_tone;task=input'>[-s_tone + 35]/220<br></a>"
dat += "Skin Tone: <a href='byond://?src=\ref[user];preference=s_tone;task=input'>[-s_tone + 35]/220</a><br>"
dat += "<a href='byond://?src=\ref[user];preference=skin_style;task=input'>Adjust Skin</a><br>"
dat += "<a href='byond://?src=\ref[user];preference=limbs;task=input'>Adjust Limbs</a><br>"
dat += "</td>"
dat += "Limbs: <a href='byond://?src=\ref[user];preference=limbs;task=input'>Adjust Limbs</a><br>"
dat += "<td><b>Preview</b></br>"
dat += "<img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></br></td>"
dat += "</tr></table>"
//display limbs below
var/ind = 0
for(var/name in organ_data)
//world << "[ind] \ [organ_data.len]"
var/status = organ_data[name]
var/organ_name = null
switch(name)
@@ -319,11 +348,18 @@ datum/preferences
organ_name = "right hand"
if(status == "cyborg")
dat += "\tRobotical [organ_name] prothesis<br>"
if(status == "amputated")
dat += "\tAmputated [organ_name]<br>"
dat+="<br>"
++ind
if(ind > 1)
dat += ", "
dat += "\tMechanical [organ_name] prothesis"
else if(status == "amputated")
++ind
if(ind > 1)
dat += ", "
dat += "\tAmputated [organ_name]"
if(ind)
dat += "\[...\]"
dat += "<br><br>"
if(gender == MALE)
dat += "Underwear: <a href =\"byond://?src=\ref[user];preference=underwear;task=input\"><b>[underwear_m[underwear]]</b></a><br>"
@@ -332,8 +368,6 @@ datum/preferences
dat += "Backpack Type:<br><a href =\"byond://?src=\ref[user];preference=bag;task=input\"><b>[backbaglist[backbag]]</b></a><br>"
dat += "</td><td><b>Preview</b><br><img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></td></tr></table>"
dat += "<br><b>Hair</b><br>"
dat += "<a href='byond://?src=\ref[user];preference=hair;task=input'>Change Color</a> <font face=\"fixedsys\" size=\"3\" color=\"#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair, 2)]\"><table style='display:inline;' bgcolor=\"#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair)]\"><tr><td>__</td></tr></table></font><br>"
dat += "Style: <a href='byond://?src=\ref[user];preference=h_style;task=input'>[h_style]</a><br>"
@@ -345,22 +379,7 @@ datum/preferences
dat += "<br><b>Eyes</b><br>"
dat += "<a href='byond://?src=\ref[user];preference=eyes;task=input'>Change Color</a> <font face=\"fixedsys\" size=\"3\" color=\"#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes, 2)]\"><table style='display:inline;' bgcolor=\"#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes)]\"><tr><td>__</td></tr></table></font>"
dat += "<br><br>"
if(jobban_isbanned(user, "Syndicate"))
dat += "<b>You are banned from antagonist roles.</b>"
src.be_special = 0
else
var/n = 0
for (var/i in special_roles)
if(special_roles[i]) //if mode is available on the server
if(jobban_isbanned(user, i))
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
else if(i == "pai candidate")
if(jobban_isbanned(user, "pAI"))
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
else
dat += "<b>Be [i]:</b> <a href=\"byond://?src=\ref[user];preference=be_special;num=[n]\"><b>[src.be_special&(1<<n) ? "Yes" : "No"]</b></a><br>"
n++
dat += "<br>"
dat += "</td></tr></table><center>"
dat += "<hr>"
@@ -1021,6 +1040,10 @@ datum/preferences
if(second_limb)
organ_data[second_limb] = "cyborg"
if("skin_style")
var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3")
if(!skin_style_name) return
else
switch(href_list["preference"])
@@ -1231,6 +1254,7 @@ datum/preferences
C.be_alien = be_special & BE_ALIEN
C.be_pai = be_special & BE_PAI
C.be_syndicate = be_special & BE_TRAITOR
C.be_spaceninja = be_special & BE_SPACENINJA
if(isnull(src.ghost_ears)) src.ghost_ears = 1 //There were problems where the default was null before someone saved their profile.
C.ghost_ears = src.ghost_ears
C.ghost_sight = src.ghost_sight

View File

@@ -416,3 +416,29 @@
name = "Tajaran Ears"
icon_state = "tajears"
species_allowed = list("Tajaran")
//skin styles - WIP
/datum/sprite_accessory/skin
human
name = "Default human skin"
icon = "human"
human_tatt01
name = "Tatt01 human skin"
icon = "human_tattoo1"
tajaran
name = "Default tajaran skin"
icon = "tajaran"
species_allowed = list("Tajaran")
soghun
name = "Default soghun skin"
icon = "soghun"
species_allowed = list("Soghun")
skrell
name = "Default skrell skin"
icon = "skrell"
species_allowed = list("Skrell")

View File

@@ -518,6 +518,7 @@
if ((!( L.stat ) && L.canmove && !( L.restrained() )))
var/resisting = 0
for(var/obj/O in L.requests)
L.requests.Remove(O)
del(O)
resisting++
for(var/obj/item/weapon/grab/G in usr.grabbed_by)

View File

@@ -36,7 +36,7 @@
var/damage = 10
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here
var/nodamage = 0 //Determines if the projectile will skip any damage inflictions
var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb
var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb //Cael - bio and rad are also valid
var/projectile_type = "/obj/item/projectile"
var/kill_count = 50 //This will de-increment every process(). When 0, it will delete the projectile.
//Effects
@@ -80,7 +80,14 @@
forcedodge = 1
else
var/distance = get_dist(original,loc)
def_zone = ran_zone(def_zone, 100-(5*distance)) //Lower accurancy/longer range tradeoff.
//Lower accurancy/longer range tradeoff. Distance matters a lot here, so at
// close distance, actually RAISE the chance to hit.
def_zone = get_zone_with_miss_chance(def_zone, M, -30 + 8*distance)
if(!def_zone)
visible_message("\The [src] misses [M] narrowly.")
del(src)
return
if(silenced)
M << "\red You've been shot in the [parse_zone(def_zone)] by the [src.name]!"
else

View File

@@ -124,4 +124,12 @@
else if (istype(target, /mob/living/carbon/))
M.show_message("\blue The radiation beam dissipates harmlessly through your body.")
else
return 1
return 1
/obj/item/projectile/neurotoxin
name = "neurotoxin"
icon_state = "toxin"
damage = 5
damage_type = TOX
weaken = 5
flag = "bio"

View File

@@ -83,9 +83,9 @@ datum
on_mob_life(var/mob/living/M as mob)
if(prob(10))
M << "\red Your insides are burning!"
M.adjustToxLoss(rand(20,60))
M.adjustToxLoss(rand(20,60)*REAGENTS_EFFECT_MULTIPLIER)
else if(prob(40))
M.heal_organ_damage(5,0)
M.heal_organ_damage(5*REAGENTS_EFFECT_MULTIPLIER,0)
..()
return
@@ -305,29 +305,29 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.drowsyness = max(M.drowsyness-2, 0)
M.drowsyness = max(M.drowsyness-2*REAGENTS_EFFECT_MULTIPLIER, 0)
if(holder.has_reagent("toxin"))
holder.remove_reagent("toxin", 2)
holder.remove_reagent("toxin", 2*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("stoxin"))
holder.remove_reagent("stoxin", 2)
holder.remove_reagent("stoxin", 2*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("plasma"))
holder.remove_reagent("plasma", 1)
holder.remove_reagent("plasma", 1*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("sacid"))
holder.remove_reagent("sacid", 1)
holder.remove_reagent("sacid", 1*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("cyanide"))
holder.remove_reagent("cyanide", 1)
holder.remove_reagent("cyanide", 1*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("amatoxin"))
holder.remove_reagent("amatoxin", 2)
holder.remove_reagent("amatoxin", 2*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("chloralhydrate"))
holder.remove_reagent("chloralhydrate", 5)
holder.remove_reagent("chloralhydrate", 5*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("carpotoxin"))
holder.remove_reagent("carpotoxin", 1)
holder.remove_reagent("carpotoxin", 1*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("zombiepowder"))
holder.remove_reagent("zombiepowder", 0.5)
holder.remove_reagent("zombiepowder", 0.5*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("mindbreaker"))
holder.remove_reagent("mindbreaker", 2)
M.hallucination = max(0, M.hallucination - 5)
M.adjustToxLoss(-2)
holder.remove_reagent("mindbreaker", 2*REAGENTS_EFFECT_MULTIPLIER)
M.hallucination = max(0, M.hallucination - 5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -340,7 +340,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1.5)
M.adjustToxLoss(1.5*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -353,8 +353,8 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(3)
M.adjustOxyLoss(3)
M.adjustToxLoss(3*REAGENTS_EFFECT_MULTIPLIER)
M.adjustOxyLoss(3*REAGENTS_EFFECT_MULTIPLIER)
M.sleeping += 1
..()
return
@@ -439,7 +439,7 @@ datum
if(!M) M = holder.my_atom
if(M.losebreath >= 10)
M.losebreath = max(10, M.losebreath-5)
holder.remove_reagent(src.id, 0.2)
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
return
space_drugs
@@ -456,7 +456,7 @@ datum
if(M.canmove)
if(prob(10)) step(M, pick(cardinal))
if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
holder.remove_reagent(src.id, 0.2)
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
return
serotrotium
@@ -469,7 +469,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(ishuman(M))
if(prob(7)) M.emote(pick("twitch","drool","moan","gasp"))
holder.remove_reagent(src.id, 0.1)
holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM)
return
/* silicate
@@ -585,7 +585,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.take_organ_damage(1, 0)
M.take_organ_damage(1*REAGENTS_EFFECT_MULTIPLIER, 0)
..()
return
@@ -598,7 +598,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -639,7 +639,7 @@ datum
color = "#808080" // rgb: 128, 128, 128
on_mob_life(var/mob/living/M as mob)
M.nutrition += 1
M.nutrition += 1*REAGENTS_EFFECT_MULTIPLIER
..()
return
@@ -652,8 +652,8 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1)
M.take_organ_damage(0, 1)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
M.take_organ_damage(0, 1*REAGENTS_EFFECT_MULTIPLIER)
..()
return
reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
@@ -725,7 +725,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -907,7 +907,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
if(!M) M = holder.my_atom
M.apply_effect(10,IRRADIATE,0)
M.apply_effect(10*REAGENTS_EFFECT_MULTIPLIER,IRRADIATE,0)
..()
return
@@ -935,7 +935,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.nutrition += nutriment_factor
M.nutrition += nutriment_factor*REAGENTS_EFFECT_MULTIPLIER
..()
return
@@ -1004,7 +1004,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.apply_effect(1,IRRADIATE,0)
M.apply_effect(1*REAGENTS_EFFECT_MULTIPLIER,IRRADIATE,0)
..()
return
@@ -1055,7 +1055,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -1157,8 +1157,8 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(holder.has_reagent("inaprovaline"))
holder.remove_reagent("inaprovaline", 2)
M.adjustToxLoss(1)
holder.remove_reagent("inaprovaline", 2*REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
..()
return
reaction_obj(var/obj/O, var/volume)
@@ -1211,7 +1211,7 @@ datum
M.make_dizzy(1)
if(!M.confused) M.confused = 1
M.confused = max(M.confused, 20)
holder.remove_reagent(src.id, 0.2)
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
..()
return
@@ -1227,7 +1227,7 @@ datum
return
if(!M) M = holder.my_atom
if(prob(33))
M.take_organ_damage(1, 0)
M.take_organ_damage(1*REAGENTS_EFFECT_MULTIPLIER, 0)
M.adjustOxyLoss(3)
if(prob(20)) M.emote("gasp")
..()
@@ -1244,7 +1244,7 @@ datum
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
M.heal_organ_damage(0,2)
M.heal_organ_damage(0,2*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -1259,7 +1259,7 @@ datum
if(M.stat == 2.0) //THE GUY IS **DEAD**! BEREFT OF ALL LIFE HE RESTS IN PEACE etc etc. He does NOT metabolise shit anymore, god DAMN
return
if(!M) M = holder.my_atom
M.heal_organ_damage(0,3)
M.heal_organ_damage(0,3*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -1274,9 +1274,9 @@ datum
if(M.stat == 2.0)
return //See above, down and around. --Agouri
if(!M) M = holder.my_atom
M.adjustOxyLoss(-2)
M.adjustOxyLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
if(holder.has_reagent("lexorin"))
holder.remove_reagent("lexorin", 2)
holder.remove_reagent("lexorin", 2*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -1293,7 +1293,7 @@ datum
if(!M) M = holder.my_atom
M.adjustOxyLoss(-M.getOxyLoss())
if(holder.has_reagent("lexorin"))
holder.remove_reagent("lexorin", 2)
holder.remove_reagent("lexorin", 2*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -1308,10 +1308,10 @@ datum
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
if(M.getOxyLoss() && prob(40)) M.adjustOxyLoss(-1)
if(M.getBruteLoss() && prob(40)) M.heal_organ_damage(1,0)
if(M.getFireLoss() && prob(40)) M.heal_organ_damage(0,1)
if(M.getToxLoss() && prob(40)) M.adjustToxLoss(-1)
if(M.getOxyLoss() && prob(40)) M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
if(M.getBruteLoss() && prob(40)) M.heal_organ_damage(1*REAGENTS_EFFECT_MULTIPLIER,0)
if(M.getFireLoss() && prob(40)) M.heal_organ_damage(0,1*REAGENTS_EFFECT_MULTIPLIER)
if(M.getToxLoss() && prob(40)) M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -1394,7 +1394,7 @@ datum
M.AdjustWeakened(-1)
if(holder.has_reagent("mindbreaker"))
holder.remove_reagent("mindbreaker", 5)
M.hallucination = max(0, M.hallucination - 10)
M.hallucination = max(0, M.hallucination - 10*REAGENTS_EFFECT_MULTIPLIER)
if(prob(60)) M.adjustToxLoss(1)
..()
return
@@ -1410,7 +1410,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.jitteriness = max(M.jitteriness-5,0)
if(prob(80)) M.adjustBrainLoss(1)
if(prob(80)) M.adjustBrainLoss(1*REAGENTS_EFFECT_MULTIPLIER)
if(prob(50)) M.drowsyness = max(M.drowsyness, 3)
if(prob(10)) M.emote("drool")
..()
@@ -1425,7 +1425,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.radiation = max(M.radiation-3,0)
M.radiation = max(M.radiation-3*REAGENTS_EFFECT_MULTIPLIER,0)
..()
return
@@ -1440,10 +1440,10 @@ datum
if(M.stat == 2.0)
return //See above, down and around. --Agouri
if(!M) M = holder.my_atom
M.radiation = max(M.radiation-7,0)
M.adjustToxLoss(-1)
M.radiation = max(M.radiation-7*REAGENTS_EFFECT_MULTIPLIER,0)
M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
if(prob(15))
M.take_organ_damage(1, 0)
M.take_organ_damage(1*REAGENTS_EFFECT_MULTIPLIER, 0)
..()
return
@@ -1456,7 +1456,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustBrainLoss(-3)
M.adjustBrainLoss(-3*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -1488,7 +1488,7 @@ datum
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
M.heal_organ_damage(2,0)
M.heal_organ_damage(2*REAGENTS_EFFECT_MULTIPLIER,0)
..()
return
@@ -1502,7 +1502,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(5)) M.emote(pick("twitch","blink_r","shiver"))
holder.remove_reagent(src.id, 0.2)
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
..()
return
@@ -1549,7 +1549,6 @@ datum
color = "#C8A5DC" // rgb: 200, 165, 220
on_mob_life(var/mob/living/M as mob)//no more mr. panacea
holder.remove_reagent(src.id, 0.2)
..()
return
@@ -1562,7 +1561,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(2)
M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -1575,8 +1574,8 @@ datum
on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
M.status_flags |= FAKEDEATH
M.adjustOxyLoss(0.5)
M.adjustToxLoss(0.5)
M.adjustOxyLoss(0.5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(0.5*REAGENTS_EFFECT_MULTIPLIER)
M.Weaken(10)
M.silent = max(M.silent, 10)
M.tod = worldtime2text()
@@ -1710,7 +1709,7 @@ datum
M.sleeping += 1
if(61 to INFINITY)
M.sleeping += 1
M.adjustToxLoss(data - 50)
M.adjustToxLoss((data - 50) * REAGENTS_EFFECT_MULTIPLIER)
..()
return
@@ -2144,6 +2143,7 @@ datum
if(!M) M = holder.my_atom
M.druggy = max(M.druggy, 30)
if(!data) data = 1
switch(data)
if(1 to 5)
if (!M.stuttering) M.stuttering = 1

View File

@@ -237,6 +237,14 @@
..()
reagents.add_reagent("wine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
name = "Jailbreaker Verte"
desc = "Twenty-fourth century Green Fairy, one sip of this and you just know you're gonna have a good time."
icon_state = "absinthebottle"
New()
..()
reagents.add_reagent("absinthe", 100)
//////////////////////////JUICES AND STUFF ///////////////////////
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice

View File

@@ -259,6 +259,16 @@
reagents.add_reagent("sugar", 3)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/candy/donor
name = "Donor Candy"
desc = "A little treat for blood donors."
trash = /obj/item/trash/candy
New()
..()
reagents.add_reagent("nutriment", 10)
reagents.add_reagent("sugar", 3)
bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/candy_corn
name = "candy corn"
desc = "It's a handful of candy corn. Can be stored in a detective's hat."

View File

@@ -6,8 +6,9 @@
name = "hypospray"
desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
icon = 'icons/obj/syringe.dmi'
item_state = "hypo"
item_state = "hypo1"
icon_state = "hypo"
var/original_icon_state = "hypo"
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = null
@@ -54,6 +55,7 @@
name = "autoinjector"
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
icon_state = "autoinjector"
original_icon_state = "autoinjector"
item_state = "autoinjector"
amount_per_transfer_from_this = 5
volume = 5
@@ -72,9 +74,9 @@
/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
if(reagents.total_volume > 0)
icon_state = "[initial(icon_state)]1"
icon_state = "[original_icon_state]1"
else
icon_state = "[initial(icon_state)]0"
icon_state = "[original_icon_state]0"
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine()
..()

View File

@@ -176,3 +176,22 @@
New()
..()
reagents.add_reagent("bicaridine", 30)
/obj/item/weapon/reagent_containers/pill/happy
name = "Happy pill"
desc = "Happy happy joy joy!"
icon_state = "pill18"
New()
..()
reagents.add_reagent("space_drugs", 15)
reagents.add_reagent("sugar", 15)
/obj/item/weapon/reagent_containers/pill/zoom
name = "Zoom pill"
desc = "Zoooom!"
icon_state = "pill18"
New()
..()
reagents.add_reagent("impedrezene", 10)
reagents.add_reagent("synaptizine", 5)
reagents.add_reagent("hyperzine", 5)