diff --git a/baystation12.dme b/baystation12.dme index 3535be05090..ed3c7a8d357 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -127,6 +127,7 @@ #define FILE_DIR "code/modules/projectiles/projectile" #define FILE_DIR "code/modules/recycling" #define FILE_DIR "code/modules/research" +#define FILE_DIR "code/modules/security levels" #define FILE_DIR "code/unused" #define FILE_DIR "code/unused/beast" #define FILE_DIR "code/unused/computer2" @@ -170,7 +171,6 @@ #define FILE_DIR "sound/mecha" #define FILE_DIR "sound/misc" #define FILE_DIR "sound/piano" -#define FILE_DIR "sound/spells" #define FILE_DIR "sound/voice" #define FILE_DIR "sound/weapons" // END_FILE_DIR @@ -790,6 +790,7 @@ #include "code\modules\mob\living\say.dm" #include "code\modules\mob\living\blob\blob.dm" #include "code\modules\mob\living\carbon\carbon.dm" +#include "code\modules\mob\living\carbon\alien\alien.dm" #include "code\modules\mob\living\carbon\alien\say.dm" #include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm" #include "code\modules\mob\living\carbon\alien\humanoid\death.dm" @@ -966,6 +967,7 @@ #include "code\modules\research\rdmachines.dm" #include "code\modules\research\research.dm" #include "code\modules\research\server.dm" +#include "code\modules\security levels\security levels.dm" #include "code\WorkInProgress\AI_Visibility.dm" #include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\detective_work.dm" diff --git a/code/defines/mob/living/carbon/alien.dm b/code/defines/mob/living/carbon/alien.dm index 9f2f3f40695..7ed371f5d9f 100644 --- a/code/defines/mob/living/carbon/alien.dm +++ b/code/defines/mob/living/carbon/alien.dm @@ -6,7 +6,7 @@ icon = 'alien.dmi' gender = NEUTER - toxloss = 250 + var/storedPlasma = 250 var/alien_invis = 0.0 var/max_plasma = 500 diff --git a/code/defines/mob/living/carbon/alien_humanoid.dm b/code/defines/mob/living/carbon/alien_humanoid.dm index c48c0fee3bc..6a880121b4d 100644 --- a/code/defines/mob/living/carbon/alien_humanoid.dm +++ b/code/defines/mob/living/carbon/alien_humanoid.dm @@ -22,7 +22,7 @@ name = "alien hunter" health = 150 - toxloss = 100 + storedPlasma = 100 max_plasma = 150 icon_state = "alien_s" @@ -30,7 +30,7 @@ name = "alien sentinel" health = 125 - toxloss = 100 + storedPlasma = 100 max_plasma = 250 icon_state = "alien_s" diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 70e15a20f61..6d593d5dc22 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -1068,9 +1068,9 @@ flags = FPRINT | TABLEPASS | CONDUCT /obj/item/stack/sheet/r_metal - name = "reinforced metal" - singular_name = "reinforced metal sheet" - desc = "A very heavy sheet of metal." + name = "steel" + singular_name = "steel sheet" + desc = "This sheet is an alloy of iron and plasma." icon_state = "sheet-r_metal" item_state = "sheet-metal" m_amt = 7500 @@ -1079,8 +1079,8 @@ origin_tech = "materials=2" /obj/item/stack/tile/steel - name = "Steel floor tile" - singular_name = "S teel floor tile" + name = "Metal floor tile" + singular_name = "Steel floor tile" desc = "Those could work as a pretty decent throwing weapon" icon_state = "tile" w_class = 3.0 diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index 39dc7f10cbf..3a8737b4a33 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -1093,6 +1093,7 @@ reagents.add_reagent("coco", 4+round((potency / 5), 1)) bitesize = 1+round(reagents.total_volume / 2, 1) +//This object is just a transition object. All it does is make a grass tile and delete itself. /obj/item/weapon/reagent_containers/food/snacks/grown/grass seed = "/obj/item/seeds/grassseed" name = "Grass" @@ -1100,8 +1101,8 @@ icon_state = "grass" potency = 20 New() - ..() - reagents.add_reagent("nutriment", round((potency / 20), 1)) + new/obj/item/stack/tile/grass(src.loc) + del(src) /obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane seed = "/obj/item/seeds/sugarcaneseed" diff --git a/code/defines/obj/vending.dm b/code/defines/obj/vending.dm index afb3f20ee20..58350621369 100644 --- a/code/defines/obj/vending.dm +++ b/code/defines/obj/vending.dm @@ -185,6 +185,8 @@ product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!" product_hidden = "/obj/item/seeds/amanitamycelium;/obj/item/seeds/glowshroom;/obj/item/seeds/libertymycelium;/obj/item/seeds/nettleseed;/obj/item/seeds/plumpmycelium" product_hideamt = "2;2;2;2;2" + product_coin = "/obj/item/toy/waterflower" + product_coin_amt = "1" charge_type = "hydroponics" /obj/machinery/vending/magivend diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 77944bba599..d0c014248b4 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -524,6 +524,18 @@ throw_range = 10 origin_tech = "combat=3;materials=3;engineering=3" +/obj/item/weapon/pepperspray + desc = "Manufactred by UhangInc., used to blind and down an opponent quickly." + icon = 'weapons.dmi' + name = "pepperspray" + icon_state = "pepperspray" + item_state = "pepperspray" + flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY + throwforce = 3 + w_class = 2.0 + throw_speed = 2 + throw_range = 10 + /obj/item/weapon/clipboard name = "clipboard" desc = "Apply paper to this to write better. Can also hold pens." diff --git a/code/defines/turf.dm b/code/defines/turf.dm index 8c53007de95..87c7f682868 100644 --- a/code/defines/turf.dm +++ b/code/defines/turf.dm @@ -102,6 +102,10 @@ name = "floor" icon_state = "floor" +/turf/simulated/shuttle/floor4 // Added this floor tile so that I have a seperate turf to check in the shuttle -- Polymorph + name = "Brig floor" // Also added it into the 2x3 brig area of the shuttle. + icon_state = "floor4" + /turf/unsimulated intact = 1 name = "command" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index a91fcfd922c..d0cfb86e57a 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -19,9 +19,13 @@ src.icon = 'alert.dmi' src.layer = 10 -// update_lights() + // update_lights() if(name == "Space") // override defaults for space - requires_power = 0 + requires_power = 1 + sd_SetLuminosity(1) + power_light = 0 + power_equip = 0 + power_environ = 0 if(!requires_power) power_light = 0//rastaf0 diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index bc2deaf3dc0..e0e0cdf70b9 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -71,7 +71,7 @@ if ((O.client && !( O.blinded ))) O << text("\red [src] has been scanned by [user] with the [W]") else - if (!( istype(W, /obj/item/weapon/grab) ) && !(istype(W, /obj/item/weapon/plastique)) &&!(istype(W, /obj/item/weapon/cleaner)) &&!(istype(W, /obj/item/weapon/chemsprayer)) && !(istype(W, /obj/item/weapon/plantbgone)) ) + if (!( istype(W, /obj/item/weapon/grab) ) && !(istype(W, /obj/item/weapon/plastique)) &&!(istype(W, /obj/item/weapon/cleaner)) &&!(istype(W, /obj/item/weapon/chemsprayer)) &&!(istype(W, /obj/item/weapon/pepperspray)) && !(istype(W, /obj/item/weapon/plantbgone)) ) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O << text("\red [] has been hit by [] with []", src, user, W) diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 80fe93360e7..94e6c516e35 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -190,6 +190,7 @@ // command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.") // world << sound('intercept.ogg') +// set_security_level(1) /datum/game_mode/blob/proc/check_quarantine() var/numDead = 0 var/numAlive = 0 diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index c81652a2e93..ce1efeb37c1 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -401,7 +401,7 @@ /client/proc/changeling_boost_range() set category = "Changeling" set name = "Ranged Sting (10)" - set desc="Your next sting ability can be used against targets 3 squares away." + set desc="Your next sting ability can be used against targets 2 squares away." if(!usr.changeling) usr << "\red You're not a changeling, something's wrong!" @@ -418,7 +418,7 @@ usr.changeling.chem_charges -= 10 usr << "\blue Your throat adjusts to launch the sting." - usr.changeling.sting_range = 3 + usr.changeling.sting_range = 2 usr.verbs -= /client/proc/changeling_boost_range @@ -440,7 +440,7 @@ for(var/mob/living/carbon/C in oview(usr.changeling.sting_range)) victims += C var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims - if(T) + if(T && T in view(usr.changeling.sting_range)) if(usr.stat) usr << "\red Not when we are incapacitated." @@ -481,7 +481,7 @@ for(var/mob/living/carbon/C in oview(usr.changeling.sting_range)) victims += C var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims - if(T) + if(T && T in view(usr.changeling.sting_range)) if(usr.stat) usr << "\red Not when we are incapacitated." return @@ -536,7 +536,7 @@ victims += C var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims - if(T) + if(T && T in view(usr.changeling.sting_range)) if(usr.stat) usr << "\red Not when we are incapacitated." return @@ -576,7 +576,7 @@ victims += C var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims - if(T) + if(T && T in view(usr.changeling.sting_range)) if(usr.stat) usr << "\red Not when we are incapacitated." @@ -620,7 +620,7 @@ victims += C var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims - if(T) + if(T && T in view(usr.changeling.sting_range)) if(usr.stat) usr << "\red Not when we are incapacitated." return @@ -672,7 +672,7 @@ victims += C var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims - if(T) + if(T && T in view(usr.changeling.sting_range)) if(usr.stat) usr << "\red Not when we are incapacitated." return diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 3c7e5dc6b4c..b52959fdaa6 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -113,6 +113,7 @@ command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.") world << sound('intercept.ogg') + set_security_level(1) /datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=1) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 419061b9fb5..9537de5be12 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -219,6 +219,10 @@ datum/objective/escape var/turf/location = get_turf(owner.current.loc) if(!location) return 0 + + if(istype(location, /turf/simulated/shuttle/floor4)) // Fails tratiors if they are in the shuttle brig -- Polymorph + return 0 + var/area/check_area = location.loc if(istype(check_area, /area/shuttle/escape/centcom)) return 1 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index d26928f17c0..750537d11e1 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -166,16 +166,26 @@ update_rev_icons_added(rev_mind) return 1 ////////////////////////////////////////////////////////////////////////////// -//Deals with players being converted from the revolution (Not a rev anymore)// +//Deals with players being converted from the revolution (Not a rev anymore)// // Modified to handle borged MMIs. Accepts another var if the target is being borged at the time -- Polymorph. ////////////////////////////////////////////////////////////////////////////// -/datum/game_mode/proc/remove_revolutionary(datum/mind/rev_mind) +/datum/game_mode/proc/remove_revolutionary(datum/mind/rev_mind , beingborged) if(rev_mind in revolutionaries) revolutionaries -= rev_mind rev_mind.special_role = null - rev_mind.current << "\red You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you..." + + if(beingborged) + rev_mind.current << "\red The frame's firmware detects and deletes your neural reprogramming! You remember nothing from the moment you were flashed until now." + + else + rev_mind.current << "\red You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you..." + update_rev_icons_removed(rev_mind) for(var/mob/living/M in view(rev_mind.current)) - M << "[rev_mind.current] looks like they just remembered their real allegiance!" + if(beingborged) + M << "The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it." + + else + M << "[rev_mind.current] looks like they just remembered their real allegiance!" ///////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index b1c57a8d611..4c83f8a76fb 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -9,7 +9,7 @@ var/direction_out = 0 //0 = siphoning, 1 = releasing var/target_pressure = 100 - volume = 750 + volume = 2500 /obj/machinery/portable_atmospherics/pump/update_icon() src.overlays = 0 diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index e94cee774f7..d01e0b90887 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -238,7 +238,6 @@ var/global/list/autolathe_recipes = list( \ new /obj/item/weapon/airlock_electronics(), \ new /obj/item/stack/sheet/metal(), \ new /obj/item/stack/sheet/glass(), \ - new /obj/item/stack/sheet/r_metal(), \ new /obj/item/stack/sheet/rglass(), \ new /obj/item/stack/rods(), \ new /obj/item/weapon/rcd_ammo(), \ diff --git a/code/game/machinery/computer/AIcore.dm b/code/game/machinery/computer/AIcore.dm index 97addf88d01..43d670c5c53 100644 --- a/code/game/machinery/computer/AIcore.dm +++ b/code/game/machinery/computer/AIcore.dm @@ -122,6 +122,11 @@ if(P:brainmob.stat == 2) user << "\red Sticking a dead brain into the frame would sort of defeat the purpose." return + + if(P:brainmob.mind in ticker.mode.head_revolutionaries) + user << "\red The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the MMI." + return + if(jobban_isbanned(P:brainmob, "AI")) user << "\red This MMI does not seem to fit." return @@ -153,6 +158,9 @@ playsound(loc, 'Screwdriver.ogg', 50, 1) user << "\blue You connect the monitor." + if(P:brainmob.mind in ticker.mode:revolutionaries) + ticker.mode:remove_revolutionary(P:brainmob.mind , 1) + new /mob/living/silicon/ai ( loc, laws, brain ) del(src) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 093804317c3..fcfaeeb8513 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -14,6 +14,7 @@ var/state = STATE_DEFAULT var/aistate = STATE_DEFAULT var/message_cooldown = 0 + var/tmp_alertlevel = 0 var/const STATE_DEFAULT = 1 STATE_CALLSHUTTLE = 2 @@ -22,6 +23,8 @@ STATE_VIEWMESSAGE = 5 STATE_DELMESSAGE = 6 STATE_STATUSDISPLAY = 7 + STATE_ALERT_LEVEL = 8 + STATE_CONFIRM_LEVEL = 9 var/status_display_freq = "1435" var/stat_msg1 @@ -59,6 +62,31 @@ if("logout") authenticated = 0 + if("swipeidseclevel") + var/mob/M = usr + var/obj/item/weapon/card/id/I = M.equipped() + if (istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/pda = I + I = pda.id + if (I && istype(I)) + if(access_captain in I.access) + var/old_level = security_level + if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN + if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN + if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this + set_security_level(tmp_alertlevel) + if(security_level != old_level) + //Only notify the admins if an actual change happened + log_game("[key_name(usr)] has changed the security level to [get_security_level()].") + message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].", 1) + tmp_alertlevel = 0 + else: + usr << "You are not authorized to do this." + tmp_alertlevel = 0 + state = STATE_DEFAULT + else + usr << "You need to swipe your ID." + if("announce") if(src.authenticated==2) if(message_cooldown) return @@ -168,6 +196,17 @@ src.aistate = STATE_MESSAGELIST if("ai-status") src.aistate = STATE_STATUSDISPLAY + + if("securitylevel") + src.tmp_alertlevel = text2num( href_list["newalertlevel"] ) + if(!tmp_alertlevel) tmp_alertlevel = 0 + state = STATE_CONFIRM_LEVEL + + if("changeseclevel") + state = STATE_ALERT_LEVEL + + + src.updateUsrDialog() @@ -203,6 +242,7 @@ dat += "
\[ Log Out \]" if (src.authenticated==2) dat += "
\[ Make An Announcement \]" + dat += "
\[ Change alert level \]" if(emergency_shuttle.location==0) if (emergency_shuttle.online) dat += "
\[ Cancel Shuttle Call \]" @@ -248,7 +288,17 @@ dat += " Red Alert |" dat += " Lockdown |" dat += " Biohazard \]

" - + if(STATE_ALERT_LEVEL) + dat += "Current alert level: [get_security_level()]
" + if(security_level == SEC_LEVEL_DELTA) + dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." + else + dat += "Blue
" + dat += "Green" + if(STATE_CONFIRM_LEVEL) + dat += "Current alert level: [get_security_level()]
" + dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]
" + dat += "Main Menu | " : ""]Close \]" user << browse(dat, "window=communications;size=400x500") diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index a9c3cb1a8c4..3b2a8aefebd 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -243,7 +243,7 @@ obj/machinery/hydroponics/proc/mutate() // Mutates the current seed src.myseed.yield = 1 // Mushrooms always have a minimum yield of 1. if(src.myseed.potency != -1) //Not all plants have a potency - src.myseed.potency += rand(-10,10) + src.myseed.potency += rand(-25,25) if(src.myseed.potency < 0) src.myseed.potency = 0 else if(src.myseed.potency > 100) @@ -282,7 +282,7 @@ obj/machinery/hydroponics/proc/hardmutate() // Strongly mutates the current seed src.myseed.yield = 1 // Mushrooms always have a minimum yield of 1. if(src.myseed.potency != -1) //Not all plants have a potency - src.myseed.potency += rand(-20,20) + src.myseed.potency += rand(-50,50) if(src.myseed.potency < 0) src.myseed.potency = 0 else if(src.myseed.potency > 100) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 34e0fc4d058..c2caca9730c 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -77,7 +77,6 @@ var/datum/data/vending_product/R = new /datum/data/vending_product( ) R.product_name = capitalize(temp.name) R.product_path = path_list[p] - R.display_color = pick("red","blue","green") R.amount = text2num(amt_list[p]) R.charge_amount = R.amount @@ -102,6 +101,10 @@ winset(user, "vendingslot[i].buy", "command=\"skincmd vending;buy[i-1]\"") winset(user, "vendingwindow.title", "text=\"[src.name]\"") var/list/products = src.product_records + if(extended_inventory) + products |= src.hidden_records + if(coin) + products |= src.coin_records var/pages = -round(-products.len / 6) if (page > pages) page = pages @@ -128,6 +131,10 @@ if (get_dist(user, src) > 1) return var/list/products = src.product_records + if(extended_inventory) + products |= src.hidden_records + if(coin) + products |= src.coin_records var/pages = -round(-products.len / 6) switch(data) if ("pagen") @@ -151,6 +158,24 @@ if (!src.vend_ready) return + if ((!src.allowed(usr)) && (!src.emagged) && (src.wires & WIRE_SCANID)) //For SECURE VENDING MACHINES YEAH + usr << "\red Access denied." //Unless emagged of course + flick(src.icon_deny,src) + return + + if (R in coin_records) + if(!coin) + usr << "\blue You need to insert a coin to get this item." + return + if(coin.string_attached) + if(prob(50)) + usr << "\blue You successfully pull the coin out before the [src] could swallow it." + else + usr << "\blue You weren't able to pull the coin out fast enough, the machine ate it, string and all." + del(coin) + else + del(coin) + R.amount-- src.vend_ready = 0 @@ -172,7 +197,7 @@ /obj/machinery/vending/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/card/emag)) src.emagged = 1 - user << "You short out the product lock on [src]" + user << "You short out the ID lock on [src]" return else if(istype(W, /obj/item/weapon/screwdriver)) src.panel_open = !src.panel_open @@ -191,6 +216,7 @@ W.loc = src coin = W user << "\blue You insert the [W] into the [src]" + updateWindow(user) return else if(istype(W,/obj/item/weapon/vending_charge/)) DoCharge(W,user) @@ -226,6 +252,13 @@ winshow(user, "vendingwindow", 1) user.skincmds["vending"] = src + var/dat = "[src.name]" + + if(coin) + dat += "
There is a [coin.name] in the slot!" + else + dat += "
The coin slot is empty." + if(panel_open) var/list/vendwires = list( "Violet" = 1, @@ -233,7 +266,7 @@ "Goldenrod" = 3, "Green" = 4, ) - var/dat = "


Access Panel
" + dat += "
Access Panel
" for(var/wiredesc in vendwires) var/is_uncut = src.wires & APCWireColorToFlag[vendwires[wiredesc]] dat += "[wiredesc] wire: " @@ -250,12 +283,11 @@ dat += "The green light is [src.extended_inventory ? "on" : "off"].
" dat += "The [(src.wires & WIRE_SCANID) ? "purple" : "yellow"] light is on.
" - if (product_slogans != "") + if(product_slogans != "") dat += "The speaker switch is [src.shut_up ? "off" : "on"]. Toggle" - user << browse(dat, "") - onclose(user, "") - return + user << browse(dat, "") + onclose(user, "") /obj/machinery/vending/Topic(href, href_list) if(stat & (BROKEN|NOPOWER)) @@ -283,6 +315,8 @@ usr.put_in_hand(coin) usr << "\blue You remove the [coin] from the [src]" coin = null + updateWindow(usr) + usr.skincmds["vending"] = src if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) @@ -349,6 +383,8 @@ src.mend(twire) else src.cut(twire) + updateWindow(usr) + usr.skincmds["vending"] = src else if ((href_list["pulsewire"]) && (src.panel_open)) var/twire = text2num(href_list["pulsewire"]) @@ -360,6 +396,8 @@ return else src.pulse(twire) + updateWindow(usr) + usr.skincmds["vending"] = src else if ((href_list["togglevoice"]) && (src.panel_open)) src.shut_up = !src.shut_up diff --git a/code/game/objects/alien/facehugger.dm b/code/game/objects/alien/facehugger.dm index b68f9aed116..dfb45df9575 100644 --- a/code/game/objects/alien/facehugger.dm +++ b/code/game/objects/alien/facehugger.dm @@ -2,8 +2,8 @@ var/const MIN_IMPREGNATION_TIME = 100 //time it takes to impregnate someone MAX_IMPREGNATION_TIME = 150 - MIN_ACTIVE_TIME = 30 //time between being dropped and going idle - MAX_ACTIVE_TIME = 50 + MIN_ACTIVE_TIME = 300 //time between being dropped and going idle + MAX_ACTIVE_TIME = 600 /obj/item/clothing/mask/facehugger name = "alien" @@ -13,7 +13,7 @@ var/const w_class = 1 //note: can be picked up by aliens unlike most other items of w_class below 4 flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH|MASKCOVERSEYES - var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case + var/stat = UNCONSCIOUS //UNCONSCIOUS is the idle state in this case var/sterile = 0 @@ -177,6 +177,11 @@ var/const stat = CONSCIOUS + for(var/mob/living/carbon/alien/alien in world) + var/image/activeIndicator = image('alien.dmi', loc = src, icon_state = "facehugger_active") + activeIndicator.override = 1 + alien.client.images += activeIndicator + spawn(rand(MIN_ACTIVE_TIME,MAX_ACTIVE_TIME)) GoIdle() @@ -186,6 +191,8 @@ var/const if(stat == DEAD || stat == UNCONSCIOUS) return + RemoveActiveIndicators() + stat = UNCONSCIOUS return @@ -194,6 +201,8 @@ var/const if(stat == DEAD) return + RemoveActiveIndicators() + icon_state = "facehugger_dead" stat = DEAD @@ -202,7 +211,13 @@ var/const return + proc/RemoveActiveIndicators() //removes the "active" facehugger indicator from all aliens in the world for this hugger + for(var/mob/living/carbon/alien/alien in world) + for(var/image/image in alien.client.images) + if(image.icon_state == "facehugger_active" && image.loc == src) + del(image) + return /* NOPE.png -- Urist diff --git a/code/game/objects/closets/secure/secure_closets.dm b/code/game/objects/closets/secure/secure_closets.dm index 64c3689ac54..1923e0cf847 100644 --- a/code/game/objects/closets/secure/secure_closets.dm +++ b/code/game/objects/closets/secure/secure_closets.dm @@ -4,6 +4,12 @@ return 0 return 1 +/obj/structure/closet/secure_closet/close() + ..() + if(broken) + icon_state = src.icon_off + return 1 + /obj/structure/closet/secure_closet/emp_act(severity) for(var/obj/O in src) O.emp_act(severity) @@ -35,7 +41,8 @@ broken = 1 locked = 0 desc = "It appears to be broken." - icon_state = src.icon_broken + icon_state = icon_off + flick(icon_broken, src) if(istype(W, /obj/item/weapon/melee/energy/blade)) var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src.loc) diff --git a/code/game/objects/closets/secure/security.dm b/code/game/objects/closets/secure/security.dm index 253dd3cb92b..d6e5518fecc 100644 --- a/code/game/objects/closets/secure/security.dm +++ b/code/game/objects/closets/secure/security.dm @@ -100,6 +100,7 @@ new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/weapon/storage/belt/security(src) new /obj/item/weapon/flashbang(src) + new /obj/item/weapon/pepperspray(src) new /obj/item/device/flash(src) new /obj/item/weapon/melee/baton(src) new /obj/item/weapon/gun/energy/taser(src) diff --git a/code/game/objects/items/robot_parts.dm b/code/game/objects/items/robot_parts.dm index e929121ceb1..8a906142aa1 100644 --- a/code/game/objects/items/robot_parts.dm +++ b/code/game/objects/items/robot_parts.dm @@ -162,6 +162,10 @@ user << "\red Sticking a dead brain into the frame would sort of defeat the purpose." return + if(M.brainmob.mind in ticker.mode.head_revolutionaries) + user << "\red The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the MMI." + return + if(jobban_isbanned(M.brainmob, "Cyborg")) user << "\red This MMI does not seem to fit." return @@ -183,6 +187,10 @@ G.corpse.mind.transfer_to(O) del(G) break + + if(O.mind in ticker.mode:revolutionaries) + ticker.mode:remove_revolutionary(O.mind , 1) + if(O.mind && O.mind.special_role) O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite") diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 131cd9b0993..7958372d6a3 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -130,18 +130,7 @@ RCD user << "The RCD now holds [matter]/30 matter-units." desc = "A RCD. It currently holds [matter]/30 matter-units." return - if(istype(A, /turf/simulated/wall/r_wall) && matter >= 8) - user << "Deconstructing RWall (8)..." - playsound(src.loc, 'click.ogg', 50, 1) - if(do_after(user, 60)) - if(!disabled && matter >= 8) - spark_system.set_up(5, 0, src) - src.spark_system.start() - A:ReplaceWithWall() - playsound(src.loc, 'Deconstruct.ogg', 50, 1) - matter -= 8 - user << "The RCD now holds [matter]/30 matter-units." - desc = "A RCD. It currently holds [matter]/30 matter-units." + if(istype(A, /turf/simulated/wall/r_wall)) return if(istype(A, /turf/simulated/floor) && matter >= 5) user << "Deconstructing Floor (5)..." diff --git a/code/game/objects/items/weapons/grenades.dm b/code/game/objects/items/weapons/grenades.dm index 28090a66ec6..afbdc688913 100644 --- a/code/game/objects/items/weapons/grenades.dm +++ b/code/game/objects/items/weapons/grenades.dm @@ -26,6 +26,7 @@ FLASHBANG afterattack(atom/target as mob|obj|turf|area, mob/user as mob) if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container + if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..() if((user.equipped() == src)&&(!active)&&(clown_check(user))) user << "\red You prime the emp grenade! [det_time/10] seconds!" src.active = 1 @@ -93,6 +94,7 @@ FLASHBANG active = 0 det_time = 30 proc + bang(var/turf/T , var/mob/living/carbon/M) prime() clown_check(var/mob/living/user) @@ -119,6 +121,7 @@ FLASHBANG afterattack(atom/target as mob|obj|turf|area, mob/user as mob) if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container + if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..() if((user.equipped() == src)&&(!active)&&(clown_check(user))) user << "\red You prime the flashbang! [det_time/10] seconds!" src.active = 1 @@ -143,81 +146,92 @@ FLASHBANG ..() return + bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. + if (locate(/obj/item/weapon/cloaking_device, M)) // Called during the loop that bangs people in lockers/containers and when banging + for(var/obj/item/weapon/cloaking_device/S in M) // people in normal view. Could theroetically be called during other explosions. + S.active = 0 // -- Polymorph + S.icon_state = "shield0" - prime() + M << "\red BANG" playsound(src.loc, 'bang.ogg', 25, 1) + +//Checking for protections + var/eye_safety = 0 + var/ear_safety = 0 + if(iscarbon(M)) + eye_safety = M.eyecheck() + if(ishuman(M)) + if(istype(M:ears, /obj/item/clothing/ears/earmuffs)) + ear_safety += 2 + if(M.mutations & HULK) + ear_safety += 1 + if(istype(M:head, /obj/item/clothing/head/helmet)) + ear_safety += 1 + +//Flashing everyone + if(eye_safety < 1) + flick("e_flash", M.flash) + M.eye_stat += rand(1, 3) + M.stunned = max(M.stunned,2) + M.weakened = max(M.weakened,10) + + + +//Now applying sound + if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M)) + if(ear_safety > 0) + M.stunned = max(M.stunned,2) + M.weakened = max(M.weakened,1) + else + M.stunned = max(M.stunned,10) + M.weakened = max(M.weakened,3) + if ((prob(14) || (M == src.loc && prob(70)))) + M.ear_damage += rand(1, 10) + else + M.ear_damage += rand(0, 5) + M.ear_deaf = max(M.ear_deaf,15) + + else if(get_dist(M, T) <= 5) + if(!ear_safety) + M.stunned = max(M.stunned,8) + M.ear_damage += rand(0, 3) + M.ear_deaf = max(M.ear_deaf,10) + + else if(!ear_safety) + M.stunned = max(M.stunned,4) + M.ear_damage += rand(0, 1) + M.ear_deaf = max(M.ear_deaf,5) + +//This really should be in mob not every check + if (M.eye_stat >= 20) + M << "\red Your eyes start to burn badly!" + M.disabilities |= 1 + if (prob(M.eye_stat - 20 + 1)) + M << "\red You can't see anything!" + M.sdisabilities |= 1 + if (M.ear_damage >= 15) + M << "\red Your ears start to ring badly!" + if (prob(M.ear_damage - 10 + 5)) + M << "\red You can't hear anything!" + M.sdisabilities |= 4 + else + if (M.ear_damage >= 5) + M << "\red Your ears start to ring!" + + prime() // Prime now just handles the two loops that query for people in lockers and people who can see it. var/turf/T = get_turf(src) if(T) T.hotspot_expose(700,125) + for(var/obj/structure/closet/L in view(T, null)) + if(locate(/mob/living/carbon/, L)) + for(var/mob/living/carbon/M in L) + bang(T, M) + + for(var/mob/living/carbon/M in viewers(T, null)) - if (locate(/obj/item/weapon/cloaking_device, M)) - for(var/obj/item/weapon/cloaking_device/S in M) - S.active = 0 - S.icon_state = "shield0" + bang(T, M) - M << "\red BANG" - -//Checking for protections - var/eye_safety = 0 - var/ear_safety = 0 - if(iscarbon(M)) - eye_safety = M.eyecheck() - if(ishuman(M)) - if(istype(M:ears, /obj/item/clothing/ears/earmuffs)) - ear_safety += 2 - if(M.mutations & HULK) - ear_safety += 1 - if(istype(M:head, /obj/item/clothing/head/helmet)) - ear_safety += 1 - -//Flashing everyone - if(eye_safety < 1) - flick("e_flash", M.flash) - M.eye_stat += rand(1, 3) - M.stunned = max(M.stunned,2) - M.weakened = max(M.weakened,10) - -//Now applying sound - if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M)) - if(ear_safety > 0) - M.stunned = max(M.stunned,2) - M.weakened = max(M.weakened,1) - else - M.stunned = max(M.stunned,10) - M.weakened = max(M.weakened,3) - if ((prob(14) || (M == src.loc && prob(70)))) - M.ear_damage += rand(1, 10) - else - M.ear_damage += rand(0, 5) - M.ear_deaf = max(M.ear_deaf,15) - - else if(get_dist(M, T) <= 5) - if(!ear_safety) - M.stunned = max(M.stunned,8) - M.ear_damage += rand(0, 3) - M.ear_deaf = max(M.ear_deaf,10) - - else if(!ear_safety) - M.stunned = max(M.stunned,4) - M.ear_damage += rand(0, 1) - M.ear_deaf = max(M.ear_deaf,5) - -//This really should be in mob not every check - if (M.eye_stat >= 20) - M << "\red Your eyes start to burn badly!" - M.disabilities |= 1 - if (prob(M.eye_stat - 20 + 1)) - M << "\red You can't see anything!" - M.sdisabilities |= 1 - if (M.ear_damage >= 15) - M << "\red Your ears start to ring badly!" - if (prob(M.ear_damage - 10 + 5)) - M << "\red You can't hear anything!" - M.sdisabilities |= 4 - else - if (M.ear_damage >= 5) - M << "\red Your ears start to ring!" //Blob damage here for(var/obj/effect/blob/B in view(8,T)) @@ -251,3 +265,16 @@ FLASHBANG prime() return 0 return 1 + + + + + + + + + + + + + diff --git a/code/game/objects/items/weapons/mops_cleaners.dm b/code/game/objects/items/weapons/mops_cleaners.dm index 473c0b90d22..c6e2c98eabd 100644 --- a/code/game/objects/items/weapons/mops_cleaners.dm +++ b/code/game/objects/items/weapons/mops_cleaners.dm @@ -14,7 +14,7 @@ MOP return /obj/item/weapon/cleaner/afterattack(atom/A as mob|obj, mob/user as mob) - if (istype(A, /obj/item/weapon/storage/backpack )) + if (istype(A, /obj/item/weapon/storage )) return if (istype(A, /obj/effect/proc_holder/spell )) return @@ -91,7 +91,7 @@ MOP return /obj/item/weapon/chemsprayer/afterattack(atom/A as mob|obj, mob/user as mob) - if (istype(A, /obj/item/weapon/storage/backpack )) + if (istype(A, /obj/item/weapon/storage )) return if (istype(A, /obj/effect/proc_holder/spell )) return @@ -165,7 +165,95 @@ MOP return -/obj/item/weapon/chemsprayer/examine() +/obj/item/weapon/pepperspray/New() + var/datum/reagents/R = new/datum/reagents(45) + reagents = R + R.my_atom = src + R.add_reagent("condensedcapsaicin", 45) + +/obj/item/weapon/pepperspray/attack(mob/living/carbon/human/M as mob, mob/user as mob) + return + +/obj/item/weapon/pepperspray/afterattack(atom/A as mob|obj, mob/user as mob) + if (istype(A, /obj/item/weapon/storage )) + return + if (istype(A, /obj/effect/proc_holder/spell )) + return + else if (istype(A, /obj/structure/reagent_dispensers/peppertank) && get_dist(src,A) <= 1) + A.reagents.trans_to(src, 45) + user << "\blue Pepper spray refilled" + playsound(src.loc, 'refill.ogg', 50, 1, -6) + return + else if (src.reagents.total_volume < 1) + user << "\blue [src] is empty!" + return + playsound(src.loc, 'spray2.ogg', 50, 1, -6) + + var/Sprays[3] + for(var/i=1, i<=3, i++) // intialize sprays + if(src.reagents.total_volume < 1) break + var/obj/effect/decal/D = new/obj/effect/decal(get_turf(src)) + D.name = "chemicals" + D.icon = 'chempuff.dmi' + D.create_reagents(15) + src.reagents.trans_to(D, 15) + + var/rgbcolor[3] + var/finalcolor + for(var/datum/reagent/re in D.reagents.reagent_list) + if(!finalcolor) + rgbcolor = GetColors(re.color) + finalcolor = re.color + else + var/newcolor[3] + var/prergbcolor[3] + prergbcolor = rgbcolor + newcolor = GetColors(re.color) + + rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2 + rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2 + rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2 + + finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3]) + + D.icon += finalcolor + + Sprays[i] = D + + var/direction = get_dir(src, A) + var/turf/T = get_turf(A) + var/turf/T1 = get_step(T,turn(direction, 90)) + var/turf/T2 = get_step(T,turn(direction, -90)) + var/list/the_targets = list(T,T1,T2) + + for(var/i=1, i<=Sprays.len, i++) + spawn() + var/obj/effect/decal/D = Sprays[i] + if(!D) continue + + // Spreads the sprays a little bit + var/turf/my_target = pick(the_targets) + the_targets -= my_target + + for(var/j=1, j<=rand(6,8), j++) + step_towards(D, my_target) + D.reagents.reaction(get_turf(D)) + for(var/atom/t in get_turf(D)) + D.reagents.reaction(t) + sleep(2) + del(D) + sleep(1) + + if(isrobot(user)) //Cyborgs can clean forever if they keep charged + var/mob/living/silicon/robot/janitor = user + janitor.cell.charge -= 20 + var/refill = src.reagents.get_master_reagent_id() + spawn(600) + src.reagents.add_reagent(refill, 10) + + return + +/obj/item/weapon/pepperspray/examine() set src in usr usr << text("\icon[] [] units of cleaner left!", src, src.reagents.total_volume) ..() diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index ade36179d48..a6f00c091a0 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -21,12 +21,6 @@ WELDINGTOOOL origin_tech = "materials=1;engineering=1" - New() - if (prob(75)) - src.pixel_x = rand(0, 16) - return - - // SCREWDRIVER /obj/item/weapon/screwdriver/New() diff --git a/code/game/objects/stacks/metal.dm b/code/game/objects/stacks/metal.dm index a0f8738fd71..ad936cf5660 100644 --- a/code/game/objects/stacks/metal.dm +++ b/code/game/objects/stacks/metal.dm @@ -68,7 +68,6 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ null, \ new/datum/stack_recipe("floor tile", /obj/item/stack/tile/steel, 1, 4, 10), \ new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60), \ - new/datum/stack_recipe("reinforced sheet", /obj/item/stack/sheet/r_metal, 2, 1, 50), \ null, \ new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, one_per_turf = 1), \ new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), \ @@ -92,7 +91,6 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ // /datum/stack_recipe/New(title, result_type, req_amount, res_amount, max_res_amount, time, one_per_turf, on_floor = 0) var/global/list/datum/stack_recipe/r_metal_recipes = list ( \ new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts/reinforced, 2), \ - new/datum/stack_recipe("metal sheet", /obj/item/stack/sheet/metal, 1, 2, 50), \ new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, one_per_turf = 1), \ ) diff --git a/code/game/objects/stacks/stack.dm b/code/game/objects/stacks/stack.dm index 8fdf69357f6..3ca6fc7dce3 100644 --- a/code/game/objects/stacks/stack.dm +++ b/code/game/objects/stacks/stack.dm @@ -191,7 +191,8 @@ return if (src.amount < R.req_amount*multiplier) return - var/O = new R.result_type( usr.loc ) + var/atom/O = new R.result_type( usr.loc ) + O.dir = usr.dir if (R.max_res_amount>1) var/obj/item/stack/new_item = O new_item.amount = R.res_amount*multiplier diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm index 84267da77cd..5a51aa630df 100644 --- a/code/game/objects/storage/belt.dm +++ b/code/game/objects/storage/belt.dm @@ -108,6 +108,7 @@ //storage_slots = 6 can_hold = list( "/obj/item/weapon/flashbang", + "/obj/item/weapon/pepperspray", "/obj/item/weapon/handcuffs", "/obj/item/device/flash", "/obj/item/clothing/glasses", diff --git a/code/game/sound.dm b/code/game/sound.dm index 7d9914a220b..e917242adef 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -18,7 +18,7 @@ if (vary) S.frequency = rand(32000, 55000) - for (var/mob/M in range(world.view+extrarange, source)) + for (var/mob/M in range(world.view+extrarange, source)) // Plays for people in range. if (M.client) if(M.ear_deaf <= 0 || !M.ear_deaf) if(isturf(source)) @@ -27,6 +27,12 @@ M << S + for(var/obj/structure/closet/L in range(world.view+extrarange, source)) + if(locate(/mob/, L)) + for(var/mob/Ml in L) + Ml << S + // Now plays for people in lockers! -- Polymorph + /mob/proc/playsound_local(var/atom/source, soundin, vol as num, vary, extrarange as num) if(!src.client || ear_deaf > 0) return switch(soundin) @@ -75,31 +81,27 @@ client/verb/Toggle_Soundscape() if (!A:client) return //if (A:ear_deaf) return - if (A && A:client && !A:client:ambience_playing && !A:client:no_ambi) // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! - LastyScratch + if (A && A:client && !A:client:ambience_playing && !A:client:no_ambi) // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas next to each other should have the same sounds to prevent cutoff when possible.- LastyScratch A:client:ambience_playing = 1 A << sound('shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2) switch(src.name) if ("Chapel") sound = pick('ambicha1.ogg','ambicha2.ogg','ambicha3.ogg','ambicha4.ogg') - if ("Morgue") sound = pick('ambimo1.ogg','ambimo2.ogg','ambistat.ogg') - if ("Space") sound = pick('ambispace.ogg','ambistat.ogg',) + if ("Morgue") sound = pick('ambimo1.ogg','ambimo2.ogg','title2.ogg') + if ("Space") sound = pick('ambispace.ogg','title2.ogg',) if ("Engine Control") sound = pick('ambisin1.ogg','ambisin2.ogg','ambisin3.ogg','ambisin4.ogg') if ("Atmospherics") sound = pick('ambiatm1.ogg') - if ("Medbay") sound = pick('ambistat.ogg') - if ("Bridge") sound = pick('ambistat.ogg') - if ("Arrival Shuttle Hallway") sound = pick('ambistat.ogg','ambiruntime.ogg') if ("AI Sat Ext") sound = pick('ambiruntime.ogg','ambimalf.ogg') if ("AI Satellite") sound = pick('ambimalf.ogg') if ("AI Satellite Teleporter Room") sound = pick('ambiruntime.ogg','ambimalf.ogg') - if ("Central Primary Hallway") sound = pick('ambiruntime.ogg') - if ("Aft Primary Hallway") sound = pick('ambiruntime.ogg') - if ("AI Upload Foyer") sound = pick('ambimalf.ogg', 'null.ogg', 'null.ogg') - if ("AI Upload Chamber") sound = pick('ambimalf.ogg','null.ogg','null.ogg') + if ("Bar") sound = pick('title1.ogg') + if ("AI Upload Foyer") sound = pick('ambimalf.ogg', 'null.ogg') + if ("AI Upload Chamber") sound = pick('ambimalf.ogg','null.ogg') if ("Mine") sound = pick('ambimine.ogg') musVolume = 25 else - sound = pick('ambigen1.ogg','ambigen3.ogg','ambigen4.ogg','ambigen5.ogg','ambigen6.ogg','ambigen7.ogg','ambigen8.ogg','ambigen9.ogg','ambigen10.ogg','ambigen11.ogg','ambigen12.ogg','ambigen14.ogg') + sound = pick('ambiruntime.ogg','ambigen1.ogg','ambigen3.ogg','ambigen4.ogg','ambigen5.ogg','ambigen6.ogg','ambigen7.ogg','ambigen8.ogg','ambigen9.ogg','ambigen10.ogg','ambigen11.ogg','ambigen12.ogg','ambigen14.ogg') if (prob(35)) diff --git a/code/game/turf.dm b/code/game/turf.dm index 8446c1a4d14..e2d55d8104d 100644 --- a/code/game/turf.dm +++ b/code/game/turf.dm @@ -33,6 +33,12 @@ ..() return 0 +/turf/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj ,/obj/item/projectile/bullet/gyro)) + explosion(src, -1, 0, 2) + ..() + return 0 + /turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area) if (!mover || !isturf(mover.loc)) return 1 diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index 49b3873af62..1d12bd7c9ca 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -1687,6 +1687,37 @@ datum ..() return + condensedcapsaicin + name = "Condensed Capsaicin" + id = "condensedcapsaicin" + description = "This shit goes in pepperspray." + reagent_state = LIQUID + color = "#B31008" // rgb: 179, 16, 8 + + reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + if(istype(M, /mob/living/carbon/human)) + if(M:wear_mask) + + M << "\red Your mask protects you from the pepperspray!" + return + if(M:head) + M << "\red Your helmet protects you from the pepperspray!" + return + if(M:glasses) + M << "\red Your glasses protect you from most of the pepperspray!" + M:emote("scream") + M.eye_blurry = max(M.eye_blurry, 1) + return + M:emote("scream") + M << "\red You're sprayed directly in the eyes with pepperspray!" + M.eye_blurry = max(M.eye_blurry, 5) + M.eye_blind = max(M.eye_blind, 2) + M:paralysis = max(M:paralysis, 1) + M.drop_item() + frostoil name = "Frost Oil" id = "frostoil" diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 16f0fe07c7a..036444e4756 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -173,6 +173,7 @@ afterattack(atom/target as mob|obj|turf|area, mob/user as mob) if (istype(target, /obj/item/weapon/storage)) return ..() + if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..() if (!src.state && stage == 2 && !crit_fail) user << "\red You prime the grenade! 3 seconds!" message_admins("[key_name_admin(user)] used a chemistry grenade ([src.name]).") @@ -322,6 +323,105 @@ reagents = R R.my_atom = src +/obj/item/weapon/gun/grenadelauncher + name = "grenade launcher" + icon = 'gun.dmi' + icon_state = "riotgun" + item_state = "riotgun" + w_class = 4.0 + throw_speed = 2 + throw_range = 10 + force = 5.0 + var/list/grenades = new/list() + var/max_grenades = 3 + m_amt = 2000 + + examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + usr << "\icon [src] Grenade launcher:" + usr << "\blue [grenades] / [max_grenades] Grenades." + + attackby(obj/item/I as obj, mob/user as mob) + if((istype(I, /obj/item/weapon/chem_grenade)) || (istype(I, /obj/item/weapon/flashbang)) || (istype(I, /obj/item/weapon/smokebomb)) || (istype(I, /obj/item/weapon/mustardbomb)) || (istype(I, /obj/item/weapon/empgrenade))) + if(grenades.len < max_grenades) + user.drop_item() + I.loc = src + grenades += I + user << "\blue You put the grenade in the grenade launcher." + user << "\blue [grenades.len] / [max_grenades] Grenades." + else + usr << "\red The grenade launcher cannot hold more grenades." + + afterattack(obj/target, mob/user , flag) + if(target == user) return + + if(grenades.len) + spawn(0) fire_grenade(target,user) + else + usr << "\red The grenade launcher is empty." + + proc + fire_grenade(atom/target, mob/user) + if (locate (/obj/structure/table, src.loc)) + return + else + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("\red [] fired a grenade!", user), 1) + user << "\red You fire the grenade launcher!" + if (istype(grenades[1], /obj/item/weapon/chem_grenade)) + var/obj/item/weapon/chem_grenade/F = grenades[1] + grenades -= F + F.loc = user.loc + F.throw_at(target, 30, 2) + message_admins("[key_name_admin(user)] fired a chemistry grenade from a grenade launcher ([src.name]).") + log_game("[key_name_admin(user)] used a chemistry grenade ([src.name]).") + F.state = 1 + F.icon_state = initial(icon_state)+"_armed" + playsound(user.loc, 'armbomb.ogg', 75, 1, -3) + spawn(15) + F.explode() + else if (istype(grenades[1], /obj/item/weapon/flashbang)) + var/obj/item/weapon/flashbang/F = grenades[1] + grenades -= F + F.loc = user.loc + F.throw_at(target, 30, 2) + F.active = 1 + F.icon_state = "flashbang1" + playsound(user.loc, 'armbomb.ogg', 75, 1, -3) + spawn(15) + F.prime() + else if (istype(grenades[1], /obj/item/weapon/smokebomb)) + var/obj/item/weapon/smokebomb/F = grenades[1] + grenades -= F + F.loc = user.loc + F.throw_at(target, 30, 2) + F.icon_state = "flashbang1" + playsound(user.loc, 'armbomb.ogg', 75, 1, -3) + spawn(15) + F.prime() + else if (istype(grenades[1], /obj/item/weapon/mustardbomb)) + var/obj/item/weapon/mustardbomb/F = grenades[1] + grenades -= F + F.loc = user.loc + F.throw_at(target, 30, 2) + F.icon_state = "flashbang1" + playsound(user.loc, 'armbomb.ogg', 75, 1, -3) + spawn(15) + F.prime() + else if (istype(grenades[1], /obj/item/weapon/empgrenade)) + var/obj/item/weapon/empgrenade/F = grenades[1] + grenades -= F + F.loc = user.loc + F.throw_at(target, 30, 2) + F.active = 1 + F.icon_state = "empar" + playsound(user.loc, 'armbomb.ogg', 75, 1, -3) + spawn(15) + F.prime() + + /obj/item/weapon/gun/syringe name = "syringe gun" icon = 'gun.dmi' @@ -2633,6 +2733,18 @@ ..() reagents.add_reagent("fuel",1000) +/obj/structure/reagent_dispensers/peppertank + name = "Pepper Spray Refiller" + desc = "Refill pepper spray canisters." + icon = 'objects.dmi' + icon_state = "peppertank" + anchored = 1 + density = 0 + amount_per_transfer_from_this = 45 + New() + ..() + reagents.add_reagent("condensedcapsaicin",1000) + /obj/structure/reagent_dispensers/fueltank/blob_act() explosion(src.loc,0,1,5,7,10) if(src) diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index bb398955429..57c7c756e9b 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,5 +1,5 @@ /obj/item/clothing/suit/armor - allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) body_parts_covered = UPPER_TORSO|LOWER_TORSO flags = FPRINT | TABLEPASS diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 1dee25d94d5..ff5ae0d8188 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -254,6 +254,13 @@ else on = 0 continue + if (selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_adamantine == 0) + if (ore_glass > 0) + ore_glass--; + new /obj/item/stack/sheet/rglass(output.loc) + else + on = 0 + continue if (selected_glass == 0 && selected_gold == 1 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_adamantine == 0) if (ore_gold > 0) ore_gold--; @@ -296,10 +303,10 @@ else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_adamantine == 0) + if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_adamantine == 0) if (ore_iron > 0) ore_iron--; - new /obj/item/stack/sheet/metal(output.loc) + new /obj/item/stack/sheet/r_metal(output.loc) else on = 0 continue diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm new file mode 100644 index 00000000000..1fad304014d --- /dev/null +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -0,0 +1,18 @@ +/mob/living/carbon/alien/adjustToxLoss(amount) + storedPlasma = min(max(storedPlasma + amount,0),max_plasma) //upper limit of max_plasma, lower limit of 0 + return + +/mob/living/carbon/alien/proc/getPlasma() + return storedPlasma + +/mob/living/carbon/alien/eyecheck() + return 2 + +/mob/living/carbon/alien/New() + ..() + + for(var/obj/item/clothing/mask/facehugger/facehugger in world) + if(facehugger.stat == CONSCIOUS) + var/image/activeIndicator = image('alien.dmi', loc = facehugger, icon_state = "facehugger_active") + activeIndicator.override = 1 + client.images += activeIndicator \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 81fa6ab7b39..f45a231b458 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -10,10 +10,10 @@ Doesn't work on other aliens/AI.*/ if(stat) src << "\green You must be conscious to do this." return 0 - else if(X&&getToxLoss() < X) + else if(X && getPlasma() < X) src << "\green Not enough plasma stored." return 0 - else if(Y&&(!isturf(src.loc) || istype(src.loc, /turf/space))) + else if(Y && (!isturf(src.loc) || istype(src.loc, /turf/space))) src << "\green Bad place for a garden!" return 0 else return 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 30579f5ff41..394206158c8 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -72,7 +72,7 @@ stat(null, "Move Mode: [m_intent]") if (client.statpanel == "Status") - stat(null, "Plasma Stored: [getToxLoss()]") + stat(null, "Plasma Stored: [getPlasma()]") ///mob/living/carbon/alien/humanoid/bullet_act(var/obj/item/projectile/Proj) taken care of in living diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 8aac91fec48..3695cac6515 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -63,7 +63,7 @@ if (client.statpanel == "Status") stat(null, "Progress: [amount_grown]/200") - stat(null, "Plasma Stored: [getToxLoss()]") + stat(null, "Plasma Stored: [getPlasma()]") ///mob/living/carbon/alien/larva/bullet_act(var/obj/item/projectile/Proj) taken care of in living diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index 277c0d2a017..63cad044428 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -1,6 +1,3 @@ -/mob/living/carbon/alien/eyecheck() - return 2 - /mob/living/carbon/alien/say_understands(var/other) if (istype(other, /mob/living/carbon/alien)) return 1 diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index f1988a6cad5..13dbb7d3f0c 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -219,8 +219,8 @@ if ((stat & BROKEN) || malfhack) user.visible_message(\ "\red [user.name] has broken the power control board inside [src.name]!",\ - "You broke the charred power control board and remove remains.", - "You hear crack") + "You broke the charred power control board and remove the remains.", + "You hear a crack!") //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 else user.visible_message(\ @@ -274,7 +274,7 @@ return updateicon() else if(emagged || malfhack) - user << "The interface is broken" + user << "The interface is broken." else wiresexposed = !wiresexposed user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" @@ -315,7 +315,7 @@ user << "You fail to [ locked ? "unlock" : "lock"] the APC interface." else if (istype(W, /obj/item/weapon/cable_coil) && !terminal && opened && has_electronics!=2) if (src.loc:intact) - user << "\red You must remove the floor plating first." + user << "\red You must remove the floor plating in front of the APC first." return var/obj/item/weapon/cable_coil/C = W if(C.amount < 10) @@ -339,7 +339,7 @@ terminal.connect_to_network() else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2) if (src.loc:intact) - user << "\red You must remove the floor plating first." + user << "\red You must remove the floor plating in front of the APC first." return user << "You begin to cut cables..." playsound(src.loc, 'Deconstruct.ogg', 50, 1) @@ -378,7 +378,7 @@ new /obj/item/stack/sheet/metal(loc) user.visible_message(\ "\red [src] has been cut apart by [user.name] with the weldingtool.",\ - "You disassembled brocken APC frame.",\ + "You disassembled the broken APC frame.",\ "\red You hear welding.") else new /obj/item/apc_frame(loc) @@ -394,13 +394,13 @@ if (opened==2) opened = 1 user.visible_message(\ - "\red [user.name] has replaced the damaged APC frontal panel with new one.",\ - "You replace the damaged APC frontal panel with new one.") + "\red [user.name] has replaced the damaged APC frontal panel with a new one.",\ + "You replace the damaged APC frontal panel with a new one.") del(W) updateicon() else if (istype(W, /obj/item/apc_frame) && opened && ((stat & BROKEN) || malfhack)) if (has_electronics) - user << "You cannot repair this heavy damaged APC until broken electronics stills inside." + user << "You cannot repair this APC until you remove the electronics still inside." return user << "You begin to replace the damaged APC frame..." if(do_after(user, 50)) diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 65af7edf66f..e3177e7438b 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -63,6 +63,7 @@ process() charge_tick++ if(charge_tick < 4) return 0 + charge_tick = 0 if(!power_supply) return 0 power_supply.give(100) return 1 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 2d7da580fe5..74d2e4ce730 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -34,12 +34,6 @@ damage = 20 -/obj/item/projectile/bullet/gyro - name ="gyro" - icon_state= "bolter" - damage = 50 - - /obj/item/projectile/bullet/stunshot name = "stunshot" damage = 5 diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 530dd7f0f70..052c237146d 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -12,6 +12,18 @@ return 1 +/obj/item/projectile/bullet/gyro + name ="gyro" + icon_state= "bolter" + damage = 50 + flag = "bullet" + + + on_hit(var/atom/target, var/blocked = 0) + explosion(target, -1, 0, 2) + return 1 + + /obj/item/projectile/temp name = "freeze beam" diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm new file mode 100644 index 00000000000..ee34115779d --- /dev/null +++ b/code/modules/security levels/security levels.dm @@ -0,0 +1,113 @@ +/var/security_level = 0 +//0 = code green +//1 = code blue +//2 = code red +//3 = code delta + +/proc/set_security_level(var/level) + switch(level) + if("green") + level = SEC_LEVEL_GREEN + if("blue") + level = SEC_LEVEL_BLUE + if("red") + level = SEC_LEVEL_RED + if("delta") + level = SEC_LEVEL_DELTA + + //Will not be announced if you try to set to the same level as it already is + if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != security_level) + switch(level) + if(SEC_LEVEL_GREEN) + world << "Attention! security level lowered to green" + world << "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." + security_level = SEC_LEVEL_GREEN + for(var/obj/machinery/firealarm/FA in world) + if(FA.z == 1) + FA.overlays = list() + FA.overlays += image('monitors.dmi', "overlay_green") + if(SEC_LEVEL_BLUE) + if(security_level < SEC_LEVEL_BLUE) + world << "Attention! security level elevated to blue" + world << "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." + else + world << "Attention! security level lowered to blue" + world << "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed." + security_level = SEC_LEVEL_BLUE + for(var/obj/machinery/firealarm/FA in world) + if(FA.z == 1) + FA.overlays = list() + FA.overlays += image('monitors.dmi', "overlay_blue") + if(SEC_LEVEL_RED) + if(security_level < SEC_LEVEL_RED) + world << "Attention! Code red!" + world << "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised." + else + world << "Attention! Code red!" + world << "The self-destruct mechanism has been deactivated, there is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised." + security_level = SEC_LEVEL_RED + + /* - At the time of commit, setting status displays didn't work properly + var/obj/machinery/computer/communications/CC = locate(/obj/machinery/computer/communications,world) + if(CC) + CC.post_status("alert", "redalert")*/ + + for(var/obj/machinery/firealarm/FA in world) + if(FA.z == 1) + FA.overlays = list() + FA.overlays += image('monitors.dmi', "overlay_red") + if(SEC_LEVEL_DELTA) + world << "Attention! Delta security level reached!" + world << "The ship's self-destruct mechanism has been engaged. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill." + security_level = SEC_LEVEL_DELTA + for(var/obj/machinery/firealarm/FA in world) + if(FA.z == 1) + FA.overlays = list() + FA.overlays += image('monitors.dmi', "overlay_delta") + else + return + +/proc/get_security_level() + switch(security_level) + if(SEC_LEVEL_GREEN) + return "green" + if(SEC_LEVEL_BLUE) + return "blue" + if(SEC_LEVEL_RED) + return "red" + if(SEC_LEVEL_DELTA) + return "delta" + +/proc/num2seclevel(var/num) + switch(num) + if(SEC_LEVEL_GREEN) + return "green" + if(SEC_LEVEL_BLUE) + return "blue" + if(SEC_LEVEL_RED) + return "red" + if(SEC_LEVEL_DELTA) + return "delta" + +/proc/seclevel2num(var/seclevel) + switch( lowertext(seclevel) ) + if("green") + return SEC_LEVEL_GREEN + if("blue") + return SEC_LEVEL_BLUE + if("red") + return SEC_LEVEL_RED + if("delta") + return SEC_LEVEL_DELTA + + +/*DEBUG +/mob/verb/set_thing0() + set_security_level(0) +/mob/verb/set_thing1() + set_security_level(1) +/mob/verb/set_thing2() + set_security_level(2) +/mob/verb/set_thing3() + set_security_level(3) +*/ \ No newline at end of file diff --git a/code/setup.dm b/code/setup.dm index e5156e5f461..3b276602e75 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -195,7 +195,11 @@ var/const GAS_N2O = 1 << 4 -var/list/accessable_z_levels = list("1" = 10, "3" = 15, "4" = 60, "5" = 15) //This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. (Exceptions: extended, sandbox and nuke) -Errorage +var/list/accessable_z_levels = list("3" = 30, "4" = 70) +//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. +//(Exceptions: extended, sandbox and nuke) -Errorage +//Was list("1" = 10, "3" = 15, "4" = 60, "5" = 15); changed it to list("3" = 30, "4" = 70). +//Spacing should be a reliable method of getting rid of a body -- Urist. #define IS_MODE_COMPILED(MODE) (ispath(text2path("/datum/game_mode/"+(MODE)))) @@ -221,3 +225,9 @@ var/list/global_mutations = list() // list of hidden mutation things #define DROWSY "drowsy" var/static/list/scarySounds = list('thudswoosh.ogg','Taser.ogg','armbomb.ogg','hiss1.ogg','hiss2.ogg','hiss3.ogg','hiss4.ogg','hiss5.ogg','hiss6.ogg','Glassbr1.ogg','Glassbr2.ogg','Glassbr3.ogg','Welder.ogg','Welder2.ogg','airlock.ogg','clownstep1.ogg','clownstep2.ogg') + +//Security levels +#define SEC_LEVEL_GREEN 0 +#define SEC_LEVEL_BLUE 1 +#define SEC_LEVEL_RED 2 +#define SEC_LEVEL_DELTA 3 \ No newline at end of file diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index 83d07fdcdc8..d3de781e6c7 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi index 7b50e12688e..9f531da8f67 100644 Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi index fafb296b633..386ce976595 100644 Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index feecdc5eaf5..72c15c78e71 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index a451a7b7e3a..6613b68e398 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index ad371137712..1371eb3bb06 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi index 48d1fdeeac2..69fa56f50f9 100644 Binary files a/icons/obj/monitors.dmi and b/icons/obj/monitors.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 11d0c1c54b8..8afb398fd41 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi index 0862939d247..e77570de6ad 100644 Binary files a/icons/obj/trash.dmi and b/icons/obj/trash.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index c5b07d9864c..73ba7d9fed8 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 33ed78b1b88..11e4b73558d 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -227,18 +227,18 @@ menu "menu" group = "size" is-disabled = false saved-params = "is-checked" - elem "icon32" - name = "&32x32" - command = ".winset \"mapwindow.map.icon-size=32\"" + elem "icon64" + name = "&64x64 (2x)" + command = ".winset \"mapwindow.map.icon-size=64\"" category = "&Icons" is-checked = false can-check = true group = "size" is-disabled = false saved-params = "is-checked" - elem "icon16" - name = "&16x16" - command = ".winset \"mapwindow.map.icon-size=16\"" + elem "icon32" + name = "&32x32" + command = ".winset \"mapwindow.map.icon-size=32\"" category = "&Icons" is-checked = false can-check = true @@ -680,7 +680,7 @@ window "mainwindow" elem "mainvsplit" type = CHILD pos = 3,0 - size = 634x400 + size = 634x416 anchor1 = 0,0 anchor2 = 100,100 font-family = "" @@ -1335,8 +1335,8 @@ window "vendingslot" anchor1 = none anchor2 = none font-family = "" - font-size = 14 - font-style = "" + font-size = 11 + font-style = "bold" text-color = #000000 background-color = none is-visible = true @@ -1348,12 +1348,12 @@ window "vendingslot" right-click = false saved-params = "" on-size = "" - text = "HoNK" + text = "Cuban Pete's Double Bearded Wine LOL LINES" image = "" image-mode = center keep-aspect = false align = center - text-wrap = false + text-wrap = true window "vendingwindow" elem "vendingwindow" diff --git a/sound/ambience/title1.ogg b/sound/ambience/title1.ogg new file mode 100644 index 00000000000..9138683d140 Binary files /dev/null and b/sound/ambience/title1.ogg differ diff --git a/sound/ambience/ambistat.ogg b/sound/ambience/title2.ogg similarity index 100% rename from sound/ambience/ambistat.ogg rename to sound/ambience/title2.ogg diff --git a/sound/ambience/traitor.ogg b/sound/ambience/traitor.ogg deleted file mode 100644 index 383d1edbe4b..00000000000 Binary files a/sound/ambience/traitor.ogg and /dev/null differ diff --git a/sound/spells/brucebanner.ogg b/sound/spells/brucebanner.ogg deleted file mode 100644 index e981ea28ca2..00000000000 Binary files a/sound/spells/brucebanner.ogg and /dev/null differ diff --git a/sound/spells/einath.ogg b/sound/spells/einath.ogg deleted file mode 100644 index cfb9149efa2..00000000000 Binary files a/sound/spells/einath.ogg and /dev/null differ diff --git a/sound/spells/fortigyama.ogg b/sound/spells/fortigyama.ogg deleted file mode 100644 index 74c470ab2e8..00000000000 Binary files a/sound/spells/fortigyama.ogg and /dev/null differ diff --git a/sound/spells/neccantio.ogg b/sound/spells/neccantio.ogg deleted file mode 100644 index cf805cf462a..00000000000 Binary files a/sound/spells/neccantio.ogg and /dev/null differ diff --git a/sound/spells/onisoma.ogg b/sound/spells/onisoma.ogg deleted file mode 100644 index e1bcf39419d..00000000000 Binary files a/sound/spells/onisoma.ogg and /dev/null differ diff --git a/sound/spells/scyarnila.ogg b/sound/spells/scyarnila.ogg deleted file mode 100644 index cfdd0b5c608..00000000000 Binary files a/sound/spells/scyarnila.ogg and /dev/null differ diff --git a/sound/spells/stikaly.ogg b/sound/spells/stikaly.ogg deleted file mode 100644 index 7bb706e169e..00000000000 Binary files a/sound/spells/stikaly.ogg and /dev/null differ diff --git a/sound/spells/tarcolminti.ogg b/sound/spells/tarcolminti.ogg deleted file mode 100644 index 4e1cc3f8855..00000000000 Binary files a/sound/spells/tarcolminti.ogg and /dev/null differ diff --git a/sound/voice/malf.ogg b/sound/voice/malf.ogg deleted file mode 100644 index 86d6179e21e..00000000000 Binary files a/sound/voice/malf.ogg and /dev/null differ