diff --git a/baystation12.dme b/baystation12.dme index 340036c01aa..b39db337002 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -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" diff --git a/code/game/objects/items/weapons/evidence.dm b/code/WorkInProgress/SkyMarshal/evidence.dm similarity index 91% rename from code/game/objects/items/weapons/evidence.dm rename to code/WorkInProgress/SkyMarshal/evidence.dm index c162f9ac70b..ad3454db7b9 100644 --- a/code/game/objects/items/weapons/evidence.dm +++ b/code/WorkInProgress/SkyMarshal/evidence.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 diff --git a/code/WorkInProgress/detective_work.dm b/code/WorkInProgress/detective_work.dm index 8a7db0cf947..e076193adba 100644 --- a/code/WorkInProgress/detective_work.dm +++ b/code/WorkInProgress/detective_work.dm @@ -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 -*/ \ No newline at end of file + return 0 \ No newline at end of file diff --git a/code/defines/mob/mob.dm b/code/defines/mob/mob.dm index ee7a1bfa9b9..a20e0b28f98 100644 --- a/code/defines/mob/mob.dm +++ b/code/defines/mob/mob.dm @@ -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 diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index 29e1ee6519f..3bf577c6777 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -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) diff --git a/code/game/dna.dm b/code/game/dna.dm index 4d1f23c3a0d..1c99ec8bda7 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -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 diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index c163c809d0e..e4d4dc2bf29 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -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 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 5e69cb55c3c..9c4492eadf5 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -137,6 +137,10 @@ /datum/game_mode/proc/greet_traitor(var/datum/mind/traitor) traitor.current << "You are the traitor." + traitor.current << "\red REPEAT" + traitor.current << "\red You are the traitor." + spawn(rand(600,1800)) //Strumpetplaya - Just another friendly reminder so people don't forget they're the traitor. + traitor.current << "\red In case you missed it the first time - YOU ARE THE TRAITOR!" var/obj_count = 1 for(var/datum/objective/objective in traitor.objectives) traitor.current << "Objective #[obj_count]: [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. diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 2d24ac4c8b8..89e37c83318 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -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 diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm index 0e0216f7267..70991042c14 100644 --- a/code/game/objects/devices/scanners.dm +++ b/code/game/objects/devices/scanners.dm @@ -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 diff --git a/code/game/objects/gibs.dm b/code/game/objects/gibs.dm index 15dcb69af2e..0cc61f85493 100644 --- a/code/game/objects/gibs.dm +++ b/code/game/objects/gibs.dm @@ -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) diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index b7310d0ed18..779a3e75e0c 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -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() diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 0660b1bfbea..383aed92dc1 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -33,7 +33,9 @@ if(usr.client.holder) usr << "[M.key] is a [M.client.holder.rank][M.client.stealth ? " (as [M.client.fakekey])" : ""]" 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" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 2f94d139895..1682f627e6e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -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 diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm new file mode 100644 index 00000000000..934ba5458e4 --- /dev/null +++ b/code/modules/flufftext/Dreaming.dm @@ -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 ... [dream_image] ..." + 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 \ No newline at end of file diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm new file mode 100644 index 00000000000..83d46443fc2 --- /dev/null +++ b/code/modules/flufftext/Hallucination.dm @@ -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 += "[button_txt]
" + + buttons -= button + possible_txt -= button_txt + + return start_txt + mocktxt + end_txt + "" + +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*/ \ No newline at end of file diff --git a/code/modules/flufftext/TextFilters.dm b/code/modules/flufftext/TextFilters.dm new file mode 100644 index 00000000000..cc228dbbe19 --- /dev/null +++ b/code/modules/flufftext/TextFilters.dm @@ -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="[newletter]" + //if(11,12) newletter="[newletter]" + //if(13) newletter="[newletter]" + 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 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index fbf09e9b1e1..c79edc16104 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -61,6 +61,7 @@ /mob/living/carbon/human/dummy real_name = "Test Dummy" nodamage = 1 + universal_speak = 1 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 1058eb93ed5..096737be634 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -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 diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm index 07a49bb12be..a4427703dcc 100644 --- a/code/modules/mob/living/carbon/shock.dm +++ b/code/modules/mob/living/carbon/shock.dm @@ -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 diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 351566fc705..f701ba2a0ab 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -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 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3c3783f34ee..7783552690d 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -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) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 5c8d1cce350..8546fedece9 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -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) diff --git a/config/config.txt b/config/config.txt index 61a91abec04..98f3e940fd6 100644 --- a/config/config.txt +++ b/config/config.txt @@ -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 diff --git a/icons/effects/footprints.dmi b/icons/effects/footprints.dmi new file mode 100644 index 00000000000..61d86aaa16b Binary files /dev/null and b/icons/effects/footprints.dmi differ diff --git a/icons/obj/syndieweapons.dmi b/icons/obj/syndieweapons.dmi new file mode 100644 index 00000000000..15a006ecb22 Binary files /dev/null and b/icons/obj/syndieweapons.dmi differ diff --git a/sound/announcer/aliens.ogg b/sound/announcer/aliens.ogg index f7d1746247f..9813204830b 100644 Binary files a/sound/announcer/aliens.ogg and b/sound/announcer/aliens.ogg differ diff --git a/sound/announcer/animes.ogg b/sound/announcer/animes.ogg deleted file mode 100644 index a46a207edc4..00000000000 Binary files a/sound/announcer/animes.ogg and /dev/null differ diff --git a/sound/announcer/commandreport.ogg b/sound/announcer/commandreport.ogg index 82e4ca425de..36921404399 100644 Binary files a/sound/announcer/commandreport.ogg and b/sound/announcer/commandreport.ogg differ diff --git a/sound/announcer/granomalies.ogg b/sound/announcer/granomalies.ogg index 89b368d596a..89a776c3857 100644 Binary files a/sound/announcer/granomalies.ogg and b/sound/announcer/granomalies.ogg differ diff --git a/sound/announcer/intercept.ogg b/sound/announcer/intercept.ogg index 040b4e4f8db..c0a3c6c7830 100644 Binary files a/sound/announcer/intercept.ogg and b/sound/announcer/intercept.ogg differ diff --git a/sound/announcer/ionstorm.ogg b/sound/announcer/ionstorm.ogg index 9f39713de6e..4bb414e5c9b 100644 Binary files a/sound/announcer/ionstorm.ogg and b/sound/announcer/ionstorm.ogg differ diff --git a/sound/announcer/meteors.ogg b/sound/announcer/meteors.ogg index 8f1c3aeacbb..4e7cdd11cc1 100644 Binary files a/sound/announcer/meteors.ogg and b/sound/announcer/meteors.ogg differ diff --git a/sound/announcer/newAI.ogg b/sound/announcer/newAI.ogg index 35aba34564f..d21967d0553 100644 Binary files a/sound/announcer/newAI.ogg and b/sound/announcer/newAI.ogg differ diff --git a/sound/announcer/newroundsexy.ogg b/sound/announcer/newroundsexy.ogg deleted file mode 100644 index afe5630f04d..00000000000 Binary files a/sound/announcer/newroundsexy.ogg and /dev/null differ diff --git a/sound/announcer/newroundsexy2.ogg b/sound/announcer/newroundsexy2.ogg deleted file mode 100644 index 531bba10014..00000000000 Binary files a/sound/announcer/newroundsexy2.ogg and /dev/null differ diff --git a/sound/announcer/outbreak5.ogg b/sound/announcer/outbreak5.ogg index 39c79c920fd..fbdb8eed007 100644 Binary files a/sound/announcer/outbreak5.ogg and b/sound/announcer/outbreak5.ogg differ diff --git a/sound/announcer/outbreak7.ogg b/sound/announcer/outbreak7.ogg index f21d4fca443..f35e65be9a2 100644 Binary files a/sound/announcer/outbreak7.ogg and b/sound/announcer/outbreak7.ogg differ diff --git a/sound/announcer/poweroff.ogg b/sound/announcer/poweroff.ogg index 1c6377c9d8d..f445f195c1d 100644 Binary files a/sound/announcer/poweroff.ogg and b/sound/announcer/poweroff.ogg differ diff --git a/sound/announcer/poweron.ogg b/sound/announcer/poweron.ogg index 9d18797d6ea..8cc3058ca07 100644 Binary files a/sound/announcer/poweron.ogg and b/sound/announcer/poweron.ogg differ diff --git a/sound/announcer/radiation.ogg b/sound/announcer/radiation.ogg index ef395af3101..18e112a7685 100644 Binary files a/sound/announcer/radiation.ogg and b/sound/announcer/radiation.ogg differ diff --git a/sound/announcer/shuttlecalled.ogg b/sound/announcer/shuttlecalled.ogg index 716bf824654..79ec47f97e7 100644 Binary files a/sound/announcer/shuttlecalled.ogg and b/sound/announcer/shuttlecalled.ogg differ diff --git a/sound/announcer/shuttledock.ogg b/sound/announcer/shuttledock.ogg index 0f70bebc751..82fac215d61 100644 Binary files a/sound/announcer/shuttledock.ogg and b/sound/announcer/shuttledock.ogg differ diff --git a/sound/announcer/shuttlerecalled.ogg b/sound/announcer/shuttlerecalled.ogg index 5f6db404b87..352990875cd 100644 Binary files a/sound/announcer/shuttlerecalled.ogg and b/sound/announcer/shuttlerecalled.ogg differ diff --git a/sound/announcer/spanomalies.ogg b/sound/announcer/spanomalies.ogg index 7680726f153..e5ababeab7a 100644 Binary files a/sound/announcer/spanomalies.ogg and b/sound/announcer/spanomalies.ogg differ diff --git a/sound/announcer/welcome.ogg b/sound/announcer/welcome.ogg index c7013dcbd5f..2224cabb2c5 100644 Binary files a/sound/announcer/welcome.ogg and b/sound/announcer/welcome.ogg differ diff --git a/sound/effects/Heart Beat.ogg b/sound/effects/Heart Beat.ogg new file mode 100644 index 00000000000..6d99aa371c7 Binary files /dev/null and b/sound/effects/Heart Beat.ogg differ diff --git a/sound/mecha/LongNanoActivation.ogg b/sound/mecha/LongNanoActivation.ogg new file mode 100644 index 00000000000..7295064632e Binary files /dev/null and b/sound/mecha/LongNanoActivation.ogg differ diff --git a/sound/mecha/LongSyndiActivation.ogg b/sound/mecha/LongSyndiActivation.ogg new file mode 100644 index 00000000000..d2554ce89cd Binary files /dev/null and b/sound/mecha/LongSyndiActivation.ogg differ diff --git a/sound/mecha/critdestrnano.ogg b/sound/mecha/critdestrnano.ogg new file mode 100644 index 00000000000..07607a9c47c Binary files /dev/null and b/sound/mecha/critdestrnano.ogg differ diff --git a/sound/mecha/critdestrsyndi.ogg b/sound/mecha/critdestrsyndi.ogg new file mode 100644 index 00000000000..d2acdf6befe Binary files /dev/null and b/sound/mecha/critdestrsyndi.ogg differ diff --git a/sound/mecha/critnano.ogg b/sound/mecha/critnano.ogg new file mode 100644 index 00000000000..ac6c18985ba Binary files /dev/null and b/sound/mecha/critnano.ogg differ diff --git a/sound/mecha/hydraulic.ogg b/sound/mecha/hydraulic.ogg new file mode 100644 index 00000000000..ef0bb57bd4d Binary files /dev/null and b/sound/mecha/hydraulic.ogg differ diff --git a/sound/mecha/imag_enhnano.ogg b/sound/mecha/imag_enhnano.ogg new file mode 100644 index 00000000000..b1b7830d418 Binary files /dev/null and b/sound/mecha/imag_enhnano.ogg differ diff --git a/sound/mecha/imag_enhsyndi.ogg b/sound/mecha/imag_enhsyndi.ogg new file mode 100644 index 00000000000..f80d7be1157 Binary files /dev/null and b/sound/mecha/imag_enhsyndi.ogg differ diff --git a/sound/mecha/internaldmgalarm.ogg b/sound/mecha/internaldmgalarm.ogg new file mode 100644 index 00000000000..b4f8613a0d2 Binary files /dev/null and b/sound/mecha/internaldmgalarm.ogg differ diff --git a/sound/mecha/lowpower.ogg b/sound/mecha/lowpower.ogg new file mode 100644 index 00000000000..5a6c7992639 Binary files /dev/null and b/sound/mecha/lowpower.ogg differ diff --git a/sound/mecha/lowpowernano.ogg b/sound/mecha/lowpowernano.ogg new file mode 100644 index 00000000000..42f9cd756d3 Binary files /dev/null and b/sound/mecha/lowpowernano.ogg differ diff --git a/sound/mecha/lowpowersyndi.ogg b/sound/mecha/lowpowersyndi.ogg new file mode 100644 index 00000000000..4de37ea0ea0 Binary files /dev/null and b/sound/mecha/lowpowersyndi.ogg differ diff --git a/sound/mecha/mechambience.ogg b/sound/mecha/mechambience.ogg new file mode 100644 index 00000000000..8347a4762d7 Binary files /dev/null and b/sound/mecha/mechambience.ogg differ diff --git a/sound/mecha/mechdrill.ogg b/sound/mecha/mechdrill.ogg new file mode 100644 index 00000000000..573b8b37325 Binary files /dev/null and b/sound/mecha/mechdrill.ogg differ diff --git a/sound/mecha/nominalnano.ogg b/sound/mecha/nominalnano.ogg new file mode 100644 index 00000000000..6ccb7dbee42 Binary files /dev/null and b/sound/mecha/nominalnano.ogg differ diff --git a/sound/mecha/nominalsyndi.ogg b/sound/mecha/nominalsyndi.ogg new file mode 100644 index 00000000000..8cec7b645e9 Binary files /dev/null and b/sound/mecha/nominalsyndi.ogg differ diff --git a/sound/mecha/powerup.ogg b/sound/mecha/powerup.ogg new file mode 100644 index 00000000000..dc157960790 Binary files /dev/null and b/sound/mecha/powerup.ogg differ diff --git a/sound/mecha/weapdestrnano.ogg b/sound/mecha/weapdestrnano.ogg new file mode 100644 index 00000000000..e1f2c2d0252 Binary files /dev/null and b/sound/mecha/weapdestrnano.ogg differ diff --git a/sound/mecha/weapdestrsyndi.ogg b/sound/mecha/weapdestrsyndi.ogg new file mode 100644 index 00000000000..34522196edd Binary files /dev/null and b/sound/mecha/weapdestrsyndi.ogg differ diff --git a/sound/voice/AISyndiHack.ogg b/sound/voice/AISyndiHack.ogg new file mode 100644 index 00000000000..d60c86f2407 Binary files /dev/null and b/sound/voice/AISyndiHack.ogg differ diff --git a/sound/voice/syndicate intro.ogg b/sound/voice/syndicate intro.ogg new file mode 100644 index 00000000000..c99549d9620 Binary files /dev/null and b/sound/voice/syndicate intro.ogg differ