Finished up the last parts of my fingerprints work. Added a rag which lets you smudge away prints, and sinks do the same.

Added hallucinations properly.
Added LSD (with hallucinations.)
Remapped slightly.
This commit is contained in:
SkyMarshal
2012-02-02 00:35:48 -07:00
parent 1b02334ddc
commit 2ed57e0cc6
22 changed files with 1733 additions and 1367 deletions
+1 -1
View File
@@ -683,7 +683,6 @@
#include "code\game\objects\items\weapons\table_rack_parts.dm"
#include "code\game\objects\items\weapons\teleportation.dm"
#include "code\game\objects\items\weapons\tiles_wires.dm"
#include "code\game\objects\items\weapons\toilets.dm"
#include "code\game\objects\items\weapons\tools.dm"
#include "code\game\objects\items\weapons\twohanded.dm"
#include "code\game\objects\items\weapons\implants\implant.dm"
@@ -799,6 +798,7 @@
#include "code\modules\critters\critters.dm"
#include "code\modules\critters\hivebots\hivebot.dm"
#include "code\modules\flufftext\Dreaming.dm"
#include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\flufftext\TextFilters.dm"
#include "code\modules\food\food.dm"
#include "code\modules\food\recipes_microwave.dm"
+31 -15
View File
@@ -631,20 +631,21 @@ turf/Entered(mob/living/carbon/human/M)
M.shoes.track_blood--
src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name)
for(var/obj/effect/decal/cleanable/blood/B in src)
if(B.track_amt <= 0) continue
if(B.type != /obj/effect/decal/cleanable/blood/tracks)
if(istype(M,/mob/living/carbon/human))
if(M.shoes)
M.shoes.add_blood(B.blood_owner)
M.shoes.track_blood_mob = B.blood_owner
M.shoes.track_blood = max(M.shoes.track_blood,8)
else
M.add_blood(B.blood_owner)
M.track_blood_mob = B.blood_owner
M.track_blood = max(M.track_blood,rand(4,8))
B.track_amt--
break
//REMOVED until we improve it.
// for(var/obj/effect/decal/cleanable/blood/B in src)
// if(B.track_amt <= 0) continue
// if(B.type != /obj/effect/decal/cleanable/blood/tracks)
// if(istype(M,/mob/living/carbon/human))
// if(M.shoes)
// M.shoes.add_blood(B.blood_owner)
// M.shoes.track_blood_mob = B.blood_owner
// M.shoes.track_blood = max(M.shoes.track_blood,8)
// else
// M.add_blood(B.blood_owner)
// M.track_blood_mob = B.blood_owner
// M.track_blood = max(M.track_blood,rand(4,8))
// B.track_amt--
// break
. = ..()
turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info)
@@ -694,4 +695,19 @@ proc/blood_incompatible(donor,receiver)
if("O")
if(donor_antigen != "O") return 1
//AB is a universal receiver.
return 0
return 0
/obj/item/weapon/rag
name = "damp rag"
desc = "For cleaning up messes, I suppose."
w_class = 1
icon = 'toy.dmi'
icon_state = "rag"
afterattack(atom/A as obj|turf|area, mob/user as mob)
if(istype(A))
user.visible_message("[user] starts to wipe the prints off of [A] with \the [src]!")
if(do_after(user,30))
user.visible_message("[user] finishes wiping away the evidence!")
A.clean_blood()
return
+12
View File
@@ -322,6 +322,12 @@ proc/airborne_can_reach(turf/source, turf/target)
activate(var/mob/living/carbon/mob,var/multiplier)
mob.gib()
/datum/disease2/effect/greater/hallucinations
name = "Hallucinational Syndrome"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.hallucination += 25
/datum/disease2/effect/greater/radian
name = "Radian's syndrome"
stage = 4
@@ -452,6 +458,12 @@ proc/airborne_can_reach(turf/source, turf/target)
mob.suiciding = 0
// lesser syndromes, partly just copypastes
/datum/disease2/effect/lesser/hallucinations
name = "Hallucinational Syndrome"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.hallucination += 5
/datum/disease2/effect/lesser/mind
name = "Lazy mind syndrome"
stage = 3
+5
View File
@@ -51,4 +51,9 @@
if(prob(20))
affected_mob.adjustToxLoss(1)
affected_mob.updatehealth()
if(prob(25))
affected_mob << "\red The world around you feels surreal"
if(prob(50))
affected_mob.hallucination += 100
shake_camera(affected_mob,20)
return
+4
View File
@@ -247,6 +247,10 @@ the mob is also allowed to move without any sort of restriction. For instance, i
// var/obj/effect/organstructure/organStructure = null //for dem organs
var/list/organs = list( ) //List of organs.
//Yes, yes I did. --SkyMarshal
var/list/atom/hallucinations = list()
var/halloss = 0
var/hallucination = 0
/mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1)
// world << "Contract_disease called by [src] with virus [virus]"
+1 -1
View File
@@ -1519,7 +1519,7 @@ proc/get_opposite(var/checkdir)
if(!text || !character)
return 0
var/count = 0
for(var/i = 1, i < lentext(text), i++)
for(var/i = 1, i <= lentext(text), i++)
var/a = copytext(text,i,i+1)
if(a == character)
count++
+29 -1
View File
@@ -107,7 +107,16 @@
prints = L[num2text(2)]
break
else
src.fingerprints[i] = "1=" + L[num2text(1)] + "&2=" + stars(L[num2text(2)], rand(80,90))
var/test_print = stars(L[num2text(2)], rand(80,90))
if(stringpercent(test_print) == 32)
if(src.fingerprints.len == 1)
src.fingerprints = list()
else
for(var/j = (i + 1), j < (src.fingerprints.len), j++)
src.fingerprints[j-1] = src.fingerprints[j]
src.fingerprints.len--
else
src.fingerprints[i] = "1=" + L[num2text(1)] + "&2=" + test_print
else
var/turf/T = get_turf(src)
for (var/mob/N in world)
@@ -245,6 +254,25 @@
source2.blood_DNA = null
var/icon/I = new /icon(source2.icon_old, source2.icon_state)
source2.icon = I
if(src.fingerprints && src.fingerprints.len)
var/done = 0
while(!done)
done = 1
for(var/i = 1, i < (src.fingerprints.len + 1), i++)
var/list/prints = params2list(src.fingerprints[i])
var/test_print = prints["2"]
var/new_print = stars(test_print, rand(1,20))
if(stringpercent(new_print) == 32)
if(src.fingerprints.len == 1)
src.fingerprints = list()
else
for(var/j = (i + 1), j < (src.fingerprints.len), j++)
src.fingerprints[j-1] = src.fingerprints[j]
src.fingerprints.len--
done = 0
break
else
src.fingerprints[i] = "1=" + prints["1"] + "&2=" + new_print
return
/atom/MouseDrop(atom/over_object as mob|obj|turf|area)
+3 -3
View File
@@ -101,7 +101,7 @@
var/datum/objective/assassinate/kill_objective = new
kill_objective.owner = traitor
kill_objective.find_target()
for(var/j, j < traitor.objectives.len, j++)
for(var/j, j < (traitor.objectives.len + 1), j++)
var/compare = istype(traitor.objectives[j],/datum/objective/assassinate)
if(compare)
var/datum/objective/assassinate/test = traitor.objectives[j]
@@ -129,7 +129,7 @@
var/datum/objective/protect/protect_objective = new
protect_objective.owner = traitor
protect_objective.find_target()
for(var/j, j < traitor.objectives.len, j++)
for(var/j, j < (traitor.objectives.len + 1), j++)
var/compare = istype(traitor.objectives[j],/datum/objective/assassinate)
if(compare)
var/datum/objective/assassinate/test = traitor.objectives[j]
@@ -157,7 +157,7 @@
var/datum/objective/steal/steal_objective = new
steal_objective.owner = traitor
steal_objective.find_target()
for(var/j, j < traitor.objectives.len, j++)
for(var/j, j < (traitor.objectives.len + 1), j++)
var/compare = istype(traitor.objectives[j],/datum/objective/steal)
if(compare)
var/datum/objective/steal/test = traitor.objectives[j]
+48 -2
View File
@@ -68,7 +68,8 @@
/obj/machinery/computer/cloning/New()
..()
spawn(5)
src.scanner = locate(/obj/machinery/dna_scannernew, get_step(src, scandir))
updatemodules()
/*src.scanner = locate(/obj/machinery/dna_scannernew, get_step(src, scandir))
src.pod1 = locate(/obj/machinery/clonepod, get_step(src, poddir))
src.temp = ""
@@ -80,10 +81,54 @@
src.pod1.connected = src
if (src.temp == "")
src.temp = "System ready."
src.temp = "System ready."*/
return
return
/obj/machinery/computer/cloning/proc/updatemodules()
//world << "UPDATING MODULES"
src.scanner = findscanner()//locate(/obj/machinery/dna_scannernew, get_step(src, WEST))
src.pod1 = findcloner()//locate(/obj/machinery/clonepod, get_step(src, EAST))
//world << "SEARCHING FOR MACHEIN"
//src.temp = ""
//if (isnull(src.scanner))
// src.temp += " <font color=red>SCNR-ERROR</font>"
if (!isnull(src.pod1) && !wantspod)
src.pod1.connected = src
// src.temp += " <font color=red>POD1-ERROR</font>"
//else
//if (src.temp == "")
// src.temp = "System ready."
/obj/machinery/computer/cloning/proc/findscanner()
//..()
//world << "SEARCHING FOR SCANNER"
var/obj/machinery/dna_scannernew/scannerf = null
for(dir in list(NORTH,EAST,SOUTH,WEST))
//world << "SEARCHING IN [dir]"
scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
if (!isnull(scannerf))
//world << "FOUND"
break
if(isnull(scannerf) && wantsscan)
src.temp += " <font color=red>SCNR-ERROR</font>"
return scannerf
/obj/machinery/computer/cloning/proc/findcloner()
//..()
//world << "SEARCHING FOR POD"
var/obj/machinery/clonepod/podf = null
for(dir in list(NORTH,EAST,SOUTH,WEST))
//world << "SEARCHING IN [dir]"
podf = locate(/obj/machinery/clonepod, get_step(src, dir))
if (!isnull(podf))
//world << "FOUND"
break
if(isnull(podf) && wantspod)
src.temp += " <font color=red>POD1-ERROR</font>"
return podf
/obj/machinery/computer/cloning/attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES
if (!src.diskette)
@@ -110,6 +155,7 @@
if(stat & (BROKEN|NOPOWER))
return
updatemodules()
var/dat = "<h3>Cloning System Control</h3>"
dat += "<font size=-1><a href='byond://?src=\ref[src];refresh=1'>Refresh</a></font>"
+5
View File
@@ -211,6 +211,11 @@ About the new airlock wires panel:
return
else /*if (src.justzap)*/
return
else if(user.hallucination > 50 && prob(10) && src.operating == 0)
user << "\red <B>You feel a powerful shock course through your body!</B>"
user.halloss += 10
user.stunned += 10
return
..(user)
+34 -46
View File
@@ -11,44 +11,38 @@
if(busy)
M << "\red Someone's already washing something here."
return
var/turf/location = M.loc
if(!isturf(location)) return
usr << "\blue You start washing up."
busy = 1
sleep(40)
if(do_after(M,40))
M.clean_blood()
if(istype(M, /mob/living/carbon))
var/mob/living/carbon/C = M
C.clean_blood()
/*
if(C.r_hand)
C.r_hand.clean_blood() // The hand you attack with is empty anyway, the other one should not be washed while doing this.
if(C.l_hand)
C.l_hand.clean_blood()
if(C.wear_mask)
C.wear_mask.clean_blood() //- NOPE, Washing machine -Errorage
*/
if(istype(M, /mob/living/carbon/human))
/*if(C:w_uniform)
C:w_uniform.clean_blood() //- NOPE, Washing machine -Errorage
if(C:wear_suit)
C:wear_suit.clean_blood() //- NOPE, Washing machine -Errorage
if(C:shoes)
C:shoes.clean_blood()*/ //- NOPE, Washing machine -Errorage
if(C:gloves)
C:gloves.clean_blood()
/*if(C:head)
C:head.clean_blood()*/ //- NOPE, Washing machine -Errorage
for(var/mob/V in viewers(src, null))
V.show_message(text("\blue [M] washes up using \the [src]."))
busy = 0
if(M.loc != location) return //Person has moved away from the sink
M.clean_blood()
if(istype(M, /mob/living/carbon))
var/mob/living/carbon/C = M
C.clean_blood()
/*
if(C.r_hand)
C.r_hand.clean_blood() // The hand you attack with is empty anyway, the other one should not be washed while doing this.
if(C.l_hand)
C.l_hand.clean_blood()
if(C.wear_mask)
C.wear_mask.clean_blood() //- NOPE, Washing machine -Errorage
*/
if(istype(M, /mob/living/carbon/human))
/*if(C:w_uniform)
C:w_uniform.clean_blood() //- NOPE, Washing machine -Errorage
if(C:wear_suit)
C:wear_suit.clean_blood() //- NOPE, Washing machine -Errorage
if(C:shoes)
C:shoes.clean_blood()*/ //- NOPE, Washing machine -Errorage
if(C:gloves)
C:gloves.clean_blood()
/*if(C:head)
C:head.clean_blood()*/ //- NOPE, Washing machine -Errorage
for(var/mob/V in viewers(src, null))
V.show_message(text("\blue [M] washes up using \the [src]."))
attackby(var/obj/item/O as obj, var/mob/user as mob)
if(busy)
@@ -83,27 +77,21 @@
"\red You have wet \the [O], it shocks you!")
return
var/turf/location = user.loc
if(!isturf(location)) return
var/obj/item/I = O
if(!I || !istype(I,/obj/item)) return
usr << "\blue You start washing up."
busy = 1
sleep(40)
if(do_after(user,40))
if(!I) return //Item's been destroyed while washing
O.clean_blood()
user.visible_message( \
"\blue [user] washes \a [I] using \the [src].", \
"\blue You wash \a [I] using \the [src].")
busy = 0
if(user.loc != location) return //User has moved
if(!I) return //Item's been destroyed while washing
if(user.get_active_hand() != I) return //Person has switched hands or the item in their hands
O.clean_blood()
user.visible_message( \
"\blue [user] washes \a [I] using \the [src].", \
"\blue You wash \a [I] using \the [src].")
shower
name = "Shower"
desc = "This is dumb."
+4 -7
View File
@@ -45,13 +45,10 @@ FINGERPRINT CARD
return
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
if(!src.registered)
src.registered = input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)
src.assignment = input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")
src.name = "[src.registered]'s ID Card ([src.assignment])"
user << "\blue You successfully forge the ID card."
else
..()
src.registered = input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)
src.assignment = input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")
src.name = "[src.registered]'s ID Card ([src.assignment])"
user << "\blue You successfully forge the ID card."
/obj/item/weapon/card/id/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
+3
View File
@@ -56,6 +56,9 @@
M << browse(null, "window=vote")
M.client.showvote = 0
if(winner == "none")
winner = "default"
calcwin()
if(mode == 2)
@@ -1531,6 +1531,19 @@ datum
for(var/mob/living/carbon/metroid/M in T)
M.adjustToxLoss(rand(15,30))
LSD
name = "LSD"
id = "LSD"
description = "A hallucinogen"
reagent_state = LIQUID
color = "#B31008" // rgb: 139, 166, 233
on_mob_life(var/mob/M)
if(!M) M = holder.my_atom
M:hallucination += 5
..()
return
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
nanites
@@ -417,6 +417,12 @@ datum
required_reagents = list("carpotoxin" = 5, "stoxin" = 5, "copper" = 5)
result_amount = 2
LSD
name = "LSD"
id = "LSD"
result = "LSD"
required_reagents = list("silicon" = 1, "hydrogen" = 1, "anti_toxin" = 1)
result_amount = 5
///////////////////////////////////////////////////////////////////////////////////
// foam and foam precursor
+218 -3
View File
@@ -13,15 +13,17 @@ Gunshots/explosions/opening doors/less rare audio (done)
mob/living/carbon/var
image/halimage
image/halbody
obj/halitem
hal_screwyhud = 0 //1 - critical, 2 - dead, 3 - oxygen indicator, 4 - toxin indicator
handling_hal = 0
hal_crit = 0
mob/living/carbon/proc/handle_hallucinations()
if(handling_hal) return
handling_hal = 1
while(hallucination > 20)
sleep(rand(200,500))
sleep(rand(200,500)/(hallucination/10))
var/halpick = rand(1,100)
switch(halpick)
if(0 to 15)
@@ -103,7 +105,7 @@ mob/living/carbon/proc/handle_hallucinations()
if(41 to 65)
//Strange audio
src << "Strange Audio"
//src << "Strange Audio"
switch(rand(1,12))
if(1) src << 'airlock.ogg'
if(2)
@@ -133,6 +135,30 @@ mob/living/carbon/proc/handle_hallucinations()
if(2) src << 'ghost2.ogg'
if(3) src << 'Heart Beat.ogg'
if(4) src << 'screech.ogg'
if(66 to 70)
//Flashes of danger
//src << "Danger Flash"
var/possible_points = list()
for(var/turf/simulated/floor/F in view(src,world.view))
possible_points += F
var/turf/simulated/floor/target = pick(possible_points)
halbody = image('human.dmi',target,"husk_l",TURF_LAYER)
if(client) client.images += halbody
spawn(rand(50,80)) //Only seen for a brief moment.
if(client) client.images -= halbody
halbody = null
if(71 to 80)
//Fake death
src.sleeping_willingly = 1
src.sleeping = 1
hal_crit = 1
hal_screwyhud = 1
spawn(rand(50,100))
src.sleeping_willingly = 0
src.sleeping = 0
hal_crit = 0
hal_screwyhud = 0
handling_hal = 0
@@ -172,4 +198,193 @@ proc/check_panel(mob/M)
if (istype(M, /mob/living/carbon/human) || istype(M, /mob/living/silicon/ai))
if(M.hallucination < 15)
return 1
return 0*/
return 0 */
/obj/fake_attacker
icon = null
icon_state = null
name = ""
desc = ""
density = 0
anchored = 1
opacity = 0
var/mob/living/carbon/human/my_target = null
var/weapon_name = null
var/obj/item/weap = null
var/image/stand_icon = null
var/image/currentimage = null
var/icon/base = null
var/s_tone
var/mob/living/clone = null
var/image/left
var/image/right
var/image/up
var/collapse
var/image/down
var/health = 100
attackby(var/obj/item/weapon/P as obj, mob/user as mob)
step_away(src,my_target,2)
for(var/mob/M in oviewers(world.view,my_target))
M << "\red <B>[my_target] flails around wildly.</B>"
my_target.show_message("\red <B>[src] has been attacked by [my_target] </B>", 1) //Lazy.
//src.health -= P.power
return
HasEntered(var/mob/M, somenumber)
if(M == my_target)
step_away(src,my_target,2)
if(prob(30))
for(var/mob/O in oviewers(world.view , my_target))
O << "\red <B>[my_target] stumbles around.</B>"
New()
spawn(300)
if(my_target)
my_target.hallucinations -= src
del(src)
step_away(src,my_target,2)
proccess()
proc/updateimage()
// del src.currentimage
if(src.dir == NORTH)
del src.currentimage
src.currentimage = new /image(up,src)
else if(src.dir == SOUTH)
del src.currentimage
src.currentimage = new /image(down,src)
else if(src.dir == EAST)
del src.currentimage
src.currentimage = new /image(right,src)
else if(src.dir == WEST)
del src.currentimage
src.currentimage = new /image(left,src)
my_target << currentimage
proc/proccess()
if(!my_target) spawn(5) .()
if(src.health < 0)
collapse()
return
if(get_dist(src,my_target) > 1)
src.dir = get_dir(src,my_target)
step_towards(src,my_target)
updateimage()
else
if(prob(15))
if(weapon_name)
my_target << sound(pick('genhit1.ogg', 'genhit2.ogg', 'genhit3.ogg'))
my_target.show_message("\red <B>[my_target] has been attacked with [weapon_name] by [src.name] </B>", 1)
my_target.halloss += 8
if(prob(20)) my_target.eye_blurry += 3
if(prob(33))
if(!locate(/obj/effect/overlay) in my_target.loc)
fake_blood(my_target)
else
my_target << sound(pick('punch1.ogg','punch2.ogg','punch3.ogg','punch4.ogg'))
my_target.show_message("\red <B>[src.name] has punched [my_target]!</B>", 1)
my_target.halloss += 4
if(prob(33))
if(!locate(/obj/effect/overlay) in my_target.loc)
fake_blood(my_target)
if(prob(15))
step_away(src,my_target,2)
spawn(5) .()
proc/collapse()
collapse = 1
updateimage()
/proc/fake_blood(var/mob/target)
var/obj/effect/overlay/O = new/obj/effect/overlay(target.loc)
O.name = "blood"
var/image/I = image('blood.dmi',O,"floor[rand(1,7)]",O.dir,1)
target << I
spawn(300)
del(O)
return
var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_magazine/a357,\
/obj/item/weapon/gun/energy/crossbow, /obj/item/weapon/melee/energy/sword,\
/obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/emp_kit,\
/obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
/obj/item/clothing/shoes/syndigaloshes, /obj/item/weapon/card/id/syndicate,\
/obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
/obj/item/device/chameleon, /obj/item/weapon/card/emag, /obj/item/device/hacktool,\
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
/obj/item/device/radio/headset/traitor, /obj/item/weapon/plastique,\
/obj/item/weapon/syndie/c4explosive, /obj/item/device/powersink,\
/obj/machinery/singularity_beacon/syndicate, /obj/item/weapon/storage/syndie_kit,\
/obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\
/obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\
/obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\
/obj/item/clothing/shoes/magboots, /obj/item/blueprints, /obj/item/weapon/disk/nuclear,\
/obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank)
/proc/fake_attack(var/mob/target)
var/list/possible_clones = new/list()
var/mob/living/carbon/human/clone = null
var/clone_weapon = null
for(var/mob/living/carbon/human/H in world)
if(H.stat || H.lying) continue
possible_clones += H
if(!possible_clones.len) return
clone = pick(possible_clones)
//var/obj/fake_attacker/F = new/obj/fake_attacker(outside_range(target))
var/obj/fake_attacker/F = new/obj/fake_attacker(target.loc)
if(clone.l_hand)
if(!(locate(clone.l_hand) in non_fakeattack_weapons))
clone_weapon = clone.l_hand.name
F.weap = clone.l_hand
else if (clone.r_hand)
if(!(locate(clone.r_hand) in non_fakeattack_weapons))
clone_weapon = clone.r_hand.name
F.weap = clone.r_hand
F.name = clone.name
F.my_target = target
F.weapon_name = clone_weapon
target.hallucinations += F
F.left = image(clone,dir = WEST)
F.right = image(clone,dir = EAST)
F.up = image(clone,dir = NORTH)
F.down = image(clone,dir = SOUTH)
// F.base = new /icon(clone.stand_icon)
// F.currentimage = new /image(clone)
/*
F.left = new /icon(clone.stand_icon,dir=WEST)
for(var/icon/i in clone.overlays)
F.left.Blend(i)
F.up = new /icon(clone.stand_icon,dir=NORTH)
for(var/icon/i in clone.overlays)
F.up.Blend(i)
F.down = new /icon(clone.stand_icon,dir=SOUTH)
for(var/icon/i in clone.overlays)
F.down.Blend(i)
F.right = new /icon(clone.stand_icon,dir=EAST)
for(var/icon/i in clone.overlays)
F.right.Blend(i)
target << F.up
*/
F.updateimage()
@@ -1,4 +1,10 @@
/mob/living/carbon/human/death(gibbed)
if(halloss > 0 && (!gibbed))
//hallucination = 0
halloss = 0
// And the suffocation was a hallucination (lazy)
//oxyloss = 0
return
if(src.stat == 2)
return
if(src.healths)
+26 -4
View File
@@ -150,6 +150,24 @@
handle_disabilities()
if(hallucination > 0)
if(hallucinations.len == 0 && hallucination >= 20 && health > 0)
if(prob(5))
fake_attack(src)
//for(var/atom/a in hallucinations)
// a.hallucinate(src)
if(!handling_hal && hallucination > 20)
spawn handle_hallucinations() //The not boring kind!
hallucination -= 1
//if(health < 0)
// for(var/obj/a in hallucinations)
// del a
else
halloss = 0
for(var/atom/a in hallucinations)
del a
if (disabilities & 2)
if ((prob(1) && paralysis < 1 && r_epil < 1))
src << "\red You have a seizure!"
@@ -724,7 +742,7 @@
if(sleeping)
Paralyse(3)
if (prob(10) && health) spawn(0) emote("snore")
if (prob(10) && health && !hal_crit) spawn(0) emote("snore")
if(!src.sleeping_willingly)
src.sleeping--
@@ -953,7 +971,7 @@
if (src.sleep)
if (src.sleep && !hal_crit)
src.sleep.icon_state = text("sleep[]", src.sleeping > 0 ? 1 : 0)
src.sleep.overlays = null
if(src.sleeping_willingly)
@@ -979,6 +997,10 @@
healths.icon_state = "health6"
else
healths.icon_state = "health7"
if(hal_screwyhud == 1)
healths.icon_state = "health6"
if(hal_screwyhud == 2)
healths.icon_state = "health7"
if (nutrition_icon)
switch(nutrition)
@@ -998,8 +1020,8 @@
if(resting || lying || sleeping) rest.icon_state = "rest[(resting || lying || sleeping) ? 1 : 0]"
if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
if (toxin || hal_screwyhud == 4) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
if (oxygen || hal_screwyhud == 3) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]"
//NOTE: the alerts dont reset when youre out of danger. dont blame me,
//blame the person who coded them. Temporary fix added.
+1 -1
View File
@@ -8,7 +8,7 @@
/mob/living/proc/updatehealth()
if(!src.nodamage)
src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() - src.cloneloss
src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() - src.cloneloss - src.halloss
else
src.health = 100
src.stat = 0
@@ -1,96 +1,96 @@
/*
CONTAINS:
TOILET
/obj/item/weapon/storage/toilet
name = "toilet"
w_class = 4.0
anchored = 1.0
density = 0.0
var/status = 0.0
var/clogged = 0.0
anchored = 1.0
icon = 'stationobjs.dmi'
icon_state = "toilet"
item_state = "syringe_kit"
/obj/item/weapon/storage/toilet/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (src.contents.len >= 7)
user << "The toilet is clogged!"
return
if (istype(W, /obj/item/weapon/disk/nuclear))
user << "This is far too important to flush!"
return
if (istype(W, /obj/item/weapon/storage/))
return
if (istype(W, /obj/item/weapon/grab))
playsound(src.loc, 'slosh.ogg', 50, 1)
for(var/mob/O in viewers(user, null))
O << text("\blue [] gives [] a swirlie!", user, W)
return
var/t
for(var/obj/item/weapon/O in src)
t += O.w_class
t += W.w_class
if (t > 30)
user << "You cannot fit the item inside."
return
user.u_equip(W)
W.loc = src
if ((user.client && user.s_active != src))
user.client.screen -= W
src.orient2hud(user)
W.dropped(user)
add_fingerprint(user)
for(var/mob/O in viewers(user, null))
O.show_message(text("\blue [] has put [] in []!", user, W, src), 1)
return
/obj/item/weapon/storage/toilet/MouseDrop_T(mob/M as mob, mob/user as mob)
if (!ticker)
user << "You can't help relieve anyone before the game starts."
return
if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat))
return
if (M == usr)
for(var/mob/O in viewers(user, null))
if ((O.client && !( O.blinded )))
O << text("\blue [] sits on the toilet.", user)
else
for(var/mob/O in viewers(user, null))
if ((O.client && !( O.blinded )))
O << text("\blue [] is seated on the toilet by []!", M, user)
M.anchored = 1
M.buckled = src
M.loc = src.loc
src.add_fingerprint(user)
return
/obj/item/weapon/storage/toilet/attack_hand(mob/user as mob)
for(var/mob/M in src.loc)
if (M.buckled)
if (M != user)
for(var/mob/O in viewers(user, null))
if ((O.client && !( O.blinded )))
O << text("\blue [] is zipped up by [].", M, user)
else
for(var/mob/O in viewers(user, null))
if ((O.client && !( O.blinded )))
O << text("\blue [] zips up.", M)
// world << "[M] is no longer buckled to [src]"
M.anchored = 0
M.buckled = null
src.add_fingerprint(user)
if((src.clogged < 1) || (src.contents.len < 7) || (user.loc != src.loc))
for(var/mob/O in viewers(user, null))
O << text("\blue [] flushes the toilet.", user)
src.clogged = 0
src.contents.len = 0
else if((src.clogged >= 1) || (src.contents.len >= 7) || (user.buckled != src.loc))
for(var/mob/O in viewers(user, null))
O << text("\blue The toilet is clogged!")
return
/*
CONTAINS:
TOILET
/obj/item/weapon/storage/toilet
name = "toilet"
w_class = 4.0
anchored = 1.0
density = 0.0
var/status = 0.0
var/clogged = 0.0
anchored = 1.0
icon = 'stationobjs.dmi'
icon_state = "toilet"
item_state = "syringe_kit"
/obj/item/weapon/storage/toilet/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (src.contents.len >= 7)
user << "The toilet is clogged!"
return
if (istype(W, /obj/item/weapon/disk/nuclear))
user << "This is far too important to flush!"
return
if (istype(W, /obj/item/weapon/storage/))
return
if (istype(W, /obj/item/weapon/grab))
playsound(src.loc, 'slosh.ogg', 50, 1)
for(var/mob/O in viewers(user, null))
O << text("\blue [] gives [] a swirlie!", user, W)
return
var/t
for(var/obj/item/weapon/O in src)
t += O.w_class
t += W.w_class
if (t > 30)
user << "You cannot fit the item inside."
return
user.u_equip(W)
W.loc = src
if ((user.client && user.s_active != src))
user.client.screen -= W
src.orient2hud(user)
W.dropped(user)
add_fingerprint(user)
for(var/mob/O in viewers(user, null))
O.show_message(text("\blue [] has put [] in []!", user, W, src), 1)
return
/obj/item/weapon/storage/toilet/MouseDrop_T(mob/M as mob, mob/user as mob)
if (!ticker)
user << "You can't help relieve anyone before the game starts."
return
if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat))
return
if (M == usr)
for(var/mob/O in viewers(user, null))
if ((O.client && !( O.blinded )))
O << text("\blue [] sits on the toilet.", user)
else
for(var/mob/O in viewers(user, null))
if ((O.client && !( O.blinded )))
O << text("\blue [] is seated on the toilet by []!", M, user)
M.anchored = 1
M.buckled = src
M.loc = src.loc
src.add_fingerprint(user)
return
/obj/item/weapon/storage/toilet/attack_hand(mob/user as mob)
for(var/mob/M in src.loc)
if (M.buckled)
if (M != user)
for(var/mob/O in viewers(user, null))
if ((O.client && !( O.blinded )))
O << text("\blue [] is zipped up by [].", M, user)
else
for(var/mob/O in viewers(user, null))
if ((O.client && !( O.blinded )))
O << text("\blue [] zips up.", M)
// world << "[M] is no longer buckled to [src]"
M.anchored = 0
M.buckled = null
src.add_fingerprint(user)
if((src.clogged < 1) || (src.contents.len < 7) || (user.loc != src.loc))
for(var/mob/O in viewers(user, null))
O << text("\blue [] flushes the toilet.", user)
src.clogged = 0
src.contents.len = 0
else if((src.clogged >= 1) || (src.contents.len >= 7) || (user.buckled != src.loc))
for(var/mob/O in viewers(user, null))
O << text("\blue The toilet is clogged!")
return
*/
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

+1188 -1188
View File
File diff suppressed because it is too large Load Diff