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-31 02:01:36 -07:00
parent 10b3bdce7e
commit d2eff85c17
68 changed files with 391 additions and 74 deletions
+4 -1
View File
@@ -95,6 +95,7 @@
#define FILE_DIR "code/modules/clothing/uniforms"
#define FILE_DIR "code/modules/critters"
#define FILE_DIR "code/modules/critters/hivebots"
#define FILE_DIR "code/modules/flufftext"
#define FILE_DIR "code/modules/food"
#define FILE_DIR "code/modules/mining"
#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\clown_items.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\flamethrower.dm"
#include "code\game\objects\items\weapons\grenades.dm"
@@ -795,6 +795,8 @@
#include "code\modules\critters\critter_defenses.dm"
#include "code\modules\critters\critters.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\recipes_microwave.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\SuperMatter.dm"
#include "code\WorkInProgress\SkyMarshal\coatrack.dm"
#include "code\WorkInProgress\SkyMarshal\evidence.dm"
#include "code\WorkInProgress\SkyMarshal\traitoritems.dm"
#include "code\WorkInProgress\SkyMarshal\wardrobes.dm"
#include "code\WorkInProgress\Tastyfish\Eliza.dm"
@@ -33,13 +33,8 @@
if(istype(O.loc, /obj/item/weapon/storage))
user << "This is broke as hell."
return
/* var/obj/item/weapon/storage/U = O.loc
w_class = O.w_class
for(var/i, i < U.contents.len, i++)
if(O in U.contents[i])
U.contents[i] = null
O.loc = src
continue*/
var/obj/item/weapon/storage/U = O.loc
U.contents.Remove(O)
user << "You put the [O] inside the [src]."
icon_state = "evidence"
src.underlays += O
+13 -11
View File
@@ -244,10 +244,12 @@ mob/var
obj/item/clothing/gloves/var
transfer_blood = 0
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)
if(istype(M,/mob/living))
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--
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.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(M.shoes)
M.shoes.add_blood(B.blood_owner)
@@ -282,13 +284,13 @@ turf/Entered(mob/living/carbon/human/M)
else
M.add_blood(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--
break
. = ..()
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((leaving && T.icon_state == "steps2") || (!leaving && T.icon_state == "steps1"))
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_type = M.b_type
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)
this.icon_state = "steps2"
this.icon_state = "blood2"
else
this.icon_state = "steps1"
this.icon_state = "blood1"
this.dir = d
this.desc = "These bloody footprints appear to have been made by [info]."
if(istype(M,/mob/living/carbon/human))
@@ -333,5 +336,4 @@ proc/blood_incompatible(donor,receiver)
if("O")
if(donor_antigen != "O") return 1
//AB is a universal receiver.
return 0
*/
return 0
+1 -1
View File
@@ -164,7 +164,7 @@
var/logged_in = 0
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/const/blindness = 1//Carbon
var/const/deafness = 2//Carbon
+1
View File
@@ -52,6 +52,7 @@
blood_DNA = null
blood_type = null
var/datum/disease2/disease/virus2 = null
var/OriginalMob = null
Del()
for(var/datum/disease/D in viruses)
+2
View File
@@ -4,6 +4,7 @@
var/struc_enzymes = null
var/uni_identity = null
var/original_name = "Unknown"
var/b_type
/datum/dna/proc/check_integrity()
//Lazy.
@@ -68,6 +69,7 @@
unique_enzymes = md5(character.real_name)
original_name = character.real_name
b_type = character.b_type
reg_dna[unique_enzymes] = character.real_name
/////////////////////////// DNA DATUM
@@ -79,7 +79,7 @@
playercount += 1
if (player.client && player.mind && player.mind.special_role && player.stat != 2)
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
//message_admins("Live Players: [playercount]")
//message_admins("Live Traitors: [traitorcount]")
@@ -162,7 +162,7 @@
if(emergency_shuttle.departed)
return
//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("Checking number of players")
var/playercount = 0
+8
View File
@@ -137,6 +137,10 @@
/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 << "\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
for(var/datum/objective/objective in traitor.objectives)
traitor.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
@@ -175,6 +179,8 @@
else
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."
spawn(30)
killer << sound('AISyndiHack.ogg',volume=50)
//End code phrase.
@@ -318,4 +324,6 @@
else
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."
spawn(30)
traitor_mob << sound('syndicate intro.ogg',volume=50)
//End code phrase.
+2 -2
View File
@@ -89,8 +89,8 @@
"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
"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 */
"temperature" = new/datum/tlv(40, 60, 100, 120), // K
"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, 140, 160), // K
)
//all air alarms in area are connected via magic
+35 -20
View File
@@ -65,8 +65,12 @@ MASS SPECTROMETER
icon_state = "forensic0"
var/amount = 20.0
var/printing = 0.0
var/fibers_index = 0
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
item_state = "electronic"
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)
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
if (( !( istype(M.dna, /datum/dna) ) || M.gloves) )
user << "\blue No fingerprints found on [M]"
@@ -145,26 +149,37 @@ MASS SPECTROMETER
user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]"
else
user << "\blue No blood found on [A]."
if (!( A.fingerprints ))
user << "\blue Unable to locate any fingerprints on [A]!"
if (!( A.fingerprints ) && !(A.suit_fibers))
user << "\blue Unable to locate any fingerprints or fibers on [A]!"
return 0
if(!( A.fingerprints ))
user << "\blue Unable to locate any fingerprints on [A]!"
else
if ((src.amount < 1 && src.printing))
user << "\blue Fingerprints found. Need more cards to print."
src.printing = 0
src.icon_state = text("forensic[]", src.printing)
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."
var/list/L = params2list(A.fingerprints)
user << text("\blue Isolated [L.len] fingerprints.")
for(var/i in L)
user << text("\blue \t [i]")
//Foreach goto(186)
var/list/L = params2list(A.fingerprints)
stored_prints[prints_index] = L
prints_name[prints_index] = A.name
user << text("\blue Isolated [L.len] fingerprints. Stored in memory.")
if(!A.suit_fibers)
user << "\blue No Fibers/Materials Located."
else
user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve."
stored_fibers[fibers_index] = A.suit_fibers
stored_name[fibers_index] = A.name
// else
// if ((src.amount < 1 && src.printing))
// user << "\blue Fingerprints found. Need more cards to print."
// src.printing = 0
// src.icon_state = text("forensic[]", src.printing)
// 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
+11 -5
View File
@@ -1,7 +1,7 @@
//HUMANS
/proc/gibs(atom/location, var/list/viruses)
new /obj/effect/gibspawner/human(get_turf(location),viruses)
/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA)
new /obj/effect/gibspawner/human(get_turf(location),viruses,MobDNA)
/proc/xgibs(atom/location, var/list/viruses)
new /obj/effect/gibspawner/xeno(get_turf(location),viruses)
@@ -16,13 +16,13 @@
var/list/gibamounts = list()
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
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)
world << "\red Gib list length mismatch!"
return
@@ -50,6 +50,12 @@
gib.viruses += viruus
viruus.holder = gib
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]
if(directions.len)
gib.streak(directions)
@@ -575,6 +575,8 @@ CIRCULAR SAW
S.open = 0
if(S.display_name == "chest" && H:embryo_op_stage == 1.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.UpdateDamageIcon()
@@ -630,13 +632,13 @@ CIRCULAR SAW
if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human))
switch(M:appendix_op_stage)
if(0.0)
if(M != user)
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)
M << "\red [user] begins to cut open your abdomen with [src]!"
user << "\red You cut [M]'s abdomen open with [src]!"
M:appendix_op_stage = 1.0
// if(0.0)
// if(M != user)
// 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)
// M << "\red [user] begins to cut open your abdomen with [src]!"
// user << "\red You cut [M]'s abdomen open with [src]!"
// M:appendix_op_stage = 1.0
if(3.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
@@ -857,6 +859,8 @@ CIRCULAR SAW
S.bleeding = 1
if(S.display_name == "chest")
H:embryo_op_stage = 1.0
if(S.display_name == "groin")
H:appendix_op_stage = 1.0
H.updatehealth()
H.UpdateDamageIcon()
+3 -1
View File
@@ -33,7 +33,9 @@
if(usr.client.holder)
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))
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()
set category = "OOC"
+1 -6
View File
@@ -1487,12 +1487,7 @@
return
if("schoolgirl")
if (src.rank in list("Badmin", "Game Admin", "Game Master"))
for(var/obj/item/clothing/under/W in world)
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')
alert("You cannot perform this action. It is unbelievably stupid.")
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
return
+25
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
+175
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*/
+81
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
@@ -61,6 +61,7 @@
/mob/living/carbon/human/dummy
real_name = "Test Dummy"
nodamage = 1
universal_speak = 1
+3 -2
View File
@@ -253,7 +253,7 @@
var/datum/gas_mixture/environment = loc.return_air()
var/datum/air_group/breath
// HACK NEED CHANGING LATER
if(health < (config.health_threshold_dead + 50)) //PEOPLE ARE NOT DYING, DAMMIT
if(health < config.health_threshold_dead)
losebreath++
if(losebreath>0 && prob(90)) //Suffocating so do not take a breath
@@ -630,7 +630,7 @@
apply_damage(0.4*discomfort, BURN, "r_arm")
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
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
@@ -755,6 +755,7 @@
lying = 1
stat = 0
if (paralysis > 0)
handle_dreams()
AdjustParalysis(-1)
blinded = 1
lying = 1
+1 -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
// proc to find out in how much pain the mob is at the moment
+1 -1
View File
@@ -136,7 +136,7 @@
if( !message_mode && (disease_symptoms & DISEASE_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
+5 -5
View File
@@ -793,19 +793,19 @@
spawn()
if(key)
if(istype(src, /mob/living/silicon))
robogibs(loc, viruses)
robogibs(loc, viruses, name)
else if (istype(src, /mob/living/carbon/alien))
xgibs(loc, viruses)
xgibs(loc, viruses, name)
else
gibs(loc, viruses)
gibs(loc, viruses, name, dna)
else
if(istype(src, /mob/living/silicon))
robogibs(loc, viruses)
else if(istype(src, /mob/living/carbon/alien))
xgibs(loc, viruses)
xgibs(loc, viruses, name)
else
gibs(loc, viruses)
gibs(loc, viruses, name, dna)
sleep(15)
for(var/obj/item/I in src.contents)
I.loc = get_turf(src)
+1 -1
View File
@@ -258,7 +258,7 @@
job_master.EquipRank(character, rank, 1)
EquipCustomItems(character)
character.loc = pick(latejoin)
character.be_syndicate = src.preferences.be_special & BE_TRAITOR
character.be_syndicate = src.preferences.be_special
ticker.mode.latespawn(character)
AnnounceArrival(character, rank)
+2 -1
View File
@@ -41,7 +41,7 @@ SQL_ENABLED 0
## set to 0 to disable that mode
## Cult mode is in alpha test, enable at your own risk
PROBABILITY EXTENDED 0
PROBABILITY TRAITOR 4
PROBABILITY TRAITOR 3
PROBABILITY METEOR 0
PROBABILITY MALFUNCTION 0
PROBABILITY BLOB 1
@@ -54,6 +54,7 @@ PROBABILITY CHANGELING 0
PROBABILITY CULT 1
PROBABILITY MONKEY 0
PROBABILITY TRAITORCHAN 0
PROBABILITY EXTEND-A-TRAITORMONGOUS 3
## if amount of traitors scales or not
TRAITOR_SCALING
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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.
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.