mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-24 04:28:12 +01:00
@@ -475,6 +475,7 @@ datum
|
||||
return share(sharer)*/
|
||||
|
||||
check_gas_mixture(datum/gas_mixture/sharer)
|
||||
if(!sharer) return 0
|
||||
var/delta_oxygen = (oxygen_archived - sharer.oxygen_archived)/5
|
||||
var/delta_carbon_dioxide = (carbon_dioxide_archived - sharer.carbon_dioxide_archived)/5
|
||||
var/delta_nitrogen = (nitrogen_archived - sharer.nitrogen_archived)/5
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
var/server_name = null // server name (for world name / status)
|
||||
var/server_suffix = 0 // generate numeric suffix based on server port
|
||||
|
||||
var/log_ooc = 0 // log OOC channek
|
||||
var/log_ooc = 0 // log OOC channel
|
||||
var/log_access = 0 // log login/logout
|
||||
var/log_say = 0 // log client say
|
||||
var/log_admin = 0 // log admin actions
|
||||
@@ -32,6 +32,7 @@
|
||||
var/Tensioner_Active = 0 // If the tensioner is running.
|
||||
var/allow_Metadata = 0 // Metadata is supported.
|
||||
var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
|
||||
var/Ticklag = 0.9
|
||||
|
||||
var/list/mode_names = list()
|
||||
var/list/modes = list() // allowed modes
|
||||
@@ -48,6 +49,8 @@
|
||||
|
||||
var/server
|
||||
var/banappeals
|
||||
var/wikiurl
|
||||
var/forumurl
|
||||
|
||||
//Alert level description
|
||||
var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
|
||||
@@ -217,6 +220,12 @@
|
||||
if ("banappeals")
|
||||
config.banappeals = value
|
||||
|
||||
if ("wikiurl")
|
||||
config.wikiurl = value
|
||||
|
||||
if ("forumurl")
|
||||
config.forumurl = value
|
||||
|
||||
if ("guest_jobban")
|
||||
config.guest_jobban = 1
|
||||
|
||||
@@ -288,6 +297,9 @@
|
||||
if("useircbot")
|
||||
useircbot = 1
|
||||
|
||||
if("ticklag")
|
||||
Ticklag = text2num(value)
|
||||
|
||||
if("require_heads_alive")
|
||||
config.require_heads_alive = value
|
||||
|
||||
|
||||
@@ -498,7 +498,7 @@ client
|
||||
togglebuildmode(MOB)
|
||||
href_list["datumrefresh"] = href_list["build_mode"]
|
||||
|
||||
/* else if (href_list["direct_control"])
|
||||
else if (href_list["direct_control"])
|
||||
if(!href_list["direct_control"])
|
||||
return
|
||||
var/mob/MOB = locate(href_list["direct_control"])
|
||||
@@ -510,7 +510,7 @@ client
|
||||
return
|
||||
|
||||
if(usr.client)
|
||||
usr.client.cmd_assume_direct_control(MOB)*/
|
||||
usr.client.cmd_assume_direct_control(MOB)
|
||||
|
||||
else if (href_list["delall"])
|
||||
if(!href_list["delall"])
|
||||
|
||||
+4
-4
@@ -454,8 +454,8 @@ datum/mind
|
||||
// copy targets
|
||||
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
|
||||
if (valid_head)
|
||||
for (var/datum/objective/assassinate/O in valid_head.objectives)
|
||||
var/datum/objective/assassinate/rev_obj = new
|
||||
for (var/datum/objective/mutiny/O in valid_head.objectives)
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
rev_obj.owner = src
|
||||
rev_obj.target = O.target
|
||||
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
|
||||
@@ -1011,8 +1011,8 @@ datum/mind
|
||||
// copy targets
|
||||
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
|
||||
if (valid_head)
|
||||
for (var/datum/objective/assassinate/O in valid_head.objectives)
|
||||
var/datum/objective/assassinate/rev_obj = new
|
||||
for (var/datum/objective/mutiny/O in valid_head.objectives)
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
rev_obj.owner = src
|
||||
rev_obj.target = O.target
|
||||
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
|
||||
|
||||
+1
-3
@@ -383,7 +383,6 @@
|
||||
opacity = 0
|
||||
density = 0
|
||||
|
||||
|
||||
/obj/hud
|
||||
name = "hud"
|
||||
unacidable = 1
|
||||
@@ -400,9 +399,8 @@
|
||||
var/obj/screen/g_dither = null
|
||||
var/obj/screen/blurry = null
|
||||
var/list/darkMask = null
|
||||
var/obj/screen/station_explosion = null
|
||||
|
||||
var/h_type = /obj/screen
|
||||
var/h_type = /obj/screen //this is like...the most pointless thing ever. Use a god damn define!
|
||||
|
||||
/obj/item
|
||||
name = "item"
|
||||
|
||||
@@ -63,10 +63,19 @@
|
||||
var/datum/disease2/disease/virus2 = null
|
||||
var/OriginalMob = null
|
||||
|
||||
Del()
|
||||
for(var/datum/disease/D in viruses)
|
||||
D.cure(0)
|
||||
..()
|
||||
/obj/effect/decal/cleanable/blood/Del()
|
||||
for(var/datum/disease/D in viruses)
|
||||
D.cure(0)
|
||||
..()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/New()
|
||||
..()
|
||||
if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
|
||||
return
|
||||
if(src.loc && isturf(src.loc))
|
||||
for(var/obj/effect/decal/cleanable/blood/B in src.loc)
|
||||
if(B != src)
|
||||
del(B)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/drip
|
||||
name = "drips of blood"
|
||||
|
||||
+114
-41
@@ -278,6 +278,23 @@
|
||||
plant_type = 0
|
||||
growthstages = 6
|
||||
|
||||
/obj/item/seeds/bluespacetomatoseed
|
||||
name = "pack of blue-space tomato seeds"
|
||||
desc = "These seeds grow into blue-space tomato plants."
|
||||
icon_state = "seed-bluespacetomato"
|
||||
mypath = "/obj/item/seeds/bluespacetomatoseed"
|
||||
species = "bluespacetomato"
|
||||
plantname = "Blue-Space Tomato Plants"
|
||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato"
|
||||
lifespan = 25
|
||||
endurance = 15
|
||||
maturation = 8
|
||||
production = 6
|
||||
yield = 2
|
||||
potency = 10
|
||||
plant_type = 0
|
||||
growthstages = 6
|
||||
|
||||
/obj/item/seeds/cornseed
|
||||
name = "pack of corn seeds"
|
||||
desc = "I don't mean to sound corny..."
|
||||
@@ -400,7 +417,7 @@
|
||||
potency = 10
|
||||
oneharvest = 1
|
||||
plant_type = 0
|
||||
growthstages = 5
|
||||
growthstages = 3
|
||||
|
||||
/obj/item/seeds/amanitamycelium
|
||||
name = "pack of fly amanita mycelium"
|
||||
@@ -1143,46 +1160,6 @@
|
||||
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"
|
||||
desc = "Green and lush."
|
||||
icon_state = "spawner"
|
||||
potency = 20
|
||||
New()
|
||||
new/obj/item/stack/tile/grass(src.loc)
|
||||
spawn(5) //Workaround to keep harvesting from working weirdly.
|
||||
del(src)
|
||||
|
||||
//This object is just a transition object. All it does is make dosh and delete itself. -Cheridan
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/money
|
||||
seed = "/obj/item/seeds/cashseed"
|
||||
name = "dosh"
|
||||
desc = "Green and lush."
|
||||
icon_state = "spawner"
|
||||
potency = 10
|
||||
New()
|
||||
switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan
|
||||
if(0 to 10)
|
||||
new/obj/item/weapon/spacecash/(src.loc)
|
||||
if(11 to 20)
|
||||
new/obj/item/weapon/spacecash/c10(src.loc)
|
||||
if(21 to 30)
|
||||
new/obj/item/weapon/spacecash/c20(src.loc)
|
||||
if(31 to 40)
|
||||
new/obj/item/weapon/spacecash/c50(src.loc)
|
||||
if(41 to 50)
|
||||
new/obj/item/weapon/spacecash/c100(src.loc)
|
||||
if(51 to 60)
|
||||
new/obj/item/weapon/spacecash/c200(src.loc)
|
||||
if(61 to 80)
|
||||
new/obj/item/weapon/spacecash/c500(src.loc)
|
||||
else
|
||||
new/obj/item/weapon/spacecash/c1000(src.loc)
|
||||
spawn(5) //Workaround to keep harvesting from working weirdly.
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane
|
||||
seed = "/obj/item/seeds/sugarcaneseed"
|
||||
name = "sugarcane"
|
||||
@@ -1985,3 +1962,99 @@
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
|
||||
// *************************************
|
||||
// Complex Grown Object Defines -
|
||||
// Putting these at the bottom so they don't clutter the list up. -Cheridan
|
||||
// *************************************
|
||||
|
||||
//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"
|
||||
desc = "Green and lush."
|
||||
icon_state = "spawner"
|
||||
potency = 20
|
||||
New()
|
||||
new/obj/item/stack/tile/grass(src.loc)
|
||||
spawn(5) //Workaround to keep harvesting from working weirdly.
|
||||
del(src)
|
||||
|
||||
//This object is just a transition object. All it does is make dosh and delete itself. -Cheridan
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/money
|
||||
seed = "/obj/item/seeds/cashseed"
|
||||
name = "dosh"
|
||||
desc = "Green and lush."
|
||||
icon_state = "spawner"
|
||||
potency = 10
|
||||
New()
|
||||
switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan
|
||||
if(0 to 10)
|
||||
new/obj/item/weapon/spacecash/(src.loc)
|
||||
if(11 to 20)
|
||||
new/obj/item/weapon/spacecash/c10(src.loc)
|
||||
if(21 to 30)
|
||||
new/obj/item/weapon/spacecash/c20(src.loc)
|
||||
if(31 to 40)
|
||||
new/obj/item/weapon/spacecash/c50(src.loc)
|
||||
if(41 to 50)
|
||||
new/obj/item/weapon/spacecash/c100(src.loc)
|
||||
if(51 to 60)
|
||||
new/obj/item/weapon/spacecash/c200(src.loc)
|
||||
if(61 to 80)
|
||||
new/obj/item/weapon/spacecash/c500(src.loc)
|
||||
else
|
||||
new/obj/item/weapon/spacecash/c1000(src.loc)
|
||||
spawn(5) //Workaround to keep harvesting from working weirdly.
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato
|
||||
seed = "/obj/item/seeds/bluespacetomatoseed"
|
||||
name = "blue-space tomato"
|
||||
desc = "So lubricated, you might slip through space-time."
|
||||
icon_state = "bluespacetomato"
|
||||
potency = 10
|
||||
origin_tech = "bluespace=3"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
|
||||
reagents.add_reagent("singulo", 1+round((potency / 5), 1))
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
|
||||
throw_impact(atom/hit_atom)
|
||||
..()
|
||||
var/mob/M = usr
|
||||
var/outer_teleport_radius = potency/10 //Plant potency determines radius of teleport.
|
||||
var/inner_teleport_radius = potency/15
|
||||
var/list/turfs = new/list()
|
||||
for(var/turf/T in orange(M,outer_teleport_radius))
|
||||
if(T in orange(M,inner_teleport_radius)) continue
|
||||
if(istype(T,/turf/space)) continue
|
||||
if(T.density) continue
|
||||
if(T.x>world.maxx-outer_teleport_radius || T.x<outer_teleport_radius) continue
|
||||
if(T.y>world.maxy-outer_teleport_radius || T.y<outer_teleport_radius) continue
|
||||
turfs += T
|
||||
if(!turfs.len)
|
||||
var/list/turfs_to_pick_from = list()
|
||||
for(var/turf/T in orange(M,outer_teleport_radius))
|
||||
if(!(T in orange(M,inner_teleport_radius)))
|
||||
turfs_to_pick_from += T
|
||||
turfs += pick(/turf in turfs_to_pick_from)
|
||||
var/turf/picked = pick(turfs)
|
||||
if(!isturf(picked)) return
|
||||
switch(rand(1,2))//Allows for easy addition of more bluespace weirdness.
|
||||
if(1) // Teleports the person who threw the tomato.
|
||||
new/obj/effect/effect/sparks(M.loc)
|
||||
new/obj/effect/decal/ash(M.loc) //Leaves a pile of ash behind for dramatic effect.
|
||||
M.loc = picked
|
||||
new/obj/effect/effect/sparks(M.loc) //Two set of sparks, one before the teleport and one after.
|
||||
if(2) //Teleports mob the tomato hit instead.
|
||||
for(var/mob/A in get_turf(hit_atom))
|
||||
new/obj/effect/effect/sparks(A.loc)
|
||||
new/obj/effect/decal/ash(A.loc)
|
||||
A.loc = picked
|
||||
new/obj/effect/effect/sparks(A.loc)
|
||||
src.visible_message("<span class='notice'>The [src.name] has been squashed, causing a distortion in space-time.</span>","<span class='moderate'>You hear a smack.</span>")
|
||||
del(src)
|
||||
return
|
||||
|
||||
@@ -390,7 +390,8 @@
|
||||
"/obj/item/seeds/carrotseed",
|
||||
"/obj/item/seeds/sunflowerseed",
|
||||
"/obj/item/seeds/chantermycelium",
|
||||
"/obj/item/seeds/potatoseed")
|
||||
"/obj/item/seeds/potatoseed",
|
||||
"/obj/item/seeds/sugarcaneseed")
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Seeds crate"
|
||||
@@ -712,8 +713,8 @@
|
||||
name = "Ballistic gear crate"
|
||||
contains = list("/obj/item/clothing/suit/armor/bulletproof",
|
||||
"/obj/item/clothing/suit/armor/bulletproof",
|
||||
"/obj/item/weapon/gun/projectile/shotgun/combat2",
|
||||
"/obj/item/weapon/gun/projectile/shotgun/combat2")
|
||||
"/obj/item/weapon/gun/projectile/shotgun/pump/combat",
|
||||
"/obj/item/weapon/gun/projectile/shotgun/pump/combat")
|
||||
cost = 50
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Ballistic gear crate"
|
||||
|
||||
@@ -4,6 +4,68 @@
|
||||
throw_range = 20
|
||||
force = 0
|
||||
|
||||
|
||||
/////////Toy Mechs/////////
|
||||
|
||||
/obj/item/toy/prize
|
||||
icon = 'toy.dmi'
|
||||
icon_state = "ripleytoy"
|
||||
|
||||
/obj/item/toy/prize/ripley
|
||||
name = "toy ripley"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 1/11"
|
||||
|
||||
/obj/item/toy/prize/fireripley
|
||||
name = "toy firefighting ripley"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 2/11"
|
||||
icon_state = "fireripleytoy"
|
||||
|
||||
/obj/item/toy/prize/deathripley
|
||||
name = "toy deathsquad ripley"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 3/11"
|
||||
icon_state = "deathripleytoy"
|
||||
|
||||
/obj/item/toy/prize/gygax
|
||||
name = "toy gygax"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 4/11"
|
||||
icon_state = "gygaxtoy"
|
||||
|
||||
/obj/item/toy/prize/durand
|
||||
name = "toy gygax"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 5/11"
|
||||
icon_state = "durandprize"
|
||||
|
||||
/obj/item/toy/prize/honk
|
||||
name = "toy H.O.N.K."
|
||||
desc = "Mini-Mecha action figure! Collect them all! 6/11"
|
||||
icon_state = "honkprize"
|
||||
|
||||
/obj/item/toy/prize/marauder
|
||||
name = "toy marauder"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 7/11"
|
||||
icon_state = "marauderprize"
|
||||
|
||||
/obj/item/toy/prize/seraph
|
||||
name = "toy seraph"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 8/11"
|
||||
icon_state = "seraphprize"
|
||||
|
||||
/obj/item/toy/prize/mauler
|
||||
name = "toy mauler"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 9/11"
|
||||
icon_state = "maulerprize"
|
||||
|
||||
/obj/item/toy/prize/odysseus
|
||||
name = "toy odysseus"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 10/11"
|
||||
icon_state = "odysseusprize"
|
||||
|
||||
/obj/item/toy/prize/phazon
|
||||
name = "toy phazon"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 11/11"
|
||||
icon_state = "phazonprize"
|
||||
|
||||
|
||||
/obj/item/toy/syndicateballoon
|
||||
name = "syndicate balloon"
|
||||
desc = "There is a tag on the back that reads \"FUK NT!11!\"."
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
hidden_prices = "2;5"
|
||||
points = 15
|
||||
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
|
||||
charge_type = "engineering"
|
||||
|
||||
/obj/machinery/vending/coffee
|
||||
name = "Hot Drinks machine"
|
||||
@@ -306,9 +307,26 @@
|
||||
product_hidden = "/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola"
|
||||
// product_hideamt = "20"
|
||||
hidden_prices = "1"
|
||||
product_ads = "What the fuck is this shit?;Why would you buy this;holy shit help;i'm stuck;in;a;universe;factory;AAAAAARGH!;HEIL... Stalin?;CAPITALIST PIGS;FUCK THE WEST"
|
||||
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
|
||||
charge_type = "soda"
|
||||
|
||||
/obj/machinery/vending/tool
|
||||
name = "YouTool"
|
||||
desc = "Tools for tools."
|
||||
icon_state = "tool"
|
||||
icon_deny = "tool-deny"
|
||||
req_access_txt = "12" //Maintenance access
|
||||
product_paths = "/obj/item/weapon/cable_coil/random;/obj/item/weapon/crowbar;/obj/item/weapon/weldingtool;/obj/item/weapon/wirecutters;/obj/item/weapon/wrench;/obj/item/device/analyzer;/obj/item/device/t_scanner"
|
||||
// product_amounts = "10;5;3;5;5;5;5"
|
||||
product_prices = "1;2;3;2;2;2;2"
|
||||
product_prices = "1"
|
||||
product_hidden = "/obj/item/weapon/weldingtool/largetank;/obj/item/device/multitool"
|
||||
// product_hideamt = "2;2"
|
||||
hidden_prices = "4;4"
|
||||
product_coin = "/obj/item/clothing/gloves/yellow"
|
||||
product_coin_amt = "1"
|
||||
charge_type = "engineering"
|
||||
|
||||
/obj/machinery/vending/genetics
|
||||
name = "Genetics Dispenser"
|
||||
desc = "Medical drug dispenser."
|
||||
|
||||
@@ -639,7 +639,7 @@
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
flags = ONBELT
|
||||
flags = FPRINT | TABLEPASS | ONBELT
|
||||
|
||||
/obj/item/weapon/clipboard/notebook
|
||||
name = "notebook"
|
||||
|
||||
@@ -199,13 +199,11 @@
|
||||
world << "\blue<b>[i]..</b>"
|
||||
sleep(10)
|
||||
enter_allowed = 0
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
spawn(0)
|
||||
M.client.station_explosion_cinematic()
|
||||
sleep(110)
|
||||
ticker.mode:station_was_nuked = 1
|
||||
ticker.mode:explosion_in_progress = 0
|
||||
if(ticker)
|
||||
ticker.station_explosion_cinematic(0,null)
|
||||
if(ticker.mode)
|
||||
ticker.mode:station_was_nuked = 1
|
||||
ticker.mode:explosion_in_progress = 0
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -138,6 +138,107 @@ var/datum/roundinfo/roundinfo = new()
|
||||
return 1
|
||||
|
||||
/datum/controller/gameticker
|
||||
//station_explosion used to be a variable for every mob's hud. Which was a waste!
|
||||
//Now we have a general cinematic centrally held within the gameticker....far more efficient!
|
||||
var/obj/screen/cinematic = null
|
||||
|
||||
//Plus it provides an easy way to make cinematics for other events. Just use this as a template :)
|
||||
proc/station_explosion_cinematic(var/station_missed=0, var/override = null)
|
||||
if( cinematic ) return //already a cinematic in progress!
|
||||
|
||||
//initialise our cinematic screen object
|
||||
cinematic = new(src)
|
||||
cinematic.icon = 'station_explosion.dmi'
|
||||
cinematic.icon_state = "start"
|
||||
cinematic.layer = 20
|
||||
cinematic.mouse_opacity = 0
|
||||
cinematic.screen_loc = "1,3" //TODO resize them
|
||||
|
||||
var/obj/structure/stool/bed/temp_buckle = new(src)
|
||||
//Incredibly hackish. It creates a bed within the gameticker (lol) to stop mobs running around
|
||||
if(station_missed)
|
||||
for(var/mob/M in world)
|
||||
M.buckled = temp_buckle //buckles the mob so it can't do anything
|
||||
if(M.client)
|
||||
M.client.screen += cinematic //show every client the cinematic
|
||||
else //nuke kills everyone on z-level 1 to prevent "hurr-durr I survived"
|
||||
for(var/mob/M in world)
|
||||
M.buckled = temp_buckle
|
||||
if(M.client)
|
||||
M.client.screen += cinematic
|
||||
switch(M.z)
|
||||
if(0) //inside a crate or something
|
||||
var/turf/T = get_turf(M)
|
||||
if(T && T.z==1) //we don't use M.death(0) because it calls a for(/mob) loop and
|
||||
M.health = 0
|
||||
M.stat = DEAD
|
||||
if(1) //on a z-level 1 turf.
|
||||
M.health = 0
|
||||
M.stat = DEAD
|
||||
|
||||
//Now animate the cinematic
|
||||
switch(station_missed)
|
||||
if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
|
||||
if(1) //nuke was nearby but (mostly) missed
|
||||
if( mode && !override )
|
||||
override = mode.name
|
||||
switch( override )
|
||||
if("nuclear emergency")
|
||||
flick("start_nuke",cinematic)
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
flick("explode2",cinematic)
|
||||
cinematic.icon_state = "loss_nuke2"
|
||||
else
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
flick("explode2",cinematic)
|
||||
|
||||
else //station was destroyed
|
||||
if( mode && !override )
|
||||
override = mode.name
|
||||
switch( override )
|
||||
if("nuclear emergency")
|
||||
flick("start_nuke",cinematic)
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
cinematic.icon_state = "end"
|
||||
flick("explode",cinematic)
|
||||
cinematic.icon_state = "loss_nuke"
|
||||
|
||||
if("AI malfunction")
|
||||
flick("start_malf",cinematic)
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
cinematic.icon_state = "end"
|
||||
flick("explode",cinematic)
|
||||
cinematic.icon_state = "loss_malf"
|
||||
|
||||
if("blob")
|
||||
flick("start_blob",cinematic) //TODO: make a blob one
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
cinematic.icon_state = "end"
|
||||
flick("explode",cinematic)
|
||||
cinematic.icon_state = "loss_blob" //TODO: make a blob one
|
||||
|
||||
else
|
||||
//default station-destroyed ending
|
||||
sleep(50)
|
||||
world << sound('explosionfar.ogg')
|
||||
cinematic.icon_state = "end"
|
||||
flick("explode",cinematic)
|
||||
cinematic.icon_state = "loss_general"
|
||||
sleep(100)
|
||||
|
||||
//Tidy-up time!
|
||||
if(cinematic) del(cinematic) //end the cinematic
|
||||
if(temp_buckle) del(temp_buckle) //release everybody
|
||||
return
|
||||
|
||||
|
||||
proc/create_characters()
|
||||
for(var/mob/new_player/player in world)
|
||||
|
||||
@@ -188,14 +188,11 @@
|
||||
world << i
|
||||
sleep(10)
|
||||
enter_allowed = 0
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
spawn(0)
|
||||
M.client.station_explosion_cinematic()
|
||||
sleep(110)
|
||||
ticker.mode:station_was_nuked = 1
|
||||
ticker.mode:explosion_in_progress = 0
|
||||
//world << "<B>Everyone was killed by the self-destruct!"
|
||||
if(ticker)
|
||||
ticker.station_explosion_cinematic(0,null)
|
||||
if(ticker.mode)
|
||||
ticker.mode:station_was_nuked = 1
|
||||
ticker.mode:explosion_in_progress = 0
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -159,6 +159,7 @@
|
||||
return
|
||||
|
||||
|
||||
#define NUKERANGE 80
|
||||
/obj/machinery/nuclearbomb/proc/explode()
|
||||
if (src.safety)
|
||||
src.timing = 0
|
||||
@@ -176,47 +177,40 @@
|
||||
enter_allowed = 0
|
||||
|
||||
var/off_station = 0
|
||||
var/area/A = get_area(src.loc)
|
||||
if(A && (istype(A,/area/syndicate_station) || A.type == "/area"))
|
||||
off_station = 1
|
||||
if (ticker && ticker.mode && ticker.mode.name == "nuclear emergency")
|
||||
ticker.mode:herp = syndicate_station_at_station
|
||||
ticker.mode:nuke_off_station = off_station
|
||||
var/turf/bomb_location = get_turf(src)
|
||||
if( bomb_location && (bomb_location.z == 1) )
|
||||
if( (bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)) )
|
||||
off_station = 1
|
||||
else
|
||||
off_station = 2
|
||||
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
spawn(0)
|
||||
M.client.station_explosion_cinematic(off_station)
|
||||
sleep(110)
|
||||
if (ticker)
|
||||
if(ticker.mode && ticker.mode.name == "nuclear emergency")
|
||||
ticker.mode:herp = syndicate_station_at_station
|
||||
ticker.mode:nuke_off_station = off_station
|
||||
ticker.station_explosion_cinematic(off_station,null)
|
||||
if(ticker.mode)
|
||||
ticker.mode.explosion_in_progress = 0
|
||||
if(ticker.mode.name == "nuclear emergency")
|
||||
ticker.mode:nukes_left --
|
||||
else
|
||||
world << "<B>The station was destoyed by the nuclear blast!</B>"
|
||||
|
||||
if (ticker && ticker.mode)
|
||||
ticker.mode.explosion_in_progress = 0
|
||||
if(ticker.mode.name == "nuclear emergency")
|
||||
ticker.mode:nukes_left --
|
||||
ticker.mode.station_was_nuked = (off_station==0)
|
||||
ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
|
||||
//kinda shit but I couldn't get permission to do what I wanted to do.
|
||||
|
||||
else
|
||||
world << "<B>The station was destoyed by the nuclear blast!</B>"
|
||||
ticker.mode.station_was_nuked = 1
|
||||
/*
|
||||
TODO: derped blast should partially damage nearest objects
|
||||
and do not reboot the game. Also make it work properly on other z-levels --rastaf0
|
||||
Further TODO: make nuke detonation work with objectives. Right now, you can't track player
|
||||
location because they are viewing the cinematic (can't get_turf on them to determine z_level
|
||||
as it will return null). Leaving this for you since you apparently plan to work this further. /N
|
||||
*/
|
||||
if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
|
||||
world << "<B>Resetting in 30 seconds!</B>"
|
||||
|
||||
if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
|
||||
world << "<B>Resetting in 30 seconds!</B>"
|
||||
|
||||
//feedback_set_details("end_error","nuke - unhandled ending")
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
sleep(300)
|
||||
log_game("Rebooting due to nuclear detonation")
|
||||
world.Reboot()
|
||||
return
|
||||
feedback_set_details("end_error","nuke - unhandled ending")
|
||||
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
sleep(300)
|
||||
log_game("Rebooting due to nuclear detonation")
|
||||
world.Reboot()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/weapon/disk/nuclear/Del()
|
||||
if(blobstart.len > 0)
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
var/datum/objective/assassinate/rev_obj = new
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
rev_obj.owner = rev_mind
|
||||
rev_obj.target = head_mind
|
||||
rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.role_alt_title ? head_mind.role_alt_title : head_mind.assigned_role]."
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
/datum/game_mode/revolution/process()
|
||||
checkwin_counter++
|
||||
if(checkwin_counter >= 20)
|
||||
if(checkwin_counter >= 5)
|
||||
if(!finished)
|
||||
ticker.mode.check_win()
|
||||
checkwin_counter = 0
|
||||
@@ -370,7 +370,7 @@
|
||||
var/list/heads = get_all_heads()
|
||||
var/list/targets = new
|
||||
for (var/datum/mind/i in head_revolutionaries)
|
||||
for (var/datum/objective/assassinate/o in i.objectives)
|
||||
for (var/datum/objective/mutiny/o in i.objectives)
|
||||
targets |= o.target
|
||||
if (head_revolutionaries.len!=0 || \
|
||||
revolutionaries.len!=0 || \
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
if("cannon")
|
||||
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
|
||||
if("shotgun")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/shotgun/pump/combat(get_turf(H))
|
||||
if("freeze")
|
||||
new /obj/item/weapon/gun/energy/temperature(get_turf(H))
|
||||
if("uzi")
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
if(!istype(M, /mob/living/carbon/human))//If target is not a human.
|
||||
return ..()
|
||||
if(istype(M, /mob/living/carbon/human/dummy))
|
||||
return..()
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their soul captured with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>")
|
||||
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/gloves/botanic_leather(H), H.slot_gloves)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/apron(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/device/analyzer/plant_analyzer(H), H.slot_s_store)
|
||||
H.equip_if_possible(new /obj/item/device/pda/botanist(H), H.slot_belt)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -266,6 +267,7 @@
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_if_possible(new /obj/item/clothing/under/suit_jacket/red(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/device/pda/librarian(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/weapon/barcodescanner(H), H.slot_l_store)
|
||||
return 1
|
||||
|
||||
@@ -66,11 +66,12 @@
|
||||
dat += text("[]\t-Toxin Content %: []</FONT><BR>", (occupant.getToxLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getToxLoss())
|
||||
dat += text("[]\t-Burn Severity %: []</FONT><BR>", (occupant.getFireLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getFireLoss())
|
||||
dat += text("<HR>Paralysis Summary %: [] ([] seconds left!)<BR>", occupant.paralysis, round(occupant.paralysis / 4))
|
||||
dat += text("Inaprovaline units: [] units<BR>", occupant.reagents.get_reagent_amount("inaprovaline"))
|
||||
dat += text("Soporific (Sleep Toxin): [] units<BR>", occupant.reagents.get_reagent_amount("stoxin"))
|
||||
dat += text("[]\tDermaline: [] units</FONT><BR>", (occupant.reagents.get_reagent_amount("dermaline") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dermaline"))
|
||||
dat += text("[]\tBicaridine: [] units<BR>", (occupant.reagents.get_reagent_amount("bicaridine") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("bicaridine"))
|
||||
dat += text("[]\tDexalin: [] units<BR>", (occupant.reagents.get_reagent_amount("dexalin") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dexalin"))
|
||||
if(occupant.reagents)
|
||||
dat += text("Inaprovaline units: [] units<BR>", occupant.reagents.get_reagent_amount("inaprovaline"))
|
||||
dat += text("Soporific (Sleep Toxin): [] units<BR>", occupant.reagents.get_reagent_amount("stoxin"))
|
||||
dat += text("[]\tDermaline: [] units</FONT><BR>", (occupant.reagents.get_reagent_amount("dermaline") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dermaline"))
|
||||
dat += text("[]\tBicaridine: [] units<BR>", (occupant.reagents.get_reagent_amount("bicaridine") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("bicaridine"))
|
||||
dat += text("[]\tDexalin: [] units<BR>", (occupant.reagents.get_reagent_amount("dexalin") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dexalin"))
|
||||
dat += text("<HR><A href='?src=\ref[];refresh=1'>Refresh meter readings each second</A><BR><A href='?src=\ref[];inap=1'>Inject Inaprovaline</A><BR><A href='?src=\ref[];stox=1'>Inject Soporific</A><BR><A href='?src=\ref[];derm=1'>Inject Dermaline</A><BR><A href='?src=\ref[];bic=1'>Inject Bicaridine</A><BR><A href='?src=\ref[];dex=1'>Inject Dexalin</A>", src, src, src, src, src, src)
|
||||
else
|
||||
dat += "The sleeper is empty."
|
||||
|
||||
@@ -924,7 +924,7 @@
|
||||
var/list/kv = list(
|
||||
"type" = "mulebot",
|
||||
"name" = suffix,
|
||||
"loca" = loc.loc, // area
|
||||
"loca" = (loc ? loc.loc : "Unknown"), // somehow loc can be null and cause a runtime - Quarxink
|
||||
"mode" = mode,
|
||||
"powr" = (cell ? cell.percent() : 0),
|
||||
"dest" = destination,
|
||||
|
||||
@@ -20,8 +20,15 @@
|
||||
var/planted = 0 // Is it occupied?
|
||||
var/harvest = 0 //Ready to harvest?
|
||||
var/obj/item/seeds/myseed = null // The currently planted seed
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
bullet_act(var/obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
if(istype(Proj ,/obj/item/projectile/energy/floramut))
|
||||
if(src.planted)
|
||||
src.mutate()
|
||||
else if(istype(Proj ,/obj/item/projectile/energy/florayield))
|
||||
if(src.planted && src.myseed.yield < 2)
|
||||
src.myseed.yield += 1
|
||||
|
||||
obj/machinery/hydroponics/process()
|
||||
|
||||
@@ -96,10 +103,12 @@ obj/machinery/hydroponics/process()
|
||||
if(src.age > src.myseed.production && (src.age - src.lastproduce) > src.myseed.production && (!src.harvest && !src.dead))
|
||||
var/m_count = 0
|
||||
while(m_count < src.mutmod)
|
||||
if(prob(90))
|
||||
if(prob(85))
|
||||
src.mutate()
|
||||
else if(prob(30))
|
||||
src.hardmutate()
|
||||
else if(prob(5))
|
||||
src.mutatespecie()
|
||||
m_count++;
|
||||
if(src.yieldmod > 0 && src.myseed.yield != -1) // Unharvestable shouldn't be harvested
|
||||
src.harvest = 1
|
||||
@@ -301,6 +310,14 @@ obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/angelmycelium
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/lemonseed ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/cashseed
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/ambrosiavulgarisseed ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/ambrosiadeusseed
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/plumpmycelium ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/walkingmushroommycelium
|
||||
@@ -331,6 +348,10 @@ obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
|
||||
if(71 to 100)
|
||||
src.myseed = new /obj/item/seeds/killertomatoseed
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/bluetomatoseed ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/bluespacetomatoseed
|
||||
|
||||
else if ( istype(src.myseed, /obj/item/seeds/grapeseed ))
|
||||
del(src.myseed)
|
||||
src.myseed = new /obj/item/seeds/greengrapeseed
|
||||
@@ -382,6 +403,8 @@ obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent in
|
||||
spawn(5) // Wait a while
|
||||
src.updateicon()
|
||||
src.visible_message("\red The mutated weeds in [src] spawned a \blue [src.myseed.plantname]!")
|
||||
else
|
||||
usr << "The few weeds in the tray seem to react, but only for a moment..."
|
||||
return
|
||||
|
||||
|
||||
@@ -397,12 +420,12 @@ obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/mutatepest() // Until someone makes a spaceworm, this is commented out
|
||||
// if ( src.pestlevel > 5 )
|
||||
// user << "The worms seem to behave oddly..."
|
||||
if ( src.pestlevel > 5 )
|
||||
src.visible_message("The pests seem to behave oddly...")
|
||||
// spawn(10)
|
||||
// new /obj/effect/alien/spaceworm(src.loc)
|
||||
// else
|
||||
//user << "Nothing happens..."
|
||||
else
|
||||
usr << "The pests seem to behave oddly, but quickly settle down..." //Modified to give a better idea of what's happening when you inject mutagen. There's still nothing proper to spawn here though. -Cheridan
|
||||
return
|
||||
|
||||
|
||||
@@ -458,7 +481,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (81 to 90) src.mutatespecie()
|
||||
if (66 to 80) src.hardmutate()
|
||||
if (41 to 65) src.mutate()
|
||||
if (21 to 41) user << "Nothing happens..."
|
||||
if (21 to 41) user << "The plants don't seem to react..."
|
||||
if (11 to 20) src.mutateweed()
|
||||
if (1 to 10) src.mutatepest()
|
||||
else user << "Nothing happens..."
|
||||
@@ -583,11 +606,26 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (81 to 90) src.mutatespecie()
|
||||
if (66 to 80) src.hardmutate()
|
||||
if (41 to 65) src.mutate()
|
||||
if (21 to 41) user << "Nothing happens..."
|
||||
if (21 to 41) user << "The plants don't seem to react..."
|
||||
if (11 to 20) src.mutateweed()
|
||||
if (1 to 10) src.mutatepest()
|
||||
else user << "Nothing happens..."
|
||||
|
||||
// The best stuff there is. For testing/debugging.
|
||||
|
||||
if(S.reagents.has_reagent("adminordrazine", 1))
|
||||
src.waterlevel += round(S.reagents.get_reagent_amount("adminordrazine")*1)
|
||||
src.health += round(S.reagents.get_reagent_amount("adminordrazine")*1)
|
||||
src.nutrilevel += round(S.reagents.get_reagent_amount("adminordrazine")*1)
|
||||
src.pestlevel -= rand(1,5)
|
||||
src.weedlevel -= rand(1,5)
|
||||
if(S.reagents.has_reagent("adminordrazine", 5))
|
||||
switch(rand(100))
|
||||
if (66 to 100) src.mutatespecie()
|
||||
if (33 to 65) src.mutateweed()
|
||||
if (1 to 32) src.mutatepest()
|
||||
else user << "Nothing happens..."
|
||||
|
||||
S.reagents.clear_reagents()
|
||||
if (src.weedlevel < 0 ) // Make sure it won't go overoboard
|
||||
src.weedlevel = 0
|
||||
@@ -839,6 +877,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
|
||||
if (realName)
|
||||
podman.real_name = realName
|
||||
podman.original_name = realName //don't want a random ghost name if we die again
|
||||
else
|
||||
podman.real_name = "pod person" //No null names!!
|
||||
|
||||
@@ -946,3 +985,39 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
planted = 0
|
||||
dead = 0
|
||||
updateicon()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/machinery/hydroponics/soil //Not actually hydroponics at all! Honk!
|
||||
name = "soil"
|
||||
icon = 'hydroponics.dmi'
|
||||
icon_state = "soil"
|
||||
density = 0
|
||||
New()
|
||||
..()
|
||||
updateicon() // Same as normal but with the overlays removed - Cheridan.
|
||||
overlays = null
|
||||
if(src.planted)
|
||||
if(dead)
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-dead")
|
||||
else if(src.harvest)
|
||||
if(src.myseed.plant_type == 2) // Shrooms don't have a -harvest graphic
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow[src.myseed.growthstages]")
|
||||
else
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-harvest")
|
||||
else if(src.age < src.myseed.maturation)
|
||||
var/t_growthstate = ((src.age / src.myseed.maturation) * src.myseed.growthstages )
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow[round(t_growthstate)]")
|
||||
src.lastproduce = src.age
|
||||
else
|
||||
overlays += image('hydroponics.dmi', icon_state="[src.myseed.species]-grow[src.myseed.growthstages]")
|
||||
|
||||
if(myseed)
|
||||
if(luminosity && !istype(myseed,/obj/item/seeds/glowshroom))
|
||||
sd_SetLuminosity(0)
|
||||
else if(!luminosity && istype(myseed,/obj/item/seeds/glowshroom))
|
||||
sd_SetLuminosity(myseed.potency/10)
|
||||
else
|
||||
if(luminosity)
|
||||
sd_SetLuminosity(0)
|
||||
return
|
||||
@@ -615,11 +615,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //list that will contain r
|
||||
if( istype(I, /obj/item/device/pda) )
|
||||
var/obj/item/device/pda/P = I
|
||||
if(P.id)
|
||||
src.scanned_user = "[P.id.registered] ([P.id.assignment])"
|
||||
src.scanned_user = "[P.id.registered_name] ([P.id.assignment])"
|
||||
src.screen=2
|
||||
else
|
||||
var/obj/item/weapon/card/id/T = I
|
||||
src.scanned_user = text("[T.registered] ([T.assignment])")
|
||||
src.scanned_user = text("[T.registered_name] ([T.assignment])")
|
||||
src.screen=2*/ //Obsolete after autorecognition
|
||||
|
||||
if (src.isbroken)
|
||||
|
||||
@@ -45,7 +45,7 @@ datum/controller/game_controller
|
||||
if(!tension_master)
|
||||
tension_master = new /datum/tension()
|
||||
|
||||
world.tick_lag = 0.9
|
||||
world.tick_lag = config.Ticklag
|
||||
|
||||
setup_objects()
|
||||
|
||||
|
||||
@@ -125,6 +125,16 @@
|
||||
icon_state = "pda-lawyer"
|
||||
ttone = "objection"
|
||||
|
||||
/obj/item/device/pda/botanist
|
||||
//default_cartridge = /obj/item/weapon/cartridge/botanist
|
||||
icon_state = "pda-hydro"
|
||||
|
||||
/obj/item/device/pda/librarian
|
||||
icon_state = "pda-libb"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader."
|
||||
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
|
||||
silent = 1 //Quiet in the library!
|
||||
|
||||
/*
|
||||
* The Actual PDA
|
||||
*/
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/access_clown = 0
|
||||
var/access_mime = 0
|
||||
var/access_janitor = 0
|
||||
// var/access_flora = 0
|
||||
var/access_reagent_scanner = 0
|
||||
var/access_remote_door = 0 //Control some blast doors remotely!!
|
||||
var/remote_door_id = ""
|
||||
@@ -73,6 +74,12 @@
|
||||
icon_state = "cart-mi"
|
||||
access_mime = 1
|
||||
var/mime_charges = 5
|
||||
/*
|
||||
botanist
|
||||
name = "Green Thumb v4.20"
|
||||
icon_state = "cart-b"
|
||||
access_flora = 1
|
||||
*/
|
||||
|
||||
signal
|
||||
name = "generic signaler cartridge"
|
||||
|
||||
@@ -297,39 +297,46 @@ mob/proc/flash_weak_pain()
|
||||
Metroid.SStun = 0
|
||||
|
||||
spawn(0)
|
||||
Metroid.canmove = 0
|
||||
step_away(Metroid, user)
|
||||
if(prob(25 + power*2))
|
||||
sleep(2)
|
||||
if(Metroid)
|
||||
Metroid.canmove = 0
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 1
|
||||
if(prob(25 + power))
|
||||
sleep(2)
|
||||
if(Metroid && user)
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 1
|
||||
|
||||
else
|
||||
if(prob(10 + power*2))
|
||||
if(Metroid)
|
||||
if(Metroid.Victim)
|
||||
if(prob(80) && !Metroid.client)
|
||||
Metroid.Discipline++
|
||||
|
||||
if(Metroid.Victim)
|
||||
if(prob(80) && !Metroid.client)
|
||||
Metroid.Discipline++
|
||||
if(Metroid.Discipline == 1)
|
||||
Metroid.attacked = 0
|
||||
|
||||
if(Metroid.Discipline == 1)
|
||||
Metroid.attacked = 0
|
||||
spawn()
|
||||
if(Metroid)
|
||||
Metroid.SStun = 1
|
||||
sleep(rand(5,20))
|
||||
if(Metroid)
|
||||
Metroid.SStun = 0
|
||||
|
||||
spawn()
|
||||
Metroid.SStun = 1
|
||||
sleep(rand(5,20))
|
||||
Metroid.SStun = 0
|
||||
|
||||
Metroid.Victim = null
|
||||
Metroid.anchored = 0
|
||||
Metroid.Victim = null
|
||||
Metroid.anchored = 0
|
||||
|
||||
|
||||
spawn(0)
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 0
|
||||
if(prob(25 + power*4))
|
||||
sleep(2)
|
||||
if(Metroid && user)
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 1
|
||||
Metroid.canmove = 0
|
||||
if(prob(25 + power*4))
|
||||
sleep(2)
|
||||
if(Metroid && user)
|
||||
step_away(Metroid, user)
|
||||
Metroid.canmove = 1
|
||||
|
||||
|
||||
var/showname = "."
|
||||
if(user)
|
||||
|
||||
@@ -1548,6 +1548,10 @@ CIRCULAR SAW
|
||||
return
|
||||
|
||||
if(3.0)
|
||||
if(M.changeling && M.changeling.changeling_fakedeath)
|
||||
user << "\red The neural tissue regrows before your eyes as you cut it."
|
||||
return
|
||||
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] has \his spine's connection to the brain severed with [src] by [user].", 1)
|
||||
|
||||
@@ -13,7 +13,7 @@ WELDINGTOOOL
|
||||
desc = "A wrench with common uses. Can be found in your hand."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "wrench"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
w_class = 2.0
|
||||
@@ -44,7 +44,7 @@ WELDINGTOOOL
|
||||
name = "Welding Tool"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "welder"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
@@ -310,7 +310,7 @@ WELDINGTOOOL
|
||||
desc = "This cuts wires."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "cutters"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
force = 6.0
|
||||
throw_speed = 2
|
||||
throw_range = 9
|
||||
|
||||
@@ -441,6 +441,9 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
// Oh my god; the comms are down or something because the signal hasn't been broadcasted yet.
|
||||
// Send a mundane broadcast with limited targets:
|
||||
|
||||
//THIS IS TEMPORARY.
|
||||
if(!connection) return //~Carn
|
||||
|
||||
Broadcast_Message(connection, M, voicemask, M.voice_message,
|
||||
src, message, displayname, jobname, real_name, M.voice_name,
|
||||
filter_type, signal.data["compression"])
|
||||
|
||||
@@ -10,6 +10,7 @@ SILVER
|
||||
|
||||
//Sandstone
|
||||
var/global/list/datum/stack_recipe/sandstone_recipes = list ( \
|
||||
new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \
|
||||
/* new/datum/stack_recipe("sandstone wall", ???), \
|
||||
new/datum/stack_recipe("sandstone floor", ???),\*/
|
||||
|
||||
@@ -160,6 +160,58 @@ obj/structure
|
||||
/obj/structure/girder/reinforced
|
||||
icon_state = "reinforced"
|
||||
state = 2
|
||||
|
||||
/obj/structure/cultgirder
|
||||
icon= 'cult.dmi'
|
||||
icon_state= "cultgirder"
|
||||
anchored = 1
|
||||
density = 1
|
||||
layer = 2
|
||||
|
||||
attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'Ratchet.ogg', 100, 1)
|
||||
user << "\blue Now disassembling the girder"
|
||||
if(do_after(user,40))
|
||||
user << "\blue You dissasembled the girder!"
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
del(src)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
user << "\blue Now slicing apart the girder"
|
||||
if(do_after(user,30))
|
||||
user << "\blue You slice apart the girder!"
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
del(src)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
|
||||
user << "\blue You drill through the girder!"
|
||||
new /obj/effect/decal/remains/human(get_turf(src))
|
||||
del(src)
|
||||
|
||||
blob_act()
|
||||
if(prob(40))
|
||||
del(src)
|
||||
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(30))
|
||||
new /obj/effect/decal/remains/human(loc)
|
||||
del(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(5))
|
||||
new /obj/effect/decal/remains/human(loc)
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
// LATTICE
|
||||
|
||||
|
||||
|
||||
@@ -75,7 +75,6 @@
|
||||
onclose(user, "trans_valve")
|
||||
return
|
||||
|
||||
//CARN: MARKER
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if ( usr.stat || usr.restrained() )
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
..()
|
||||
|
||||
/atom/movable/proc/throw_at(atom/target, range, speed)
|
||||
if(!target) return 0
|
||||
if(!target || !src) return 0
|
||||
//use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target
|
||||
src.throwing = 1
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
|
||||
|
||||
|
||||
while(((((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || (a.has_gravity == 0) || istype(src.loc, /turf/space)) && src.throwing && istype(src.loc, /turf))
|
||||
while(src && target &&((((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || (a.has_gravity == 0) || istype(src.loc, /turf/space)) && src.throwing && istype(src.loc, /turf))
|
||||
// only stop when we've gone the whole distance (or max throw range) and are on a non-space tile, or hit something, or hit the end of the map, or someone picks it up
|
||||
if(error < 0)
|
||||
var/atom/step = get_step(src, dy)
|
||||
@@ -181,7 +181,6 @@
|
||||
if(dist_since_sleep >= speed)
|
||||
dist_since_sleep = 0
|
||||
sleep(1)
|
||||
|
||||
a = get_area(src.loc)
|
||||
else
|
||||
var/error = dist_y/2 - dist_x
|
||||
|
||||
@@ -308,6 +308,7 @@
|
||||
if(!devastated)
|
||||
playsound(src.loc, 'Welder.ogg', 100, 1)
|
||||
new /obj/effect/decal/cleanable/blood(src)
|
||||
new /obj/structure/cultgirder(src)
|
||||
else
|
||||
new /obj/effect/decal/cleanable/blood(src)
|
||||
new /obj/effect/decal/remains/human(src)
|
||||
|
||||
@@ -522,8 +522,8 @@ var/global/BSACooldown = 0
|
||||
for(var/job in notbannedlist)
|
||||
ban_unban_log_save("[key_name(usr)] jobbanned [key_name(M)] from [job]. reason: [reason]")
|
||||
log_admin("[key_name(usr)] banned [key_name(M)] from [job]")
|
||||
feedback_inc("ban_job",1)
|
||||
feedback_add_details("ban_job","- [job]")
|
||||
//feedback_inc("ban_job",1)
|
||||
//feedback_add_details("ban_job","- [job]")
|
||||
jobban_fullban(M, job, "[reason]; By [usr.ckey] on [time2text(world.realtime)]")
|
||||
if(!msg) msg = job
|
||||
else msg += ", [job]"
|
||||
@@ -547,8 +547,8 @@ var/global/BSACooldown = 0
|
||||
if("Yes")
|
||||
ban_unban_log_save("[key_name(usr)] unjobbanned [key_name(M)] from [job]")
|
||||
log_admin("[key_name(usr)] unbanned [key_name(M)] from [job]")
|
||||
feedback_inc("ban_job_unban",1)
|
||||
feedback_add_details("ban_job_unban","- [job]")
|
||||
//feedback_inc("ban_job_unban",1)
|
||||
//feedback_add_details("ban_job_unban","- [job]")
|
||||
jobban_unban(M, job)
|
||||
if(!msg) msg = job
|
||||
else msg += ", [job]"
|
||||
@@ -1615,8 +1615,8 @@ var/global/BSACooldown = 0
|
||||
ok = 1*/
|
||||
if("toxic")
|
||||
/*
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","T")
|
||||
//feedback_inc("admin_secrets_fun_used",1)
|
||||
//feedback_add_details("admin_secrets_fun_used","T")
|
||||
for(var/obj/machinery/atmoalter/siphs/fullairsiphon/O in world)
|
||||
O.t_status = 3
|
||||
for(var/obj/machinery/atmoalter/siphs/scrubbers/O in world)
|
||||
|
||||
@@ -285,11 +285,13 @@
|
||||
verbs += /client/proc/get_admin_state
|
||||
verbs += /client/proc/reload_admins
|
||||
verbs += /client/proc/cmd_debug_make_powernets
|
||||
verbs += /client/proc/enable_debug_verbs
|
||||
verbs += /client/proc/everyone_random
|
||||
verbs += /client/proc/only_one
|
||||
verbs += /client/proc/deadmin_self
|
||||
verbs += /client/proc/getruntimelog //used by coders to retrieve runtime logs
|
||||
verbs += /client/proc/enable_mapping_debug
|
||||
// verbs += /client/proc/giveruntimelog //used by coders to retrieve runtime logs
|
||||
verbs += /client/proc/cinematic //used by coders to retrieve runtime logs
|
||||
verbs += /client/proc/enable_debug_verbs
|
||||
verbs += /client/proc/kill_air
|
||||
verbs += /client/proc/callprocgen
|
||||
verbs += /client/proc/callprocobj
|
||||
@@ -403,6 +405,7 @@
|
||||
verbs -= /client/proc/cmd_admin_gib_self
|
||||
verbs -= /client/proc/restartcontroller
|
||||
verbs -= /client/proc/play_local_sound
|
||||
verbs -= /client/proc/enable_debug_verbs
|
||||
verbs -= /client/proc/toggleprayers
|
||||
verbs -= /client/proc/Blobize
|
||||
verbs -= /client/proc/toggle_clickproc //TODO ERRORAGE (Temporary proc while the enw clickproc is being tested)
|
||||
@@ -416,6 +419,9 @@
|
||||
verbs -= /client/proc/deadmin_self
|
||||
verbs -= /client/proc/jumptocoord
|
||||
verbs -= /client/proc/everyone_random
|
||||
// verbs -= /client/proc/giveruntimelog //used by coders to retrieve runtime logs
|
||||
// verbs -= /client/proc/getserverlog
|
||||
verbs -= /client/proc/cinematic
|
||||
verbs -= /client/proc/cmd_admin_change_custom_event
|
||||
verbs -= /client/proc/admin_invis
|
||||
verbs -= /client/proc/callprocgen
|
||||
@@ -452,7 +458,7 @@
|
||||
verbs -= /client/proc/jump_to_dead_group
|
||||
verbs -= /client/proc/playernotes
|
||||
verbs -= /obj/admins/proc/show_skills
|
||||
verbs -= /client/proc/enable_mapping_debug
|
||||
verbs -= /client/proc/enable_debug_verbs
|
||||
return
|
||||
|
||||
|
||||
@@ -623,7 +629,7 @@
|
||||
log_admin("[ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
ban_unban_log_save("[ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
message_admins("\blue [ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
feedback_inc("ban_warn",1)
|
||||
//feedback_inc("ban_warn",1)
|
||||
|
||||
del(M.client)
|
||||
// feedback_add_details("admin_verb","WARN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/client/proc/cinematic(var/cinematic as anything in list("explosion",null))
|
||||
set name = "cinematic"
|
||||
set category = "Fun"
|
||||
set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted.
|
||||
set hidden = 1
|
||||
if(!ticker) return
|
||||
switch(cinematic)
|
||||
if("explosion")
|
||||
var/parameter = input(src,"station_missed = ?","Enter Parameter",0) as num
|
||||
var/override
|
||||
switch(parameter)
|
||||
if(1)
|
||||
override = input(src,"mode = ?","Enter Parameter",null) as anything in list("nuclear emergency","no override")
|
||||
if(0)
|
||||
override = input(src,"mode = ?","Enter Parameter",null) as anything in list("blob","nuclear emergency","AI malfunction","no override")
|
||||
ticker.station_explosion_cinematic(parameter,override)
|
||||
return
|
||||
@@ -506,6 +506,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
else
|
||||
alert("Invalid mob")
|
||||
//feedback_add_details("admin_verb","GFA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(src)] has granted [M.key] full access.")
|
||||
message_admins("\blue [key_name_admin(usr)] has granted [M.key] full access.", 1)
|
||||
|
||||
/client/proc/cmd_assume_direct_control(var/mob/M in world)
|
||||
set category = "Admin"
|
||||
@@ -523,6 +525,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if( isobserver(adminmob) )
|
||||
del(adminmob)
|
||||
//feedback_add_details("admin_verb","ADC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] assumed direct control of [M].")
|
||||
message_admins("\blue [key_name_admin(usr)] assumed direct control of [M].", 1)
|
||||
|
||||
|
||||
|
||||
/client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in world)
|
||||
@@ -559,6 +564,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks
|
||||
if (isnull(dresscode))
|
||||
return
|
||||
//feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
for (var/obj/item/I in M)
|
||||
if (istype(I, /obj/item/weapon/implant))
|
||||
continue
|
||||
@@ -879,4 +885,54 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
M.equip_if_possible(W, M.slot_wear_id)
|
||||
|
||||
M.update_clothing()
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] changed the equipment of [key_name(M)] to [dresscode].")
|
||||
message_admins("\blue [key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode]..", 1)
|
||||
return
|
||||
|
||||
/client/proc/startSinglo()
|
||||
|
||||
if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes")
|
||||
return
|
||||
|
||||
for(var/obj/machinery/emitter/E in world)
|
||||
if(E.anchored)
|
||||
E.active = 1
|
||||
|
||||
for(var/obj/machinery/field_generator/F in world)
|
||||
if(F.anchored)
|
||||
F.Varedit_start = 1
|
||||
spawn(30)
|
||||
for(var/obj/machinery/the_singularitygen/G in world)
|
||||
if(G.anchored)
|
||||
var/obj/machinery/singularity/S = new /obj/machinery/singularity(get_turf(G), 50)
|
||||
spawn(0)
|
||||
del(G)
|
||||
S.energy = 1750
|
||||
S.current_size = 7
|
||||
S.icon = '224x224.dmi'
|
||||
S.icon_state = "singularity_s7"
|
||||
S.pixel_x = -96
|
||||
S.pixel_y = -96
|
||||
S.grav_pull = 0
|
||||
//S.consume_range = 3
|
||||
S.dissipate = 0
|
||||
//S.dissipate_delay = 10
|
||||
//S.dissipate_track = 0
|
||||
//S.dissipate_strength = 10
|
||||
|
||||
for(var/obj/machinery/power/rad_collector/Rad in world)
|
||||
if(Rad.anchored)
|
||||
if(!Rad.P)
|
||||
var/obj/item/weapon/tank/plasma/Plasma = new/obj/item/weapon/tank/plasma(Rad)
|
||||
Plasma.air_contents.toxins = 70
|
||||
Rad.drainratio = 0
|
||||
Rad.P = Plasma
|
||||
Plasma.loc = Rad
|
||||
|
||||
if(!Rad.active)
|
||||
Rad.toggle_power()
|
||||
|
||||
for(var/obj/machinery/power/smes/SMES in world)
|
||||
if(SMES.anchored)
|
||||
SMES.chargemode = 1
|
||||
@@ -59,6 +59,7 @@ var/intercom_range_display_status = 0
|
||||
if(camera_range_display_status)
|
||||
for(var/obj/machinery/camera/C in world)
|
||||
new/obj/effect/debugging/camera_range(C.loc)
|
||||
//feedback_add_details("admin_verb","mCRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
|
||||
@@ -100,6 +101,7 @@ var/intercom_range_display_status = 0
|
||||
|
||||
output += "</ul>"
|
||||
usr << browse(output,"window=airreport;size=1000x500")
|
||||
//feedback_add_details("admin_verb","mCRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
intercom_view()
|
||||
set category = "Mapping"
|
||||
@@ -119,10 +121,11 @@ var/intercom_range_display_status = 0
|
||||
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
|
||||
if (!(F in view(7,I.loc)))
|
||||
del(F)
|
||||
//feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
enable_mapping_debug()
|
||||
enable_debug_verbs()
|
||||
set category = "Debug"
|
||||
set name = "Mapping debug"
|
||||
set name = "Debug verbs"
|
||||
src.verbs += /client/proc/do_not_use_these //-errorage
|
||||
src.verbs += /client/proc/camera_view //-errorage
|
||||
src.verbs += /client/proc/sec_camera_report //-errorage
|
||||
@@ -132,6 +135,10 @@ var/intercom_range_display_status = 0
|
||||
src.verbs += /client/proc/atmosscan //check plumbing
|
||||
src.verbs += /client/proc/count_objects_on_z_level
|
||||
src.verbs += /client/proc/count_objects_all
|
||||
src.verbs += /client/proc/cmd_assume_direct_control //-errorage
|
||||
src.verbs += /client/proc/jump_to_dead_group
|
||||
src.verbs += /client/proc/startSinglo
|
||||
//feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
count_objects_on_z_level()
|
||||
set category = "Mapping"
|
||||
@@ -174,6 +181,7 @@ var/intercom_range_display_status = 0
|
||||
world << line*/
|
||||
|
||||
world << "There are [count] objects of type [type_path] on z-level [num_level]"
|
||||
//feedback_add_details("admin_verb","mOBJZ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
count_objects_all()
|
||||
set category = "Mapping"
|
||||
@@ -199,4 +207,5 @@ var/intercom_range_display_status = 0
|
||||
line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
|
||||
world << line*/
|
||||
|
||||
world << "There are [count] objects of type [type_path] in the game world"
|
||||
world << "There are [count] objects of type [type_path] in the game world"
|
||||
//feedback_add_details("admin_verb","mOBJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -17,6 +17,8 @@
|
||||
world.tick_lag = newtick
|
||||
//feedback_add_details("admin_verb","TICKLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
|
||||
src << "\red Error: ticklag(): Invalid world.ticklag value. No changes made."
|
||||
return
|
||||
|
||||
|
||||
@@ -2288,6 +2288,25 @@
|
||||
var/list/data = list("viruses"= list(F))
|
||||
reagents.add_reagent("blood", 20, data)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/pacid
|
||||
name = "Polytrinic Acid Bottle"
|
||||
desc = "A small bottle. Contains a small amount of Polytronic Acid"
|
||||
icon = 'chemical.dmi'
|
||||
icon_state = "bottle17"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("pacid", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
|
||||
name = "Adminordrazine Bottle"
|
||||
desc = "A small bottle. Contains the liquid essence of the gods."
|
||||
icon = 'drinks.dmi'
|
||||
icon_state = "holyflask"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("adminordrazine", 30)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/ert
|
||||
name = "emergency medicine bottle"
|
||||
desc = "A large bottle."
|
||||
|
||||
@@ -1393,6 +1393,7 @@
|
||||
name = "Metroid Sandwich"
|
||||
desc = "A sandwich is green stuff."
|
||||
icon_state = "metroidsandwich"
|
||||
trash = "plate"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 2)
|
||||
@@ -1441,6 +1442,40 @@
|
||||
else
|
||||
reagents.add_reagent("nutriment", 5)
|
||||
bitesize = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chawanmushi
|
||||
name = "chawanmushi"
|
||||
desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat."
|
||||
icon_state = "chawanmushi"
|
||||
trash = "snack_bowl"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 5)
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/beetsoup
|
||||
name = "beet soup"
|
||||
desc = "Wait, how do you spell it, again..?"
|
||||
icon_state = "beetsoup"
|
||||
trash = "snack_bowl"
|
||||
New()
|
||||
..()
|
||||
switch(rand(1,6))
|
||||
if(1)
|
||||
name = "borsch"
|
||||
if(2)
|
||||
name = "bortsch"
|
||||
if(3)
|
||||
name = "borstch"
|
||||
if(4)
|
||||
name = "borsh"
|
||||
if(5)
|
||||
name = "borshch"
|
||||
if(6)
|
||||
name = "borscht"
|
||||
reagents.add_reagent("nutriment", 8)
|
||||
bitesize = 2
|
||||
|
||||
/////////////////////////////////////////////////Sliceable////////////////////////////////////////
|
||||
// All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels
|
||||
|
||||
|
||||
@@ -1019,6 +1019,23 @@
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
|
||||
|
||||
/datum/recipe/chawanmushi
|
||||
reagents = list("water" = 5, "soysauce" = 5)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi
|
||||
|
||||
/datum/recipe/beetsoup
|
||||
reagents = list("water" = 10)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/beetsoup
|
||||
|
||||
//////////////////////////////////////////
|
||||
// bs12 food port stuff
|
||||
//////////////////////////////////////////
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
|
||||
/obj/hud/proc/ghost_hud()
|
||||
station_explosion = new h_type( src )
|
||||
station_explosion.icon = 'station_explosion.dmi'
|
||||
station_explosion.icon_state = "start"
|
||||
station_explosion.layer = 20
|
||||
station_explosion.mouse_opacity = 0
|
||||
station_explosion.screen_loc = "1,3"
|
||||
return
|
||||
@@ -37,14 +37,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new src.h_type( src )
|
||||
|
||||
@@ -39,14 +39,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new src.h_type( src )
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
/obj/hud/proc/brain_hud(var/ui_style='screen1_old.dmi')
|
||||
station_explosion = new h_type( src )
|
||||
station_explosion.icon = 'station_explosion.dmi'
|
||||
station_explosion.icon_state = "start"
|
||||
station_explosion.layer = 20
|
||||
station_explosion.mouse_opacity = 0
|
||||
station_explosion.screen_loc = "1,3"
|
||||
|
||||
blurry = new h_type( src )
|
||||
blurry.screen_loc = "WEST,SOUTH to EAST,NORTH"
|
||||
|
||||
@@ -41,14 +41,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new src.h_type( src )
|
||||
|
||||
@@ -1242,7 +1242,7 @@
|
||||
|
||||
if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]"
|
||||
|
||||
if(resting || lying || sleeping) rest.icon_state = "rest[(resting || lying || sleeping) ? 1 : 0]"
|
||||
if(rest) rest.icon_state = "rest[(resting || lying || sleeping) ? 1 : 0]"
|
||||
|
||||
|
||||
if (toxin || hal_screwyhud == 4) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
|
||||
@@ -1251,26 +1251,26 @@
|
||||
//NOTE: the alerts dont reset when youre out of danger. dont blame me,
|
||||
//blame the person who coded them. Temporary fix added.
|
||||
|
||||
switch(bodytemperature) //310.055 optimal body temp
|
||||
|
||||
if(370 to INFINITY)
|
||||
bodytemp.icon_state = "temp4"
|
||||
if(350 to 370)
|
||||
bodytemp.icon_state = "temp3"
|
||||
if(335 to 350)
|
||||
bodytemp.icon_state = "temp2"
|
||||
if(320 to 335)
|
||||
bodytemp.icon_state = "temp1"
|
||||
if(300 to 320)
|
||||
bodytemp.icon_state = "temp0"
|
||||
if(295 to 300)
|
||||
bodytemp.icon_state = "temp-1"
|
||||
if(280 to 295)
|
||||
bodytemp.icon_state = "temp-2"
|
||||
if(260 to 280)
|
||||
bodytemp.icon_state = "temp-3"
|
||||
else
|
||||
bodytemp.icon_state = "temp-4"
|
||||
if(bodytemp)
|
||||
switch(bodytemperature) //310.055 optimal body temp
|
||||
if(370 to INFINITY)
|
||||
bodytemp.icon_state = "temp4"
|
||||
if(350 to 370)
|
||||
bodytemp.icon_state = "temp3"
|
||||
if(335 to 350)
|
||||
bodytemp.icon_state = "temp2"
|
||||
if(320 to 335)
|
||||
bodytemp.icon_state = "temp1"
|
||||
if(300 to 320)
|
||||
bodytemp.icon_state = "temp0"
|
||||
if(295 to 300)
|
||||
bodytemp.icon_state = "temp-1"
|
||||
if(280 to 295)
|
||||
bodytemp.icon_state = "temp-2"
|
||||
if(260 to 280)
|
||||
bodytemp.icon_state = "temp-3"
|
||||
else
|
||||
bodytemp.icon_state = "temp-4"
|
||||
|
||||
if(!client) return 0 //Wish we did not need these
|
||||
client.screen -= hud_used.blurry
|
||||
|
||||
@@ -44,12 +44,4 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
*/
|
||||
@@ -43,14 +43,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new src.h_type( src )
|
||||
|
||||
@@ -591,26 +591,26 @@
|
||||
//NOTE: the alerts dont reset when youre out of danger. dont blame me,
|
||||
//blame the person who coded them. Temporary fix added.
|
||||
|
||||
switch(src.bodytemperature) //310.055 optimal body temp
|
||||
|
||||
if(345 to INFINITY)
|
||||
src.bodytemp.icon_state = "temp4"
|
||||
if(335 to 345)
|
||||
src.bodytemp.icon_state = "temp3"
|
||||
if(327 to 335)
|
||||
src.bodytemp.icon_state = "temp2"
|
||||
if(316 to 327)
|
||||
src.bodytemp.icon_state = "temp1"
|
||||
if(300 to 316)
|
||||
src.bodytemp.icon_state = "temp0"
|
||||
if(295 to 300)
|
||||
src.bodytemp.icon_state = "temp-1"
|
||||
if(280 to 295)
|
||||
src.bodytemp.icon_state = "temp-2"
|
||||
if(260 to 280)
|
||||
src.bodytemp.icon_state = "temp-3"
|
||||
else
|
||||
src.bodytemp.icon_state = "temp-4"
|
||||
if(bodytemp)
|
||||
switch(src.bodytemperature) //310.055 optimal body temp
|
||||
if(345 to INFINITY)
|
||||
src.bodytemp.icon_state = "temp4"
|
||||
if(335 to 345)
|
||||
src.bodytemp.icon_state = "temp3"
|
||||
if(327 to 335)
|
||||
src.bodytemp.icon_state = "temp2"
|
||||
if(316 to 327)
|
||||
src.bodytemp.icon_state = "temp1"
|
||||
if(300 to 316)
|
||||
src.bodytemp.icon_state = "temp0"
|
||||
if(295 to 300)
|
||||
src.bodytemp.icon_state = "temp-1"
|
||||
if(280 to 295)
|
||||
src.bodytemp.icon_state = "temp-2"
|
||||
if(260 to 280)
|
||||
src.bodytemp.icon_state = "temp-3"
|
||||
else
|
||||
src.bodytemp.icon_state = "temp-4"
|
||||
|
||||
src.client.screen -= src.hud_used.blurry
|
||||
src.client.screen -= src.hud_used.druggy
|
||||
|
||||
@@ -565,7 +565,7 @@
|
||||
|
||||
malf_picker.use(src)
|
||||
|
||||
//I am the icon meister. Bow fefore me.
|
||||
//I am the icon meister. Bow fefore me. //>fefore
|
||||
/mob/living/silicon/ai/proc/ai_hologram_change()
|
||||
set name = "Change Hologram"
|
||||
set desc = "Change the default hologram available to AI to something else."
|
||||
|
||||
@@ -1,10 +1,2 @@
|
||||
/obj/hud/proc/ai_hud()
|
||||
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
return
|
||||
@@ -38,14 +38,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
|
||||
|
||||
@@ -242,18 +242,18 @@
|
||||
else
|
||||
src.cells.icon_state = "charge-empty"
|
||||
|
||||
switch(src.bodytemperature) //310.055 optimal body temp
|
||||
|
||||
if(335 to INFINITY)
|
||||
src.bodytemp.icon_state = "temp2"
|
||||
if(320 to 335)
|
||||
src.bodytemp.icon_state = "temp1"
|
||||
if(300 to 320)
|
||||
src.bodytemp.icon_state = "temp0"
|
||||
if(260 to 300)
|
||||
src.bodytemp.icon_state = "temp-1"
|
||||
else
|
||||
src.bodytemp.icon_state = "temp-2"
|
||||
if(bodytemp)
|
||||
switch(src.bodytemperature) //310.055 optimal body temp
|
||||
if(335 to INFINITY)
|
||||
src.bodytemp.icon_state = "temp2"
|
||||
if(320 to 335)
|
||||
src.bodytemp.icon_state = "temp1"
|
||||
if(300 to 320)
|
||||
src.bodytemp.icon_state = "temp0"
|
||||
if(260 to 300)
|
||||
src.bodytemp.icon_state = "temp-1"
|
||||
else
|
||||
src.bodytemp.icon_state = "temp-2"
|
||||
|
||||
|
||||
if(src.pullin) src.pullin.icon_state = "pull[src.pulling ? 1 : 0]"
|
||||
|
||||
@@ -95,19 +95,26 @@
|
||||
|
||||
|
||||
/obj/item/borg/upgrade/tasercooler/action(var/mob/living/silicon/robot/R)
|
||||
if(R.module != /obj/item/weapon/robot_module/security)
|
||||
if(!istype(R.module, /obj/item/weapon/robot_module/security))
|
||||
R << "Upgrade mounting error! No suitable hardpoint detected!"
|
||||
usr << "There's no mounting point for the module!"
|
||||
return 0
|
||||
|
||||
var/obj/item/weapon/gun/energy/taser/cyborg/T = locate() in R
|
||||
var/obj/item/weapon/gun/energy/taser/cyborg/T = locate() in R.module
|
||||
if(!T)
|
||||
T = locate() in R.module.contents
|
||||
if(!T)
|
||||
T = locate() in R.module.modules
|
||||
if(!T)
|
||||
usr << "This cyborg has had its taser removed!"
|
||||
return 0
|
||||
|
||||
if(T.recharge_time <= 2)
|
||||
R << "Maximum cooling achieved for this hardpoint!"
|
||||
usr << "There's no room for another cooling unit!"
|
||||
return 0
|
||||
|
||||
else
|
||||
T.recharge_time = min(2 , T.recharge_time - 4)
|
||||
T.recharge_time = max(2 , T.recharge_time - 4)
|
||||
|
||||
return 1
|
||||
+5
-40
@@ -638,10 +638,11 @@
|
||||
for (var/mob/living/silicon/decoy/D in world)
|
||||
if (eye)
|
||||
eye = D
|
||||
if (eye)
|
||||
client.eye = eye
|
||||
else
|
||||
client.eye = client.mob
|
||||
if (client)
|
||||
if (eye)
|
||||
client.eye = eye
|
||||
else
|
||||
client.eye = client.mob
|
||||
|
||||
/mob/verb/cancel_camera()
|
||||
set name = "Cancel Camera View"
|
||||
@@ -1037,42 +1038,6 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
statpanel("Spells","[S.holder_var_type] [S.holder_var_amount]",S)
|
||||
|
||||
|
||||
/client/proc/station_explosion_cinematic(var/station_missed)
|
||||
if(!mob || !ticker) return
|
||||
if(!mob.client || !mob.hud_used || !ticker.mode) return
|
||||
// M.loc = null this might make it act weird but fuck putting them in nullspace, it causes issues.
|
||||
var/obj/screen/boom = mob.hud_used.station_explosion
|
||||
if(!istype(boom)) return
|
||||
|
||||
mob.client.screen += boom
|
||||
|
||||
switch(ticker.mode.name)
|
||||
if("nuclear emergency")
|
||||
flick("start_nuke", boom)
|
||||
if("AI malfunction")
|
||||
flick("start_malf", boom)
|
||||
else
|
||||
boom.icon_state = "start"
|
||||
|
||||
sleep(40)
|
||||
mob << sound('explosionfar.ogg')
|
||||
boom.icon_state = "end"
|
||||
if(!station_missed) flick("explode", boom)
|
||||
else flick("explode2", boom)
|
||||
sleep(40)
|
||||
|
||||
switch(ticker.mode.name)
|
||||
if("nuclear emergency")
|
||||
if(!station_missed) boom.icon_state = "loss_nuke"
|
||||
else boom.icon_state = "loss_nuke2"
|
||||
if("malfunction")
|
||||
boom.icon_state = "loss_malf"
|
||||
if("blob")
|
||||
return//Nothin here yet and the general one does not fit.
|
||||
else
|
||||
boom.icon_state = "loss_general"
|
||||
return
|
||||
|
||||
|
||||
// facing verbs
|
||||
/mob/proc/canface()
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
|
||||
/obj/hud/proc/unplayer_hud()
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
return
|
||||
@@ -1,10 +1,10 @@
|
||||
//THIS IS OBVIOUSLY WIP, SORRY -PETE
|
||||
/obj/item/weapon/folder
|
||||
name = "folder"
|
||||
desc = "A folder."
|
||||
icon = 'bureaucracy.dmi'
|
||||
icon_state = "folder"
|
||||
w_class = 2
|
||||
pressure_resistance = 2
|
||||
|
||||
/obj/item/weapon/folder/blue
|
||||
desc = "A blue folder."
|
||||
|
||||
@@ -50,5 +50,5 @@
|
||||
|
||||
update_icon()
|
||||
if(multiple_sprites)
|
||||
icon_state = text("[initial(icon_state)]-[]", stored_ammo.len)
|
||||
desc = text("There are [] shell\s left!", stored_ammo.len)
|
||||
icon_state = "[initial(icon_state)]-[stored_ammo.len]"
|
||||
desc = "There are [stored_ammo.len] shell\s left!"
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
caliber = ""
|
||||
silenced = 0
|
||||
recoil = 0
|
||||
ejectshell = 1
|
||||
tmp/list/mob/living/target //List of who yer targeting.
|
||||
tmp/lock_time = -100
|
||||
tmp/mouthshoot = 0 ///To stop people from suiciding twice... >.>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/weapon/gun/energy/ionrifle
|
||||
name = "\improper Ion Rifle"
|
||||
name = "ion rifle"
|
||||
desc = "A man portable anti-armor weapon designed to disable mechanical threats"
|
||||
icon_state = "ionrifle"
|
||||
fire_sound = 'Laser.ogg'
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/decloner
|
||||
name = "\improper Biological Demolecularisor"
|
||||
name = "biological demolecularisor"
|
||||
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
|
||||
icon_state = "decloner"
|
||||
fire_sound = 'pulse3.ogg'
|
||||
@@ -21,7 +21,7 @@
|
||||
projectile_type = "/obj/item/projectile/energy/declone"
|
||||
|
||||
obj/item/weapon/gun/energy/staff
|
||||
name = "\improper Staff of Change"
|
||||
name = "staff of change"
|
||||
desc = "an artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
|
||||
icon = 'gun.dmi'
|
||||
icon_state = "staffofchange"
|
||||
@@ -52,4 +52,53 @@ obj/item/weapon/gun/energy/staff
|
||||
if(!power_supply) return 0
|
||||
power_supply.give(200)
|
||||
update_icon()
|
||||
return 1
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/energy/floragun
|
||||
name = "floral somatoray"
|
||||
desc = "A tool that discharges controlled radiation which induces mutation in plant cells."
|
||||
icon_state = "floramut100"
|
||||
item_state = "gun"
|
||||
fire_sound = 'stealthoff.ogg'
|
||||
charge_cost = 100
|
||||
projectile_type = "/obj/item/projectile/energy/floramut"
|
||||
origin_tech = "materials=2;biotech=3;powerstorage=3"
|
||||
modifystate = "floramut"
|
||||
var/charge_tick = 0
|
||||
var/mode = 0 //0 = mutate, 1 = yield boost
|
||||
|
||||
New()
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
|
||||
|
||||
Del()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
|
||||
|
||||
process()
|
||||
charge_tick++
|
||||
if(charge_tick < 4) return 0
|
||||
charge_tick = 0
|
||||
if(!power_supply) return 0
|
||||
power_supply.give(100)
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
attack_self(mob/living/user as mob)
|
||||
switch(mode)
|
||||
if(0)
|
||||
mode = 1
|
||||
charge_cost = 100
|
||||
user << "\red The [src.name] is now set to increase yield."
|
||||
projectile_type = "/obj/item/projectile/energy/florayield"
|
||||
modifystate = "florayield"
|
||||
if(1)
|
||||
mode = 0
|
||||
charge_cost = 100
|
||||
user << "\red The [src.name] is now set to induce mutations."
|
||||
projectile_type = "/obj/item/projectile/energy/floramut"
|
||||
modifystate = "floramut"
|
||||
update_icon()
|
||||
return
|
||||
@@ -25,12 +25,16 @@
|
||||
|
||||
|
||||
load_into_chamber()
|
||||
if(in_chamber) return 1
|
||||
if(!loaded.len) return 0
|
||||
if(in_chamber)
|
||||
return 1
|
||||
|
||||
if(!loaded.len)
|
||||
return 0
|
||||
|
||||
var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
|
||||
loaded -= AC //Remove casing from loaded list.
|
||||
AC.loc = get_turf(src) //Eject casing onto ground.
|
||||
AC.desc += " This one is spent." //descriptions are magic
|
||||
|
||||
if(AC.BB)
|
||||
in_chamber = AC.BB //Load projectile into chamber.
|
||||
@@ -40,6 +44,7 @@
|
||||
|
||||
|
||||
attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
|
||||
var/num_loaded = 0
|
||||
if(istype(A, /obj/item/ammo_magazine))
|
||||
if((load_method == 2) && loaded.len) return
|
||||
@@ -64,13 +69,18 @@
|
||||
loaded += AC
|
||||
num_loaded++
|
||||
if(num_loaded)
|
||||
user << text("\blue You load [] shell\s into the gun!", num_loaded)
|
||||
user << "\blue You load [num_loaded] shell\s into the gun!"
|
||||
A.update_icon()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
desc = initial(desc) + text(" Has [] rounds remaining.", loaded.len)
|
||||
examine()
|
||||
..()
|
||||
usr << "Has [loaded.len] round\s remaining."
|
||||
if(in_chamber && !loaded.len)
|
||||
usr << "However, it has a chambered round."
|
||||
if(in_chamber && loaded.len)
|
||||
usr << "It also has a chambered round."
|
||||
return
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
/obj/item/weapon/gun/projectile/shotgun
|
||||
name = "\improper Shotgun"
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump
|
||||
name = "shotgun"
|
||||
desc = "Useful for sweeping alleys."
|
||||
icon_state = "shotgun"
|
||||
max_shells = 2
|
||||
item_state = "shotgun"
|
||||
max_shells = 4
|
||||
w_class = 4.0
|
||||
force = 10
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
|
||||
caliber = "shotgun"
|
||||
origin_tech = "combat=3;materials=1"
|
||||
origin_tech = "combat=4;materials=2"
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
|
||||
var
|
||||
recentpump = 0 // to prevent spammage
|
||||
@@ -16,7 +17,8 @@
|
||||
|
||||
|
||||
load_into_chamber()
|
||||
if(in_chamber) return 1
|
||||
if(in_chamber)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -30,7 +32,7 @@
|
||||
return
|
||||
|
||||
|
||||
proc/pump(mob/M)
|
||||
proc/pump(mob/M as mob)
|
||||
playsound(M, 'shotgunpump.ogg', 60, 1)
|
||||
pumped = 0
|
||||
if(current_shell)//We have a shell in the chamber
|
||||
@@ -44,20 +46,82 @@
|
||||
current_shell = AC
|
||||
if(AC.BB)
|
||||
in_chamber = AC.BB //Load projectile into chamber.
|
||||
update_icon() //I.E. fix the desc
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/combat
|
||||
name = "\improper Combat Shotgun"
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/combat
|
||||
name = "combat shotgun"
|
||||
icon_state = "cshotgun"
|
||||
max_shells = 8
|
||||
origin_tech = "combat=5;materials=2"
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun"
|
||||
|
||||
//this is largely hacky and bad :( -Pete
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel
|
||||
name = "double-barreled shotgun"
|
||||
desc = "A true classic."
|
||||
icon_state = "dshotgun"
|
||||
item_state = "shotgun"
|
||||
max_shells = 2
|
||||
w_class = 4.0
|
||||
force = 10
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
|
||||
caliber = "shotgun"
|
||||
origin_tech = "combat=3;materials=1"
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
|
||||
|
||||
load_into_chamber()
|
||||
if(in_chamber)
|
||||
return 1
|
||||
if(!loaded.len)
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/combat2
|
||||
name = "\improper Security Combat Shotgun"
|
||||
icon_state = "cshotgun"
|
||||
max_shells = 4
|
||||
var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
|
||||
loaded -= AC //Remove casing from loaded list.
|
||||
AC.desc += " This one is spent."
|
||||
|
||||
if(AC.BB)
|
||||
in_chamber = AC.BB //Load projectile into chamber.
|
||||
AC.BB.loc = src //Set projectile loc to gun.
|
||||
return 1
|
||||
return 0
|
||||
|
||||
attack_self(mob/living/user as mob)
|
||||
if(!(locate(/obj/item/ammo_casing/shotgun) in src) && !loaded.len)
|
||||
user << "<span class='notice'>\The [src] is empty.</span>"
|
||||
return
|
||||
|
||||
for(var/obj/item/ammo_casing/shotgun/shell in src) //This feels like a hack. //don't code at 3:30am kids!!
|
||||
if(shell in loaded)
|
||||
loaded -= shell
|
||||
shell.loc = get_turf(src.loc)
|
||||
|
||||
user << "<span class='notice'>You break \the [src].</span>"
|
||||
update_icon()
|
||||
|
||||
attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
if(istype(A, /obj/item/ammo_casing) && !load_method)
|
||||
var/obj/item/ammo_casing/AC = A
|
||||
if(AC.caliber == caliber && (loaded.len < max_shells) && (contents.len < max_shells)) //forgive me father, for i have sinned
|
||||
user.drop_item()
|
||||
AC.loc = src
|
||||
loaded += AC
|
||||
user << "<span class='notice'>You load a shell into \the [src]!</span>"
|
||||
A.update_icon()
|
||||
update_icon()
|
||||
if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
user << "<span class='notice'>You begin to shorten the barrel of \the [src].</span>"
|
||||
if(loaded.len)
|
||||
afterattack(user, user) //will this work?
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
user.visible_message("<span class='danger'>The shotgun goes off!</span>", "<span class='danger'>The shotgun goes off in your face!</span>")
|
||||
return
|
||||
if(do_after(user, 30)) //SHIT IS STEALTHY EYYYYY
|
||||
icon_state = "sawnshotgun"
|
||||
w_class = 3.0
|
||||
item_state = "gun"
|
||||
flags &= ~ONBACK //you can't sling it on your back
|
||||
flags |= ONBELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
|
||||
name = "sawn-off shotgun"
|
||||
desc = "Omar's coming!"
|
||||
user << "<span class='warning'>You shorten the barrel of \the [src]!</span>"
|
||||
@@ -10,7 +10,7 @@
|
||||
*/
|
||||
|
||||
/obj/item/projectile
|
||||
name = "\improper Projectile"
|
||||
name = "projectile"
|
||||
icon = 'projectiles.dmi'
|
||||
icon_state = "bullet"
|
||||
density = 1
|
||||
@@ -84,18 +84,18 @@
|
||||
return // nope.avi
|
||||
|
||||
if(!silenced)
|
||||
visible_message("\red [A] is hit by the [src]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
visible_message("\red [A.name] is hit by the [src.name] in the [def_zone]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
else
|
||||
M << "\red You've been shot!"
|
||||
M << "\red You've been shot in the [def_zone] by the [src.name]!"
|
||||
if(istype(firer, /mob))
|
||||
M.attack_log += text("\[[]\] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", time_stamp(), firer, firer.ckey, M, M.ckey, src)
|
||||
firer.attack_log += text("\[[]\] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", time_stamp(), firer, firer.ckey, M, M.ckey, src)
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
log_admin("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with [src].")
|
||||
message_admins("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with [src].")
|
||||
log_attack("<font color='red'>[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]</font>")
|
||||
|
||||
else
|
||||
M.attack_log += text("\[[]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[]/[]</b> with a <b>[]</b>", time_stamp(), M, M.ckey, src)
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
log_admin("ATTACK: UNKNOWN (no longer exists) shot [M] ([M.ckey]) with [src].")
|
||||
message_admins("ATTACK: UNKNOWN (no longer exists) shot [M] ([M.ckey]) with [src].")
|
||||
log_attack("<font color='red'>UNKNOWN shot [M] ([M.ckey]) with a [src]</font>")
|
||||
|
||||
@@ -37,4 +37,59 @@
|
||||
if(istype(target, /mob/living))
|
||||
var/mob/M = target
|
||||
M.bodytemperature = temperature
|
||||
return 1
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/energy/floramut
|
||||
name = "alpha somatoray"
|
||||
icon_state = "energy"
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
flag = "energy"
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0)
|
||||
var/mob/M = target
|
||||
if(istype(target, /mob/living/carbon/human) && M:mutantrace == "plant") //Plantmen possibly get mutated and damaged by the rays.
|
||||
if(prob(15))
|
||||
M.radiation += rand(10,30)
|
||||
M.Weaken(5)
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("\red [M] writhes in pain as \his vacuoles boil.", 3, "\red You hear the crunching of leaves.", 2)
|
||||
if(prob(35))
|
||||
// for (var/mob/V in viewers(src)) //Public messages commented out to prevent possible metaish genetics experimentation and stuff. - Cheridan
|
||||
// V.show_message("\red [M] is mutated by the radiation beam.", 3, "\red You hear the snapping of twigs.", 2)
|
||||
if(prob(80))
|
||||
randmutb(M)
|
||||
domutcheck(M,null)
|
||||
else
|
||||
randmutg(M)
|
||||
domutcheck(M,null)
|
||||
else
|
||||
M.adjustFireLoss(rand(5,15))
|
||||
M.show_message("\red The radiation beam singes you!")
|
||||
// for (var/mob/V in viewers(src))
|
||||
// V.show_message("\red [M] is singed by the radiation beam.", 3, "\red You hear the crackle of burning leaves.", 2)
|
||||
else if(istype(target, /mob/living/carbon/))
|
||||
// for (var/mob/V in viewers(src))
|
||||
// V.show_message("The radiation beam dissipates harmlessly through [M]", 3)
|
||||
M.show_message("\blue The radiation beam dissipates harmlessly through your body.")
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/energy/florayield
|
||||
name = "beta somatoray"
|
||||
icon_state = "energy2"
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
flag = "energy"
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0)
|
||||
var/mob/M = target
|
||||
if(istype(target, /mob/living/carbon/human) && M:mutantrace == "plant") //These rays make plantmen fat.
|
||||
if(M.nutrition < 500) //sanity check
|
||||
M.nutrition += 30
|
||||
else if (istype(target, /mob/living/carbon/))
|
||||
M.show_message("\blue The radiation beam dissipates harmlessly through your body.")
|
||||
else
|
||||
return 1
|
||||
@@ -1354,6 +1354,15 @@ datum
|
||||
build_path = "/obj/item/weapon/gun/energy/temperature"
|
||||
locked = 1
|
||||
|
||||
flora_gun
|
||||
name = "Floral Somatoray"
|
||||
desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life."
|
||||
id = "flora_gun"
|
||||
req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 2000, "$glass" = 500, "$uranium" = 500)
|
||||
build_path = "/obj/item/weapon/gun/energy/floragun"
|
||||
|
||||
large_grenade
|
||||
name = "Large Grenade"
|
||||
desc = "A grenade that affects a larger area and use larger containers."
|
||||
|
||||
Reference in New Issue
Block a user