Merge branch 'master' of git://github.com/Abi79/tgstation13-git

Conflicts:
	baystation12.dme
	code/defines/obj/vending.dm
	code/game/machinery/vending.dm
	html/changelog.html
	maps/tgstation.2.0.8.dmm
This commit is contained in:
Miniature
2011-12-07 07:53:20 +10:30
72 changed files with 750 additions and 182 deletions
+3 -1
View File
@@ -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"
+1 -1
View File
@@ -6,7 +6,7 @@
icon = 'alien.dmi'
gender = NEUTER
toxloss = 250
var/storedPlasma = 250
var/alien_invis = 0.0
var/max_plasma = 500
@@ -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"
+5 -5
View File
@@ -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
+3 -2
View File
@@ -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"
+2
View File
@@ -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
+12
View File
@@ -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."
+4
View File
@@ -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"
+6 -2
View File
@@ -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
+1 -1
View File
@@ -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 <B>[] has been hit by [] with []</B>", src, user, W)
+1
View File
@@ -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
@@ -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
+1
View File
@@ -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)
+4
View File
@@ -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
+14 -4
View File
@@ -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 <FONT size = 3><B>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...</B></FONT>"
if(beingborged)
rev_mind.current << "\red <FONT size = 3><B>The frame's firmware detects and deletes your neural reprogramming! You remember nothing from the moment you were flashed until now.</B></FONT>"
else
rev_mind.current << "\red <FONT size = 3><B>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...</B></FONT>"
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!"
/////////////////////////////////////////////////////////////////////////////////////////////////
+1 -1
View File
@@ -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
-1
View File
@@ -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(), \
+8
View File
@@ -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)
+51 -1
View File
@@ -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 += "<BR>\[ <A HREF='?src=\ref[src];operation=logout'>Log Out</A> \]"
if (src.authenticated==2)
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=announce'>Make An Announcement</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=changeseclevel'>Change alert level</A> \]"
if(emergency_shuttle.location==0)
if (emergency_shuttle.online)
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=cancelshuttle'>Cancel Shuttle Call</A> \]"
@@ -248,7 +288,17 @@
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=redalert'>Red Alert</A> |"
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=lockdown'>Lockdown</A> |"
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=biohazard'>Biohazard</A> \]<BR><HR>"
if(STATE_ALERT_LEVEL)
dat += "Current alert level: [get_security_level()]<BR>"
if(security_level == SEC_LEVEL_DELTA)
dat += "<font color='red'><b>The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate.</b></font>"
else
dat += "<A HREF='?src=\ref[src];operation=securitylevel;newalertlevel=[SEC_LEVEL_BLUE]'>Blue</A><BR>"
dat += "<A HREF='?src=\ref[src];operation=securitylevel;newalertlevel=[SEC_LEVEL_GREEN]'>Green</A>"
if(STATE_CONFIRM_LEVEL)
dat += "Current alert level: [get_security_level()]<BR>"
dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]<BR>"
dat += "<A HREF='?src=\ref[src];operation=swipeidseclevel>Swipt ID</A> to confirm change.<BR>"
dat += "<BR>\[ [(src.state != STATE_DEFAULT) ? "<A HREF='?src=\ref[src];operation=main'>Main Menu</A> | " : ""]<A HREF='?src=\ref[user];mach_close=communications'>Close</A> \]"
user << browse(dat, "window=communications;size=400x500")
+2 -2
View File
@@ -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)
+45 -7
View File
@@ -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 = "<B>[src.name]</B>"
if(coin)
dat += "<br>There is a <a href='?src=\ref[src];remove_coin=1'>[coin.name]</a> in the slot!"
else
dat += "<br>The coin slot is empty."
if(panel_open)
var/list/vendwires = list(
"Violet" = 1,
@@ -233,7 +266,7 @@
"Goldenrod" = 3,
"Green" = 4,
)
var/dat = "<br><hr><br><B>Access Panel</B><br>"
dat += "<hr><B>Access Panel</B><br>"
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"].<BR>"
dat += "The [(src.wires & WIRE_SCANID) ? "purple" : "yellow"] light is on.<BR>"
if (product_slogans != "")
if(product_slogans != "")
dat += "The speaker switch is [src.shut_up ? "off" : "on"]. <a href='?src=\ref[src];togglevoice=[1]'>Toggle</a>"
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
+18 -3
View File
@@ -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
@@ -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)
@@ -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)
+8
View File
@@ -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")
+1 -12
View File
@@ -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)..."
+94 -67
View File
@@ -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 <B>BANG</B>"
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 <B>BANG</B>"
//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
@@ -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)
..()
-6
View File
@@ -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()
-2
View File
@@ -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), \
)
+2 -1
View File
@@ -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
+1
View File
@@ -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",
+14 -12
View File
@@ -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))
+6
View File
@@ -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
@@ -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"
+112
View File
@@ -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)
+1 -1
View File
@@ -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
+9 -2
View File
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
+9 -9
View File
@@ -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))
@@ -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
@@ -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
@@ -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"
@@ -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 << "<font size=4 color='red'>Attention! security level lowered to green</font>"
world << "<font color='red'>All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced.</font>"
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 << "<font size=4 color='red'>Attention! security level elevated to blue</font>"
world << "<font color='red'>The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted.</font>"
else
world << "<font size=4 color='red'>Attention! security level lowered to blue</font>"
world << "<font color='red'>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.</font>"
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 << "<font size=4 color='red'>Attention! Code red!</font>"
world << "<font color='red'>There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised.</font>"
else
world << "<font size=4 color='red'>Attention! Code red!</font>"
world << "<font color='red'>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.</font>"
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 << "<font size=4 color='red'>Attention! Delta security level reached!</font>"
world << "<font color='red'>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.</font>"
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)
*/
+11 -1
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

+11 -11
View File
@@ -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"
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.