Porting much of Aryn's stuff

-Sounds
-Detective Work
-Hallucinations
Tweaked server air alarm
Tweaked gibs
Working on de-derping surgery
Ported some BS12 stuff (stunned radio and adminwho)
Player's mind datum now holds their antagonist preferences.
This commit is contained in:
SkyMarshal
2012-01-29 17:33:59 -07:00
parent 10b3bdce7e
commit d2eff85c17
68 changed files with 391 additions and 74 deletions

View File

@@ -95,6 +95,7 @@
#define FILE_DIR "code/modules/clothing/uniforms" #define FILE_DIR "code/modules/clothing/uniforms"
#define FILE_DIR "code/modules/critters" #define FILE_DIR "code/modules/critters"
#define FILE_DIR "code/modules/critters/hivebots" #define FILE_DIR "code/modules/critters/hivebots"
#define FILE_DIR "code/modules/flufftext"
#define FILE_DIR "code/modules/food" #define FILE_DIR "code/modules/food"
#define FILE_DIR "code/modules/mining" #define FILE_DIR "code/modules/mining"
#define FILE_DIR "code/modules/mob" #define FILE_DIR "code/modules/mob"
@@ -658,7 +659,6 @@
#include "code\game\objects\items\weapons\cigs_lighters.dm" #include "code\game\objects\items\weapons\cigs_lighters.dm"
#include "code\game\objects\items\weapons\clown_items.dm" #include "code\game\objects\items\weapons\clown_items.dm"
#include "code\game\objects\items\weapons\dna_injector.dm" #include "code\game\objects\items\weapons\dna_injector.dm"
#include "code\game\objects\items\weapons\evidence.dm"
#include "code\game\objects\items\weapons\explosives.dm" #include "code\game\objects\items\weapons\explosives.dm"
#include "code\game\objects\items\weapons\flamethrower.dm" #include "code\game\objects\items\weapons\flamethrower.dm"
#include "code\game\objects\items\weapons\grenades.dm" #include "code\game\objects\items\weapons\grenades.dm"
@@ -795,6 +795,8 @@
#include "code\modules\critters\critter_defenses.dm" #include "code\modules\critters\critter_defenses.dm"
#include "code\modules\critters\critters.dm" #include "code\modules\critters\critters.dm"
#include "code\modules\critters\hivebots\hivebot.dm" #include "code\modules\critters\hivebots\hivebot.dm"
#include "code\modules\flufftext\Dreaming.dm"
#include "code\modules\flufftext\TextFilters.dm"
#include "code\modules\food\food.dm" #include "code\modules\food\food.dm"
#include "code\modules\food\recipes_microwave.dm" #include "code\modules\food\recipes_microwave.dm"
#include "code\modules\mining\datum_processing_recipe.dm" #include "code\modules\mining\datum_processing_recipe.dm"
@@ -1027,6 +1029,7 @@
#include "code\WorkInProgress\Ported\ZeroPoint\LaserComputer.dm" #include "code\WorkInProgress\Ported\ZeroPoint\LaserComputer.dm"
#include "code\WorkInProgress\Ported\ZeroPoint\SuperMatter.dm" #include "code\WorkInProgress\Ported\ZeroPoint\SuperMatter.dm"
#include "code\WorkInProgress\SkyMarshal\coatrack.dm" #include "code\WorkInProgress\SkyMarshal\coatrack.dm"
#include "code\WorkInProgress\SkyMarshal\evidence.dm"
#include "code\WorkInProgress\SkyMarshal\traitoritems.dm" #include "code\WorkInProgress\SkyMarshal\traitoritems.dm"
#include "code\WorkInProgress\SkyMarshal\wardrobes.dm" #include "code\WorkInProgress\SkyMarshal\wardrobes.dm"
#include "code\WorkInProgress\Tastyfish\Eliza.dm" #include "code\WorkInProgress\Tastyfish\Eliza.dm"

View File

@@ -33,13 +33,8 @@
if(istype(O.loc, /obj/item/weapon/storage)) if(istype(O.loc, /obj/item/weapon/storage))
user << "This is broke as hell." user << "This is broke as hell."
return return
/* var/obj/item/weapon/storage/U = O.loc var/obj/item/weapon/storage/U = O.loc
w_class = O.w_class U.contents.Remove(O)
for(var/i, i < U.contents.len, i++)
if(O in U.contents[i])
U.contents[i] = null
O.loc = src
continue*/
user << "You put the [O] inside the [src]." user << "You put the [O] inside the [src]."
icon_state = "evidence" icon_state = "evidence"
src.underlays += O src.underlays += O

View File

@@ -244,10 +244,12 @@ mob/var
obj/item/clothing/gloves/var obj/item/clothing/gloves/var
transfer_blood = 0 transfer_blood = 0
mob/living/carbon/human/bloody_hands_mob mob/living/carbon/human/bloody_hands_mob
/*
obj/decal/cleanable/blood/var/track_amt = 3
obj/effect/decal/cleanable/blood/var
track_amt = 3
mob/blood_owner
turf/Exited(mob/living/carbon/human/M) turf/Exited(mob/living/carbon/human/M)
if(istype(M,/mob/living)) if(istype(M,/mob/living))
if(!istype(src, /turf/space)) // Bloody tracks code starts here if(!istype(src, /turf/space)) // Bloody tracks code starts here
@@ -271,9 +273,9 @@ turf/Entered(mob/living/carbon/human/M)
M.shoes.track_blood-- M.shoes.track_blood--
src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name) src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name)
for(var/obj/decal/cleanable/blood/B in src) for(var/obj/effect/decal/cleanable/blood/B in src)
if(B.track_amt <= 0) continue if(B.track_amt <= 0) continue
if(B.type != /obj/decal/cleanable/blood/tracks && B.type != /obj/decal/cleanable/blood/drip) if(B.type != /obj/effect/decal/cleanable/blood/tracks)
if(istype(M,/mob/living/carbon/human)) if(istype(M,/mob/living/carbon/human))
if(M.shoes) if(M.shoes)
M.shoes.add_blood(B.blood_owner) M.shoes.add_blood(B.blood_owner)
@@ -282,13 +284,13 @@ turf/Entered(mob/living/carbon/human/M)
else else
M.add_blood(B.blood_owner) M.add_blood(B.blood_owner)
M.track_blood_mob = B.blood_owner M.track_blood_mob = B.blood_owner
M.track_blood = max(M.track_blood,8) M.track_blood = max(M.track_blood,rand(4,8))
B.track_amt-- B.track_amt--
break break
. = ..() . = ..()
turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info) turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info)
for(var/obj/decal/cleanable/blood/tracks/T in src) for(var/obj/effect/decal/cleanable/blood/tracks/T in src)
if(T.dir == d) if(T.dir == d)
if((leaving && T.icon_state == "steps2") || (!leaving && T.icon_state == "steps1")) if((leaving && T.icon_state == "steps2") || (!leaving && T.icon_state == "steps1"))
T.desc = "These bloody footprints appear to have been made by [info]." T.desc = "These bloody footprints appear to have been made by [info]."
@@ -296,11 +298,12 @@ turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info)
T.blood_DNA = M.dna.unique_enzymes T.blood_DNA = M.dna.unique_enzymes
T.blood_type = M.b_type T.blood_type = M.b_type
return return
var/obj/decal/cleanable/blood/tracks/this = new(src) var/obj/effect/decal/cleanable/blood/tracks/this = new(src)
this.icon = 'footprints.dmi'
if(leaving) if(leaving)
this.icon_state = "steps2" this.icon_state = "blood2"
else else
this.icon_state = "steps1" this.icon_state = "blood1"
this.dir = d this.dir = d
this.desc = "These bloody footprints appear to have been made by [info]." this.desc = "These bloody footprints appear to have been made by [info]."
if(istype(M,/mob/living/carbon/human)) if(istype(M,/mob/living/carbon/human))
@@ -333,5 +336,4 @@ proc/blood_incompatible(donor,receiver)
if("O") if("O")
if(donor_antigen != "O") return 1 if(donor_antigen != "O") return 1
//AB is a universal receiver. //AB is a universal receiver.
return 0 return 0
*/

View File

@@ -164,7 +164,7 @@
var/logged_in = 0 var/logged_in = 0
var/underwear = 1//Human var/underwear = 1//Human
var/be_syndicate = 0//This really should be a client variable. var/be_syndicate = 0 //This really should be a client variable. EDIT: Hijacked for my own nefarious purposes! --SkyMarshal
var/be_random_name = 0 var/be_random_name = 0
var/const/blindness = 1//Carbon var/const/blindness = 1//Carbon
var/const/deafness = 2//Carbon var/const/deafness = 2//Carbon

View File

@@ -52,6 +52,7 @@
blood_DNA = null blood_DNA = null
blood_type = null blood_type = null
var/datum/disease2/disease/virus2 = null var/datum/disease2/disease/virus2 = null
var/OriginalMob = null
Del() Del()
for(var/datum/disease/D in viruses) for(var/datum/disease/D in viruses)

View File

@@ -4,6 +4,7 @@
var/struc_enzymes = null var/struc_enzymes = null
var/uni_identity = null var/uni_identity = null
var/original_name = "Unknown" var/original_name = "Unknown"
var/b_type
/datum/dna/proc/check_integrity() /datum/dna/proc/check_integrity()
//Lazy. //Lazy.
@@ -68,6 +69,7 @@
unique_enzymes = md5(character.real_name) unique_enzymes = md5(character.real_name)
original_name = character.real_name original_name = character.real_name
b_type = character.b_type
reg_dna[unique_enzymes] = character.real_name reg_dna[unique_enzymes] = character.real_name
/////////////////////////// DNA DATUM /////////////////////////// DNA DATUM

View File

@@ -79,7 +79,7 @@
playercount += 1 playercount += 1
if (player.client && player.mind && player.mind.special_role && player.stat != 2) if (player.client && player.mind && player.mind.special_role && player.stat != 2)
traitorcount += 1 traitorcount += 1
if (player.client && player.mind && !player.mind.special_role && player.stat != 2 && player.be_syndicate && !jobban_isbanned(player, "Syndicate")) if (player.client && player.mind && !player.mind.special_role && player.stat != 2 && (player.be_syndicate & BE_TRAITOR) && !jobban_isbanned(player, "Syndicate"))
possible_traitors += player possible_traitors += player
//message_admins("Live Players: [playercount]") //message_admins("Live Players: [playercount]")
//message_admins("Live Traitors: [traitorcount]") //message_admins("Live Traitors: [traitorcount]")
@@ -162,7 +162,7 @@
if(emergency_shuttle.departed) if(emergency_shuttle.departed)
return return
//message_admins("Late Join Check") //message_admins("Late Join Check")
if(character.be_syndicate == 1 && !jobban_isbanned(character, "Syndicate")) if((character.be_syndicate & BE_TRAITOR) && !jobban_isbanned(character, "Syndicate"))
//message_admins("Late Joiner has Be Syndicate") //message_admins("Late Joiner has Be Syndicate")
//message_admins("Checking number of players") //message_admins("Checking number of players")
var/playercount = 0 var/playercount = 0

View File

@@ -137,6 +137,10 @@
/datum/game_mode/proc/greet_traitor(var/datum/mind/traitor) /datum/game_mode/proc/greet_traitor(var/datum/mind/traitor)
traitor.current << "<B><font size=3 color=red>You are the traitor.</font></B>" traitor.current << "<B><font size=3 color=red>You are the traitor.</font></B>"
traitor.current << "\red <B>REPEAT</B>"
traitor.current << "\red <B>You are the traitor.</B>"
spawn(rand(600,1800)) //Strumpetplaya - Just another friendly reminder so people don't forget they're the traitor.
traitor.current << "\red <B>In case you missed it the first time - YOU ARE THE TRAITOR!</B>"
var/obj_count = 1 var/obj_count = 1
for(var/datum/objective/objective in traitor.objectives) for(var/datum/objective/objective in traitor.objectives)
traitor.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]" traitor.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
@@ -175,6 +179,8 @@
else else
killer << "Unfortunately, the Syndicate did not provide you with a code response." killer << "Unfortunately, the Syndicate did not provide you with a code response."
killer << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe." killer << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
spawn(30)
killer << sound('AISyndiHack.ogg',volume=50)
//End code phrase. //End code phrase.
@@ -318,4 +324,6 @@
else else
traitor_mob << "Unfortunately, the Syndicate did not provide you with a code response." traitor_mob << "Unfortunately, the Syndicate did not provide you with a code response."
traitor_mob << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe." traitor_mob << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
spawn(30)
traitor_mob << sound('syndicate intro.ogg',volume=50)
//End code phrase. //End code phrase.

View File

@@ -89,8 +89,8 @@
"carbon dioxide" = new/datum/tlv(-1.0, -1.0, 5, 10), // Partial pressure, kpa "carbon dioxide" = new/datum/tlv(-1.0, -1.0, 5, 10), // Partial pressure, kpa
"plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa "plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa
"other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa "other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa
"pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.40,ONE_ATMOSPHERE*1.60), /* kpa */ "pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.20,ONE_ATMOSPHERE*0.35,ONE_ATMOSPHERE*0.8,ONE_ATMOSPHERE*0.9), /* kpa */
"temperature" = new/datum/tlv(40, 60, 100, 120), // K "temperature" = new/datum/tlv(40, 60, 140, 160), // K
) )
//all air alarms in area are connected via magic //all air alarms in area are connected via magic

View File

@@ -65,8 +65,12 @@ MASS SPECTROMETER
icon_state = "forensic0" icon_state = "forensic0"
var/amount = 20.0 var/amount = 20.0
var/printing = 0.0 var/printing = 0.0
var/fibers_index = 0
var/list/stored_fibers = null var/list/stored_fibers = null
var/stored_name = null var/list/stored_name = null
var/prints_index = 0
var/list/stored_prints = null
var/list/prints_name = null
w_class = 3.0 w_class = 3.0
item_state = "electronic" item_state = "electronic"
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
@@ -106,7 +110,7 @@ MASS SPECTROMETER
/obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob) /obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
if (!ishuman(M)) if (!ishuman(M))
user << "\red [M] is not humas and cannot have the fingerprints." user << "\red [M] is not human and cannot have the fingerprints."
return 0 return 0
if (( !( istype(M.dna, /datum/dna) ) || M.gloves) ) if (( !( istype(M.dna, /datum/dna) ) || M.gloves) )
user << "\blue No fingerprints found on [M]" user << "\blue No fingerprints found on [M]"
@@ -145,26 +149,37 @@ MASS SPECTROMETER
user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]" user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]"
else else
user << "\blue No blood found on [A]." user << "\blue No blood found on [A]."
if (!( A.fingerprints )) if (!( A.fingerprints ) && !(A.suit_fibers))
user << "\blue Unable to locate any fingerprints on [A]!" user << "\blue Unable to locate any fingerprints or fibers on [A]!"
return 0 return 0
if(!( A.fingerprints ))
user << "\blue Unable to locate any fingerprints on [A]!"
else else
if ((src.amount < 1 && src.printing)) var/list/L = params2list(A.fingerprints)
user << "\blue Fingerprints found. Need more cards to print." stored_prints[prints_index] = L
src.printing = 0 prints_name[prints_index] = A.name
src.icon_state = text("forensic[]", src.printing) user << text("\blue Isolated [L.len] fingerprints. Stored in memory.")
if (src.printing) if(!A.suit_fibers)
src.amount-- user << "\blue No Fibers/Materials Located."
var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) else
F.amount = 1 user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve."
F.fingerprints = A.fingerprints stored_fibers[fibers_index] = A.suit_fibers
F.icon_state = "fingerprint1" stored_name[fibers_index] = A.name
user << "\blue Done printing." // else
var/list/L = params2list(A.fingerprints) // if ((src.amount < 1 && src.printing))
user << text("\blue Isolated [L.len] fingerprints.") // user << "\blue Fingerprints found. Need more cards to print."
for(var/i in L) // src.printing = 0
user << text("\blue \t [i]") // src.icon_state = text("forensic[]", src.printing)
//Foreach goto(186) // if (src.printing)
// src.amount--
// var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc )
// F.amount = 1
// F.fingerprints = A.fingerprints
// F.icon_state = "fingerprint1"
// user << "\blue Done printing."
// for(var/i in L)
// user << text("\blue \t [i]")
// //Foreach goto(186)
return return

View File

@@ -1,7 +1,7 @@
//HUMANS //HUMANS
/proc/gibs(atom/location, var/list/viruses) /proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA)
new /obj/effect/gibspawner/human(get_turf(location),viruses) new /obj/effect/gibspawner/human(get_turf(location),viruses,MobDNA)
/proc/xgibs(atom/location, var/list/viruses) /proc/xgibs(atom/location, var/list/viruses)
new /obj/effect/gibspawner/xeno(get_turf(location),viruses) new /obj/effect/gibspawner/xeno(get_turf(location),viruses)
@@ -16,13 +16,13 @@
var/list/gibamounts = list() var/list/gibamounts = list()
var/list/gibdirections = list() //of lists var/list/gibdirections = list() //of lists
New(location, var/list/viruses) New(location, var/list/viruses, var/datum/dna/MobDNA)
..() ..()
if(istype(loc,/turf)) //basically if a badmin spawns it if(istype(loc,/turf)) //basically if a badmin spawns it
Gib(loc,viruses) Gib(loc,viruses,MobDNA)
proc/Gib(atom/location, var/list/viruses = list()) proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null)
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
world << "\red Gib list length mismatch!" world << "\red Gib list length mismatch!"
return return
@@ -50,6 +50,12 @@
gib.viruses += viruus gib.viruses += viruus
viruus.holder = gib viruus.holder = gib
viruus.spread_type = CONTACT_FEET viruus.spread_type = CONTACT_FEET
if(MobDNA)
gib.blood_DNA = MobDNA.unique_enzymes
if(MobDNA.b_type)
gib.blood_type = MobDNA.b_type
if(MobDNA.original_name != "Unknown")
gib.OriginalMob = MobDNA.original_name
var/list/directions = gibdirections[i] var/list/directions = gibdirections[i]
if(directions.len) if(directions.len)
gib.streak(directions) gib.streak(directions)

View File

@@ -575,6 +575,8 @@ CIRCULAR SAW
S.open = 0 S.open = 0
if(S.display_name == "chest" && H:embryo_op_stage == 1.0) if(S.display_name == "chest" && H:embryo_op_stage == 1.0)
H:embryo_op_stage = 0.0 H:embryo_op_stage = 0.0
if(S.display_name == "groin" && H:appendix_op_stage == 1.0)
H:appendix_op_stage = 0.0
H.updatehealth() H.updatehealth()
H.UpdateDamageIcon() H.UpdateDamageIcon()
@@ -630,13 +632,13 @@ CIRCULAR SAW
if(user.zone_sel.selecting == "groin") if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human)) if(istype(M, /mob/living/carbon/human))
switch(M:appendix_op_stage) switch(M:appendix_op_stage)
if(0.0) // if(0.0)
if(M != user) // if(M != user)
for(var/mob/O in (viewers(M) - user - M)) // for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is beginning to have \his abdomen cut open with [src] by [user].", 1) // O.show_message("\red [M] is beginning to have \his abdomen cut open with [src] by [user].", 1)
M << "\red [user] begins to cut open your abdomen with [src]!" // M << "\red [user] begins to cut open your abdomen with [src]!"
user << "\red You cut [M]'s abdomen open with [src]!" // user << "\red You cut [M]'s abdomen open with [src]!"
M:appendix_op_stage = 1.0 // M:appendix_op_stage = 1.0
if(3.0) if(3.0)
if(M != user) if(M != user)
for(var/mob/O in (viewers(M) - user - M)) for(var/mob/O in (viewers(M) - user - M))
@@ -857,6 +859,8 @@ CIRCULAR SAW
S.bleeding = 1 S.bleeding = 1
if(S.display_name == "chest") if(S.display_name == "chest")
H:embryo_op_stage = 1.0 H:embryo_op_stage = 1.0
if(S.display_name == "groin")
H:appendix_op_stage = 1.0
H.updatehealth() H.updatehealth()
H.UpdateDamageIcon() H.UpdateDamageIcon()

View File

@@ -33,7 +33,9 @@
if(usr.client.holder) if(usr.client.holder)
usr << "[M.key] is a [M.client.holder.rank][M.client.stealth ? " <i>(as [M.client.fakekey])</i>" : ""]" usr << "[M.key] is a [M.client.holder.rank][M.client.stealth ? " <i>(as [M.client.fakekey])</i>" : ""]"
else if(!M.client.stealth && (M.client.holder.level != -3)) else if(!M.client.stealth && (M.client.holder.level != -3))
usr << "\t[M.client]" usr << "\t[pick(nobles)] [M.client]"
var/list/nobles = list("Baron","Bookkeeper","Captain of the Guard","Chief medical dwarf","Count","Dungeon master","Duke","General","Mayor","Outpost liaison","Sheriff","Champion")
/client/verb/active_players() /client/verb/active_players()
set category = "OOC" set category = "OOC"

View File

@@ -1487,12 +1487,7 @@
return return
if("schoolgirl") if("schoolgirl")
if (src.rank in list("Badmin", "Game Admin", "Game Master")) if (src.rank in list("Badmin", "Game Admin", "Game Master"))
for(var/obj/item/clothing/under/W in world) alert("You cannot perform this action. It is unbelievably stupid.")
W.icon_state = "schoolgirl"
W.item_state = "w_suit"
W.color = "schoolgirl"
message_admins("[key_name_admin(usr)] activated Japanese Animes mode")
world << sound('animes.ogg')
else else
alert("You cannot perform this action. You must be of a higher administrative rank!") alert("You cannot perform this action. You must be of a higher administrative rank!")
return return

View File

@@ -0,0 +1,25 @@
mob/living/carbon/proc/dream()
dreaming = 1
var/list/dreams = list(
"an ID card","a bottle","a familiar face","a crewmember","a toolbox","a security officer","the captain",
"voices from all around","deep space","a doctor","the engine","a traitor","an ally","darkness",
"light","a scientist","a monkey","a catastrophe","a loved one","a gun","warmth","freezing","the sun",
"a hat","the Luna","a ruined station","a planet","plasma","air","the medical bay","the bridge","blinking lights",
"a blue light","an abandoned laboratory","Nanotrasen","The Syndicate","blood","healing","power","respect",
"riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying"
)
for(var/i = rand(1,4),i > 0, i--)
var/dream_image = pick(dreams)
dreams -= dream_image
src << "\blue <i>... [dream_image] ...</i>"
sleep(rand(40,70))
if(paralysis <= 0)
dreaming = 0
return 0
dreaming = 0
return 1
mob/living/carbon/proc/handle_dreams()
if(prob(5) && !dreaming) dream()
mob/living/carbon/var/dreaming = 0

View File

@@ -0,0 +1,175 @@
/*
Ideas for the subtle effects of hallucination:
Light up oxygen/plasma indicators (done)
Cause health to look critical/dead, even when standing (done)
Characters silently watching you
Brief flashes of fire/space/bombs/c4/dangerous shit (done)
Items that are rare/traitorous/don't exist appearing in your inventory slots (done)
Strange audio (should be rare) (done)
Gunshots/explosions/opening doors/less rare audio (done)
*/
mob/living/carbon/var
image/halimage
obj/halitem
hal_screwyhud = 0 //1 - critical, 2 - dead, 3 - oxygen indicator, 4 - toxin indicator
handling_hal = 0
mob/living/carbon/proc/handle_hallucinations()
if(handling_hal) return
handling_hal = 1
while(hallucination > 20)
sleep(rand(200,500))
var/halpick = rand(1,100)
switch(halpick)
if(0 to 15)
//Screwy HUD
//src << "Screwy HUD"
hal_screwyhud = pick(1,2,3,3,4,4)
spawn(rand(100,250))
hal_screwyhud = 0
if(16 to 25)
//Strange items
//src << "Traitor Items"
halitem = new
var/list/slots_free = list("1,1","3,1")
if(l_hand) slots_free -= "1,1"
if(r_hand) slots_free -= "3,1"
if(istype(src,/mob/living/carbon/human))
var/mob/living/carbon/human/H = src
if(!H.belt) slots_free += "3,0"
if(!H.l_store) slots_free += "4,0"
if(!H.r_store) slots_free += "5,0"
if(slots_free.len)
halitem.screen_loc = pick(slots_free)
halitem.layer = 50
switch(rand(1,6))
if(1) //revolver
halitem.icon = 'gun.dmi'
halitem.icon_state = "revolver"
halitem.name = "Revolver"
if(2) //c4
halitem.icon = 'syndieweapons.dmi'
halitem.icon_state = "c4small_0"
halitem.name = "Mysterious Package"
if(prob(25))
halitem.icon_state = "c4small_1"
if(3) //sword
halitem.icon = 'weapons.dmi'
halitem.icon_state = "sword1"
halitem.name = "Sword"
if(4) //stun baton
halitem.icon = 'weapons.dmi'
halitem.icon_state = "stunbaton"
halitem.name = "Stun Baton"
if(5) //emag
halitem.icon = 'card.dmi'
halitem.icon_state = "emag"
halitem.name = "Cryptographic Sequencer"
if(6) //flashbang
halitem.icon = 'grenade.dmi'
halitem.icon_state = "flashbang1"
halitem.name = "Flashbang"
if(client) client.screen += halitem
spawn(rand(100,250))
del halitem
if(26 to 40)
//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)
switch(rand(1,3))
if(1)
//src << "Space"
halimage = image('space.dmi',target,"[rand(1,25)]",TURF_LAYER)
if(2)
//src << "Fire"
halimage = image('fire.dmi',target,"1",TURF_LAYER)
if(3)
//src << "C4"
halimage = image('syndieweapons.dmi',target,"c4small_1",OBJ_LAYER+0.01)
if(client) client.images += halimage
spawn(rand(10,50)) //Only seen for a brief moment.
if(client) client.images -= halimage
halimage = null
if(41 to 65)
//Strange audio
src << "Strange Audio"
switch(rand(1,12))
if(1) src << 'airlock.ogg'
if(2)
if(prob(50))src << 'Explosion1.ogg'
else src << 'Explosion2.ogg'
if(3) src << 'explosionfar.ogg'
if(4) src << 'Glassbr1.ogg'
if(5) src << 'Glassbr2.ogg'
if(6) src << 'Glassbr3.ogg'
if(7) src << 'twobeep.ogg'
if(8) src << 'windowdoor.ogg'
if(9)
//To make it more realistic, I added two gunshots (enough to kill)
src << 'Gunshot.ogg'
spawn(rand(10,30))
src << 'Gunshot.ogg'
if(10) src << 'smash.ogg'
if(11)
//Same as above, but with tasers.
src << 'Taser.ogg'
spawn(rand(10,30))
src << 'Taser.ogg'
//Rare audio
if(12)
switch(rand(1,4))
if(1) src << 'ghost.ogg'
if(2) src << 'ghost2.ogg'
if(3) src << 'Heart Beat.ogg'
if(4) src << 'screech.ogg'
handling_hal = 0
/*obj/machinery/proc/mockpanel(list/buttons,start_txt,end_txt,list/mid_txts)
if(!mocktxt)
mocktxt = ""
var/possible_txt = list("Launch Escape Pods","Self-Destruct Sequence","\[Swipe ID\]","De-Monkify",\
"Reticulate Splines","Plasma","Open Valve","Lockdown","Nerf Airflow","Kill Traitor","Nihilism",\
"OBJECTION!","Arrest Stephen Bowman","Engage Anti-Trenna Defenses","Increase Captain IQ","Retrieve Arms",\
"Play Charades","Oxygen","Inject BeAcOs","Ninja Lizards","Limit Break","Build Sentry")
if(mid_txts)
while(mid_txts.len)
var/mid_txt = pick(mid_txts)
mocktxt += mid_txt
mid_txts -= mid_txt
while(buttons.len)
var/button = pick(buttons)
var/button_txt = pick(possible_txt)
mocktxt += "<a href='?src=\ref[src];[button]'>[button_txt]</a><br>"
buttons -= button
possible_txt -= button_txt
return start_txt + mocktxt + end_txt + "</TT></BODY></HTML>"
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*/

View File

@@ -0,0 +1,81 @@
proc/Intoxicated(phrase)
phrase = html_decode(phrase)
var
leng=lentext(phrase)
counter=lentext(phrase)
newphrase="";newletter=""
while(counter>=1)
newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
if(rand(1,3)==3)
if(lowertext(newletter)=="o") newletter="u"
if(lowertext(newletter)=="s") newletter="ch"
if(lowertext(newletter)=="a") newletter="ah"
if(lowertext(newletter)=="c") newletter="k"
switch(rand(1,7))
if(1,3,5,8) newletter="[lowertext(newletter)]"
if(2,4,6,15) newletter="[uppertext(newletter)]"
if(7) newletter+="'"
//if(9,10) newletter="<b>[newletter]</b>"
//if(11,12) newletter="<big>[newletter]</big>"
//if(13) newletter="<small>[newletter]</small>"
newphrase+="[newletter]";counter-=1
return newphrase
proc/NewStutter(phrase,stunned)
phrase = html_decode(phrase)
var/list/split_phrase = dd_text2list(phrase," ") //Split it up into words.
var/list/unstuttered_words = split_phrase.Copy()
var/i = rand(1,3)
if(stunned) i = split_phrase.len
for(,i > 0,i--) //Pick a few words to stutter on.
if (!unstuttered_words.len)
break
var/word = pick(unstuttered_words)
unstuttered_words -= word //Remove from unstuttered words so we don't stutter it again.
var/index = split_phrase.Find(word) //Find the word in the split phrase so we can replace it.
//Search for dipthongs (two letters that make one sound.)
var/first_sound = copytext(word,1,3)
var/first_letter = copytext(word,1,2)
if(lowertext(first_sound) in list("ch","th","sh"))
first_letter = first_sound
//Repeat the first letter to create a stutter.
var/rnum = rand(1,3)
switch(rnum)
if(1)
word = "[first_letter]-[word]"
if(2)
word = "[first_letter]-[first_letter]-[word]"
if(3)
word = "[first_letter]-[word]"
split_phrase[index] = word
return sanitize(dd_list2text(split_phrase," "))
proc/Stagger(mob/M,d) //Technically not a filter, but it relates to drunkenness.
step(M, pick(d,turn(d,90),turn(d,-90)))
proc/Ellipsis(original_msg, chance = 50)
if(chance <= 0) return "..."
if(chance >= 100) return original_msg
var/list
words = dd_text2list(original_msg," ")
new_words = list()
var/new_msg = ""
for(var/w in words)
if(prob(chance))
new_words += "..."
else
new_words += w
new_msg = dd_list2text(new_words," ")
return new_msg

View File

@@ -61,6 +61,7 @@
/mob/living/carbon/human/dummy /mob/living/carbon/human/dummy
real_name = "Test Dummy" real_name = "Test Dummy"
nodamage = 1 nodamage = 1
universal_speak = 1

View File

@@ -253,7 +253,7 @@
var/datum/gas_mixture/environment = loc.return_air() var/datum/gas_mixture/environment = loc.return_air()
var/datum/air_group/breath var/datum/air_group/breath
// HACK NEED CHANGING LATER // HACK NEED CHANGING LATER
if(health < (config.health_threshold_dead + 50)) //PEOPLE ARE NOT DYING, DAMMIT if(health < config.health_threshold_dead)
losebreath++ losebreath++
if(losebreath>0 && prob(90)) //Suffocating so do not take a breath if(losebreath>0 && prob(90)) //Suffocating so do not take a breath
@@ -630,7 +630,7 @@
apply_damage(0.4*discomfort, BURN, "r_arm") apply_damage(0.4*discomfort, BURN, "r_arm")
handle_chemicals_in_body() handle_chemicals_in_body()
if(reagents) reagents.metabolize(src) if(reagents && stat != 2) reagents.metabolize(src)
if(mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist if(mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
@@ -755,6 +755,7 @@
lying = 1 lying = 1
stat = 0 stat = 0
if (paralysis > 0) if (paralysis > 0)
handle_dreams()
AdjustParalysis(-1) AdjustParalysis(-1)
blinded = 1 blinded = 1
lying = 1 lying = 1

View File

@@ -1,4 +1,4 @@
/mob/living/carbon/var/traumatic_shock = 0 /mob/living/var/traumatic_shock = 0
/mob/living/carbon/var/shock_stage = 0 /mob/living/carbon/var/shock_stage = 0
// proc to find out in how much pain the mob is at the moment // proc to find out in how much pain the mob is at the moment

View File

@@ -136,7 +136,7 @@
if( !message_mode && (disease_symptoms & DISEASE_WHISPER)) if( !message_mode && (disease_symptoms & DISEASE_WHISPER))
message_mode = "whisper" message_mode = "whisper"
if(src.stunned > 0) if(src.stunned > 0 && (!(traumatic_shock > 61) && prob(50)))
message_mode = "" //Stunned people shouldn't be able to physically turn on their radio/hold down the button to speak into it message_mode = "" //Stunned people shouldn't be able to physically turn on their radio/hold down the button to speak into it

View File

@@ -793,19 +793,19 @@
spawn() spawn()
if(key) if(key)
if(istype(src, /mob/living/silicon)) if(istype(src, /mob/living/silicon))
robogibs(loc, viruses) robogibs(loc, viruses, name)
else if (istype(src, /mob/living/carbon/alien)) else if (istype(src, /mob/living/carbon/alien))
xgibs(loc, viruses) xgibs(loc, viruses, name)
else else
gibs(loc, viruses) gibs(loc, viruses, name, dna)
else else
if(istype(src, /mob/living/silicon)) if(istype(src, /mob/living/silicon))
robogibs(loc, viruses) robogibs(loc, viruses)
else if(istype(src, /mob/living/carbon/alien)) else if(istype(src, /mob/living/carbon/alien))
xgibs(loc, viruses) xgibs(loc, viruses, name)
else else
gibs(loc, viruses) gibs(loc, viruses, name, dna)
sleep(15) sleep(15)
for(var/obj/item/I in src.contents) for(var/obj/item/I in src.contents)
I.loc = get_turf(src) I.loc = get_turf(src)

View File

@@ -258,7 +258,7 @@
job_master.EquipRank(character, rank, 1) job_master.EquipRank(character, rank, 1)
EquipCustomItems(character) EquipCustomItems(character)
character.loc = pick(latejoin) character.loc = pick(latejoin)
character.be_syndicate = src.preferences.be_special & BE_TRAITOR character.be_syndicate = src.preferences.be_special
ticker.mode.latespawn(character) ticker.mode.latespawn(character)
AnnounceArrival(character, rank) AnnounceArrival(character, rank)

View File

@@ -41,7 +41,7 @@ SQL_ENABLED 0
## set to 0 to disable that mode ## set to 0 to disable that mode
## Cult mode is in alpha test, enable at your own risk ## Cult mode is in alpha test, enable at your own risk
PROBABILITY EXTENDED 0 PROBABILITY EXTENDED 0
PROBABILITY TRAITOR 4 PROBABILITY TRAITOR 3
PROBABILITY METEOR 0 PROBABILITY METEOR 0
PROBABILITY MALFUNCTION 0 PROBABILITY MALFUNCTION 0
PROBABILITY BLOB 1 PROBABILITY BLOB 1
@@ -54,6 +54,7 @@ PROBABILITY CHANGELING 0
PROBABILITY CULT 1 PROBABILITY CULT 1
PROBABILITY MONKEY 0 PROBABILITY MONKEY 0
PROBABILITY TRAITORCHAN 0 PROBABILITY TRAITORCHAN 0
PROBABILITY EXTEND-A-TRAITORMONGOUS 3
## if amount of traitors scales or not ## if amount of traitors scales or not
TRAITOR_SCALING TRAITOR_SCALING

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
icons/obj/syndieweapons.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 895 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sound/mecha/critnano.ogg Normal file

Binary file not shown.

BIN
sound/mecha/hydraulic.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sound/mecha/lowpower.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sound/mecha/mechdrill.ogg Normal file

Binary file not shown.

BIN
sound/mecha/nominalnano.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
sound/mecha/powerup.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sound/voice/AISyndiHack.ogg Normal file

Binary file not shown.

Binary file not shown.