diff --git a/baystation12.dme b/baystation12.dme index 843c4e921f..c79f609a98 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 2c2e41025a..43a41c5a93 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 f07cf4b1f0..c262be46f1 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 e2edcaac7a..88023f7c9a 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 71196144c6..4b92cb04e1 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 afddd617a4..d9ee6a9d04 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 f074e2b884..8dece7e06d 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 f973540303..9801243962 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 4990ed625b..00e5ff34a1 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 b4eefa6380..c387edf840 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 29f2420b50..841935b6c2 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 b5265e89d6..c4251f7145 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 51f3287253..6234c76454 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 3817e58b11..deddad910b 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 b004238b80..e7ffaea7a6 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 ba164cfcb1..853e46a244 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 769eb50143..32dc47f56a 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 6bb2cf69ab..1c90d07a1a 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 bd4fa98af5..e63138b5fd 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 bea02b907d..820349d757 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 28a12a4798..34e310a2d8 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 7a497ab128..3da5b74549 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 0266ee0e62..f9f4669a50 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 3eea265d2d..30af735fbc 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 cb074b802d..87184df30d 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 2a33adb3b8..1b377e9fd1 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 79ce92b22a..bb67a0bc8a 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 40bbcbe006..1f122c07b5 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 c5b5b8036f..2e3093d7ab 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 189ae9ecb0..4b66897433 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 2f159ac673..c597cfc68f 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 2f9b7431d8..0364ea01cf 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 4831ad2ebf..923f3e53c3 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 472cc22aa0..97d97c603d 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 e643075182..1bb33ecc1f 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 0000000000..bb19300ba9 Binary files /dev/null and b/sound/items/countdown.ogg differ