diff --git a/baystation12.dme b/baystation12.dme index 843c4e921fd..c79f609a984 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -405,6 +405,7 @@ #include "code\game\machinery\telecomms\telecomunications.dm" #include "code\game\machinery\telecomms\telemonitor.dm" #include "code\game\machinery\telecomms\traffic_control.dm" +#include "code\game\magic\Uristrunes.dm" #include "code\game\mecha\mech_bay.dm" #include "code\game\mecha\mech_fabricator.dm" #include "code\game\mecha\mecha.dm" diff --git a/code/WorkInProgress/Ported/policetape.dm b/code/WorkInProgress/Ported/policetape.dm index 2c2e41025aa..43a41c5a937 100644 --- a/code/WorkInProgress/Ported/policetape.dm +++ b/code/WorkInProgress/Ported/policetape.dm @@ -40,7 +40,7 @@ /obj/item/tape/engineering name = "engineering tape" desc = "A length of engineering tape. Better not cross it." - req_access = list(access_engine,access_atmospherics) + req_one_access = list(access_engine,access_atmospherics) icon_base = "engineering" /obj/item/taperoll/attack_self(mob/user as mob) diff --git a/code/WorkInProgress/surgery.dm b/code/WorkInProgress/surgery.dm index f07cf4b1f05..c262be46f15 100644 --- a/code/WorkInProgress/surgery.dm +++ b/code/WorkInProgress/surgery.dm @@ -1258,7 +1258,7 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user) target.custom_pain("The pain in your chest is living hell!",1) end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/external/chest/affected = target.get_organ("chest") + var/datum/organ/external/chest/affected = target.get_organ(target_zone) var/find_prob = 0 if (affected.implants.len) @@ -1295,8 +1295,8 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user) if (prob(fail_prob)) var/obj/item/weapon/implant/imp = affected.implants[1] user.visible_message("\red Something beeps inside [target]'s [affected.display_name]!") - playsound(imp.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - spawn(15) + playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) + spawn(25) imp.activate() if (ishuman(user)) user:bloody_hands(target, 0) diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm index e2edcaac7a2..88023f7c9a8 100644 --- a/code/ZAS/Airflow.dm +++ b/code/ZAS/Airflow.dm @@ -172,7 +172,7 @@ proc/Airflow(zone/A, zone/B) if(M.last_airflow > world.time - vsc.airflow_delay) continue if(ismob(M) && abs(n) > vsc.airflow_medium_pressure) - if(M:nodamage) continue + if(M:status_flags & GODMODE) continue M:airflow_stun() if(M.check_airflow_movable(abs(n))) diff --git a/code/datums/organs/organ_external.dm b/code/datums/organs/organ_external.dm index 71196144c66..4b92cb04e17 100644 --- a/code/datums/organs/organ_external.dm +++ b/code/datums/organs/organ_external.dm @@ -617,14 +617,16 @@ disfigure("burn") proc/disfigure(var/type = "brute") + if (disfigured) + return if(type == "brute") owner.visible_message("\red You hear a sickening cracking sound coming from \the [owner]'s face.", \ "\red Your face becomes unrecognizible mangled mess!", \ - "You hear a sickening crack.") + "\red You hear a sickening crack.") else owner.visible_message("\red [owner]'s face melts away, turning into mangled mess!", \ "\red Your face melts off!", \ - "You hear a sickening sizzle.") + "\red You hear a sickening sizzle.") disfigured = 1 /datum/organ/external/l_arm diff --git a/code/defines/obj/toy.dm b/code/defines/obj/toy.dm index afddd617a46..d9ee6a9d048 100644 --- a/code/defines/obj/toy.dm +++ b/code/defines/obj/toy.dm @@ -515,4 +515,12 @@ force = 5 throwforce = 5 w_class = 3 - attack_verb = list("attacked", "slashed", "stabbed", "sliced") \ No newline at end of file + attack_verb = list("attacked", "slashed", "stabbed", "sliced") + +/obj/item/weapon/toddler + icon_state = "toddler" + name = "toddler" + desc = "This baby looks almost real. Wait, did it just burp?" + force = 5 + w_class = 4.0 + slot_flags = SLOT_BACK diff --git a/code/game/events/EventProcs/spacevines.dm b/code/game/events/EventProcs/spacevines.dm index f074e2b884d..8dece7e06d9 100644 --- a/code/game/events/EventProcs/spacevines.dm +++ b/code/game/events/EventProcs/spacevines.dm @@ -17,6 +17,9 @@ if(master) master.vines -= src master.growth_queue -= src + for(var/mob/M in src.loc) + if(M.buckled == src) + M.buckled = null ..() attackby(obj/item/weapon/W as obj, mob/user as mob) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index f9735403037..98012439623 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -159,36 +159,11 @@ /datum/game_mode/proc/grant_runeword(mob/living/carbon/human/cult_mob, var/word) - if(!wordtravel) + if(!cultwords["travel"]) runerandom() if (!word) word=pick(allwords) - var/wordexp - switch(word) - if("travel") - wordexp = "[wordtravel] is travel..." - if("blood") - wordexp = "[wordblood] is blood..." - if("join") - wordexp = "[wordjoin] is join..." - if("hell") - wordexp = "[wordhell] is Hell..." - if("self") - wordexp = "[wordself] is self..." - if("see") - wordexp = "[wordsee] is see..." - if("tech") - wordexp = "[wordtech] is technology..." - if("destroy") - wordexp = "[worddestr] is destroy..." - if("other") - wordexp = "[wordother] is other..." -// if("hear") -// wordexp = "[wordhear] is hear..." -// if("free") -// wordexp = "[wordfree] is free..." - if("hide") - wordexp = "[wordhide] is hide..." + var/wordexp = "[cultwords[word]] is [word]..." cult_mob << "\red You remember one thing from the dark teachings of your master... [wordexp]" cult_mob.mind.store_memory("You remember that [wordexp]", 0, 0) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 4990ed625b7..00e5ff34a17 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -1,18 +1,6 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -var/wordtravel = null -var/wordself = null -var/wordsee = null -var/wordhell = null -var/wordblood = null -var/wordjoin = null -var/wordtech = null -var/worddestr = null -var/wordother = null -//var/wordhear = null -//var/wordfree = null -var/wordhide = null +var/cultwords = list() var/runedec = 0 var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", "self", "see", "other", "hide") @@ -20,37 +8,16 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", set category = "Special Verbs" set name = "Check Rune Words" set desc = "Check the rune-word meaning" - if(!wordtravel) + if(!cultwords["travel"]) runerandom() - usr << "[wordtravel] is travel, [wordblood] is blood, [wordjoin] is join, [wordhell] is Hell, [worddestr] is destroy, [wordtech] is technology, [wordself] is self, [wordsee] is see, [wordother] is other, [wordhide] is hide." - + for (var/word in engwords) + usr << "[cultwords[word]] is [word]" /proc/runerandom() //randomizes word meaning var/list/runewords=list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri") ///"orkan" and "allaq" removed. - wordtravel=pick(runewords) - runewords-=wordtravel - wordself=pick(runewords) - runewords-=wordself - wordsee=pick(runewords) - runewords-=wordsee - wordhell=pick(runewords) - runewords-=wordhell - wordblood=pick(runewords) - runewords-=wordblood - wordjoin=pick(runewords) - runewords-=wordjoin - wordtech=pick(runewords) - runewords-=wordtech - worddestr=pick(runewords) - runewords-=worddestr - wordother=pick(runewords) - runewords-=wordother -// wordhear=pick(runewords) -// runewords-=wordhear -// wordfree=pick(runewords) -// runewords-=wordfree - wordhide=pick(runewords) - runewords-=wordhide + for (var/word in engwords) + cultwords[word] = pick(runewords) + runewords-=cultwords[word] /obj/effect/rune desc = "" @@ -146,53 +113,53 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", return fizzle() // if(!src.visibility) // src.visibility=1 - if(word1 == wordtravel && word2 == wordself) + if(word1 == cultwords["travel"] && word2 == cultwords["self"]) return teleport(src.word3) - if(word1 == wordsee && word2 == wordblood && word3 == wordhell) + if(word1 == cultwords["see"] && word2 == cultwords["blood"] && word3 == cultwords["hell"]) return tomesummon() - if(word1 == wordhell && word2 == worddestr && word3 == wordother) + if(word1 == cultwords["hell"] && word2 == cultwords["destroy"] && word3 == cultwords["other"]) return armor() - if(word1 == wordjoin && word2 == wordblood && word3 == wordself) + if(word1 == cultwords["join"] && word2 == cultwords["blood"] && word3 == cultwords["self"]) return convert() - if(word1 == wordhell && word2 == wordjoin && word3 == wordself) + if(word1 == cultwords["hell"] && word2 == cultwords["join"] && word3 == cultwords["self"]) return tearreality() - if(word1 == worddestr && word2 == wordsee && word3 == wordtech) + if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["technology"]) return emp(src.loc,3) - if(word1 == wordtravel && word2 == wordblood && word3 == wordself) + if(word1 == cultwords["travel"] && word2 == cultwords["blood"] && word3 == cultwords["self"]) return drain() - if(word1 == wordsee && word2 == wordhell && word3 == wordjoin) + if(word1 == cultwords["see"] && word2 == cultwords["hell"] && word3 == cultwords["join"]) return seer() - if(word1 == wordblood && word2 == wordjoin && word3 == wordhell) + if(word1 == cultwords["blood"] && word2 == cultwords["join"] && word3 == cultwords["hell"]) return raise() - if(word1 == wordhide && word2 == wordsee && word3 == wordblood) + if(word1 == cultwords["hide"] && word2 == cultwords["see"] && word3 == cultwords["blood"]) return obscure(4) - if(word1 == wordhell && word2 == wordtravel && word3 == wordself) + if(word1 == cultwords["hell"] && word2 == cultwords["travel"] && word3 == cultwords["self"]) return ajourney() - if(word1 == wordblood && word2 == wordsee && word3 == wordtravel) + if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["travel"]) return manifest() - if(word1 == wordhell && word2 == wordtech && word3 == wordjoin) + if(word1 == cultwords["hell"] && word2 == cultwords["technology"] && word3 == cultwords["join"]) return talisman() - if(word1 == wordhell && word2 == wordblood && word3 == wordjoin) + if(word1 == cultwords["hell"] && word2 == cultwords["blood"] && word3 == cultwords["join"]) return sacrifice() - if(word1 == wordblood && word2 == wordsee && word3 == wordhide) + if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["hide"]) return revealrunes(src) - if(word1 == worddestr && word2 == wordtravel && word3 == wordself) + if(word1 == cultwords["destroy"] && word2 == cultwords["travel"] && word3 == cultwords["self"]) return wall() - if(word1 == wordtravel && word2 == wordtech && word3 == wordother) + if(word1 == cultwords["travel"] && word2 == cultwords["technology"] && word3 == cultwords["other"]) return freedom() - if(word1 == wordjoin && word2 == wordother && word3 == wordself) + if(word1 == cultwords["join"] && word2 == cultwords["other"] && word3 == cultwords["self"]) return cultsummon() - if(word1 == wordhide && word2 == wordother && word3 == wordsee) + if(word1 == cultwords["hide"] && word2 == cultwords["other"] && word3 == cultwords["see"]) return deafen() - if(word1 == worddestr && word2 == wordsee && word3 == wordother) + if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["other"]) return blind() - if(word1 == worddestr && word2 == wordsee && word3 == wordblood) + if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["blood"]) return bloodboil() - if(word1 == wordself && word2 == wordother && word3 == wordtech) + if(word1 == cultwords["self"] && word2 == cultwords["other"] && word3 == cultwords["technology"]) return communicate() - if(word1 == wordtravel && word2 == wordother) + if(word1 == cultwords["travel"] && word2 == cultwords["other"]) return itemport(src.word3) - if(word1 == wordjoin && word2 == wordhide && word3 == wordtech) + if(word1 == cultwords["join"] && word2 == cultwords["hide"] && word3 == cultwords["technology"]) return runestun() else return fizzle() @@ -209,94 +176,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", return check_icon() - if(word1 == wordtravel && word2 == wordself) - icon_state = "2" - src.icon += rgb(0, 0 , 255) - return - if(word1 == wordjoin && word2 == wordblood && word3 == wordself) - icon_state = "3" - return - if(word1 == wordhell && word2 == wordjoin && word3 == wordself) - icon_state = "4" - return - if(word1 == wordsee && word2 == wordblood && word3 == wordhell) - icon_state = "5" - src.icon += rgb(0, 0 , 255) - return - if(word1 == worddestr && word2 == wordsee && word3 == wordtech) - icon_state = "5" - return - if(word1 == wordtravel && word2 == wordblood && word3 == wordself) - icon_state = "2" - return - if(word1 == wordsee && word2 == wordhell && word3 == wordjoin) - icon_state = "4" - src.icon += rgb(0, 0 , 255) - return - if(word1 == wordblood && word2 == wordjoin && word3 == wordhell) - icon_state = "1" - return - if(word1 == wordhide && word2 == wordsee && word3 == wordblood) - icon_state = "1" - src.icon += rgb(0, 0 , 255) - return - if(word1 == wordhell && word2 == wordtravel && word3 == wordself) - icon_state = "6" - src.icon += rgb(0, 0 , 255) - return - if(word1 == wordblood && word2 == wordsee && word3 == wordtravel) - icon_state = "6" - return - if(word1 == wordhell && word2 == wordtech && word3 == wordjoin) - icon_state = "3" - src.icon += rgb(0, 0 , 255) - return - if(word1 == wordhell && word2 == wordblood && word3 == wordjoin) - icon_state = "[rand(1,6)]" - src.icon += rgb(255, 255, 255) - return - if(word1 == wordblood && word2 == wordsee && word3 == wordhide) - icon_state = "4" - src.icon += rgb(255, 255, 255) - return - if(word1 == worddestr && word2 == wordtravel && word3 == wordself) - icon_state = "1" - src.icon += rgb(255, 0, 0) - return - if(word1 == wordtravel && word2 == wordtech && word3 == wordother) - icon_state = "4" - src.icon += rgb(255, 0, 255) - return - if(word1 == wordjoin && word2 == wordother && word3 == wordself) - icon_state = "2" - src.icon += rgb(0, 255, 0) - return - if(word1 == wordhide && word2 == wordother && word3 == wordsee) - icon_state = "4" - src.icon += rgb(0, 255, 0) - return - if(word1 == worddestr && word2 == wordsee && word3 == wordother) - icon_state = "4" - src.icon += rgb(0, 0, 255) - return - if(word1 == worddestr && word2 == wordsee && word3 == wordblood) - icon_state = "4" - src.icon += rgb(255, 0, 0) - return - if(word1 == wordself && word2 == wordother && word3 == wordtech) - icon_state = "3" - src.icon += rgb(200, 0, 0) - return - if(word1 == wordtravel && word2 == wordother) - icon_state = "1" - src.icon += rgb(200, 0, 0) - if(word1 == wordjoin && word2 == wordhide && word3 == wordtech) - icon_state = "2" - src.icon += rgb(100, 0, 100) - return - icon_state="[rand(1,6)]" //random shape and color for dummy runes - src.icon -= rgb(255,255,255) - src.icon += rgb(rand(1,255),rand(1,255),rand(1,255)) + icon = get_uristrune_cult(word1, word2, word3) /obj/item/weapon/tome name = "arcane tome" @@ -487,7 +367,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", if(!usr.canmove || usr.stat || usr.restrained()) return - if(!wordtravel) + if(!cultwords["travel"]) runerandom() if(iscultist(user)) var/C = 0 @@ -608,7 +488,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", attack_self(mob/user as mob) if(src.cultistsonly && !iscultist(usr)) return - if(!wordtravel) + if(!cultwords["travel"]) runerandom() if(user) var/r @@ -627,8 +507,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", var/beacon if(usr) beacon = input("Select the last rune", "Rune Scribing") in words - R.word1=wordtravel - R.word2=wordself + R.word1=cultwords["travel"] + R.word2=cultwords["self"] R.word3=beacon R.loc = user.loc R.check_icon() @@ -637,141 +517,141 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", var/beacon if(usr) beacon = input("Select the last rune", "Rune Scribing") in words - R.word1=wordtravel - R.word2=wordother + R.word1=cultwords["travel"] + R.word2=cultwords["other"] R.word3=beacon R.loc = user.loc R.check_icon() if("tome") - R.word1=wordsee - R.word2=wordblood - R.word3=wordhell + R.word1=cultwords["see"] + R.word2=cultwords["blood"] + R.word3=cultwords["hell"] R.loc = user.loc R.check_icon() if("armor") - R.word1=wordhell - R.word2=worddestr - R.word3=wordother + R.word1=cultwords["hell"] + R.word2=cultwords["destroy"] + R.word3=cultwords["other"] R.loc = user.loc R.check_icon() if("convert") - R.word1=wordjoin - R.word2=wordblood - R.word3=wordself + R.word1=cultwords["join"] + R.word2=cultwords["blood"] + R.word3=cultwords["self"] R.loc = user.loc R.check_icon() if("tear in reality") - R.word1=wordhell - R.word2=wordjoin - R.word3=wordself + R.word1=cultwords["hell"] + R.word2=cultwords["join"] + R.word3=cultwords["self"] R.loc = user.loc R.check_icon() if("emp") - R.word1=worddestr - R.word2=wordsee - R.word3=wordtech + R.word1=cultwords["destroy"] + R.word2=cultwords["see"] + R.word3=cultwords["technology"] R.loc = user.loc R.check_icon() if("drain") - R.word1=wordtravel - R.word2=wordblood - R.word3=wordself + R.word1=cultwords["travel"] + R.word2=cultwords["blood"] + R.word3=cultwords["self"] R.loc = user.loc R.check_icon() if("seer") - R.word1=wordsee - R.word2=wordhell - R.word3=wordjoin + R.word1=cultwords["see"] + R.word2=cultwords["hell"] + R.word3=cultwords["join"] R.loc = user.loc R.check_icon() if("raise") - R.word1=wordblood - R.word2=wordjoin - R.word3=wordhell + R.word1=cultwords["blood"] + R.word2=cultwords["join"] + R.word3=cultwords["hell"] R.loc = user.loc R.check_icon() if("obscure") - R.word1=wordhide - R.word2=wordsee - R.word3=wordblood + R.word1=cultwords["hide"] + R.word2=cultwords["see"] + R.word3=cultwords["blood"] R.loc = user.loc R.check_icon() if("astral journey") - R.word1=wordhell - R.word2=wordtravel - R.word3=wordself + R.word1=cultwords["hell"] + R.word2=cultwords["travel"] + R.word3=cultwords["self"] R.loc = user.loc R.check_icon() if("manifest") - R.word1=wordblood - R.word2=wordsee - R.word3=wordtravel + R.word1=cultwords["blood"] + R.word2=cultwords["see"] + R.word3=cultwords["travel"] R.loc = user.loc R.check_icon() if("imbue talisman") - R.word1=wordhell - R.word2=wordtech - R.word3=wordjoin + R.word1=cultwords["hell"] + R.word2=cultwords["technology"] + R.word3=cultwords["join"] R.loc = user.loc R.check_icon() if("sacrifice") - R.word1=wordhell - R.word2=wordblood - R.word3=wordjoin + R.word1=cultwords["hell"] + R.word2=cultwords["blood"] + R.word3=cultwords["join"] R.loc = user.loc R.check_icon() if("reveal") - R.word1=wordblood - R.word2=wordsee - R.word3=wordhide + R.word1=cultwords["blood"] + R.word2=cultwords["see"] + R.word3=cultwords["hide"] R.loc = user.loc R.check_icon() if("wall") - R.word1=worddestr - R.word2=wordtravel - R.word3=wordself + R.word1=cultwords["destroy"] + R.word2=cultwords["travel"] + R.word3=cultwords["self"] R.loc = user.loc R.check_icon() if("freedom") - R.word1=wordtravel - R.word2=wordtech - R.word3=wordother + R.word1=cultwords["travel"] + R.word2=cultwords["technology"] + R.word3=cultwords["other"] R.loc = user.loc R.check_icon() if("cultsummon") - R.word1=wordjoin - R.word2=wordother - R.word3=wordself + R.word1=cultwords["join"] + R.word2=cultwords["other"] + R.word3=cultwords["self"] R.loc = user.loc R.check_icon() if("deafen") - R.word1=wordhide - R.word2=wordother - R.word3=wordsee + R.word1=cultwords["hide"] + R.word2=cultwords["other"] + R.word3=cultwords["see"] R.loc = user.loc R.check_icon() if("blind") - R.word1=worddestr - R.word2=wordsee - R.word3=wordother + R.word1=cultwords["destroy"] + R.word2=cultwords["see"] + R.word3=cultwords["other"] R.loc = user.loc R.check_icon() if("bloodboil") - R.word1=worddestr - R.word2=wordsee - R.word3=wordblood + R.word1=cultwords["destroy"] + R.word2=cultwords["see"] + R.word3=cultwords["blood"] R.loc = user.loc R.check_icon() if("communicate") - R.word1=wordself - R.word2=wordother - R.word3=wordtech + R.word1=cultwords["self"] + R.word2=cultwords["other"] + R.word3=cultwords["technology"] R.loc = user.loc R.check_icon() if("stun") - R.word1=wordjoin - R.word2=wordhide - R.word3=wordtech + R.word1=cultwords["join"] + R.word2=cultwords["hide"] + R.word3=cultwords["technology"] R.loc = user.loc R.check_icon() diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index b4eefa6380c..c387edf840a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -12,7 +12,7 @@ var/list/sacrificed = list() for(var/obj/effect/rune/R in world) if(R == src) continue - if(R.word1 == wordtravel && R.word2 == wordself && R.word3 == key && R.z != 2) + if(R.word1 == cultwords["travel"] && R.word2 == cultwords["self"] && R.word3 == key && R.z != 2) index++ allrunesloc.len = index allrunesloc[index] = R.loc @@ -50,7 +50,7 @@ var/list/sacrificed = list() for(var/obj/effect/rune/R in world) if(R == src) continue - if(R.word1 == wordtravel && R.word2 == wordother && R.word3 == key) + if(R.word1 == cultwords["travel"] && R.word2 == cultwords["other"] && R.word3 == key) IP = R runecount++ if(runecount >= 2) @@ -159,7 +159,7 @@ var/list/sacrificed = list() drain() var/drain = 0 for(var/obj/effect/rune/R in world) - if(R.word1==wordtravel && R.word2==wordblood && R.word3==wordself) + if(R.word1==cultwords["travel"] && R.word2==cultwords["blood"] && R.word3==cultwords["self"]) for(var/mob/living/carbon/D in R.loc) if(D.stat!=2) var/bdrain = rand(1,25) @@ -237,7 +237,7 @@ var/list/sacrificed = list() is_sacrifice_target = 0 find_sacrifice: for(var/obj/effect/rune/R in world) - if(R.word1==wordblood && R.word2==wordjoin && R.word3==wordhell) + if(R.word1==cultwords["blood"] && R.word2==cultwords["join"] && R.word3==cultwords["hell"]) for(var/mob/living/carbon/human/N in R.loc) if(ticker.mode.name == "cult" && N.mind && N.mind == ticker.mode:sacrifice_target) is_sacrifice_target = 1 @@ -431,53 +431,53 @@ var/list/sacrificed = list() for(var/obj/effect/rune/R in orange(1,src)) if(R==src) continue - if(R.word1==wordtravel && R.word2==wordself) //teleport + if(R.word1==cultwords["travel"] && R.word2==cultwords["self"]) //teleport T = new(src.loc) T.imbue = "[R.word3]" T.info = "[R.word3]" imbued_from = R break - if(R.word1==wordsee && R.word2==wordblood && R.word3==wordhell) //tome + if(R.word1==cultwords["see"] && R.word2==cultwords["blood"] && R.word3==cultwords["hell"]) //tome T = new(src.loc) T.imbue = "newtome" imbued_from = R break - if(R.word1==worddestr && R.word2==wordsee && R.word3==wordtech) //emp + if(R.word1==cultwords["destroy"] && R.word2==cultwords["see"] && R.word3==cultwords["technology"]) //emp T = new(src.loc) T.imbue = "emp" imbued_from = R break - if(R.word1==wordblood && R.word2==wordsee && R.word3==worddestr) //conceal + if(R.word1==cultwords["blood"] && R.word2==cultwords["see"] && R.word3==cultwords["destroy"]) //conceal T = new(src.loc) T.imbue = "conceal" imbued_from = R break - if(R.word1==wordhell && R.word2==worddestr && R.word3==wordother) //armor + if(R.word1==cultwords["hell"] && R.word2==cultwords["destroy"] && R.word3==cultwords["other"]) //armor T = new(src.loc) T.imbue = "armor" imbued_from = R break - if(R.word1==wordblood && R.word2==wordsee && R.word3==wordhide) //reveal + if(R.word1==cultwords["blood"] && R.word2==cultwords["see"] && R.word3==cultwords["hide"]) //reveal T = new(src.loc) T.imbue = "revealrunes" imbued_from = R break - if(R.word1==wordhide && R.word2==wordother && R.word3==wordsee) //deafen + if(R.word1==cultwords["hide"] && R.word2==cultwords["other"] && R.word3==cultwords["see"]) //deafen T = new(src.loc) T.imbue = "deafen" imbued_from = R break - if(R.word1==worddestr && R.word2==wordsee && R.word3==wordother) //blind + if(R.word1==cultwords["destroy"] && R.word2==cultwords["see"] && R.word3==cultwords["other"]) //blind T = new(src.loc) T.imbue = "blind" imbued_from = R break - if(R.word1==wordself && R.word2==wordother && R.word3==wordtech) //communicat + if(R.word1==cultwords["self"] && R.word2==cultwords["other"] && R.word3==cultwords["technology"]) //communicat T = new(src.loc) T.imbue = "communicate" imbued_from = R break - if(R.word1==wordjoin && R.word2==wordhide && R.word3==wordtech) //communicat + if(R.word1==cultwords["join"] && R.word2==cultwords["hide"] && R.word3==cultwords["technology"]) //communicat T = new(src.loc) T.imbue = "runestun" imbued_from = R diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 29f2420b508..841935b6c28 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -60,6 +60,12 @@ var/global/datum/controller/occupations/job_master Debug("AR has failed, Player: [player], Rank: [rank]") return 0 + proc/FreeRole(var/rank) //making additional slot on the fly + var/datum/job/job = GetJob(rank) + if(job && job.current_positions >= job.total_positions) + job.total_positions++ + return 1 + return 0 proc/FindOccupationCandidates(datum/job/job, level, flag) Debug("Running FOC, Job: [job], Level: [level], Flag: [flag]") diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index b5265e89d67..c4251f71452 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -52,6 +52,8 @@ if(M.z == 1 && !istype(M.loc, /turf/space)) var/turf/mob_loc = get_turf_loc(M) loc_display = mob_loc.loc + if(T.malfunction) + loc_display = pick(teleportlocs) dat += "ID: [T.id] | Location: [loc_display]
" dat += "(Message Holder) |
" dat += "********************************
" diff --git a/code/game/magic/Uristrunes.dm b/code/game/magic/Uristrunes.dm index 51f32872530..6234c76454b 100644 --- a/code/game/magic/Uristrunes.dm +++ b/code/game/magic/Uristrunes.dm @@ -23,29 +23,29 @@ var/list/word_to_uristrune_table = null /proc/get_uristrune_cult(word1, word2, word3) var/animated - if((word1 == wordtravel && word2 == wordself) \ - || (word1 == wordjoin && word2 == wordblood && word3 == wordself) \ - || (word1 == wordhell && word2 == wordjoin && word3 == wordself) \ - || (word1 == wordsee && word2 == wordblood && word3 == wordhell) \ - || (word1 == worddestr && word2 == wordsee && word3 == wordtech) \ - || (word1 == wordtravel && word2 == wordblood && word3 == wordself) \ - || (word1 == wordsee && word2 == wordhell && word3 == wordjoin) \ - || (word1 == wordblood && word2 == wordjoin && word3 == wordhell) \ - || (word1 == wordhide && word2 == wordsee && word3 == wordblood) \ - || (word1 == wordhell && word2 == wordtravel && word3 == wordself) \ - || (word1 == wordblood && word2 == wordsee && word3 == wordtravel) \ - || (word1 == wordhell && word2 == wordtech && word3 == wordjoin) \ - || (word1 == wordhell && word2 == wordblood && word3 == wordjoin) \ - || (word1 == wordblood && word2 == wordsee && word3 == wordhide) \ - || (word1 == worddestr && word2 == wordtravel && word3 == wordself) \ - || (word1 == wordtravel && word2 == wordtech && word3 == wordother) \ - || (word1 == wordjoin && word2 == wordother && word3 == wordself) \ - || (word1 == wordhide && word2 == wordother && word3 == wordsee) \ - || (word1 == worddestr && word2 == wordsee && word3 == wordother) \ - || (word1 == worddestr && word2 == wordsee && word3 == wordblood) \ - || (word1 == wordself && word2 == wordother && word3 == wordtech) \ - || (word1 == wordtravel && word2 == wordother) \ - || (word1 == wordjoin && word2 == wordhide && word3 == wordtech) ) + if((word1 == cultwords["travel"] && word2 == cultwords["self"]) \ + || (word1 == cultwords["join"] && word2 == cultwords["blood"] && word3 == cultwords["self"]) \ + || (word1 == cultwords["hell"] && word2 == cultwords["join"] && word3 == cultwords["self"]) \ + || (word1 == cultwords["see"] && word2 == cultwords["blood"] && word3 == cultwords["hell"]) \ + || (word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["technology"]) \ + || (word1 == cultwords["travel"] && word2 == cultwords["blood"] && word3 == cultwords["self"]) \ + || (word1 == cultwords["see"] && word2 == cultwords["hell"] && word3 == cultwords["join"]) \ + || (word1 == cultwords["blood"] && word2 == cultwords["join"] && word3 == cultwords["hell"]) \ + || (word1 == cultwords["hide"] && word2 == cultwords["see"] && word3 == cultwords["blood"]) \ + || (word1 == cultwords["hell"] && word2 == cultwords["travel"] && word3 == cultwords["self"]) \ + || (word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["travel"]) \ + || (word1 == cultwords["hell"] && word2 == cultwords["technology"] && word3 == cultwords["join"]) \ + || (word1 == cultwords["hell"] && word2 == cultwords["blood"] && word3 == cultwords["join"]) \ + || (word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["hide"]) \ + || (word1 == cultwords["destroy"] && word2 == cultwords["travel"] && word3 == cultwords["self"]) \ + || (word1 == cultwords["travel"] && word2 == cultwords["technology"] && word3 == cultwords["other"]) \ + || (word1 == cultwords["join"] && word2 == cultwords["other"] && word3 == cultwords["self"]) \ + || (word1 == cultwords["hide"] && word2 == cultwords["other"] && word3 == cultwords["see"]) \ + || (word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["other"]) \ + || (word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["blood"]) \ + || (word1 == cultwords["self"] && word2 == cultwords["other"] && word3 == cultwords["technology"]) \ + || (word1 == cultwords["travel"] && word2 == cultwords["other"]) \ + || (word1 == cultwords["join"] && word2 == cultwords["hide"] && word3 == cultwords["technology"]) ) animated = 1 else animated = 0 diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 3817e58b112..deddad910b2 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -1,3 +1,5 @@ +#define MALFUNCTION_TEMPORARY 1 +#define MALFUNCTION_PERMANENT 2 /obj/item/weapon/implant name = "implant" icon = 'device.dmi' @@ -7,6 +9,7 @@ var/datum/organ/external/part = null color = "b" var/allow_reagents = 0 + var/malfunction = 0 proc/trigger(emote, source as mob) return @@ -29,6 +32,23 @@ proc/islegal() return 0 + proc/meltdown() //breaks it down, making implant unrecongizible + imp_in << "\red You feel something melting inside [part ? "your [part.display_name]" : "you"]!" + if (part) + part.take_damage(burn = 15, used_weapon = "Electronics meltdown") + else + var/mob/living/M = imp_in + M.apply_damage(15,BURN) + name = "melted implant" + desc = "Charred circuit in melted plastic case. Wonder what that used to be..." + icon_state = "implant_melted" + malfunction = MALFUNCTION_PERMANENT + + Del() + if(part) + part.implants.Remove(src) + ..() + /obj/item/weapon/implant/tracking name = "tracking" desc = "Track with this." @@ -52,12 +72,27 @@ circuitry. As a result neurotoxins can cause massive damage.
Implant Specifics:
"} return dat + emp_act(severity) + if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning + return + malfunction = MALFUNCTION_TEMPORARY + + var/delay = 20 + switch(severity) + if(1) + if(prob(60)) + meltdown() + if(2) + delay = rand(5*60*10,15*60*10) //from 5 to 15 minutes of free time + + spawn(delay) + malfunction-- /obj/item/weapon/implant/dexplosive name = "explosive" desc = "And boom goes the weasel." - + icon_state = "implant_evil" get_data() var/dat = {" @@ -87,12 +122,13 @@ Implant Specifics:
"} islegal() return 0 + //BS12 Explosive /obj/item/weapon/implant/explosive name = "explosive implant" desc = "A military grade micro bio-explosive. Highly dangerous." var/phrase = "supercalifragilisticexpialidocious" - + icon_state = "implant_evil" get_data() var/dat = {" @@ -119,6 +155,8 @@ Implant Specifics:
"} del(src) activate() + if (malfunction == MALFUNCTION_PERMANENT) + return if(istype(imp_in, /mob/)) var/mob/T = imp_in T.gib() @@ -135,6 +173,37 @@ Implant Specifics:
"} usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate." return 1 + emp_act(severity) + if (malfunction) + return + malfunction = MALFUNCTION_TEMPORARY + switch (severity) + if (2.0) //Weak EMP will make implant tear limbs off. + if (prob(50)) + if (ishuman(imp_in) && part) + imp_in.visible_message("\red Something beeps inside [imp_in][part ? "'s [part.display_name]" : ""]!") + playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3) + spawn(25) + if (ishuman(imp_in) && part) + //No tearing off these parts since it's pretty much killing + //and you can't replace groins + if (istype(part,/datum/organ/external/chest) || \ + istype(part,/datum/organ/external/groin) || \ + istype(part,/datum/organ/external/head)) + part.createwound(BRUISE, 60) //mangle them instead + else + part.droplimb(1) + explosion(get_turf(imp_in), -1, -1, 2, 3, 3) + del(src) + + if (1.0) //strong EMP will melt implant either making it go off, or disarming it + if (prob(50)) + activate() //50% chance of bye bye + else + meltdown() //50% chance of implant disarming + spawn (20) + malfunction-- + islegal() return 0 @@ -186,7 +255,21 @@ the implant may become unstable and either pre-maturely inject the subject or si del(src) return + emp_act(severity) + if (malfunction) + return + malfunction = MALFUNCTION_TEMPORARY + switch(severity) + if(1) + if(prob(60)) + activate(20) + if(2) + if(prob(30)) + activate(5) + + spawn(20) + malfunction-- /obj/item/weapon/implant/loyalty name = "loyalty" @@ -285,21 +368,43 @@ the implant may become unstable and either pre-maturely inject the subject or si activate(var/cause) var/mob/M = imp_in var/area/t = get_area(M) - if(cause == "death") - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) - if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) - //give the syndies a bit of stealth - a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm") + switch (cause) + if("death") + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) + //give the syndies a bit of stealth + a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm") + else + a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm") + del(a) + processing_objects.Remove(src) + if ("emp") + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + var/name = prob(50) ? t.name : pick(teleportlocs) + a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm") + del(a) else - a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm") - del(a) - processing_objects.Remove(src) - else - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) - a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm") - del(a) + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm") + del(a) + processing_objects.Remove(src) + + emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this + if (malfunction) //so I'm just going to add a meltdown chance here + return + malfunction = MALFUNCTION_TEMPORARY + + activate("emp") //let's shout that this dude is dead + if(severity == 1) + if(prob(40)) //small chance of obvious meltdown + meltdown() + else if (prob(60)) //but more likely it will just quietly die + malfunction = MALFUNCTION_PERMANENT processing_objects.Remove(src) + spawn(20) + malfunction-- + implanted(mob/source as mob) mobname = source.real_name processing_objects.Add(src) @@ -308,6 +413,7 @@ the implant may become unstable and either pre-maturely inject the subject or si /obj/item/weapon/implant/compressed name = "compressed matter implant" desc = "Based on compressed matter technology, can store a single item." + icon_state = "implant_evil" var/activation_emote = "sigh" var/obj/item/scanned = null @@ -335,7 +441,6 @@ the implant may become unstable and either pre-maturely inject the subject or si activate() var/turf/t = get_turf(src) src.scanned.loc = t - if (part) part.implants -= src del src implanted(mob/source as mob) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index b004238b807..e7ffaea7a68 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -123,7 +123,10 @@ "/obj/item/clothing/glasses/hud/security", "/obj/item/device/flashlight", "/obj/item/device/pda", - "/obj/item/device/radio/headset" + "/obj/item/device/radio/headset", + "/obj/item/weapon/melee/baton", + "/obj/item/taperoll/police", + "/obj/item/weapon/gun/energy/taser" ) /obj/item/weapon/storage/belt/soulstone diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index ba164cfcb1d..853e46a244a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -113,7 +113,7 @@ new /obj/item/weapon/storage/backpack/security(src) else new /obj/item/weapon/storage/backpack/satchel_sec(src) - new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/suit/armor/vest/security(src) new /obj/item/clothing/under/rank/warden(src) new /obj/item/clothing/suit/armor/vest/warden(src) new /obj/item/clothing/head/helmet/warden(src) @@ -146,7 +146,7 @@ new /obj/item/weapon/storage/backpack/security(src) else new /obj/item/weapon/storage/backpack/satchel_sec(src) - new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/suit/armor/vest/security(src) new /obj/item/clothing/head/helmet(src) // new /obj/item/weapon/cartridge/security(src) new /obj/item/device/radio/headset/headset_sec(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 769eb501439..32dc47f56af 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -23,6 +23,9 @@ new /obj/item/clothing/under/rank/security(src) new /obj/item/clothing/under/rank/security(src) new /obj/item/clothing/under/rank/security(src) + new /obj/item/clothing/under/rank/security2(src) + new /obj/item/clothing/under/rank/security2(src) + new /obj/item/clothing/under/rank/security2(src) new /obj/item/clothing/shoes/jackboots(src) new /obj/item/clothing/shoes/jackboots(src) new /obj/item/clothing/shoes/jackboots(src) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 6bb2cf69ab9..1c90d07a1a3 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -15,6 +15,7 @@ desc = "Used to keep bodies in untill someone fetches them." icon = 'icons/obj/stationobjs.dmi' icon_state = "morgue1" + dir = EAST density = 1 var/obj/structure/m_tray/connected = null anchored = 1.0 @@ -70,15 +71,16 @@ else playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) src.connected = new /obj/structure/m_tray( src.loc ) - step(src.connected, EAST) + step(src.connected, src.dir) src.connected.layer = OBJ_LAYER - var/turf/T = get_step(src, EAST) + var/turf/T = get_step(src, src.dir) if (T.contents.Find(src.connected)) src.connected.connected = src src.icon_state = "morgue0" for(var/atom/movable/A as mob|obj in src) A.loc = src.connected.loc src.connected.icon_state = "morguet" + src.connected.dir = src.dir else //src.connected = null del(src.connected) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index bd4fa98af53..e63138b5fdc 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,24 +1,12 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless var/list/admin_verbs_default = list( /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ - /client/proc/game_panel, /*game panel, allows to change game-mode etc*/ - /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/ - /datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/ /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ /client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/ - /client/proc/cmd_admin_say, /*admin-only ooc chat*/ /client/proc/hide_verbs, /*hides all our adminverbs*/ /client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/ /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/ - /client/proc/check_ai_laws, /*shows AI and borg laws*/ /client/proc/check_antagonists, /*shows all antags*/ - /client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/ - /client/proc/deadchat, /*toggles deadchat on/off*/ - /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ - /client/proc/toggleprayers, /*toggles prayers on/off*/ - /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/ - /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ - /client/proc/secrets ) var/list/admin_verbs_admin = list( /client/proc/player_panel, /*shows an interface for all players, with links to various panels (old style)*/ @@ -54,8 +42,22 @@ var/list/admin_verbs_admin = list( /client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/ /client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/ /client/proc/cmd_admin_create_centcom_report, - /client/proc/check_words /*displays cult-words*/ - ) + /client/proc/check_words, /*displays cult-words*/ + /client/proc/check_ai_laws, /*shows AI and borg laws*/ + /client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/ + /client/proc/deadchat, /*toggles deadchat on/off*/ + /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ + /client/proc/toggleprayers, /*toggles prayers on/off*/ +// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/ + /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/ + /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ + /client/proc/secrets, + /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/ + /datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/ + /client/proc/game_panel, /*game panel, allows to change game-mode etc*/ + /client/proc/cmd_admin_say, /*admin-only ooc chat*/ + /client/proc/free_slot /*frees slot for chosen job*/ +) var/list/admin_verbs_ban = list( /client/proc/unban_panel, /client/proc/jobbans, @@ -207,20 +209,14 @@ var/list/admin_verbs_hideable = list( /proc/release ) var/list/admin_verbs_mod = list( - /client/proc/check_antagonists, /*shows all antags*/ /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/ /client/proc/playernotes, /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ - /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ - /client/proc/hide_verbs, /*hides all our adminverbs*/ - /client/proc/hide_verbs, /client/proc/mod_panel, /client/proc/cmd_mod_say, /datum/admins/proc/show_player_info - //client/proc/Report, - //client/proc/display_admin_reports ) /client/proc/add_admin_verbs() if(holder) @@ -237,7 +233,7 @@ var/list/admin_verbs_mod = list( if(holder.rights & R_REJUVINATE) verbs += admin_verbs_rejuv if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn - if(holder.rights & R_MOD) verbs -= admin_verbs_default; verbs += admin_verbs_mod + if(holder.rights & R_MOD) verbs += admin_verbs_mod /client/proc/remove_admin_verbs() verbs.Remove( @@ -727,3 +723,19 @@ var/list/admin_verbs_mod = list( if(holder) holder.PlayerNotes() return + +/client/proc/free_slot() + set name = "Free Job Slot" + set category = "Admin" + if(holder) + var/list/jobs = list() + for (var/datum/job/J in job_master.occupations) + if (J.current_positions >= J.total_positions && J.total_positions != -1) + jobs += J.title + if (!jobs.len) + usr << "There are no fully staffed jobs." + return + var/job = input("Please select job slot to free", "Free job slot") as null|anything in jobs + if (job) + job_master.FreeRole(job) + return \ No newline at end of file diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index bea02b907de..820349d757c 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -302,7 +302,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that set category = "Fun" set name = "Make Cultist" set desc = "Makes target a cultist" - if(!wordtravel) + if(!cultwords["travel"]) runerandom() if(M) if(M.mind in ticker.mode.cult) @@ -316,21 +316,21 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that var/glimpse=pick("1","2","3","4","5","6","7","8") switch(glimpse) if("1") - M << "\red You remembered one thing from the glimpse... [wordtravel] is travel..." + M << "\red You remembered one thing from the glimpse... [cultwords["travel"]] is travel..." if("2") - M << "\red You remembered one thing from the glimpse... [wordblood] is blood..." + M << "\red You remembered one thing from the glimpse... [cultwords["blood"]] is blood..." if("3") - M << "\red You remembered one thing from the glimpse... [wordjoin] is join..." + M << "\red You remembered one thing from the glimpse... [cultwords["join"]] is join..." if("4") - M << "\red You remembered one thing from the glimpse... [wordhell] is Hell..." + M << "\red You remembered one thing from the glimpse... [cultwords["hell"]] is Hell..." if("5") - M << "\red You remembered one thing from the glimpse... [worddestr] is destroy..." + M << "\red You remembered one thing from the glimpse... [cultwords["destroy"]] is destroy..." if("6") - M << "\red You remembered one thing from the glimpse... [wordtech] is technology..." + M << "\red You remembered one thing from the glimpse... [cultwords["technology"]] is technology..." if("7") - M << "\red You remembered one thing from the glimpse... [wordself] is self..." + M << "\red You remembered one thing from the glimpse... [cultwords["self"]] is self..." if("8") - M << "\red You remembered one thing from the glimpse... [wordsee] is see..." + M << "\red You remembered one thing from the glimpse... [cultwords["see"]] is see..." if(M.mind) M.mind.special_role = "Cultist" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 28a12a47987..34e310a2d8d 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -19,6 +19,11 @@ flags = FPRINT | TABLEPASS | ONESIZEFITSALL armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) +/obj/item/clothing/suit/armor/vest/security + name = "security armor" + desc = "An armored vest that protects against some damage. This one has NanoTrasen corporate badge." + icon_state = "armorsec" + item_state = "armor" /obj/item/clothing/suit/armor/vest/warden name = "Warden's jacket" diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 7a497ab1282..3da5b745491 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -26,6 +26,15 @@ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags = FPRINT | TABLEPASS +/obj/item/clothing/under/rank/security2 + name = "security officer's uniform" + desc = "It's made of a slightly sturdier material, to allow for robust protection." + icon_state = "redshirt2" + item_state = "r_suit" + color = "redshirt2" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + flags = FPRINT | TABLEPASS + /* * Detective */ diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0266ee0e62e..f9f4669a509 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -142,7 +142,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune). var/obj/effect/rune/R = locate() in mind.current.loc //whilst corpse is alive, we can only reenter the body if it's on the rune - if(!(R && R.word1 == wordhell && R.word2 == wordtravel && R.word3 == wordself)) //astral journeying rune + if(!(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"])) //astral journeying rune usr << "The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you." return mind.current.ajourn=0 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 3eea265d2d7..30af735fbc5 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -97,18 +97,13 @@ for(var/obj/effect/decal/cleanable/blood/drip/G in T) nums += G iconL.Remove(G.icon_state) - if(nums.len >= 3) - var/obj/effect/decal/cleanable/blood/drip/D = pick(nums) - D.blood_DNA[dna.unique_enzymes] = dna.b_type - return - var/obj/effect/decal/cleanable/blood/drip/this = new(T) - this.icon_state = pick(iconL) - this.blood_DNA = list() - this.blood_DNA[dna.unique_enzymes] = dna.b_type - - // replace many drips with something larger - if(nums.len > 3) + if (nums.len < 5) + var/obj/effect/decal/cleanable/blood/drip/this = new(T) + this.icon_state = pick(iconL) + this.blood_DNA = list() + this.blood_DNA[dna.unique_enzymes] = dna.b_type + else for(var/obj/effect/decal/cleanable/blood/drip/G in nums) del G T.add_blood(src) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index cb074b802dd..87184df30d6 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1359,7 +1359,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 if(seer) var/obj/effect/rune/R = locate() in loc - if(R && R.word1 == wordsee && R.word2 == wordhell && R.word3 == wordjoin) + if(R && R.word1 == cultwords["see"] && R.word2 == cultwords["hell"] && R.word3 == cultwords["join"]) see_invisible = SEE_INVISIBLE_OBSERVER else see_invisible = SEE_INVISIBLE_LIVING diff --git a/config/admin_ranks.txt b/config/admin_ranks.txt index 2a33adb3b80..1b377e9fd12 100644 --- a/config/admin_ranks.txt +++ b/config/admin_ranks.txt @@ -28,8 +28,8 @@ # +EVERYTHING (or +HOST or +ALL) = Simply gives you everything without having to type every flag Admin Observer -Moderator +ADMIN -Admin Candidate +@ +Moderator +MOD +Admin Candidate +ADMIN Trial Admin +@ +SPAWN +REJUV +VAREDIT +BAN Badmin +@ +POSSESS +BUILDMODE +SERVER +FUN Game Admin +@ +STEALTH +SOUNDS +DEBUG diff --git a/html/changelog.html b/html/changelog.html index 79ce92b22ab..bb67a0bc8ab 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -58,6 +58,19 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit though. Thanks. --> +
+

13/01/2013

+

Chinsky updated:

+ +
+

January 7th

Cael_Aislinn updated:

diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 40bbcbe0068..1f122c07b52 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index c5b5b8036ff..2e3093d7abe 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 189ae9ecb06..4b668974336 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 2f159ac6730..c597cfc68fe 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 2f9b7431d87..0364ea01cf5 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 4831ad2ebf7..923f3e53c36 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index 472cc22aa01..97d97c603d6 100755 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index e643075182a..1bb33ecc1f5 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/sound/items/countdown.ogg b/sound/items/countdown.ogg new file mode 100644 index 00000000000..bb19300ba94 Binary files /dev/null and b/sound/items/countdown.ogg differ