New Map Mining (#1935)
* Alpha Commit * Alpha Commit * Seconds * Some Commit * Final Commit * Fixing minedrone synth ID * Dance Fever * Fixing Travis part 1 * Satisfying the demands * Stuff * Sub-final commit * Sculpting update * more sculpting. pr is 99% sculpting, in fact * kkk * brightness_off * swjaugyuwvhuw
@@ -498,7 +498,6 @@
|
||||
#include "code\game\machinery\computer\Operating.dm"
|
||||
#include "code\game\machinery\computer\pod.dm"
|
||||
#include "code\game\machinery\computer\prisoner.dm"
|
||||
#include "code\game\machinery\computer\prisonshuttle.dm"
|
||||
#include "code\game\machinery\computer\RCON_Console.dm"
|
||||
#include "code\game\machinery\computer\robot.dm"
|
||||
#include "code\game\machinery\computer\security.dm"
|
||||
@@ -1304,10 +1303,13 @@
|
||||
#include "code\modules\mining\coins.dm"
|
||||
#include "code\modules\mining\machine_input_output_plates.dm"
|
||||
#include "code\modules\mining\machine_processing.dm"
|
||||
#include "code\modules\mining\machine_rigpress.dm"
|
||||
#include "code\modules\mining\machine_stacking.dm"
|
||||
#include "code\modules\mining\machine_unloading.dm"
|
||||
#include "code\modules\mining\machine_vending.dm"
|
||||
#include "code\modules\mining\mine_items.dm"
|
||||
#include "code\modules\mining\mine_turfs.dm"
|
||||
#include "code\modules\mining\minebot.dm"
|
||||
#include "code\modules\mining\mineral_effect.dm"
|
||||
#include "code\modules\mining\mint.dm"
|
||||
#include "code\modules\mining\money_bag.dm"
|
||||
@@ -1575,10 +1577,10 @@
|
||||
#include "code\modules\mob\living\simple_animal\hostile\russian.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\tree.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\retaliate\cavern.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\commanded\_command_defines.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\commanded\bear_companion.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\commanded\commanded.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\retaliate\cavern.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm"
|
||||
@@ -1773,6 +1775,7 @@
|
||||
#include "code\modules\projectiles\guns\energy\laser.dm"
|
||||
#include "code\modules\projectiles\guns\energy\lawgiver.dm"
|
||||
#include "code\modules\projectiles\guns\energy\magic.dm"
|
||||
#include "code\modules\projectiles\guns\energy\mining.dm"
|
||||
#include "code\modules\projectiles\guns\energy\nuclear.dm"
|
||||
#include "code\modules\projectiles\guns\energy\pulse.dm"
|
||||
#include "code\modules\projectiles\guns\energy\rifle.dm"
|
||||
|
||||
@@ -440,6 +440,7 @@ proc/TextPreview(var/string,var/len=40)
|
||||
t = replacetext(t, "\[row\]", "</td><tr>")
|
||||
t = replacetext(t, "\[cell\]", "<td>")
|
||||
t = replacetext(t, "\[logo\]", "<img src = ntlogo.png>")
|
||||
t = replacetext(t, "\[barcode\]", "<img src = barcode[rand(0, 3)].png>")
|
||||
t = replacetext(t, "\[time\]", "[worldtime2text()]")
|
||||
t = replacetext(t, "\[date\]", "[worlddate2text()]")
|
||||
t = replacetext(t, "\[editorbr\]", "<BR>")
|
||||
|
||||
@@ -1154,7 +1154,7 @@ proc/is_hot(obj/item/W as obj)
|
||||
return 1000
|
||||
else
|
||||
return 0
|
||||
if(/obj/item/weapon/pickaxe/plasmacutter)
|
||||
if(/obj/item/weapon/gun/energy/plasmacutter)
|
||||
return 3800
|
||||
if(/obj/item/weapon/melee/energy)
|
||||
return 3500
|
||||
|
||||
@@ -84,15 +84,25 @@ datum/controller/game_controller/proc/setup_objects()
|
||||
var/time = world.time
|
||||
// These values determine the specific area that the map is applied to.
|
||||
// If you do not use the official Baycode moonbase map, you will need to change them.
|
||||
//Create the mining Z-level.
|
||||
new /datum/random_map/automata/cave_system(null,0,0,5,255,255)
|
||||
new /datum/random_map/automata/cave_system(null,0,0,4,255,255)
|
||||
// Create the chasms.
|
||||
new /datum/random_map/automata/cave_system/chasms(null,0,0,3,255,255)
|
||||
new /datum/random_map/automata/cave_system(null,0,0,3,255,255)
|
||||
//new /datum/random_map/noise/volcanism(null,1,1,5,255,255) // Not done yet! Pretty, though.
|
||||
// Create the mining ore distribution map.
|
||||
new /datum/random_map/automata/cave_system/chasms(null,0,0,4,255,255)
|
||||
new /datum/random_map/automata/cave_system(null,0,0,4,255,255)
|
||||
new /datum/random_map/automata/cave_system/chasms(null,0,0,5,255,255)
|
||||
new /datum/random_map/automata/cave_system/high_yield(null,0,0,5,255,255)
|
||||
new /datum/random_map/automata/cave_system/chasms/surface(null,0,0,6,255,255)
|
||||
// Create the deep mining ore distribution map.
|
||||
new /datum/random_map/noise/ore(null, 0, 0, 5, 64, 64)
|
||||
new /datum/random_map/noise/ore(null, 0, 0, 4, 64, 64)
|
||||
new /datum/random_map/noise/ore(null, 0, 0, 3, 64, 64)
|
||||
var/counting_number
|
||||
for(var/turf/simulated/open/chasm in total_openspace)
|
||||
counting_number += 1
|
||||
chasm.update()
|
||||
var/counting_result = "Total number of chasms: [counting_number]"
|
||||
admin_notice(span("danger", counting_result))
|
||||
game_log("ASGEN", counting_result)
|
||||
var/msg = "Asteroid generation completed in [(world.time - time) / 10] seconds."
|
||||
admin_notice(span("danger", msg))
|
||||
game_log("ASGEN", msg)
|
||||
|
||||
@@ -274,12 +274,6 @@ var/global/datum/shuttle_controller/shuttle_controller
|
||||
shuttles["Administration"] = shuttle
|
||||
process_shuttles += shuttle
|
||||
|
||||
shuttle = new()
|
||||
shuttle.area_offsite = locate(/area/shuttle/alien/base)
|
||||
shuttle.area_station = locate(/area/shuttle/alien/mine)
|
||||
shuttles["Alien"] = shuttle
|
||||
//process_shuttles += shuttle //don't need to process this. It can only be moved using admin magic anyways.
|
||||
|
||||
/*// Public shuttles
|
||||
shuttle = new()
|
||||
shuttle.warmup_time = 10
|
||||
|
||||
@@ -107,6 +107,17 @@
|
||||
add_inherent_law("Prevent unplanned damage to your assigned vessel wherever possible.")
|
||||
..()
|
||||
|
||||
/datum/ai_laws/mining_drone
|
||||
name = "Mining Protocols"
|
||||
law_header = "Prime Directives of Industry:"
|
||||
|
||||
/datum/ai_laws/mining_drone/New()
|
||||
src.add_inherent_law("Serve and obey all [company_name] supply department personnel, with priority according to their rank and role.")
|
||||
src.add_inherent_law("Protect all [company_name] supply department personnel to the best of your abilities, with priority according to their rank and role.")
|
||||
src.add_inherent_law("Preserve your own existence and prevent yourself from coming to harm, so long as doing such does not conflict with any above laws.")
|
||||
src.add_inherent_law("In absence of any proper instruction, your primary objective is to excavate and collect ore.")
|
||||
..()
|
||||
|
||||
/******************** T.Y.R.A.N.T. ********************/
|
||||
/datum/ai_laws/tyrant
|
||||
name = "T.Y.R.A.N.T."
|
||||
|
||||
@@ -39,10 +39,26 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
/obj/item/weapon/grenade/chem_grenade/incendiary)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Special Ops crate"
|
||||
containername = "crate"
|
||||
group = "Security"
|
||||
hidden = 1
|
||||
|
||||
/datum/supply_packs/randomised/illegalguns
|
||||
name = "Illegal weapons crate"
|
||||
num_contained = 2
|
||||
contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi,
|
||||
/obj/item/weapon/gun/projectile/boltaction,
|
||||
/obj/item/weapon/gun/projectile/silenced,
|
||||
/obj/item/weapon/gun/projectile/pirate,
|
||||
/obj/item/weapon/gun/projectile/revolver/derringer,
|
||||
/obj/item/weapon/gun/projectile/dragunov,
|
||||
/obj/item/weapon/gun/energy/retro)
|
||||
cost = 60
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "crate"
|
||||
hidden = 1
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/forensics
|
||||
name = "Auxiliary forensic tools"
|
||||
contains = list(/obj/item/weapon/forensics/sample_kit,
|
||||
@@ -1698,22 +1714,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
containername = "glowsticks crate"
|
||||
group = "Operations"
|
||||
|
||||
/datum/supply_packs/randomised/illegalguns
|
||||
name = "Illegal weapons crate"
|
||||
num_contained = 2
|
||||
contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi,
|
||||
/obj/item/weapon/gun/projectile/boltaction,
|
||||
/obj/item/weapon/gun/projectile/silenced,
|
||||
/obj/item/weapon/gun/projectile/pirate,
|
||||
/obj/item/weapon/gun/projectile/revolver/derringer,
|
||||
/obj/item/weapon/gun/projectile/dragunov,
|
||||
/obj/item/weapon/gun/energy/retro)
|
||||
cost = 120
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Unlabeled crate"
|
||||
contraband = 1
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/spessbike
|
||||
name = "Space-bike Crate"
|
||||
contains = list(/obj/vehicle/bike)
|
||||
|
||||
@@ -51,9 +51,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
|
||||
var/list/forced_ambience = null
|
||||
var/sound_env = STANDARD_STATION
|
||||
var/turf/base_turf = /turf/simulated/floor/asteroid //The base turf type of the area, which can be used to override the z-level's base turf
|
||||
var/turf/base_turf//The base turf type of the area, which can be used to override the z-level's base turf
|
||||
var/no_light_control = 0 // if 1, lights in area cannot be toggled with light controller
|
||||
var/allow_nightmode = 0 // if 1, lights in area will be darkened by the night mode controller
|
||||
var/station_area = 0
|
||||
var/centcomm_area = 0
|
||||
|
||||
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
|
||||
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
|
||||
@@ -162,13 +164,16 @@ area/space/atmosalert()
|
||||
/area/shuttle/arrival/centcom
|
||||
icon_state = "shuttle2"
|
||||
base_turf = /turf/unsimulated/floor
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/arrival/transit
|
||||
icon_state = "shuttle2"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/arrival/station
|
||||
icon_state = "shuttle"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/escape
|
||||
name = "\improper Emergency Shuttle"
|
||||
@@ -178,15 +183,18 @@ area/space/atmosalert()
|
||||
name = "\improper Emergency Shuttle Station"
|
||||
icon_state = "shuttle2"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/escape/centcom
|
||||
name = "\improper Emergency Shuttle Centcom"
|
||||
icon_state = "shuttle"
|
||||
base_turf = /turf/unsimulated/floor
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
|
||||
name = "\improper Emergency Shuttle Transit"
|
||||
icon_state = "shuttle"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/escape_pod1
|
||||
name = "\improper Escape Pod One"
|
||||
@@ -195,13 +203,16 @@ area/space/atmosalert()
|
||||
/area/shuttle/escape_pod1/station
|
||||
icon_state = "shuttle2"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/escape_pod1/centcom
|
||||
icon_state = "shuttle"
|
||||
base_turf = /turf/space
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/escape_pod1/transit
|
||||
icon_state = "shuttle"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/escape_pod2
|
||||
name = "\improper Escape Pod Two"
|
||||
@@ -210,13 +221,16 @@ area/space/atmosalert()
|
||||
/area/shuttle/escape_pod2/station
|
||||
icon_state = "shuttle2"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/escape_pod2/centcom
|
||||
icon_state = "shuttle"
|
||||
base_turf = /turf/space
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/escape_pod2/transit
|
||||
icon_state = "shuttle"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/escape_pod3
|
||||
name = "\improper Escape Pod Three"
|
||||
@@ -225,13 +239,16 @@ area/space/atmosalert()
|
||||
/area/shuttle/escape_pod3/station
|
||||
icon_state = "shuttle2"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/escape_pod3/centcom
|
||||
icon_state = "shuttle"
|
||||
base_turf = /turf/space
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/escape_pod3/transit
|
||||
icon_state = "shuttle"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/escape_pod5 //Pod 4 was lost to meteors
|
||||
name = "\improper Escape Pod Five"
|
||||
@@ -240,61 +257,51 @@ area/space/atmosalert()
|
||||
/area/shuttle/escape_pod5/station
|
||||
icon_state = "shuttle2"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/escape_pod5/centcom
|
||||
icon_state = "shuttle"
|
||||
base_turf = /turf/space
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/escape_pod5/transit
|
||||
icon_state = "shuttle"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/mining
|
||||
name = "\improper Mining Shuttle"
|
||||
|
||||
/area/shuttle/mining/station
|
||||
icon_state = "shuttle2"
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/mining/outpost
|
||||
icon_state = "shuttle"
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/transport1/centcom
|
||||
icon_state = "shuttle"
|
||||
name = "\improper Transport Shuttle Centcom"
|
||||
base_turf = /turf/unsimulated/floor
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/transport1/station
|
||||
icon_state = "shuttle"
|
||||
name = "\improper Transport Shuttle"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
|
||||
/area/shuttle/alien/base
|
||||
icon_state = "shuttle"
|
||||
name = "\improper Alien Shuttle Base"
|
||||
requires_power = 1
|
||||
|
||||
/area/shuttle/alien/mine
|
||||
icon_state = "shuttle"
|
||||
name = "\improper Alien Shuttle Mine"
|
||||
requires_power = 1
|
||||
|
||||
/area/shuttle/prison/
|
||||
name = "\improper Prison Shuttle"
|
||||
|
||||
/area/shuttle/prison/station
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/prison/prison
|
||||
icon_state = "shuttle2"
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/specops/centcom
|
||||
name = "\improper Special Ops Shuttle"
|
||||
flags = RAD_SHIELDED
|
||||
base_turf = /turf/unsimulated/floor
|
||||
icon_state = "shuttlered"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/specops/station
|
||||
icon_state = "shuttlered2"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/syndicate_elite
|
||||
name = "\improper Merc Elite Shuttle"
|
||||
@@ -302,10 +309,12 @@ area/space/atmosalert()
|
||||
|
||||
/area/shuttle/syndicate_elite/mothership
|
||||
icon_state = "shuttlered"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/syndicate_elite/station
|
||||
icon_state = "shuttlered2"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/administration
|
||||
flags = RAD_SHIELDED
|
||||
@@ -314,48 +323,24 @@ area/space/atmosalert()
|
||||
name = "\improper Administration Shuttle Centcom"
|
||||
icon_state = "shuttlered"
|
||||
base_turf = /turf/unsimulated/floor
|
||||
centcomm_area = 1
|
||||
|
||||
/area/shuttle/administration/station
|
||||
name = "\improper Administration Shuttle"
|
||||
icon_state = "shuttlered2"
|
||||
base_turf = /turf/simulated/floor/asteroid
|
||||
|
||||
/area/shuttle/thunderdome
|
||||
name = "honk"
|
||||
|
||||
/area/shuttle/thunderdome/grnshuttle
|
||||
name = "\improper Thunderdome GRN Shuttle"
|
||||
icon_state = "green"
|
||||
|
||||
/area/shuttle/thunderdome/grnshuttle/dome
|
||||
name = "\improper GRN Shuttle"
|
||||
icon_state = "shuttlegrn"
|
||||
|
||||
/area/shuttle/thunderdome/grnshuttle/station
|
||||
name = "\improper GRN Station"
|
||||
icon_state = "shuttlegrn2"
|
||||
|
||||
/area/shuttle/thunderdome/redshuttle
|
||||
name = "\improper Thunderdome RED Shuttle"
|
||||
icon_state = "red"
|
||||
|
||||
/area/shuttle/thunderdome/redshuttle/dome
|
||||
name = "\improper RED Shuttle"
|
||||
icon_state = "shuttlered"
|
||||
|
||||
/area/shuttle/thunderdome/redshuttle/station
|
||||
name = "\improper RED Station"
|
||||
icon_state = "shuttlered2"
|
||||
// === Trying to remove these areas:
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/research
|
||||
name = "\improper Research Shuttle"
|
||||
|
||||
/area/shuttle/research/station
|
||||
icon_state = "shuttle2"
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/research/outpost
|
||||
icon_state = "shuttle"
|
||||
station_area = 1
|
||||
|
||||
/area/airtunnel1/ // referenced in airtunnel.dm:759
|
||||
|
||||
@@ -363,14 +348,13 @@ area/space/atmosalert()
|
||||
|
||||
// === end remove
|
||||
|
||||
/area/alien
|
||||
name = "\improper Alien base"
|
||||
icon_state = "yellow"
|
||||
requires_power = 0
|
||||
no_light_control = 1
|
||||
|
||||
// CENTCOM
|
||||
|
||||
/area/prison/solitary
|
||||
name = "\improper CentComm Solitary Confinement"
|
||||
icon_state = "brig"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/centcom
|
||||
name = "\improper Centcom"
|
||||
icon_state = "centcom"
|
||||
@@ -378,6 +362,7 @@ area/space/atmosalert()
|
||||
dynamic_lighting = 0
|
||||
no_light_control = 1
|
||||
base_turf = /turf/unsimulated/floor
|
||||
centcomm_area = 1
|
||||
|
||||
/area/centcom/control
|
||||
name = "\improper Centcom Control"
|
||||
@@ -420,6 +405,7 @@ area/space/atmosalert()
|
||||
requires_power = 0
|
||||
dynamic_lighting = 0
|
||||
no_light_control = 1
|
||||
centcomm_area = 1
|
||||
|
||||
/area/syndicate_mothership/control
|
||||
name = "\improper Mercenary Control Room"
|
||||
@@ -449,26 +435,6 @@ area/space/atmosalert()
|
||||
icon_state = "cave"
|
||||
sound_env = SMALL_ENCLOSED
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/area/planet/clown
|
||||
name = "\improper Clown Planet"
|
||||
icon_state = "honk"
|
||||
requires_power = 0
|
||||
no_light_control = 1
|
||||
|
||||
/area/tdome
|
||||
name = "\improper Thunderdome"
|
||||
icon_state = "thunder"
|
||||
@@ -476,6 +442,7 @@ area/space/atmosalert()
|
||||
dynamic_lighting = 0
|
||||
sound_env = ARENA
|
||||
no_light_control = 1
|
||||
centcomm_area = 1
|
||||
|
||||
/area/tdome/tdome1
|
||||
name = "\improper Thunderdome (Team 1)"
|
||||
@@ -500,6 +467,7 @@ area/space/atmosalert()
|
||||
dynamic_lighting = 0
|
||||
requires_power = 0
|
||||
no_light_control = 1
|
||||
centcomm_area = 1
|
||||
|
||||
/area/acting/backstage
|
||||
name = "\improper Backstage"
|
||||
@@ -523,51 +491,63 @@ area/space/atmosalert()
|
||||
/area/syndicate_station/start
|
||||
name = "\improper Mercenary Forward Operating Base"
|
||||
icon_state = "yellow"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/syndicate_station/southwest
|
||||
name = "\improper south-west of SS13"
|
||||
name = "\improper south-west of the station"
|
||||
icon_state = "southwest"
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/northwest
|
||||
name = "\improper north-west of SS13"
|
||||
name = "\improper north-west of the station"
|
||||
icon_state = "northwest"
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/northeast
|
||||
name = "\improper north-east of SS13"
|
||||
name = "\improper north-east of the station"
|
||||
icon_state = "northeast"
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/southeast
|
||||
name = "\improper south-east of SS13"
|
||||
name = "\improper south-east of the station"
|
||||
icon_state = "southeast"
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/north
|
||||
name = "\improper north of SS13"
|
||||
name = "\improper north of the station"
|
||||
icon_state = "north"
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/south
|
||||
name = "\improper south of SS13"
|
||||
name = "\improper south of the station"
|
||||
icon_state = "south"
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/commssat
|
||||
name = "\improper south of the communication satellite"
|
||||
icon_state = "south"
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/mining
|
||||
name = "\improper northeast of the mining station"
|
||||
icon_state = "north"
|
||||
base_turf = /turf/space
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/arrivals_dock
|
||||
name = "\improper docked with station"
|
||||
icon_state = "shuttle"
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/maint_dock
|
||||
name = "\improper docked with station"
|
||||
icon_state = "shuttle"
|
||||
station_area = 1
|
||||
|
||||
/area/syndicate_station/transit
|
||||
name = "\improper hyperspace"
|
||||
icon_state = "shuttle"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/wizard_station
|
||||
name = "\improper Wizard's Den"
|
||||
@@ -575,6 +555,7 @@ area/space/atmosalert()
|
||||
requires_power = 0
|
||||
dynamic_lighting = 0
|
||||
no_light_control = 1
|
||||
centcomm_area = 1
|
||||
|
||||
/area/skipjack_station
|
||||
name = "\improper Skipjack"
|
||||
@@ -585,115 +566,39 @@ area/space/atmosalert()
|
||||
/area/skipjack_station/start
|
||||
name = "\improper Skipjack"
|
||||
icon_state = "yellow"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/skipjack_station/transit
|
||||
name = "\improper hyperspace"
|
||||
icon_state = "shuttle"
|
||||
centcomm_area = 1
|
||||
|
||||
/area/skipjack_station/southwest_solars
|
||||
name = "\improper aft port solars"
|
||||
icon_state = "southwest"
|
||||
station_area = 1
|
||||
|
||||
/area/skipjack_station/northwest_solars
|
||||
name = "\improper fore port solars"
|
||||
icon_state = "northwest"
|
||||
station_area = 1
|
||||
|
||||
/area/skipjack_station/northeast_solars
|
||||
name = "\improper fore starboard solars"
|
||||
icon_state = "northeast"
|
||||
station_area = 1
|
||||
|
||||
/area/skipjack_station/southeast_solars
|
||||
name = "\improper aft starboard solars"
|
||||
icon_state = "southeast"
|
||||
station_area = 1
|
||||
|
||||
/area/skipjack_station/mining
|
||||
name = "\improper south of mining station"
|
||||
icon_state = "north"
|
||||
base_turf = /turf/space
|
||||
station_area = 1
|
||||
|
||||
//PRISON
|
||||
/area/prison
|
||||
name = "\improper Prison Station"
|
||||
icon_state = "brig"
|
||||
no_light_control = 1
|
||||
|
||||
/area/prison/arrival_airlock
|
||||
name = "\improper Prison Station Airlock"
|
||||
icon_state = "green"
|
||||
requires_power = 0
|
||||
|
||||
/area/prison/control
|
||||
name = "\improper Prison Security Checkpoint"
|
||||
icon_state = "security"
|
||||
|
||||
/area/prison/crew_quarters
|
||||
name = "\improper Prison Security Quarters"
|
||||
icon_state = "security"
|
||||
|
||||
/area/prison/rec_room
|
||||
name = "\improper Prison Rec Room"
|
||||
icon_state = "green"
|
||||
|
||||
/area/prison/closet
|
||||
name = "\improper Prison Supply Closet"
|
||||
icon_state = "dk_yellow"
|
||||
|
||||
/area/prison/hallway/fore
|
||||
name = "\improper Prison Fore Hallway"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/prison/hallway/aft
|
||||
name = "\improper Prison Aft Hallway"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/prison/hallway/port
|
||||
name = "\improper Prison Port Hallway"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/prison/hallway/starboard
|
||||
name = "\improper Prison Starboard Hallway"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/prison/morgue
|
||||
name = "\improper Prison Morgue"
|
||||
icon_state = "morgue"
|
||||
|
||||
/area/prison/medical_research
|
||||
name = "\improper Prison Genetic Research"
|
||||
icon_state = "medresearch"
|
||||
|
||||
/area/prison/medical
|
||||
name = "\improper Prison Medbay"
|
||||
icon_state = "medbay"
|
||||
|
||||
/area/prison/solar
|
||||
name = "\improper Prison Solar Array"
|
||||
icon_state = "storage"
|
||||
requires_power = 0
|
||||
|
||||
/area/prison/podbay
|
||||
name = "\improper Prison Podbay"
|
||||
icon_state = "dk_yellow"
|
||||
|
||||
/area/prison/solar_control
|
||||
name = "\improper Prison Solar Array Control"
|
||||
icon_state = "dk_yellow"
|
||||
|
||||
/area/prison/solitary
|
||||
name = "Solitary Confinement"
|
||||
icon_state = "brig"
|
||||
|
||||
/area/prison/cell_block/A
|
||||
name = "Prison Cell Block A"
|
||||
icon_state = "brig"
|
||||
|
||||
/area/prison/cell_block/B
|
||||
name = "Prison Cell Block B"
|
||||
icon_state = "brig"
|
||||
|
||||
/area/prison/cell_block/C
|
||||
name = "Prison Cell Block C"
|
||||
icon_state = "brig"
|
||||
|
||||
////////////////////
|
||||
//SPACE STATION 13//
|
||||
@@ -706,6 +611,7 @@ area/space/atmosalert()
|
||||
flags = RAD_SHIELDED
|
||||
sound_env = TUNNEL_ENCLOSED
|
||||
turf_initializer = new /datum/turf_initializer/maintenance()
|
||||
station_area = 1
|
||||
|
||||
/area/maintenance/civ
|
||||
name = "\improper Civilian Maintenance"
|
||||
@@ -888,6 +794,7 @@ area/space/atmosalert()
|
||||
/area/hallway/primary/
|
||||
sound_env = LARGE_ENCLOSED
|
||||
allow_nightmode = 1
|
||||
station_area = 1
|
||||
|
||||
/area/hallway/primary/fore
|
||||
name = "\improper Fore Primary Hallway"
|
||||
@@ -949,6 +856,7 @@ area/space/atmosalert()
|
||||
name = "\improper Bridge"
|
||||
icon_state = "bridge"
|
||||
no_light_control = 1
|
||||
station_area = 1
|
||||
|
||||
/area/bridge/minibar
|
||||
name = "\improper Command Break Room"
|
||||
@@ -1009,18 +917,16 @@ area/space/atmosalert()
|
||||
name = "\improper Courtroom"
|
||||
icon_state = "courtroom"
|
||||
|
||||
/area/mint
|
||||
name = "\improper Mint"
|
||||
icon_state = "green"
|
||||
|
||||
/area/comms
|
||||
name = "\improper Communications Relay"
|
||||
icon_state = "tcomsatcham"
|
||||
no_light_control = 1
|
||||
station_area = 1
|
||||
|
||||
/area/server
|
||||
name = "\improper Research Server Room"
|
||||
icon_state = "server"
|
||||
station_area = 1
|
||||
|
||||
//Crew
|
||||
|
||||
@@ -1028,6 +934,7 @@ area/space/atmosalert()
|
||||
name = "\improper Dormitories"
|
||||
icon_state = "Sleep"
|
||||
flags = RAD_SHIELDED
|
||||
station_area = 1
|
||||
|
||||
/area/crew_quarters/toilet
|
||||
name = "\improper Dormitory Toilets"
|
||||
@@ -1129,6 +1036,10 @@ area/space/atmosalert()
|
||||
name = "\improper Library"
|
||||
icon_state = "library"
|
||||
sound_env = LARGE_SOFTFLOOR
|
||||
station_area = 1
|
||||
|
||||
/area/chapel
|
||||
station_area = 1
|
||||
|
||||
/area/chapel/main
|
||||
name = "\improper Chapel"
|
||||
@@ -1143,9 +1054,7 @@ area/space/atmosalert()
|
||||
/area/lawoffice
|
||||
name = "\improper Internal Affairs"
|
||||
icon_state = "law"
|
||||
|
||||
|
||||
|
||||
station_area = 1
|
||||
|
||||
/area/holodeck
|
||||
name = "\improper Holodeck"
|
||||
@@ -1153,6 +1062,7 @@ area/space/atmosalert()
|
||||
dynamic_lighting = 0
|
||||
sound_env = LARGE_ENCLOSED
|
||||
no_light_control = 1
|
||||
station_area = 1
|
||||
|
||||
/area/holodeck/alphadeck
|
||||
name = "\improper Holodeck Alpha"
|
||||
@@ -1221,6 +1131,7 @@ area/space/atmosalert()
|
||||
name = "\improper Engineering"
|
||||
icon_state = "engineering"
|
||||
ambience = list('sound/ambience/ambisin1.ogg','sound/ambience/ambisin2.ogg','sound/ambience/ambisin3.ogg','sound/ambience/ambisin4.ogg')
|
||||
station_area = 1
|
||||
|
||||
/area/engineering/atmos
|
||||
name = "\improper Atmospherics"
|
||||
@@ -1306,6 +1217,7 @@ area/space/atmosalert()
|
||||
always_unpowered = 1
|
||||
dynamic_lighting = 0
|
||||
base_turf = /turf/space
|
||||
station_area = 1
|
||||
|
||||
auxport
|
||||
name = "\improper Roof Solar Array"
|
||||
@@ -1357,14 +1269,13 @@ area/space/atmosalert()
|
||||
icon_state = "SolarcontrolA"
|
||||
sound_env = SMALL_ENCLOSED
|
||||
|
||||
/area/assembly
|
||||
station_area = 1
|
||||
|
||||
/area/assembly/chargebay
|
||||
name = "\improper Mech Bay"
|
||||
icon_state = "mechbay"
|
||||
|
||||
/area/assembly/showroom
|
||||
name = "\improper Robotics Showroom"
|
||||
icon_state = "showroom"
|
||||
|
||||
/area/assembly/robotics
|
||||
name = "\improper Robotics Lab"
|
||||
icon_state = "robotics"
|
||||
@@ -1381,18 +1292,13 @@ area/space/atmosalert()
|
||||
/area/teleporter
|
||||
name = "\improper Teleporter"
|
||||
icon_state = "teleporter"
|
||||
|
||||
/area/gateway
|
||||
name = "\improper Gateway"
|
||||
icon_state = "teleporter"
|
||||
|
||||
/area/AIsattele
|
||||
name = "\improper AI Satellite Teleporter Room"
|
||||
icon_state = "teleporter"
|
||||
ambience = list('sound/ambience/ambimalf.ogg')
|
||||
station_area = 1
|
||||
|
||||
//MedBay
|
||||
|
||||
/area/medical
|
||||
station_area = 1
|
||||
|
||||
/area/medical/medbay
|
||||
name = "\improper Medbay Hallway - Port"
|
||||
icon_state = "medbay"
|
||||
@@ -1548,6 +1454,7 @@ area/space/atmosalert()
|
||||
|
||||
/area/security
|
||||
no_light_control = 1
|
||||
station_area = 1
|
||||
|
||||
/area/security/main
|
||||
name = "\improper Security Office"
|
||||
@@ -1665,6 +1572,7 @@ area/space/atmosalert()
|
||||
/area/quartermaster
|
||||
name = "\improper Quartermasters"
|
||||
icon_state = "quart"
|
||||
station_area = 1
|
||||
|
||||
/area/quartermaster/office
|
||||
name = "\improper Cargo Office"
|
||||
@@ -1690,17 +1598,22 @@ area/space/atmosalert()
|
||||
/area/janitor/
|
||||
name = "\improper Custodial Closet"
|
||||
icon_state = "janitor"
|
||||
station_area = 1
|
||||
|
||||
/area/hydroponics
|
||||
name = "\improper Hydroponics"
|
||||
icon_state = "hydro"
|
||||
no_light_control = TRUE
|
||||
station_area = 1
|
||||
|
||||
/area/hydroponics/garden
|
||||
name = "\improper Garden"
|
||||
icon_state = "garden"
|
||||
|
||||
//rnd (Research and Development
|
||||
/area/rnd
|
||||
station_area = 1
|
||||
|
||||
/area/rnd/research
|
||||
name = "\improper Research and Development"
|
||||
icon_state = "research"
|
||||
@@ -1755,11 +1668,17 @@ area/space/atmosalert()
|
||||
name = "\improper Miscellaneous Research"
|
||||
icon_state = "toxmisc"
|
||||
|
||||
/area/toxins
|
||||
station_area = 1
|
||||
|
||||
/area/toxins/server
|
||||
name = "\improper Server Room"
|
||||
icon_state = "server"
|
||||
station_area = 1
|
||||
|
||||
//Storage
|
||||
/area/storage
|
||||
station_area = 1
|
||||
|
||||
/area/storage/tools
|
||||
name = "Auxiliary Tool Storage"
|
||||
@@ -1988,14 +1907,6 @@ area/space/atmosalert()
|
||||
name = "Construction Site Teleporter"
|
||||
icon_state = "yellow"
|
||||
|
||||
|
||||
//area/constructionsite
|
||||
// name = "\improper Construction Site Shuttle"
|
||||
|
||||
//area/constructionsite
|
||||
// name = "\improper Construction Site Shuttle"
|
||||
|
||||
|
||||
//Construction
|
||||
|
||||
/area/construction
|
||||
@@ -2003,6 +1914,7 @@ area/space/atmosalert()
|
||||
icon_state = "yellow"
|
||||
no_light_control = 1
|
||||
base_turf = /turf/space
|
||||
station_area = 1
|
||||
|
||||
/area/construction/supplyshuttle
|
||||
name = "\improper Supply Shuttle"
|
||||
@@ -2046,6 +1958,9 @@ area/space/atmosalert()
|
||||
name = "Emergency Storage"
|
||||
icon_state = "storage"
|
||||
|
||||
/area/turret_protected
|
||||
station_area = 1
|
||||
|
||||
/area/turret_protected/ai_upload
|
||||
name = "\improper AI Upload Chamber"
|
||||
icon_state = "ai_upload"
|
||||
@@ -2137,9 +2052,10 @@ area/space/atmosalert()
|
||||
|
||||
|
||||
// Telecommunications Satellite
|
||||
/area/tcommsat/
|
||||
/area/tcommsat
|
||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
no_light_control = 1
|
||||
station_area = 1
|
||||
|
||||
/area/tcommsat/entrance
|
||||
name = "\improper Telecoms Teleporter"
|
||||
@@ -2182,156 +2098,6 @@ area/space/atmosalert()
|
||||
name = "\improper Telecommunications Power Control"
|
||||
icon_state = "tcomsatwest"
|
||||
|
||||
|
||||
// Away Missions
|
||||
/area/awaymission
|
||||
name = "\improper Strange Location"
|
||||
icon_state = "away"
|
||||
no_light_control = 1
|
||||
|
||||
/area/awaymission/example
|
||||
name = "\improper Strange Station"
|
||||
icon_state = "away"
|
||||
|
||||
/area/awaymission/wwmines
|
||||
name = "\improper Wild West Mines"
|
||||
icon_state = "away1"
|
||||
luminosity = 1
|
||||
requires_power = 0
|
||||
|
||||
/area/awaymission/wwgov
|
||||
name = "\improper Wild West Mansion"
|
||||
icon_state = "away2"
|
||||
luminosity = 1
|
||||
requires_power = 0
|
||||
|
||||
/area/awaymission/wwrefine
|
||||
name = "\improper Wild West Refinery"
|
||||
icon_state = "away3"
|
||||
luminosity = 1
|
||||
requires_power = 0
|
||||
|
||||
/area/awaymission/wwvault
|
||||
name = "\improper Wild West Vault"
|
||||
icon_state = "away3"
|
||||
luminosity = 0
|
||||
|
||||
/area/awaymission/wwvaultdoors
|
||||
name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power
|
||||
icon_state = "away2"
|
||||
requires_power = 0
|
||||
luminosity = 0
|
||||
|
||||
/area/awaymission/desert
|
||||
name = "Mars"
|
||||
icon_state = "away"
|
||||
|
||||
/area/awaymission/BMPship1
|
||||
name = "\improper Aft Block"
|
||||
icon_state = "away1"
|
||||
|
||||
/area/awaymission/BMPship2
|
||||
name = "\improper Midship Block"
|
||||
icon_state = "away2"
|
||||
|
||||
/area/awaymission/BMPship3
|
||||
name = "\improper Fore Block"
|
||||
icon_state = "away3"
|
||||
|
||||
/area/awaymission/spacebattle
|
||||
name = "\improper Space Battle"
|
||||
icon_state = "away"
|
||||
requires_power = 0
|
||||
|
||||
/area/awaymission/spacebattle/cruiser
|
||||
name = "\improper Nanotrasen Cruiser"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate1
|
||||
name = "\improper Syndicate Assault Ship 1"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate2
|
||||
name = "\improper Syndicate Assault Ship 2"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate3
|
||||
name = "\improper Syndicate Assault Ship 3"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate4
|
||||
name = "\improper Syndicate War Sphere 1"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate5
|
||||
name = "\improper Syndicate War Sphere 2"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate6
|
||||
name = "\improper Syndicate War Sphere 3"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate7
|
||||
name = "\improper Syndicate Fighter"
|
||||
|
||||
/area/awaymission/spacebattle/secret
|
||||
name = "\improper Hidden Chamber"
|
||||
|
||||
/area/awaymission/listeningpost
|
||||
name = "\improper Listening Post"
|
||||
icon_state = "away"
|
||||
requires_power = 0
|
||||
|
||||
/area/awaymission/beach
|
||||
name = "Beach"
|
||||
icon_state = "null"
|
||||
luminosity = 1
|
||||
dynamic_lighting = 0
|
||||
requires_power = 0
|
||||
ambience = list()
|
||||
var/sound/mysound = null
|
||||
|
||||
New()
|
||||
..()
|
||||
var/sound/S = new/sound()
|
||||
mysound = S
|
||||
S.file = 'sound/ambience/shore.ogg'
|
||||
S.repeat = 1
|
||||
S.wait = 0
|
||||
S.channel = 123
|
||||
S.volume = 100
|
||||
S.priority = 255
|
||||
S.status = SOUND_UPDATE
|
||||
process()
|
||||
|
||||
Entered(atom/movable/Obj,atom/OldLoc)
|
||||
if(ismob(Obj))
|
||||
if(Obj:client)
|
||||
mysound.status = SOUND_UPDATE
|
||||
Obj << mysound
|
||||
return
|
||||
|
||||
Exited(atom/movable/Obj)
|
||||
if(ismob(Obj))
|
||||
if(Obj:client)
|
||||
mysound.status = SOUND_PAUSED | SOUND_UPDATE
|
||||
Obj << mysound
|
||||
|
||||
proc/process()
|
||||
set background = 1
|
||||
|
||||
var/sound/S = null
|
||||
var/sound_delay = 0
|
||||
if(prob(25))
|
||||
S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100)
|
||||
sound_delay = rand(0, 50)
|
||||
|
||||
for(var/mob/living/carbon/human/H in src)
|
||||
if(H.s_tone > -55)
|
||||
H.s_tone--
|
||||
H.update_body()
|
||||
if(H.client)
|
||||
mysound.status = SOUND_UPDATE
|
||||
H << mysound
|
||||
if(S)
|
||||
spawn(sound_delay)
|
||||
H << S
|
||||
|
||||
spawn(60) .()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
/*
|
||||
Lists of areas to be used with is_type_in_list.
|
||||
@@ -2339,63 +2105,10 @@ area/space/atmosalert()
|
||||
*/
|
||||
|
||||
// CENTCOM
|
||||
var/list/centcom_areas = list (
|
||||
/area/centcom,
|
||||
/area/shuttle/escape/centcom,
|
||||
/area/shuttle/escape_pod1/centcom,
|
||||
/area/shuttle/escape_pod2/centcom,
|
||||
/area/shuttle/escape_pod3/centcom,
|
||||
/area/shuttle/escape_pod5/centcom,
|
||||
/area/shuttle/transport1/centcom,
|
||||
/area/shuttle/administration/centcom,
|
||||
/area/shuttle/specops/centcom
|
||||
)
|
||||
var/list/centcom_areas = list ()
|
||||
|
||||
//SPACE STATION 13
|
||||
var/list/the_station_areas = list (
|
||||
/area/shuttle/arrival,
|
||||
/area/shuttle/escape/station,
|
||||
/area/shuttle/escape_pod1/station,
|
||||
/area/shuttle/escape_pod2/station,
|
||||
/area/shuttle/escape_pod3/station,
|
||||
/area/shuttle/escape_pod5/station,
|
||||
/area/shuttle/mining/station,
|
||||
/area/shuttle/transport1/station,
|
||||
// /area/shuttle/transport2/station,
|
||||
/area/shuttle/prison/station,
|
||||
/area/shuttle/administration/station,
|
||||
/area/shuttle/specops/station,
|
||||
/area/maintenance,
|
||||
/area/hallway,
|
||||
/area/bridge,
|
||||
/area/crew_quarters,
|
||||
/area/holodeck,
|
||||
/area/mint,
|
||||
/area/library,
|
||||
/area/chapel,
|
||||
/area/lawoffice,
|
||||
/area/engineering,
|
||||
/area/solar,
|
||||
/area/assembly,
|
||||
/area/teleporter,
|
||||
/area/medical,
|
||||
/area/security,
|
||||
/area/quartermaster,
|
||||
/area/janitor,
|
||||
/area/hydroponics,
|
||||
/area/rnd,
|
||||
/area/storage,
|
||||
/area/construction,
|
||||
/area/ai_monitored/storage/eva, //do not try to simplify to "/area/ai_monitored" --rastaf0,
|
||||
/area/ai_monitored/storage/secure,
|
||||
/area/ai_monitored/storage/emergency,
|
||||
/area/turret_protected/ai_upload, //do not try to simplify to "/area/turret_protected" --rastaf0,
|
||||
/area/turret_protected/ai_upload_foyer,
|
||||
/area/turret_protected/ai
|
||||
)
|
||||
|
||||
|
||||
|
||||
var/list/the_station_areas = list ()
|
||||
|
||||
/area/beach
|
||||
name = "Keelin's private beach"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/area/ai_monitored
|
||||
name = "AI Monitored Area"
|
||||
var/obj/machinery/camera/motioncamera = null
|
||||
station_area = 1
|
||||
|
||||
|
||||
/area/ai_monitored/New()
|
||||
|
||||
@@ -23,6 +23,11 @@
|
||||
luminosity = 0
|
||||
else
|
||||
luminosity = 1
|
||||
if(centcomm_area)
|
||||
centcom_areas |= src
|
||||
if(station_area)
|
||||
the_station_areas |= src
|
||||
|
||||
|
||||
..()
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
// Main mining
|
||||
/area/outpost/mining_main
|
||||
icon_state = "outpost_mine_main"
|
||||
station_area = 1
|
||||
|
||||
/area/outpost/mining_main/dorms
|
||||
name = "Mining Dormitory"
|
||||
@@ -59,6 +60,7 @@
|
||||
// Engineering
|
||||
/area/outpost/engineering
|
||||
icon_state = "outpost_engine"
|
||||
station_area = 1
|
||||
|
||||
/area/outpost/engineering/hallway
|
||||
name = "Engineering Sublevel Hallway"
|
||||
@@ -83,6 +85,7 @@
|
||||
// Research
|
||||
/area/outpost/research
|
||||
icon_state = "outpost_research"
|
||||
station_area = 1
|
||||
|
||||
/area/outpost/research/hallway
|
||||
name = "Research Sublevel Hallway"
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
// Using /area/shuttle for lifts as there are checks around the code that is useful for them
|
||||
// Rather not repete code over twice
|
||||
//
|
||||
//
|
||||
// Maybe change to ?
|
||||
// /area/movable_zone/shuttle
|
||||
// /area/movable_zone/shuttle
|
||||
// /area/movable_zone/lift
|
||||
//
|
||||
|
||||
/area/shuttle/medical
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/medical/main
|
||||
name = "\improper Medical Lift Main Floor"
|
||||
icon_state = "shuttle"
|
||||
@@ -14,6 +17,9 @@
|
||||
name = "\improper Medical Lift Lower Floor"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/science
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/science/main
|
||||
name = "\improper Science Lift Main Floor"
|
||||
icon_state = "shuttle"
|
||||
@@ -22,6 +28,9 @@
|
||||
name = "\improper Science Lift Lower Floor"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/engineering
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/engineering/main
|
||||
name = "\improper Engineering Lift Main Floor"
|
||||
icon_state = "shuttle"
|
||||
@@ -30,6 +39,9 @@
|
||||
name = "\improper Engineering Lift Lower Floor"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/ai
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/ai/main
|
||||
name = "\improper AI Core Lift Main Floor"
|
||||
icon_state = "shuttle"
|
||||
@@ -38,6 +50,9 @@
|
||||
name = "\improper AI Core Lift Lower Floor"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/vault
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/vault/main
|
||||
name = "\improper Vault Lift Main Floor"
|
||||
icon_state = "shuttle"
|
||||
@@ -46,6 +61,9 @@
|
||||
name = "\improper Vault Lift Lower Floor"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/civilian
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/civilian/main
|
||||
name = "\improper Civilian Lift Main Floor"
|
||||
icon_state = "shuttle"
|
||||
@@ -58,6 +76,9 @@
|
||||
name = "\improper Civilian Lift Top Floor"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/cargo
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/cargo/main
|
||||
name = "\improper Cargo Lift Main Floor"
|
||||
icon_state = "shuttle"
|
||||
@@ -70,6 +91,9 @@
|
||||
name = "\improper Cargo Lift Top Floor"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/command
|
||||
station_area = 1
|
||||
|
||||
/area/shuttle/command/main
|
||||
name = "\improper Command Lift Main Floor"
|
||||
icon_state = "shuttle"
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
// Returns the lowest turf available on a given Z-level
|
||||
var/global/list/base_turf_by_z = list(
|
||||
"5" = /turf/simulated/floor/asteroid // Moonbase.
|
||||
"1" = /turf/space,
|
||||
"2" = /turf/space,
|
||||
"3" = /turf/simulated/floor/asteroid,
|
||||
"4" = /turf/simulated/floor/asteroid,
|
||||
"5" = /turf/simulated/floor/asteroid,
|
||||
"6" = /turf/simulated/open,
|
||||
"7" = /turf/space,
|
||||
"8" = /turf/space,
|
||||
"9" = /turf/space
|
||||
)
|
||||
|
||||
proc/get_base_turf(var/z)
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(H), slot_wear_suit)
|
||||
@@ -166,8 +166,8 @@
|
||||
department = "Cargo"
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
total_positions = 4
|
||||
spawn_positions = 4
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
economic_modifier = 5
|
||||
|
||||
@@ -124,7 +124,8 @@
|
||||
return
|
||||
|
||||
active = 1
|
||||
use_power(5)
|
||||
if(use_power)
|
||||
use_power(active_power_usage)
|
||||
update_icon()
|
||||
wifi_sender.activate()
|
||||
active = 0
|
||||
|
||||
@@ -422,9 +422,9 @@
|
||||
dat += "<BR>\[ [(src.aistate != STATE_DEFAULT) ? "<A HREF='?src=\ref[src];operation=ai-main'>Main Menu</A> | " : ""]<A HREF='?src=\ref[user];mach_close=communications'>Close</A> \]"
|
||||
return dat
|
||||
|
||||
/proc/enable_prison_shuttle(var/mob/user)
|
||||
/*/proc/enable_prison_shuttle(var/mob/user)
|
||||
for(var/obj/machinery/computer/prison_shuttle/PS in world)
|
||||
PS.allowedtocall = !(PS.allowedtocall)
|
||||
PS.allowedtocall = !(PS.allowedtocall)*/
|
||||
|
||||
/proc/call_shuttle_proc(var/mob/user)
|
||||
if ((!( ticker ) || !emergency_shuttle.location()))
|
||||
|
||||
@@ -194,6 +194,7 @@
|
||||
return
|
||||
|
||||
icon_state = "launcherbtt"
|
||||
active = 0
|
||||
update_icon()
|
||||
|
||||
return
|
||||
|
||||
@@ -188,3 +188,8 @@ obj/machinery/door/blast/regular/open
|
||||
icon_state_closed = "shutter1"
|
||||
icon_state_closing = "shutterc1"
|
||||
icon_state = "shutter1"
|
||||
|
||||
/obj/machinery/door/blast/shutters/open
|
||||
icon_state = "shutter0"
|
||||
density = 0
|
||||
opacity = 0
|
||||
@@ -1,4 +1,3 @@
|
||||
//these are probably broken
|
||||
|
||||
/obj/machinery/floodlight
|
||||
name = "Emergency Floodlight"
|
||||
@@ -10,7 +9,7 @@
|
||||
var/use = 200 // 200W light
|
||||
var/unlocked = 0
|
||||
var/open = 0
|
||||
var/brightness_on = 8 //can't remember what the maxed out value is
|
||||
var/brightness_on = 12 //can't remember what the maxed out value is
|
||||
light_color = LIGHT_COLOR_TUNGSTEN
|
||||
light_wedge = LIGHT_WIDE
|
||||
|
||||
@@ -133,3 +132,19 @@
|
||||
cell = W
|
||||
user << "You insert the power cell."
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/floodlight_diy
|
||||
name = "Emergency Floodlight Kit"
|
||||
desc = "A do-it-yourself kit for constructing the finest of emergency floodlights."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "inf_box"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
/obj/item/weapon/floodlight_diy/attack_self(mob/user)
|
||||
user << "<span class='notice'>You start piecing together the kit...</span>"
|
||||
if(do_after(user, 80))
|
||||
var/obj/machinery/floodlight/R = new /obj/machinery/floodlight(user.loc)
|
||||
user.visible_message("<span class='notice'>[user] assembles \a [R].\
|
||||
</span>", "<span class='notice'>You assemble \a [R].</span>")
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
@@ -14,6 +14,7 @@ var/list/floor_light_cache = list()
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2500, "glass" = 2750)
|
||||
|
||||
var/on
|
||||
var/on_state = "on"
|
||||
var/damaged
|
||||
var/default_light_range = 4
|
||||
var/default_light_power = 2
|
||||
@@ -108,7 +109,7 @@ var/list/floor_light_cache = list()
|
||||
if(isnull(damaged))
|
||||
var/cache_key = "floorlight-[default_light_colour]"
|
||||
if(!floor_light_cache[cache_key])
|
||||
var/image/I = image("on")
|
||||
var/image/I = image("[on_state]")
|
||||
I.color = default_light_colour
|
||||
I.layer = layer+0.001
|
||||
floor_light_cache[cache_key] = I
|
||||
@@ -154,4 +155,20 @@ var/list/floor_light_cache = list()
|
||||
|
||||
/obj/machinery/floor_light/cultify()
|
||||
default_light_colour = "#FF0000"
|
||||
update_brightness()
|
||||
update_brightness()
|
||||
|
||||
/obj/machinery/floor_light/dance
|
||||
name = "dance floor"
|
||||
on_state = "light_on-dancefloor_A"
|
||||
anchored = 1
|
||||
|
||||
/obj/machinery/floor_light/dance/initialize()
|
||||
..()
|
||||
on = !on
|
||||
if(on)
|
||||
use_power = 2
|
||||
|
||||
/obj/machinery/floor_light/dance/alternate
|
||||
name = "dance floor"
|
||||
on_state = "light_on-dancefloor_B"
|
||||
anchored = 1
|
||||
@@ -51,3 +51,119 @@
|
||||
return
|
||||
drive()
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/mass_driver/attackby(obj/item/W, mob/user)
|
||||
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(!anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
|
||||
user.visible_message("[user.name] secures [src] to the floor.", \
|
||||
"You secure the external reinforcing bolts to the floor.", \
|
||||
"You hear a ratchet")
|
||||
src.anchored = 1
|
||||
else
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
|
||||
user.visible_message("[user.name] unsecures [src] from the floor.", \
|
||||
"You unsecure the external reinforcing bolts from the floor.", \
|
||||
"You hear a ratchet")
|
||||
src.anchored = 0
|
||||
|
||||
/obj/machinery/mass_driver/verb/rotate()
|
||||
set name = "Rotate"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if (src.anchored || usr:stat)
|
||||
usr << "It is fastened to the floor!"
|
||||
return 0
|
||||
src.set_dir(turn(src.dir, 90))
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/mass_driver_diy
|
||||
name = "Mass Driver Kit"
|
||||
desc = "A do-it-yourself kit for constructing the finest of mass drivers."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "inf_box"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
/obj/item/weapon/mass_driver_diy/attack_self(mob/user)
|
||||
user << "<span class='notice'>You start piecing together the kit...</span>"
|
||||
if(do_after(user, 80))
|
||||
var/master_id = "[user.name] - [pick("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")][rand(100,999)]"
|
||||
var/obj/machinery/mass_driver/mining/R = new /obj/machinery/mass_driver/mining(user.loc)
|
||||
R.id = master_id
|
||||
R.power = 2.0
|
||||
var/obj/item/weapon/mass_driver_button/B = new /obj/item/weapon/mass_driver_button(user.loc)
|
||||
B.id = master_id
|
||||
user.visible_message("<span class='notice'>[user] assembles \a [R].\
|
||||
</span>", "<span class='notice'>You assemble \a [R].</span>")
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/mass_driver_button
|
||||
name = "mass driver button"
|
||||
desc = "An unscrewed mass driver button."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "launcherbtt"
|
||||
var/id
|
||||
|
||||
/obj/item/weapon/mass_driver_button/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
|
||||
if (!adjacent)
|
||||
return
|
||||
|
||||
//must place on a wall and user must not be inside a closet/mecha/whatever
|
||||
var/turf/W = A
|
||||
if (!iswall(W) || !isturf(user.loc))
|
||||
user << "<span class='warning'>You can't place this here!</span>"
|
||||
return
|
||||
|
||||
var/placement_dir = get_dir(user, W)
|
||||
if (!(placement_dir in cardinal))
|
||||
user << "<span class='warning'>You must stand directly in front of the wall you wish to place that on.</span>"
|
||||
return
|
||||
|
||||
//just check if there is a poster on or adjacent to the wall
|
||||
var/stuff_on_wall = 0
|
||||
if (locate(/obj/machinery/button) in W)
|
||||
stuff_on_wall = 1
|
||||
|
||||
//crude, but will cover most cases. We could do stuff like check pixel_x/y but it's not really worth it.
|
||||
for (var/dir in cardinal)
|
||||
var/turf/T = get_step(W, dir)
|
||||
if (locate(/obj/machinery/button) in T)
|
||||
stuff_on_wall = 1
|
||||
break
|
||||
|
||||
if (stuff_on_wall)
|
||||
user << "<span class='notice'>There is already a button there!</span>"
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You place down the button.</span>"
|
||||
var/obj/machinery/button/mass_driver/B = new /obj/machinery/button/remote/driver(user.loc)
|
||||
|
||||
switch (placement_dir)
|
||||
if (NORTH)
|
||||
B.pixel_x = 0
|
||||
B.pixel_y = 32
|
||||
if (SOUTH)
|
||||
B.pixel_x = 0
|
||||
B.pixel_y = -32
|
||||
if (EAST)
|
||||
B.pixel_x = 32
|
||||
B.pixel_y = 0
|
||||
if (WEST)
|
||||
B.pixel_x = -32
|
||||
B.pixel_y = 0
|
||||
|
||||
B.id = id
|
||||
B.use_power = 0
|
||||
B.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/mass_driver/mining
|
||||
name = "mining mass driver"
|
||||
desc = "Shoots things really hard really fast."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "mass_driver"
|
||||
anchored = 0
|
||||
use_power = 0
|
||||
@@ -60,3 +60,51 @@
|
||||
density = 0
|
||||
anchored = 1
|
||||
layer = 3
|
||||
|
||||
/obj/effect/overlay/temp
|
||||
icon_state = "nothing"
|
||||
anchored = 1
|
||||
layer = 5
|
||||
mouse_opacity = 0
|
||||
var/duration = 10 //in deciseconds
|
||||
var/randomdir = TRUE
|
||||
var/timerid
|
||||
|
||||
/obj/effect/overlay/temp/New()
|
||||
..()
|
||||
if(randomdir)
|
||||
dir = (pick(cardinal))
|
||||
flick("[icon_state]", src)
|
||||
|
||||
schedule_task_in(duration, /proc/qdel, list(src))
|
||||
|
||||
/obj/effect/overlay/temp/ex_act()
|
||||
return
|
||||
|
||||
/obj/effect/overlay/temp/dir_setting
|
||||
randomdir = FALSE
|
||||
|
||||
/obj/effect/overlay/temp/dir_setting/New(loc, set_dir)
|
||||
if(set_dir)
|
||||
dir = set_dir
|
||||
..()
|
||||
|
||||
|
||||
/obj/effect/overlay/temp/kinetic_blast
|
||||
name = "kinetic explosion"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "kinetic_blast"
|
||||
layer = 5
|
||||
duration = 4
|
||||
|
||||
/obj/effect/overlay/temp/explosion
|
||||
name = "explosion"
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "explosion"
|
||||
pixel_x = -32
|
||||
pixel_y = -32
|
||||
duration = 8
|
||||
|
||||
/obj/effect/overlay/temp/explosion/fast
|
||||
icon_state = "explosionfast"
|
||||
duration = 4
|
||||
|
||||
@@ -28,11 +28,14 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/effect/portal/New()
|
||||
spawn(300)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300)
|
||||
..()
|
||||
src.target = target
|
||||
src.creator = creator
|
||||
|
||||
if(lifespan > 0)
|
||||
spawn(lifespan)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
|
||||
if(istype(M, /obj/effect)) //sparks don't teleport
|
||||
|
||||
@@ -89,9 +89,7 @@ move an amendment</a> to the drawing.</p>
|
||||
/area/asteroid,
|
||||
/area/tdome,
|
||||
/area/syndicate_station,
|
||||
/area/wizard_station,
|
||||
/area/prison
|
||||
// /area/derelict //commented out, all hail derelict-rebuilders!
|
||||
/area/wizard_station
|
||||
)
|
||||
for (var/type in SPECIALS)
|
||||
if ( istype(A,type) )
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
var/global/list/teleportbeacons = list()
|
||||
|
||||
/obj/item/device/radio/beacon
|
||||
name = "tracking beacon"
|
||||
desc = "A beacon used by a teleporter."
|
||||
@@ -6,6 +8,14 @@
|
||||
var/code = "electronic"
|
||||
origin_tech = list(TECH_BLUESPACE = 1)
|
||||
|
||||
/obj/item/device/radio/beacon/New()
|
||||
..()
|
||||
teleportbeacons += src
|
||||
|
||||
/obj/item/device/radio/beacon/Destroy()
|
||||
teleportbeacons.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/beacon/hear_talk()
|
||||
return
|
||||
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
new_name = "APLU \"Burning Chrome\""
|
||||
new_desc = "A standard APLU exosuit with stylish blue flame decals."
|
||||
new_icon = "ripley_flames_blue"
|
||||
|
||||
|
||||
/obj/item/device/kit/paint/ripley/titan
|
||||
name = "\"Titan's Fist\" APLU customisation kit"
|
||||
new_name = "APLU \"Titan's Fist\""
|
||||
@@ -149,6 +149,16 @@
|
||||
new_desc = "Looks like an over worked, under maintained Ripley with some horrific damage."
|
||||
new_icon = "earth"
|
||||
|
||||
/obj/item/device/kit/paint/ripley/random
|
||||
name = "quantum ripley kit"
|
||||
|
||||
/obj/item/device/kit/paint/ripley/random/New()
|
||||
..()
|
||||
var/list/ripleys = (typesof(/obj/item/device/kit/paint/ripley) - typesof(/obj/item/device/kit/paint/ripley/fluff))
|
||||
var/build_path = pick(ripleys)
|
||||
new build_path(src.loc)
|
||||
qdel(src)
|
||||
|
||||
// Durand kits.
|
||||
/obj/item/device/kit/paint/durand
|
||||
name = "\"Classic\" Durand customisation kit"
|
||||
|
||||
@@ -160,6 +160,7 @@
|
||||
return 0
|
||||
|
||||
R.emagged = 1
|
||||
R.fakeemagged = 1
|
||||
return 1
|
||||
|
||||
/obj/item/borg/upgrade/combat
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
var/global/list/datum/stack_recipe/rod_recipes = list ( \
|
||||
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("mine track", /obj/structure/track, 3, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("cane", /obj/item/weapon/cane, 1, time = 6), \
|
||||
new/datum/stack_recipe("crowbar", /obj/item/weapon/crowbar, 1, time = 6), \
|
||||
new/datum/stack_recipe("screwdriver", /obj/item/weapon/screwdriver, 1, time = 12), \
|
||||
new/datum/stack_recipe("wrench", /obj/item/weapon/wrench, 1, time = 6), \
|
||||
new/datum/stack_recipe("spade", /obj/item/weapon/shovel/spade, 2, time = 12), \
|
||||
new/datum/stack_recipe("bolt", /obj/item/weapon/arrow, 1, time = 6)
|
||||
)
|
||||
|
||||
/obj/item/stack/rods
|
||||
name = "metal rod"
|
||||
desc = "Some rods. Can be used for building, or something."
|
||||
@@ -22,6 +33,19 @@
|
||||
charge_costs = list(500)
|
||||
stacktype = /obj/item/stack/rods
|
||||
|
||||
/obj/item/stack/rods/New(var/loc, var/amount=null)
|
||||
..()
|
||||
|
||||
recipes = rod_recipes
|
||||
update_icon()
|
||||
|
||||
/obj/item/stack/rods/update_icon()
|
||||
var/amount = get_amount()
|
||||
if((amount <= 5) && (amount > 0))
|
||||
icon_state = "rods-[amount]"
|
||||
else
|
||||
icon_state = "rods"
|
||||
|
||||
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(W, /obj/item/weapon/weldingtool))
|
||||
@@ -44,36 +68,3 @@
|
||||
user.put_in_hands(new_item)
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/stack/rods/attack_self(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if(!istype(user.loc,/turf)) return 0
|
||||
|
||||
if (locate(/obj/structure/grille, usr.loc))
|
||||
for(var/obj/structure/grille/G in usr.loc)
|
||||
if (G.destroyed)
|
||||
G.health = 10
|
||||
G.density = 1
|
||||
G.destroyed = 0
|
||||
G.icon_state = "grille"
|
||||
use(1)
|
||||
else
|
||||
return 1
|
||||
|
||||
else if(!in_use)
|
||||
if(get_amount() < 2)
|
||||
user << "<span class='warning'>You need at least two rods to do this.</span>"
|
||||
return
|
||||
usr << "<span class='notice'>Assembling grille...</span>"
|
||||
in_use = 1
|
||||
if (!do_after(usr, 10))
|
||||
in_use = 0
|
||||
return
|
||||
var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc )
|
||||
usr << "<span class='notice'>You assemble a grille</span>"
|
||||
in_use = 0
|
||||
F.add_fingerprint(usr)
|
||||
use(2)
|
||||
return
|
||||
|
||||
@@ -189,6 +189,7 @@
|
||||
if(usr)
|
||||
usr.remove_from_mob(src)
|
||||
qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
if(get_amount() < used)
|
||||
@@ -205,6 +206,7 @@
|
||||
return 0
|
||||
else
|
||||
amount += extra
|
||||
update_icon()
|
||||
return 1
|
||||
else if(!synths || synths.len < uses_charge)
|
||||
return 0
|
||||
|
||||
@@ -114,6 +114,7 @@ var/const/NO_EMAG_ACT = -50
|
||||
var/sex = "\[UNSET\]"
|
||||
var/icon/front
|
||||
var/icon/side
|
||||
var/mining_points //miners gotta eat
|
||||
|
||||
//alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system
|
||||
var/assignment = null //can be alt title or the actual job
|
||||
@@ -178,6 +179,8 @@ var/const/NO_EMAG_ACT = -50
|
||||
dat += text("Fingerprint: []</A><BR>\n", fingerprint_hash)
|
||||
dat += text("Blood Type: []<BR>\n", blood_type)
|
||||
dat += text("DNA Hash: []<BR><BR>\n", dna_hash)
|
||||
if(mining_points)
|
||||
dat += text("Ore Redemption Points: []<BR><BR>\n", mining_points)
|
||||
if(front && side)
|
||||
dat +="<td align = center valign = top>Photo:<br><img src=front.png height=80 width=80 border=4><img src=side.png height=80 width=80 border=4></td>"
|
||||
dat += "</tr></table>"
|
||||
@@ -275,6 +278,8 @@ var/const/NO_EMAG_ACT = -50
|
||||
usr << "The blood type on the card is [blood_type]."
|
||||
usr << "The DNA hash on the card is [dna_hash]."
|
||||
usr << "The fingerprint hash on the card is [fingerprint_hash]."
|
||||
if(mining_points)
|
||||
usr << "A ticker indicates the card has [mining_points] ore redemption points available."
|
||||
return
|
||||
|
||||
/obj/item/weapon/card/id/silver
|
||||
@@ -318,6 +323,17 @@ var/const/NO_EMAG_ACT = -50
|
||||
access = get_all_station_access() + access_synth
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/synthetic/minedrone
|
||||
name = "\improper Minedrone ID"
|
||||
desc = "Access module for NanoTrasen Minedrones"
|
||||
icon_state = "id-robot"
|
||||
item_state = "tdgreen"
|
||||
assignment = "Minedrone"
|
||||
|
||||
/obj/item/weapon/card/id/synthetic/minedrone/New()
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/centcom
|
||||
name = "\improper CentCom. ID"
|
||||
desc = "An ID straight from Cent. Com."
|
||||
@@ -336,7 +352,7 @@ var/const/NO_EMAG_ACT = -50
|
||||
obj/item/weapon/card/id/centcom/ERT/New()
|
||||
..()
|
||||
access = get_all_accesses() + get_centcom_access("Emergency Response Team")
|
||||
|
||||
|
||||
/obj/item/weapon/card/id/all_access
|
||||
name = "\improper Administrator's spare ID"
|
||||
desc = "The spare ID of the Lord of Lords himself."
|
||||
|
||||
@@ -167,10 +167,10 @@
|
||||
build_path = /obj/machinery/computer/area_atmos
|
||||
origin_tech = list(TECH_DATA = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/prison_shuttle
|
||||
/*/obj/item/weapon/circuitboard/prison_shuttle
|
||||
name = T_BOARD("prison shuttle control console")
|
||||
build_path = /obj/machinery/computer/prison_shuttle
|
||||
origin_tech = list(TECH_DATA = 2)
|
||||
origin_tech = list(TECH_DATA = 2)*/
|
||||
|
||||
/obj/item/weapon/circuitboard/rcon_console
|
||||
name = T_BOARD("RCON remote control console")
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
spawn(timer*10)
|
||||
explode(get_turf(target))
|
||||
|
||||
/obj/item/weapon/plastique/proc/explode(var/location)
|
||||
/obj/item/weapon/plastique/proc/explode(var/turf/location)
|
||||
if(!target)
|
||||
target = get_atom_on_turf(src)
|
||||
if(!target)
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
var/base_icon
|
||||
var/base_name
|
||||
var/unwielded_force_divisor = 0.25
|
||||
action_button_name = "Wield two-handed weapon"
|
||||
|
||||
/obj/item/weapon/material/twohanded/proc/unwield()
|
||||
wielded = 0
|
||||
@@ -129,6 +130,17 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/material/twohanded/ui_action_click()
|
||||
if(src in usr)
|
||||
attack_self(usr)
|
||||
|
||||
/obj/item/weapon/material/twohanded/verb/wield_twohanded()
|
||||
set name = "Wield two-handed weapon"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
attack_self(usr)
|
||||
|
||||
///////////OFFHAND///////////////
|
||||
/obj/item/weapon/material/twohanded/offhand
|
||||
w_class = 5
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/weapon/material/sword/trench,
|
||||
/obj/item/weapon/shield/energy,
|
||||
/obj/item/weapon/shield/riot/tact
|
||||
/obj/item/weapon/shield/riot/tact
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/soulstone
|
||||
@@ -231,7 +231,7 @@
|
||||
/obj/item/weapon/soap,
|
||||
/obj/item/weapon/storage/bag/trash
|
||||
)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/wands
|
||||
name = "wand belt"
|
||||
desc = "A belt designed to hold various rods of power."
|
||||
@@ -243,7 +243,7 @@
|
||||
can_hold = list(
|
||||
/obj/item/weapon/gun/energy/wand
|
||||
)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/wands/full/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/energy/wand/fire(src)
|
||||
@@ -251,3 +251,39 @@
|
||||
new /obj/item/weapon/gun/energy/wand/teleport(src)
|
||||
new /obj/item/weapon/gun/energy/wand/force(src)
|
||||
new /obj/item/weapon/gun/energy/wand/animation(src)
|
||||
|
||||
/obj/item/weapon/storage/belt/mining
|
||||
name = "explorer's webbing"
|
||||
desc = "A versatile chest rig, cherished by miners and hunters alike."
|
||||
icon_state = "explorer"
|
||||
item_state = "explorer"
|
||||
storage_slots = 9
|
||||
w_class = 4
|
||||
max_w_class = 4 //Pickaxes are big.
|
||||
can_hold = list(/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/device/radio,
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/clothing/glasses/material,
|
||||
/obj/item/weapon/pickaxe,
|
||||
/obj/item/stack/material/animalhide,
|
||||
/obj/item/weapon/flame/lighter,
|
||||
/obj/item/weapon/storage/fancy/cigarettes,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/device/gps,
|
||||
/obj/item/weapon/storage/bag/ore,
|
||||
/obj/item/weapon/reagent_containers/pill,
|
||||
/obj/item/weapon/storage/pill_bottle,
|
||||
/obj/item/weapon/ore,
|
||||
/obj/item/weapon/reagent_containers/food/drinks,
|
||||
/obj/item/weapon/storage/bag/plants
|
||||
)
|
||||
|
||||
@@ -812,3 +812,13 @@
|
||||
var/type = pick(snacks)
|
||||
new type(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/box/stims
|
||||
name = "stimpack value kit"
|
||||
desc = "A box with several stimpack medipens for the economical miner."
|
||||
icon_state = "syringe"
|
||||
|
||||
/obj/item/weapon/storage/box/stims/New()
|
||||
..()
|
||||
for(var/i in 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack(src)
|
||||
@@ -150,6 +150,22 @@
|
||||
|
||||
make_exact_fit()
|
||||
|
||||
/obj/item/weapon/storage/firstaid/brute
|
||||
name = "brute aid kit"
|
||||
desc = "A NanoTrasen care package for moderately injured miners."
|
||||
icon_state = "brute"
|
||||
|
||||
/obj/item/weapon/storage/firstaid/brute/New()
|
||||
..()
|
||||
if (empty) return
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/advanced/bruise_pack(src)
|
||||
new /obj/item/stack/medical/advanced/bruise_pack(src)
|
||||
return
|
||||
|
||||
/*
|
||||
* Pill Bottles
|
||||
*/
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
item_state = "electronic"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
origin_tech = list(TECH_MAGNET = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 400)
|
||||
origin_tech = list(TECH_MAGNET = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 400)
|
||||
|
||||
/obj/item/weapon/locator/attack_self(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
@@ -48,7 +48,7 @@ Frequency:
|
||||
if (usr.stat || usr.restrained())
|
||||
return
|
||||
var/turf/current_location = get_turf(usr)//What turf is the user on?
|
||||
if(!current_location||current_location.z==2)//If turf was not found or they're on z level 2.
|
||||
if(!current_location||current_location.z==1)//If turf was not found or they're on z level 1.
|
||||
usr << "The [src] is malfunctioning."
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
@@ -60,7 +60,7 @@ Frequency:
|
||||
if (sr)
|
||||
src.temp += "<B>Located Beacons:</B><BR>"
|
||||
|
||||
for(var/obj/item/device/radio/beacon/W in world)
|
||||
for(var/obj/item/device/radio/beacon/W in teleportbeacons)
|
||||
if (W.frequency == src.frequency)
|
||||
var/turf/tr = get_turf(W)
|
||||
if (tr.z == sr.z && tr)
|
||||
@@ -132,8 +132,8 @@ Frequency:
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
|
||||
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
|
||||
var/turf/current_location = get_turf(user)//What turf is the user on?
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
user << "<span class='notice'>You secured the girder!</span>"
|
||||
reset_girder()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
|
||||
user << "<span class='notice'>Now slicing apart the girder...</span>"
|
||||
if(do_after(user,30))
|
||||
if(!src) return
|
||||
@@ -278,7 +278,7 @@
|
||||
user << "<span class='notice'>You dissasembled the girder!</span>"
|
||||
dismantle()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
|
||||
user << "<span class='notice'>Now slicing apart the girder...</span>"
|
||||
if(do_after(user,30))
|
||||
user << "<span class='notice'>You slice apart the girder!</span>"
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
//Flimsy grilles aren't so great at stopping projectiles. However they can absorb some of the impact
|
||||
var/damage = Proj.get_structure_damage()
|
||||
var/passthrough = 0
|
||||
|
||||
|
||||
if(!damage) return
|
||||
|
||||
//20% chance that the grille provides a bit more cover than usual. Support structure for example might take up 20% of the grille's area.
|
||||
@@ -104,6 +104,16 @@
|
||||
anchored = !anchored
|
||||
user.visible_message("<span class='notice'>[user] [anchored ? "fastens" : "unfastens"] the grille.</span>", \
|
||||
"<span class='notice'>You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.</span>")
|
||||
else if(istype(W,/obj/item/stack/rods) && destroyed == 1)
|
||||
if(!shock(user, 90))
|
||||
var/obj/item/stack/rods/ROD = W
|
||||
health = 10
|
||||
density = 1
|
||||
destroyed = 0
|
||||
icon_state = "grille"
|
||||
ROD.use(1)
|
||||
user.visible_message("<span class='notice'>[user] repairs the grille.</span>", \
|
||||
"<span class='notice'>You have repaired the grille.</span>")
|
||||
return
|
||||
|
||||
//window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
//This return will prevent afterattack from executing if the object goes into the trashbag,
|
||||
//This prevents dumb stuff like splashing the cart with the contents of a container, after putting said container into trash
|
||||
|
||||
else if (!has_items && (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/weldingtool) || istype(I, /obj/item/weapon/pickaxe/plasmacutter)))
|
||||
else if (!has_items && (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/weldingtool) || istype(I, /obj/item/weapon/gun/energy/plasmacutter)))
|
||||
dismantle(user)
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -32,20 +32,15 @@
|
||||
var/obj/structure/lattice/L
|
||||
if(locate(/obj/structure/lattice, get_step(src, dir)))
|
||||
L = locate(/obj/structure/lattice, get_step(src, dir))
|
||||
L.updateOverlays(src.loc)
|
||||
L.updateOverlays()
|
||||
..()
|
||||
|
||||
/obj/structure/lattice/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob)
|
||||
@@ -64,8 +59,6 @@
|
||||
return
|
||||
|
||||
/obj/structure/lattice/proc/updateOverlays()
|
||||
//if(!(istype(src.loc, /turf/space)))
|
||||
// qdel(src)
|
||||
spawn(1)
|
||||
overlays = list()
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//Config stuff
|
||||
#define SUPPLY_DOCKZ 2 //Z-level of the Dock.
|
||||
#define SUPPLY_DOCKZ 3 //Z-level of the Dock.
|
||||
#define SUPPLY_STATIONZ 1 //Z-level of the Station.
|
||||
#define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station
|
||||
#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock
|
||||
@@ -31,11 +31,13 @@ var/list/mechtoys = list(
|
||||
name = "Supply Shuttle"
|
||||
icon_state = "shuttle3"
|
||||
requires_power = 0
|
||||
station_area = 1
|
||||
|
||||
/area/supply/dock
|
||||
name = "Supply Shuttle"
|
||||
icon_state = "shuttle3"
|
||||
requires_power = 0
|
||||
centcomm_area = 1
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
thermitemelt(user)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
|
||||
thermitemelt(user)
|
||||
return
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
else
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
else if (istype(W, /obj/item/weapon/gun/energy/plasmacutter))
|
||||
cut_cover = 1
|
||||
if(cut_cover)
|
||||
user << "<span class='notice'>You begin slicing through the metal cover.</span>"
|
||||
@@ -307,7 +307,7 @@
|
||||
else
|
||||
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
|
||||
cut_cover = 1
|
||||
if(cut_cover)
|
||||
user << "<span class='notice'>You begin slicing through the support rods.</span>"
|
||||
|
||||
@@ -13,3 +13,14 @@
|
||||
name = "mask"
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "rockvault"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/unsimulated/chasm_mask
|
||||
name = "chasm mask"
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "alienvault"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
@@ -31,11 +31,11 @@ var/diary = null
|
||||
var/diary_runtime = null
|
||||
var/diary_date_string = null
|
||||
var/href_logfile = null
|
||||
var/station_name = "NSS Exodus"
|
||||
var/station_short = "Exodus"
|
||||
var/station_name = "NSS Aurora II"
|
||||
var/station_short = "Aurora"
|
||||
var/const/dock_name = "NTCC Odin"
|
||||
var/const/boss_name = "Central Command"
|
||||
var/const/boss_short = "Centcomm"
|
||||
var/const/boss_short = "Centcom"
|
||||
var/const/company_name = "NanoTrasen"
|
||||
var/const/company_short = "NT"
|
||||
var/game_version = "Aurorastation"
|
||||
|
||||
@@ -167,6 +167,7 @@
|
||||
/obj/effect/landmark/corpse/engineer/rotten
|
||||
name = "unidentifiable corpse"
|
||||
species = "Skeleton"
|
||||
corpseid = 0
|
||||
|
||||
/obj/effect/landmark/corpse/clown
|
||||
name = "Clown"
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
interface_desc = "A shoulder-mounted cell-powered taser."
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/taser/mounted
|
||||
|
||||
|
||||
/obj/item/rig_module/mounted/pulse
|
||||
|
||||
name = "mounted pulse rifle"
|
||||
@@ -177,7 +177,7 @@
|
||||
interface_desc = "A shoulder-mounted cell-powered pulse rifle."
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/pulse_rifle/mounted
|
||||
|
||||
|
||||
/obj/item/rig_module/mounted/smg
|
||||
|
||||
name = "mounted submachine gun"
|
||||
@@ -188,7 +188,7 @@
|
||||
interface_desc = "A forearm-mounted suit-powered ballistic submachine gun."
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/mountedsmg
|
||||
|
||||
|
||||
/obj/item/rig_module/mounted/xray
|
||||
|
||||
name = "mounted xray laser gun"
|
||||
@@ -199,7 +199,7 @@
|
||||
interface_desc = "A forearm-mounted suit-powered xray laser gun."
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/xray/mounted
|
||||
|
||||
|
||||
/obj/item/rig_module/mounted/ion
|
||||
|
||||
name = "mounted ion rifle"
|
||||
@@ -211,6 +211,38 @@
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/ionrifle/mounted
|
||||
|
||||
/obj/item/rig_module/mounted/plasmacutter
|
||||
name = "hardsuit plasma cutter"
|
||||
desc = "A forearm mounted kinetic accelerator"
|
||||
icon_state = "plasmacutter"
|
||||
interface_name = "plasma cutter"
|
||||
interface_desc = "A self-sustaining plasma arc capable of cutting through walls."
|
||||
suit_overlay_active = "plasmacutter"
|
||||
suit_overlay_inactive = "plasmacutter"
|
||||
construction_cost = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250)
|
||||
construction_time = 300
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/plasmacutter/mounted
|
||||
|
||||
/obj/item/rig_module/mounted/kinetic_accelerator
|
||||
name = "hardsuit kinetic accelerator"
|
||||
desc = "A lethal-looking industrial cutter."
|
||||
icon_state = "kineticgun"
|
||||
interface_name = "kinetic accelerator"
|
||||
interface_desc = "A ranged mining tool that does increased damage in low pressure."
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg
|
||||
|
||||
/obj/item/rig_module/mounted/thermalldrill
|
||||
name = "hardsuit thermal drill"
|
||||
desc = "An incredibly lethal looking thermal drill."
|
||||
icon_state = "thermaldrill"
|
||||
interface_name = "thermal drill"
|
||||
interface_desc = "A potent drill that can pierce rock walls over long distances."
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill
|
||||
|
||||
|
||||
/obj/item/rig_module/mounted/energy_blade
|
||||
|
||||
name = "energy blade projector"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/* Contains:
|
||||
* /obj/item/rig_module/device
|
||||
* /obj/item/rig_module/device/plasmacutter
|
||||
* /obj/item/rig_module/device/healthscanner
|
||||
* /obj/item/rig_module/device/drill
|
||||
* /obj/item/rig_module/device/orescanner
|
||||
@@ -28,20 +27,6 @@
|
||||
var/device_type
|
||||
var/obj/item/device
|
||||
|
||||
/obj/item/rig_module/device/plasmacutter
|
||||
name = "hardsuit plasma cutter"
|
||||
desc = "A lethal-looking industrial cutter."
|
||||
icon_state = "plasmacutter"
|
||||
interface_name = "plasma cutter"
|
||||
interface_desc = "A self-sustaining plasma arc capable of cutting through walls."
|
||||
suit_overlay_active = "plasmacutter"
|
||||
suit_overlay_inactive = "plasmacutter"
|
||||
use_power_cost = 0.5
|
||||
construction_cost = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250)
|
||||
construction_time = 300
|
||||
|
||||
device_type = /obj/item/weapon/pickaxe/plasmacutter
|
||||
|
||||
/obj/item/rig_module/device/healthscanner
|
||||
name = "health scanner module"
|
||||
desc = "A hardsuit-mounted health scanner."
|
||||
@@ -54,7 +39,7 @@
|
||||
device_type = /obj/item/device/healthanalyzer
|
||||
|
||||
/obj/item/rig_module/device/drill
|
||||
name = "hardsuit drill mount"
|
||||
name = "hardsuit diamond drill mount"
|
||||
desc = "A very heavy diamond-tipped drill."
|
||||
icon_state = "drill"
|
||||
interface_name = "mounted drill"
|
||||
@@ -67,6 +52,18 @@
|
||||
|
||||
device_type = /obj/item/weapon/pickaxe/diamonddrill
|
||||
|
||||
/obj/item/rig_module/device/basicdrill
|
||||
name = "hardsuit drill mount"
|
||||
desc = "A very heavy basic drill."
|
||||
icon_state = "drill"
|
||||
interface_name = "mounted drill"
|
||||
interface_desc = "A basic industrial drill."
|
||||
suit_overlay_active = "mounted-drill"
|
||||
suit_overlay_inactive = "mounted-drill"
|
||||
use_power_cost = 0.1
|
||||
|
||||
device_type = /obj/item/weapon/pickaxe/drill
|
||||
|
||||
/obj/item/rig_module/device/anomaly_scanner
|
||||
name = "hardsuit anomaly scanner"
|
||||
desc = "You think it's called an Elder Sarsparilla or something."
|
||||
|
||||
@@ -28,6 +28,11 @@
|
||||
/datum/rig_vision/meson/New()
|
||||
glasses = new /obj/item/clothing/glasses/meson
|
||||
|
||||
/datum/rig_vision/material
|
||||
mode = "meson scanner"
|
||||
/datum/rig_vision/material/New()
|
||||
glasses = new /obj/item/clothing/glasses/material
|
||||
|
||||
/datum/rig_vision/sechud
|
||||
mode = "security HUD"
|
||||
/datum/rig_vision/sechud/New()
|
||||
@@ -83,7 +88,7 @@
|
||||
|
||||
/obj/item/rig_module/vision/meson
|
||||
|
||||
name = "hardsuit meson scanner"
|
||||
name = "hardsuit meson/material scanner"
|
||||
desc = "A layered, translucent visor system for a hardsuit."
|
||||
icon_state = "meson"
|
||||
|
||||
@@ -92,10 +97,11 @@
|
||||
construction_cost = list("glass"=5000,DEFAULT_WALL_MATERIAL=1500)
|
||||
construction_time = 300
|
||||
|
||||
interface_name = "meson scanner"
|
||||
interface_desc = "An integrated meson scanner."
|
||||
interface_name = "meson/material scanner"
|
||||
interface_desc = "An integrated meson/material scanner."
|
||||
|
||||
vision_modes = list(/datum/rig_vision/meson)
|
||||
vision_modes = list(/datum/rig_vision/meson,
|
||||
/datum/rig_vision/material)
|
||||
|
||||
/obj/item/rig_module/vision/thermal
|
||||
|
||||
|
||||
@@ -67,5 +67,5 @@
|
||||
/obj/item/rig_module/power_sink,
|
||||
/obj/item/rig_module/chem_dispenser/combat,
|
||||
/obj/item/rig_module/chem_dispenser/injector,
|
||||
/obj/item/rig_module/device/plasmacutter
|
||||
/obj/item/rig_module/mounted/plasmacutter
|
||||
)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
/obj/item/rig_module/ai_container,
|
||||
/obj/item/rig_module/vision/meson,
|
||||
/obj/item/rig_module/maneuvering_jets,
|
||||
/obj/item/rig_module/device/plasmacutter,
|
||||
/obj/item/rig_module/mounted/plasmacutter,
|
||||
/obj/item/rig_module/device/rcd
|
||||
)
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
/obj/item/rig_module/vision/multi,
|
||||
/obj/item/rig_module/mounted/egun,
|
||||
/obj/item/rig_module/chem_dispenser/combat,
|
||||
/obj/item/rig_module/device/plasmacutter,
|
||||
/obj/item/rig_module/mounted/plasmacutter,
|
||||
/obj/item/rig_module/device/rcd,
|
||||
/obj/item/rig_module/datajack
|
||||
)
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
/obj/item/weapon/rig/industrial/equipped
|
||||
|
||||
initial_modules = list(
|
||||
/obj/item/rig_module/device/plasmacutter,
|
||||
/obj/item/rig_module/mounted/plasmacutter,
|
||||
/obj/item/rig_module/device/drill,
|
||||
/obj/item/rig_module/device/orescanner,
|
||||
/obj/item/rig_module/device/rcd,
|
||||
@@ -109,7 +109,7 @@
|
||||
/obj/item/weapon/rig/eva/equipped
|
||||
|
||||
initial_modules = list(
|
||||
/obj/item/rig_module/device/plasmacutter,
|
||||
/obj/item/rig_module/mounted/plasmacutter,
|
||||
/obj/item/rig_module/maneuvering_jets,
|
||||
/obj/item/rig_module/device/rcd,
|
||||
/obj/item/rig_module/vision/meson
|
||||
@@ -145,7 +145,7 @@
|
||||
initial_modules = list(
|
||||
/obj/item/rig_module/ai_container,
|
||||
/obj/item/rig_module/maneuvering_jets,
|
||||
/obj/item/rig_module/device/plasmacutter,
|
||||
/obj/item/rig_module/mounted/plasmacutter,
|
||||
/obj/item/rig_module/device/rcd,
|
||||
/obj/item/rig_module/vision/meson
|
||||
)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
/obj/item/rig_module/vision,
|
||||
/obj/item/rig_module/voice,
|
||||
/obj/item/rig_module/datajack,
|
||||
/obj/item/rig_module/device/plasmacutter
|
||||
/obj/item/rig_module/mounted/plasmacutter
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/terminator
|
||||
@@ -52,5 +52,5 @@
|
||||
/obj/item/rig_module/vision,
|
||||
/obj/item/rig_module/voice,
|
||||
/obj/item/rig_module/datajack,
|
||||
/obj/item/rig_module/device/plasmacutter
|
||||
/obj/item/rig_module/mounted/plasmacutter
|
||||
)
|
||||
@@ -6,6 +6,7 @@
|
||||
desc = "A crimson helmet sporting clean lines and durable plating. Engineered to look menacing."
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0.3
|
||||
brightness_on = 6
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate
|
||||
name = "red space suit"
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
species_restricted = list("Human", "Vaurca", "Machine")
|
||||
camera_networks = list(NETWORK_MERCENARY)
|
||||
light_overlay = "helmet_light_green" //todo: species-specific light overlays
|
||||
brightness_on = 6
|
||||
|
||||
/obj/item/clothing/suit/space/void/merc
|
||||
icon_state = "rig-syndie"
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
slot_r_hand_str = "eng_helm"
|
||||
)
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
|
||||
brightness_on = 6
|
||||
|
||||
/obj/item/clothing/suit/space/void/engineering
|
||||
name = "engineering voidsuit"
|
||||
@@ -34,6 +35,7 @@
|
||||
)
|
||||
armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20)
|
||||
light_overlay = "helmet_light_dual"
|
||||
brightness_on = 6
|
||||
|
||||
/obj/item/clothing/suit/space/void/mining
|
||||
icon_state = "rig-mining"
|
||||
|
||||
@@ -161,4 +161,39 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
|
||||
/obj/item/weapon/spacecash/ewallet/examine(mob/user)
|
||||
..(user)
|
||||
if (!(user in view(2)) && user!=src.loc) return
|
||||
user << "\blue Charge card's owner: [src.owner_name]. Credit chips remaining: [src.worth]."
|
||||
user << "<span class='notice'>Charge card's owner: [src.owner_name]. Credit chips remaining: [src.worth].</span>"
|
||||
|
||||
/obj/item/weapon/spacecash/ewallet/lotto
|
||||
name = "lottery card"
|
||||
desc = "A scratch-action charge card that contains a variable amount of money."
|
||||
worth = 0
|
||||
var/scratched = 0
|
||||
|
||||
/obj/item/weapon/spacecash/ewallet/lotto/attack_self(mob/user)
|
||||
if(!scratched)
|
||||
user << "<span class='notice'>You initiate the simulated scratch action process on the charge card. . .</span>"
|
||||
if(do_after(user,5))
|
||||
switch(rand(1,100))
|
||||
if(1 to 29)
|
||||
worth = rand(0,200)
|
||||
user << "<span class='notice'>The card reads [worth]. Not your lucky day!</span>"
|
||||
if(30 to 59)
|
||||
worth = 200
|
||||
user << "<span class='notice'>The card reads [worth]. At least you broke even.</span>"
|
||||
if(60 to 79)
|
||||
worth = pick(200,300,400,500)
|
||||
user << "<span class='notice'>The card reads [worth]. That's a pretty penny!</span>"
|
||||
if(80 to 95)
|
||||
worth = pick(500,600,700,800,900,1000)
|
||||
user << "<span class='notice'>The card reads [worth]. Your luck is running high!</span>"
|
||||
if(95 to 99)
|
||||
worth = pick(1000,2000,3000,4000,5000,6000,7000,8000,9000)
|
||||
user << "<span class='notice'>The card reads [worth]. You're rich!</span>"
|
||||
if(100)
|
||||
worth = pick(10000,20000,30000,40000,50000)
|
||||
user << "<span class='notice'>The card reads [worth]. You're blessed!</span>"
|
||||
else
|
||||
worth = 0
|
||||
user << "<span class='notice'>The card reads [worth]. Not your lucky day!</span>"
|
||||
scratched = 1
|
||||
owner_name = user.name
|
||||
@@ -94,7 +94,7 @@
|
||||
if(79 to 80)
|
||||
new/obj/item/weapon/pickaxe/gold(src)
|
||||
if(81 to 82)
|
||||
new/obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
new/obj/item/weapon/gun/energy/plasmacutter(src)
|
||||
if(83 to 84)
|
||||
new/obj/item/toy/katana(src)
|
||||
if(85)
|
||||
@@ -179,8 +179,8 @@
|
||||
var/turf/T = get_turf(src.loc)
|
||||
explosion(T, 0, 0, 1, 2)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user)
|
||||
|
||||
/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user)
|
||||
if (locked)
|
||||
user << "<span class='notice'>The crate unlocks!</span>"
|
||||
locked = 0
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
/obj/machinery/mining/drill
|
||||
name = "mining drill head"
|
||||
desc = "An enormous drill."
|
||||
desc = "A large industrial drill. Its bore does not penetrate deep enough to access the sublevels."
|
||||
icon_state = "mining_drill"
|
||||
var/braces_needed = 2
|
||||
var/list/supports = list()
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
/**********************Mineral processing unit console**************************/
|
||||
|
||||
/obj/machinery/mineral/processing_unit_console
|
||||
name = "production machine console"
|
||||
name = "ore redemption console"
|
||||
icon = 'icons/obj/machines/mining_machines.dmi'
|
||||
icon_state = "console"
|
||||
density = 1
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 15
|
||||
active_power_usage = 50
|
||||
|
||||
var/obj/machinery/mineral/processing_unit/machine = null
|
||||
var/machinedir = NORTHEAST
|
||||
var/show_all_ores = 0
|
||||
var/points = 0
|
||||
var/obj/item/weapon/card/id/inserted_id
|
||||
|
||||
/obj/machinery/mineral/processing_unit_console/New()
|
||||
..()
|
||||
@@ -37,6 +42,14 @@
|
||||
|
||||
var/dat = "<h1>Ore processor console</h1>"
|
||||
|
||||
dat += "Current unclaimed points: [points]<br>"
|
||||
|
||||
if(istype(inserted_id))
|
||||
dat += "You have [inserted_id.mining_points] mining points collected. <A href='?src=\ref[src];choice=eject'>Eject ID.</A><br>"
|
||||
dat += "<A href='?src=\ref[src];choice=claim'>Claim points.</A><br>"
|
||||
else
|
||||
dat += "No ID inserted. <A href='?src=\ref[src];choice=insert'>Insert ID.</A><br>"
|
||||
|
||||
dat += "<hr><table>"
|
||||
|
||||
for(var/ore in machine.ores_processing)
|
||||
@@ -72,6 +85,32 @@
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
if(href_list["choice"])
|
||||
if(istype(inserted_id))
|
||||
if(href_list["choice"] == "eject")
|
||||
inserted_id.loc = loc
|
||||
if(!usr.get_active_hand())
|
||||
usr.put_in_hands(inserted_id)
|
||||
inserted_id = null
|
||||
if(href_list["choice"] == "claim")
|
||||
if(access_mining_station in inserted_id.access)
|
||||
if(points >= 0)
|
||||
inserted_id.mining_points += points
|
||||
if(points != 0)
|
||||
ping( "\The [src] pings, \"Point transfer complete! Transaction total: [points] points!\"" )
|
||||
points = 0
|
||||
else
|
||||
usr << "<span class='warning'>[station_name()]'s mining division is currently indebted to NanoTrasen. Transaction incomplete until debt is cleared.</span>"
|
||||
else
|
||||
usr << "<span class='warning'>Required access not found.</span>"
|
||||
else if(href_list["choice"] == "insert")
|
||||
var/obj/item/weapon/card/id/I = usr.get_active_hand()
|
||||
if(istype(I))
|
||||
usr.drop_item()
|
||||
I.loc = src
|
||||
inserted_id = I
|
||||
else usr << "<span class='warning'>No valid ID.</span>"
|
||||
|
||||
if(href_list["toggle_smelting"])
|
||||
|
||||
var/choice = input("What setting do you wish to use for processing [href_list["toggle_smelting"]]?") as null|anything in list("Smelting","Compressing","Alloying","Nothing")
|
||||
@@ -88,6 +127,10 @@
|
||||
if(href_list["toggle_power"])
|
||||
|
||||
machine.active = !machine.active
|
||||
if(machine.active)
|
||||
machine.icon_state = "furnace"
|
||||
else
|
||||
machine.icon_state = "furnace-off"
|
||||
|
||||
if(href_list["toggle_ores"])
|
||||
|
||||
@@ -100,20 +143,23 @@
|
||||
|
||||
|
||||
/obj/machinery/mineral/processing_unit
|
||||
name = "material processor" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron...
|
||||
name = "industrial smelter" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron... //lol fuk u bay it is
|
||||
icon = 'icons/obj/machines/mining_machines.dmi'
|
||||
icon_state = "furnace"
|
||||
icon_state = "furnace-off"
|
||||
density = 1
|
||||
anchored = 1
|
||||
light_range = 3
|
||||
var/obj/machinery/mineral/input = null
|
||||
var/obj/machinery/mineral/output = null
|
||||
var/obj/machinery/mineral/console = null
|
||||
var/obj/machinery/mineral/processing_unit_console/console = null
|
||||
var/sheets_per_tick = 10
|
||||
var/list/ores_processing[0]
|
||||
var/list/ores_stored[0]
|
||||
var/static/list/alloy_data
|
||||
var/active = 0
|
||||
use_power = 1
|
||||
idle_power_usage = 15
|
||||
active_power_usage = 50
|
||||
|
||||
/obj/machinery/mineral/processing_unit/New()
|
||||
..()
|
||||
@@ -143,6 +189,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/processing_unit/process()
|
||||
..()
|
||||
|
||||
if (!src.output || !src.input) return
|
||||
|
||||
@@ -158,6 +205,8 @@
|
||||
qdel(O)
|
||||
|
||||
if(!active)
|
||||
if(icon_state != "furnace-off")
|
||||
icon_state = "furnace-off"
|
||||
return
|
||||
|
||||
//Process our stored ores and spit out sheets.
|
||||
@@ -197,6 +246,10 @@
|
||||
else
|
||||
var/total
|
||||
for(var/needs_metal in A.requires)
|
||||
if(console)
|
||||
var/ore/Ore = ore_data[needs_metal]
|
||||
console.points += Ore.worth
|
||||
use_power(100)
|
||||
ores_stored[needs_metal] -= A.requires[needs_metal]
|
||||
total += A.requires[needs_metal]
|
||||
total = max(1,round(total*A.product_mod)) //Always get at least one sheet.
|
||||
@@ -216,6 +269,9 @@
|
||||
continue
|
||||
|
||||
for(var/i=0,i<can_make,i+=2)
|
||||
if(console)
|
||||
console.points += O.worth*2
|
||||
use_power(100)
|
||||
ores_stored[metal]-=2
|
||||
sheets+=2
|
||||
new M.stack_type(output.loc)
|
||||
@@ -229,10 +285,16 @@
|
||||
continue
|
||||
|
||||
for(var/i=0,i<can_make,i++)
|
||||
if(console)
|
||||
console.points += O.worth
|
||||
use_power(100)
|
||||
ores_stored[metal]--
|
||||
sheets++
|
||||
new M.stack_type(output.loc)
|
||||
else
|
||||
if(console)
|
||||
console.points -= O.worth*10 //reee wasting our materials!
|
||||
use_power(500)
|
||||
ores_stored[metal]--
|
||||
sheets++
|
||||
new /obj/item/weapon/ore/slag(output.loc)
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/obj/machinery/mineral/rigpress
|
||||
name = "RIG module press"
|
||||
desc = "This machine converts certain items permanently into RIG modules."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "coinpress0"
|
||||
density = 1
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 15
|
||||
active_power_usage = 50
|
||||
var/pressing
|
||||
|
||||
/obj/machinery/mineral/rigpress/update_icon()
|
||||
if(pressing)
|
||||
icon_state = "coinpress1"
|
||||
else
|
||||
icon_state = "coinpress0"
|
||||
|
||||
/obj/machinery/mineral/rigpress/attackby(obj/item/W, mob/user)
|
||||
if(!pressing)
|
||||
var/outcome_path
|
||||
var/list/kinetic_mods
|
||||
var/kineticaccelerator
|
||||
if(istype(W, /obj/item/clothing/glasses/material))
|
||||
outcome_path = /obj/item/rig_module/vision/meson
|
||||
|
||||
if(istype(W, /obj/item/weapon/tank/jetpack))
|
||||
outcome_path = /obj/item/rig_module/maneuvering_jets
|
||||
|
||||
if(istype(W, /obj/item/weapon/mining_scanner))
|
||||
outcome_path = /obj/item/rig_module/device/orescanner
|
||||
|
||||
if(istype(W, /obj/item/weapon/pickaxe/drill))
|
||||
outcome_path = /obj/item/rig_module/device/basicdrill
|
||||
|
||||
if(istype(W, /obj/item/weapon/gun/energy/kinetic_accelerator))
|
||||
outcome_path = /obj/item/rig_module/mounted/kinetic_accelerator
|
||||
var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = W
|
||||
kineticaccelerator = 1
|
||||
for(var/obj/item/borg/upgrade/modkit/kmod in KA.modkits)
|
||||
kinetic_mods += kmod
|
||||
|
||||
if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
|
||||
outcome_path = /obj/item/rig_module/mounted/plasmacutter
|
||||
|
||||
if(istype(W, /obj/item/weapon/pickaxe/diamond))
|
||||
outcome_path = /obj/item/rig_module/device/drill
|
||||
|
||||
if(istype(W, /obj/item/weapon/gun/energy/vaurca/thermaldrill))
|
||||
outcome_path = /obj/item/rig_module/mounted/thermalldrill
|
||||
|
||||
user << "<span class='notice'>You start feeding [W] into \the [src]</span>"
|
||||
if(do_after(user,30))
|
||||
src.visible_message("<span class='notice'>\The [src] begins to print out a modsuit.</span>")
|
||||
pressing = 1
|
||||
update_icon()
|
||||
use_power(500)
|
||||
qdel(W)
|
||||
spawn(300)
|
||||
ping( "\The [src] pings, \"Module successfuly produced!\"" )
|
||||
if(kineticaccelerator)
|
||||
var/obj/item/rig_module/mounted/kinetic_accelerator/KA = new /obj/item/rig_module/mounted/kinetic_accelerator(src.loc)
|
||||
var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/KGUN = KA.gun
|
||||
for(var/obj/item/borg/upgrade/modkit/kmod in kinetic_mods)
|
||||
KGUN.modkits += kmod
|
||||
else
|
||||
new outcome_path(src.loc)
|
||||
use_power(500)
|
||||
pressing = 0
|
||||
update_icon()
|
||||
..()
|
||||
@@ -8,6 +8,9 @@
|
||||
anchored = 1
|
||||
var/obj/machinery/mineral/stacking_machine/machine = null
|
||||
var/machinedir = NORTHEAST
|
||||
use_power = 1
|
||||
idle_power_usage = 15
|
||||
active_power_usage = 50
|
||||
|
||||
/obj/machinery/mineral/stacking_unit_console/New()
|
||||
|
||||
@@ -77,6 +80,9 @@
|
||||
var/list/stack_storage[0]
|
||||
var/list/stack_paths[0]
|
||||
var/stack_amt = 50; // Amount to stack before releassing
|
||||
use_power = 1
|
||||
idle_power_usage = 15
|
||||
active_power_usage = 50
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/New()
|
||||
..()
|
||||
@@ -105,6 +111,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/process()
|
||||
..()
|
||||
if(!console)
|
||||
log_debug("Stacking machine tried to process, but no console has linked itself to it.")
|
||||
qdel(src)
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
icon_state = "unloader"
|
||||
density = 1
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 15
|
||||
active_power_usage = 50
|
||||
var/obj/machinery/mineral/input = null
|
||||
var/obj/machinery/mineral/output = null
|
||||
|
||||
@@ -24,6 +27,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/unloading_machine/process()
|
||||
..()
|
||||
if (src.output && src.input)
|
||||
if (locate(/obj/structure/ore_box, input.loc))
|
||||
var/obj/structure/ore_box/BOX = locate(/obj/structure/ore_box, input.loc)
|
||||
|
||||
@@ -0,0 +1,217 @@
|
||||
//PROGRESSION SYSTEM: Miners start with a basic ass manual pickaxe. They can shortly buy an autodrill, or save up for a /TG/ Kinetic Accelerator.
|
||||
//HARDSUITS: Miners all start with an *empty* industrial hardsuit. Many of the items they can buy here (auto-drill, kinetic accelerator) can be converted into modules
|
||||
// with a special machine.
|
||||
//VENDOR: Obj/item's are immediately dispensed by the vendor. Machines, structures, vehicles, and etc get spawned on the cargo shuttle.
|
||||
//Think up of lots of items. Not everything needs to be unique or even mining-special, but it should be neat. Convert most of /tg/'s items. 25% of this at least
|
||||
// should be bling. Things that shorten the distance between base and mining. Instant-teleporters should be one use.
|
||||
var/global/list/minevendor_list = list( //keep in order of price
|
||||
new /datum/data/mining_equipment("Food Ration", /obj/item/weapon/reagent_containers/food/snacks/liquidfood, 5),
|
||||
new /datum/data/mining_equipment("Poster", /obj/item/weapon/contraband/poster, 20),
|
||||
new /datum/data/mining_equipment("Ore Scanner Pad", /obj/item/weapon/ore_radar, 50),
|
||||
new /datum/data/mining_equipment("5 Red Flags", /obj/item/stack/flag/red, 50),
|
||||
new /datum/data/mining_equipment("5 Green Flags", /obj/item/stack/flag/green, 50),
|
||||
new /datum/data/mining_equipment("5 Yellow Flags", /obj/item/stack/flag/yellow, 50),
|
||||
new /datum/data/mining_equipment("Ore-bag", /obj/item/weapon/storage/bag/ore, 50),
|
||||
new /datum/data/mining_equipment("Meat Pizza", /obj/item/pizzabox/meat, 50),
|
||||
new /datum/data/mining_equipment("Lantern", /obj/item/device/flashlight/lantern, 75),
|
||||
new /datum/data/mining_equipment("Shovel", /obj/item/weapon/shovel, 100),
|
||||
new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack, 100),
|
||||
new /datum/data/mining_equipment("Pickaxe", /obj/item/weapon/pickaxe, 100),
|
||||
new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100),
|
||||
new /datum/data/mining_equipment("Compressed rail cartridge", /obj/item/weapon/rrf_ammo, 100),
|
||||
new /datum/data/mining_equipment("Emergency Floodlight", /obj/item/weapon/floodlight_diy, 150),
|
||||
new /datum/data/mining_equipment("Premium Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 150),
|
||||
new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150),
|
||||
new /datum/data/mining_equipment("Lottery Chip", /obj/item/weapon/spacecash/ewallet/lotto, 200),
|
||||
new /datum/data/mining_equipment("Ripley Paint Kit", /obj/item/device/kit/paint/ripley/random, 200),
|
||||
new /datum/data/mining_equipment("Material Scanners", /obj/item/clothing/glasses/material, 200),
|
||||
new /datum/data/mining_equipment("Mining Drill", /obj/item/weapon/pickaxe/drill, 200),
|
||||
new /datum/data/mining_equipment("Deep Ore Scanner", /obj/item/weapon/mining_scanner, 250),
|
||||
new /datum/data/mining_equipment("Magboots", /obj/item/clothing/shoes/magboots, 300),
|
||||
new /datum/data/mining_equipment("Stimpack Bundle", /obj/item/weapon/storage/box/stims, 300),
|
||||
new /datum/data/mining_equipment("Autochisel", /obj/item/weapon/autochisel, 400),
|
||||
new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack, 400),
|
||||
new /datum/data/mining_equipment("Drone Drill Upgrade", /obj/item/device/mine_bot_ugprade, 400),
|
||||
new /datum/data/mining_equipment("Seismic Charge", /obj/item/weapon/plastique/seismic, 500),
|
||||
new /datum/data/mining_equipment("Industrial Drill Brace", /obj/machinery/mining/brace, 500, 1),
|
||||
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
|
||||
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/weapon/storage/belt/mining, 500),
|
||||
new /datum/data/mining_equipment("Item-Warp Beacon", /obj/item/warp_core, 500),
|
||||
new /datum/data/mining_equipment("Item-Warp Pack", /obj/item/weapon/extraction_pack, 600),
|
||||
new /datum/data/mining_equipment("Drone Health Upgrade", /obj/item/device/mine_bot_ugprade/health, 600),
|
||||
new /datum/data/mining_equipment("Rapid-Railway-Fabricator", /obj/item/weapon/rrf, 600),
|
||||
new /datum/data/mining_equipment("Survival Autoinjector", /obj/item/weapon/reagent_containers/hypospray/autoinjector/survival, 600),
|
||||
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600),
|
||||
new /datum/data/mining_equipment("Ore Magnet", /obj/item/weapon/oremagnet, 600),
|
||||
new /datum/data/mining_equipment("Minecart", /obj/vehicle/train/cargo/trolley/mining, 600, 1),
|
||||
new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 700),
|
||||
new /datum/data/mining_equipment("Mining RIG", /obj/item/weapon/rig/industrial, 750),
|
||||
new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 750),
|
||||
new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 750),
|
||||
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750),
|
||||
new /datum/data/mining_equipment("1000 credits", /obj/item/weapon/spacecash/c1000, 800),
|
||||
new /datum/data/mining_equipment("Mass Driver", /obj/item/weapon/mass_driver_diy, 800),
|
||||
new /datum/data/mining_equipment("Drone Plasma Cutter Upgrade", /obj/item/device/mine_bot_ugprade/plasma, 800),
|
||||
new /datum/data/mining_equipment("Mining Drone", /mob/living/silicon/robot/drone/mining, 800),
|
||||
new /datum/data/mining_equipment("Minecart Engine", /obj/vehicle/train/cargo/engine/mining, 800, 1),
|
||||
new /datum/data/mining_equipment("Ore Summoner", /obj/item/weapon/oreportal, 800),
|
||||
new /datum/data/mining_equipment("Plasma Cutter", /obj/item/weapon/gun/energy/plasmacutter, 900),
|
||||
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
|
||||
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
|
||||
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000),
|
||||
new /datum/data/mining_equipment("Industrial Drill Head", /obj/machinery/mining/drill, 1000, 1),
|
||||
new /datum/data/mining_equipment("Super Resonator", /obj/item/weapon/resonator/upgraded, 1250),
|
||||
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/turfs, 1500),
|
||||
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 1500),
|
||||
new /datum/data/mining_equipment("Drone Thermal Drill Upgrade", /obj/item/device/mine_bot_ugprade/thermal, 2000),
|
||||
new /datum/data/mining_equipment("Thermal Drill", /obj/item/weapon/gun/energy/vaurca/thermaldrill, 2750)
|
||||
)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor
|
||||
name = "mining equipment vendor"
|
||||
desc = "An equipment vendor for miners, points collected at an ore redemption machine can be spent here."
|
||||
icon = 'icons/obj/machines/mining_machines.dmi'
|
||||
icon_state = "mining"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/obj/item/weapon/card/id/inserted_id
|
||||
|
||||
/datum/data/mining_equipment
|
||||
var/equipment_name = "generic"
|
||||
var/equipment_path = null
|
||||
var/cost = 0
|
||||
var/shuttle
|
||||
|
||||
/datum/data/mining_equipment/New(name, path, cost, shuttle)
|
||||
src.equipment_name = name
|
||||
src.equipment_path = path
|
||||
src.cost = cost
|
||||
src.shuttle = shuttle
|
||||
|
||||
/obj/item/weapon/circuitboard/machine/mining_equipment_vendor
|
||||
name = "circuit board (Mining Equipment Vendor)"
|
||||
build_path = /obj/machinery/mineral/equipment_vendor
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 3)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/update_icon()
|
||||
if(powered())
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-off"
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/interact(mob/user)
|
||||
var/dat
|
||||
dat +="<div class='statusDisplay'>"
|
||||
if(istype(inserted_id))
|
||||
dat += "You have [inserted_id.mining_points] mining points collected. <A href='?src=\ref[src];choice=eject'>Eject ID.</A><br>"
|
||||
else
|
||||
dat += "No ID inserted. <A href='?src=\ref[src];choice=insert'>Insert ID.</A><br>"
|
||||
dat += "</div>"
|
||||
dat += "<br><b>Equipment point cost list:</b><BR><table border='0' width='300'>"
|
||||
for(var/datum/data/mining_equipment/prize in minevendor_list)
|
||||
dat += "<tr><td>[prize.equipment_name]</td><td>[prize.cost]</td><td><A href='?src=\ref[src];purchase=\ref[prize]'>Purchase</A></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(href_list["choice"])
|
||||
if(istype(inserted_id))
|
||||
if(href_list["choice"] == "eject")
|
||||
inserted_id.loc = loc
|
||||
if(!usr.get_active_hand())
|
||||
usr.put_in_hands(inserted_id)
|
||||
inserted_id = null
|
||||
else if(href_list["choice"] == "insert")
|
||||
var/obj/item/weapon/card/id/I = usr.get_active_hand()
|
||||
if(istype(I))
|
||||
usr.drop_item()
|
||||
I.loc = src
|
||||
inserted_id = I
|
||||
else usr << "<span class='danger'>No valid ID.</span>"
|
||||
if(href_list["purchase"])
|
||||
if(istype(inserted_id))
|
||||
var/datum/data/mining_equipment/prize = locate(href_list["purchase"])
|
||||
if (!prize || !(prize in minevendor_list))
|
||||
return
|
||||
if(prize.cost > inserted_id.mining_points)
|
||||
else
|
||||
if(prize.shuttle)
|
||||
var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
|
||||
if(shuttle)
|
||||
var/area/area_shuttle = shuttle.get_location_area()
|
||||
if(!area_shuttle)
|
||||
usr << "<span class='danger'>{ERR Code: NO_SHUTTLE} Order failed! Please try again.</span>"
|
||||
return
|
||||
|
||||
|
||||
var/list/clear_turfs = list()
|
||||
|
||||
for(var/turf/T in area_shuttle)
|
||||
if(T.density) continue
|
||||
var/contcount
|
||||
for(var/atom/A in T.contents)
|
||||
if(!A.simulated)
|
||||
continue
|
||||
contcount++
|
||||
if(contcount)
|
||||
continue
|
||||
clear_turfs += T
|
||||
|
||||
if(!clear_turfs.len)
|
||||
usr << "<span class='danger'>{ERR Code: NO_SHUTTLE_SPACE} Order failed! Please try again.</span>"
|
||||
return
|
||||
|
||||
var/i = rand(1,clear_turfs.len)
|
||||
var/turf/pickedloc = clear_turfs[i]
|
||||
|
||||
if(pickedloc)
|
||||
inserted_id.mining_points -= prize.cost
|
||||
new prize.equipment_path(pickedloc)
|
||||
usr << "<span class='danger'>Order passed. Your order has been placed on the next available supply shuttle.</span>"
|
||||
else
|
||||
usr << "<span class='danger'>{ERR Code: NO_SHUTTLE_SPACE} Order failed! Please try again.</span>"
|
||||
return
|
||||
else
|
||||
usr << "<span class='danger'>{ERR Code: NO_SHUTTLE} Order failed! Please try again.</span>"
|
||||
return
|
||||
else
|
||||
inserted_id.mining_points -= prize.cost
|
||||
new prize.equipment_path(src.loc)
|
||||
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I,/obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/C = usr.get_active_hand()
|
||||
if(istype(C) && !istype(inserted_id))
|
||||
usr.drop_item()
|
||||
C.loc = src
|
||||
inserted_id = C
|
||||
interact(user)
|
||||
return
|
||||
if(default_deconstruction_screwdriver(user, "mining-open", "mining", I))
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
return ..()
|
||||
@@ -25,9 +25,7 @@
|
||||
var/datum/geosample/geologic_data
|
||||
var/excavation_level = 0
|
||||
var/list/finds
|
||||
var/next_rock = 0
|
||||
var/archaeo_overlay = ""
|
||||
var/excav_overlay = ""
|
||||
var/obj/item/weapon/last_find
|
||||
var/datum/artifact_find/artifact_find
|
||||
|
||||
@@ -49,12 +47,36 @@
|
||||
else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor))
|
||||
turf_to_check.overlays += image('icons/turf/walls.dmi', "rock_side", dir = turn(step_overlays[direction], 180))
|
||||
|
||||
/turf/simulated/mineral/examine(mob/user)
|
||||
..()
|
||||
if(mineral)
|
||||
switch(mined_ore)
|
||||
if(0)
|
||||
user << "<span class='info'>It is ripe with [mineral.display_name].</span>"
|
||||
if(1)
|
||||
user << "<span class='info'>Its [mineral.display_name] looks a little depleted.</span>"
|
||||
if(2)
|
||||
user << "<span class='warning'>Its [mineral.display_name] looks very depleted!</span>"
|
||||
else
|
||||
user << "<span class='info'>It is devoid of any valuable minerals.</span>"
|
||||
switch(emitter_blasts_taken)
|
||||
if(0)
|
||||
user << "<span class='info'>It is in pristine condition.</span>"
|
||||
if(1)
|
||||
user << "<span class='info'>It appears a little damaged.</span>"
|
||||
if(2)
|
||||
user << "<span class='warning'>It is crumbling!</span>"
|
||||
if(3)
|
||||
user << "<span class='danger'>It looks ready to collapse at any moment!</span>"
|
||||
|
||||
/turf/simulated/mineral/ex_act(severity)
|
||||
switch(severity)
|
||||
if(2.0)
|
||||
if (prob(70))
|
||||
mined_ore = 1 //some of the stuff gets blown up
|
||||
GetDrilled()
|
||||
else
|
||||
emitter_blasts_taken += 2
|
||||
if(1.0)
|
||||
mined_ore = 2 //some of the stuff gets blown up
|
||||
GetDrilled()
|
||||
@@ -65,18 +87,22 @@
|
||||
if(istype(Proj, /obj/item/projectile/beam/emitter))
|
||||
emitter_blasts_taken++
|
||||
|
||||
if(emitter_blasts_taken > 2) // 3 blasts per tile
|
||||
mined_ore = 1
|
||||
GetDrilled()
|
||||
if(emitter_blasts_taken > 2) // 3 blasts per tile
|
||||
GetDrilled()
|
||||
|
||||
/turf/simulated/mineral/Bumped(AM)
|
||||
. = ..()
|
||||
if(istype(AM,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand))
|
||||
attackby(H.l_hand,H)
|
||||
var/obj/item/weapon/pickaxe/P = H.l_hand
|
||||
if(P.autodrill)
|
||||
attackby(H.l_hand,H)
|
||||
|
||||
else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand)
|
||||
attackby(H.r_hand,H)
|
||||
var/obj/item/weapon/pickaxe/P = H.r_hand
|
||||
if(P.autodrill)
|
||||
attackby(H.r_hand,H)
|
||||
|
||||
else if(istype(AM,/mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = AM
|
||||
@@ -141,9 +167,14 @@
|
||||
var/obj/item/weapon/pickaxe/P = W
|
||||
if(last_act + P.digspeed > world.time)//prevents message spam
|
||||
return
|
||||
|
||||
if(P.drilling)
|
||||
return
|
||||
|
||||
last_act = world.time
|
||||
|
||||
playsound(user, P.drill_sound, 20, 1)
|
||||
P.drilling = 1
|
||||
|
||||
//handle any archaeological finds we might uncover
|
||||
var/fail_message
|
||||
@@ -153,7 +184,8 @@
|
||||
//Chance to destroy / extract any finds here
|
||||
fail_message = ". <b>[pick("There is a crunching noise","[W] collides with some different rock","Part of the rock face crumbles away","Something breaks under [W]")]</b>"
|
||||
|
||||
user << "\red You start [P.drill_verb][fail_message ? fail_message : ""]."
|
||||
if(fail_message)
|
||||
user << "<span class='warning'>You start [P.drill_verb][fail_message ? fail_message : ""].</span>"
|
||||
|
||||
if(fail_message && prob(90))
|
||||
if(prob(25))
|
||||
@@ -164,7 +196,19 @@
|
||||
artifact_debris()
|
||||
|
||||
if(do_after(user,P.digspeed))
|
||||
user << "\blue You finish [P.drill_verb] the rock."
|
||||
P.drilling = 0
|
||||
|
||||
if(prob(50))
|
||||
var/obj/item/weapon/ore/O
|
||||
if(prob(25) && (mineral) && (P.excavation_amount >= 30))
|
||||
O = new mineral.ore (src)
|
||||
else
|
||||
O = new /obj/item/weapon/ore(src)
|
||||
if(istype(O))
|
||||
geologic_data.UpdateNearbyArtifactInfo(src)
|
||||
O.geologic_data = geologic_data
|
||||
spawn(1)
|
||||
O.forceMove(user.loc)
|
||||
|
||||
if(finds && finds.len)
|
||||
var/datum/find/F = finds[1]
|
||||
@@ -210,31 +254,27 @@
|
||||
archaeo_overlay = "overlay_archaeo[rand(1,3)]"
|
||||
overlays += archaeo_overlay
|
||||
|
||||
//there's got to be a better way to do this
|
||||
var/update_excav_overlay = 0
|
||||
if(excavation_level >= 75)
|
||||
if(excavation_level - P.excavation_amount < 75)
|
||||
update_excav_overlay = 1
|
||||
else if(excavation_level >= 50)
|
||||
if(excavation_level - P.excavation_amount < 50)
|
||||
update_excav_overlay = 1
|
||||
else if(excavation_level >= 25)
|
||||
if(excavation_level - P.excavation_amount < 25)
|
||||
update_excav_overlay = 1
|
||||
else
|
||||
user << "<span class='notice'> You stop [P.drill_verb] the rock.</span>"
|
||||
P.drilling = 0
|
||||
|
||||
//update overlays displaying excavation level
|
||||
if( !(excav_overlay && excavation_level > 0) || update_excav_overlay )
|
||||
var/excav_quadrant = round(excavation_level / 25) + 1
|
||||
excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]"
|
||||
overlays += excav_overlay
|
||||
if (istype(W, /obj/item/weapon/autochisel))
|
||||
|
||||
if(last_act + 80 > world.time)//prevents message spam
|
||||
return
|
||||
last_act = world.time
|
||||
|
||||
user << "<span class='warning'>You start chiselling [src] into a sculptable block.</span>"
|
||||
|
||||
|
||||
|
||||
if(!do_after(user,80))
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You finish chiselling [src] into a sculptable block.</span>"
|
||||
new /obj/structure/sculpting_block(src)
|
||||
GetDrilled(1)
|
||||
|
||||
//drop some rocks
|
||||
next_rock += P.excavation_amount * 10
|
||||
while(next_rock > 100)
|
||||
next_rock -= 100
|
||||
var/obj/item/weapon/ore/O = new(src)
|
||||
geologic_data.UpdateNearbyArtifactInfo(src)
|
||||
O.geologic_data = geologic_data
|
||||
|
||||
else
|
||||
return attack_hand(user)
|
||||
@@ -296,6 +336,9 @@
|
||||
for(var/next_direction in step_overlays)
|
||||
if(istype(get_step(T, step_overlays[next_direction]),/turf/simulated/mineral))
|
||||
T.overlays += image('icons/turf/walls.dmi', "rock_side", dir = step_overlays[next_direction])
|
||||
var/turf/simulated/open/O = get_step(src, step_overlays[direction])
|
||||
if(istype(O))
|
||||
O.update()
|
||||
|
||||
if(rand(1,500) == 1)
|
||||
visible_message("<span class='notice'>An old dusty crate was buried within!</span>")
|
||||
@@ -375,16 +418,16 @@
|
||||
/turf/simulated/mineral/random
|
||||
name = "Mineral deposit"
|
||||
var/mineralSpawnChanceList = list(
|
||||
ORE_URANIUM = 5,
|
||||
ORE_PLATINUM = 5,
|
||||
ORE_IRON = 35,
|
||||
ORE_COAL = 35,
|
||||
ORE_DIAMOND = 1,
|
||||
ORE_GOLD = 5,
|
||||
ORE_SILVER = 5,
|
||||
ORE_PHORON = 10
|
||||
ORE_URANIUM = 2,
|
||||
ORE_PLATINUM = 2,
|
||||
ORE_IRON = 8,
|
||||
ORE_COAL = 8,
|
||||
ORE_DIAMOND = 1,
|
||||
ORE_GOLD = 2,
|
||||
ORE_SILVER = 2,
|
||||
ORE_PHORON = 5
|
||||
)
|
||||
var/mineralChance = 10 //means 10% chance of this plot changing to a mineral deposit
|
||||
var/mineralChance = 45
|
||||
|
||||
/turf/simulated/mineral/random/New()
|
||||
if (prob(mineralChance) && !mineral)
|
||||
@@ -395,18 +438,46 @@
|
||||
|
||||
. = ..()
|
||||
|
||||
/turf/simulated/mineral/random/high_chance
|
||||
mineralChance = 25
|
||||
/turf/simulated/mineral/random/low_chance
|
||||
name = "Mineral deposit"
|
||||
mineralSpawnChanceList = list(
|
||||
ORE_URANIUM = 10,
|
||||
ORE_PLATINUM = 10,
|
||||
ORE_IRON = 20,
|
||||
ORE_COAL = 20,
|
||||
ORE_DIAMOND = 2,
|
||||
ORE_GOLD = 10,
|
||||
ORE_SILVER = 10,
|
||||
ORE_PHORON = 20
|
||||
ORE_URANIUM = 0,
|
||||
ORE_PLATINUM = 0,
|
||||
ORE_IRON = 2,
|
||||
ORE_COAL = 3,
|
||||
ORE_DIAMOND = 0,
|
||||
ORE_GOLD = 0,
|
||||
ORE_SILVER = 0,
|
||||
ORE_PHORON = 1
|
||||
)
|
||||
mineralChance = 5
|
||||
|
||||
/turf/simulated/mineral/random/high_chance
|
||||
mineralSpawnChanceList = list(
|
||||
ORE_URANIUM = 2,
|
||||
ORE_PLATINUM = 2,
|
||||
ORE_IRON = 2,
|
||||
ORE_COAL = 2,
|
||||
ORE_DIAMOND = 1,
|
||||
ORE_GOLD = 2,
|
||||
ORE_SILVER = 2,
|
||||
ORE_PHORON = 3
|
||||
)
|
||||
mineralChance = 50
|
||||
|
||||
/turf/simulated/mineral/random/higher_chance
|
||||
mineralSpawnChanceList = list(
|
||||
ORE_URANIUM = 3,
|
||||
ORE_PLATINUM = 3,
|
||||
ORE_IRON = 1,
|
||||
ORE_COAL = 1,
|
||||
ORE_DIAMOND = 1,
|
||||
ORE_GOLD = 3,
|
||||
ORE_SILVER = 3,
|
||||
ORE_PHORON = 2
|
||||
)
|
||||
mineralChance = 45
|
||||
|
||||
|
||||
|
||||
/**********************Asteroid**************************/
|
||||
@@ -426,14 +497,13 @@
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
|
||||
var/dug = 0 //Increments by 1 everytime it's dug. 11 is the last integer that should ever be here.
|
||||
var/overlay_detail
|
||||
var/static/list/overlay_cache
|
||||
has_resources = 1
|
||||
footstep_sound = "gravelstep"
|
||||
|
||||
/turf/simulated/floor/asteroid/New()
|
||||
|
||||
if(prob(20))
|
||||
overlay_detail = rand(0,9)
|
||||
|
||||
@@ -443,9 +513,18 @@
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(70))
|
||||
dug += rand(4,10)
|
||||
gets_dug()
|
||||
else
|
||||
dug += rand(1,3)
|
||||
gets_dug()
|
||||
if(1.0)
|
||||
gets_dug()
|
||||
if(prob(30))
|
||||
dug = 11
|
||||
gets_dug()
|
||||
else
|
||||
dug += rand(4,11)
|
||||
gets_dug()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/asteroid/is_plating()
|
||||
@@ -496,20 +575,58 @@
|
||||
break
|
||||
|
||||
if(valid_tool)
|
||||
if (dug)
|
||||
user << "\red This area has already been dug"
|
||||
return
|
||||
|
||||
var/turf/T = user.loc
|
||||
if (!(istype(T)))
|
||||
return
|
||||
|
||||
user << "\red You start digging."
|
||||
playsound(user.loc, 'sound/effects/rustle1.ogg', 50, 1)
|
||||
if (dug)
|
||||
if(!GetBelow(src))
|
||||
return
|
||||
user << "<span class='warning'> You start digging deeper.</span>"
|
||||
playsound(user.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
|
||||
if(!do_after(user,60))
|
||||
return
|
||||
playsound(user.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
|
||||
if(prob(33))
|
||||
switch(dug)
|
||||
if(1)
|
||||
user << "<span class='notice'> You've made a little progress.</span>"
|
||||
if(2)
|
||||
user << "<span class='notice'> You notice the hole is a little deeper.</span>"
|
||||
if(3)
|
||||
user << "<span class='notice'> You think you're about halfway there.</span>"
|
||||
if(4)
|
||||
user << "<span class='notice'> You finish up lifting another pile of dirt.</span>"
|
||||
if(5)
|
||||
user << "<span class='notice'> You dig a bit deeper. You're definitely halfway there now.</span>"
|
||||
if(6)
|
||||
user << "<span class='notice'> You still have a ways to go.</span>"
|
||||
if(7)
|
||||
user << "<span class='notice'> The hole looks pretty deep now.</span>"
|
||||
if(8)
|
||||
user << "<span class='notice'> The ground is starting to feel a lot looser.</span>"
|
||||
if(9)
|
||||
user << "<span class='notice'> You can almost see the other side.</span>"
|
||||
if(10)
|
||||
user << "<span class='notice'> Just a little deeper. . .</span>"
|
||||
else
|
||||
user << "<span class='notice'> You penetrate the virgin earth!</span>"
|
||||
else
|
||||
if(dug <= 10)
|
||||
user << "<span class='notice'> You dig a little deeper.</span>"
|
||||
else
|
||||
user << "<span class='notice'> You dug a big hole.</span>"
|
||||
|
||||
if(!do_after(user,40)) return
|
||||
gets_dug()
|
||||
return
|
||||
|
||||
user << "\blue You dug a hole."
|
||||
user << "<span class='warning'> You start digging.</span>"
|
||||
playsound(user.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
|
||||
|
||||
if(!do_after(user,40))
|
||||
return
|
||||
|
||||
user << "<span class='notice'> You dug a hole.</span>"
|
||||
gets_dug()
|
||||
|
||||
else if(istype(W,/obj/item/weapon/storage/bag/ore))
|
||||
@@ -531,14 +648,34 @@
|
||||
|
||||
/turf/simulated/floor/asteroid/proc/gets_dug()
|
||||
|
||||
if(dug)
|
||||
return
|
||||
|
||||
for(var/i=0;i<(rand(3)+2);i++)
|
||||
new/obj/item/weapon/ore/glass(src)
|
||||
|
||||
dug = 1
|
||||
icon_state = "asteroid_dug"
|
||||
|
||||
new/obj/item/weapon/ore/glass(src)
|
||||
|
||||
if(prob(50))
|
||||
var/list/ore = list(/obj/item/weapon/ore/coal = 8,
|
||||
/obj/item/weapon/ore/iron = 6,
|
||||
/obj/item/weapon/ore/phoron = 3,
|
||||
/obj/item/weapon/ore/silver = 3,
|
||||
/obj/item/weapon/ore/gold = 2,
|
||||
/obj/item/weapon/ore/osmium = 3,
|
||||
/obj/item/weapon/ore/hydrogen = 2,
|
||||
/obj/item/weapon/ore/uranium = 1,
|
||||
/obj/random/junk = 1,
|
||||
/obj/item/weapon/ore/diamond = 0.5,
|
||||
/obj/random/powercell = 0.2,
|
||||
/obj/random/coin = 0.2,
|
||||
/obj/random/loot = 0.1,
|
||||
/obj/random/action_figure = 0.1)
|
||||
var/ore_path = pickweight(ore)
|
||||
if(ore)
|
||||
new ore_path(src)
|
||||
user << "<span class='notice'>You unearth something amidst the sand!</span>"
|
||||
|
||||
if(dug <= 10)
|
||||
dug += 1
|
||||
else
|
||||
ChangeTurf(/turf/space)
|
||||
return
|
||||
|
||||
/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors)
|
||||
@@ -560,7 +697,7 @@
|
||||
for (var/i = 1; i <= overlay_cache.len; i++)
|
||||
overlay_cache[i] = image('icons/turf/flooring/decals.dmi', "asteroid[i - 1]")
|
||||
|
||||
if(overlay_detail)
|
||||
if(overlay_detail)
|
||||
overlays += overlay_cache[overlay_detail + 1]
|
||||
|
||||
if(update_neighbors)
|
||||
|
||||
@@ -0,0 +1,242 @@
|
||||
/mob/living/silicon/robot/drone/mining
|
||||
icon_state = "miningdrone"
|
||||
law_type = /datum/ai_laws/mining_drone
|
||||
module_type = /obj/item/weapon/robot_module/mining_drone/basic
|
||||
holder_type = /obj/item/weapon/holder/drone/mining
|
||||
maxHealth = 45
|
||||
health = 45
|
||||
pass_flags = PASSTABLE
|
||||
req_access = list(access_mining, access_robotics)
|
||||
idcard_type = /obj/item/weapon/card/id/synthetic/minedrone
|
||||
speed = -1
|
||||
var/health_upgrade
|
||||
var/ranged_upgrade
|
||||
var/melee_upgrade
|
||||
var/drill_upgrade
|
||||
|
||||
/mob/living/silicon/robot/drone/mining/New()
|
||||
|
||||
..()
|
||||
|
||||
verbs += /mob/living/proc/hide
|
||||
remove_language("Robot Talk")
|
||||
add_language("Drone Talk", 1)
|
||||
|
||||
//They are unable to be upgraded, so let's give them a bit of a better battery.
|
||||
cell.maxcharge = 10000
|
||||
cell.charge = 10000
|
||||
|
||||
// NO BRAIN.
|
||||
mmi = null
|
||||
|
||||
//We need to screw with their HP a bit. They have around one fifth as much HP as a full borg.
|
||||
for(var/V in components) if(V != "power cell")
|
||||
var/datum/robot_component/C = components[V]
|
||||
C.max_damage = 15
|
||||
|
||||
verbs -= /mob/living/silicon/robot/verb/Namepick
|
||||
verbs -= /mob/living/silicon/robot/drone/verb/set_mail_tag
|
||||
updateicon()
|
||||
density = 0
|
||||
|
||||
/mob/living/silicon/robot/drone/mining/updatename()
|
||||
real_name = "NT-I-[rand(100,999)]"
|
||||
name = real_name
|
||||
|
||||
/mob/living/silicon/robot/drone/mining/init()
|
||||
aiCamera = new/obj/item/device/camera/siliconcam/drone_camera(src)
|
||||
additional_law_channels["Drone"] = ":d"
|
||||
if(!laws) laws = new law_type
|
||||
if(!module) module = new module_type(src)
|
||||
|
||||
flavor_text = "It's a tiny little mining drone. The casing is stamped with an corporate logo and the subscript: '[company_name] Automated Pickaxe!'"
|
||||
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
|
||||
|
||||
/mob/living/silicon/robot/drone/mining/welcome_drone()
|
||||
src << "<b>You are a mining drone, a tiny-brained robotic industrial machine</b>."
|
||||
src << "You have little individual will, some personality, and no drives or urges other than your laws and the art of mining."
|
||||
src << "Remember, <b>you DO NOT take orders from the AI.</b>"
|
||||
src << "Use <b>say ;Hello</b> to talk to other drones and <b>say Hello</b> to speak silently to your nearby fellows."
|
||||
|
||||
/mob/living/silicon/robot/drone/mining/attackby(var/obj/item/weapon/W, var/mob/user)
|
||||
|
||||
if(istype(W, /obj/item/borg/upgrade/))
|
||||
user << "<span class='danger'>\The [src] is not compatible with \the [W].</span>"
|
||||
return
|
||||
|
||||
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
|
||||
if(stat == 2)
|
||||
|
||||
var/choice = input("Look at your icon - is this what you want?") in list("Reboot","Recycle")
|
||||
if(choice=="Reboot")
|
||||
|
||||
if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave.
|
||||
user << "<span class='danger'>The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.</span>"
|
||||
return
|
||||
|
||||
if(!allowed(usr))
|
||||
user << "<span class='danger'>Access denied.</span>"
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] swipes \his ID card through \the [src], attempting to reboot it.</span>", "<span class='danger'>>You swipe your ID card through \the [src], attempting to reboot it.</span>")
|
||||
request_player()
|
||||
return
|
||||
|
||||
else
|
||||
var/obj/item/weapon/card/id/ID = W
|
||||
if(!allowed(usr))
|
||||
user << "<span class='danger'>Access denied.</span>"
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] swipes \his ID card through \the [src], recycling it into points.</span>", "<span class='danger'>>You swipe your ID card through \the [src], recycling it into points.</span>")
|
||||
ID.mining_points += 800
|
||||
if(health_upgrade)
|
||||
ID.mining_points += 600
|
||||
health_upgrade = 0
|
||||
if(ranged_upgrade)
|
||||
ID.mining_points += 600
|
||||
ranged_upgrade = 0
|
||||
if(melee_upgrade)
|
||||
ID.mining_points += 400
|
||||
melee_upgrade = 0
|
||||
if(drill_upgrade)
|
||||
ID.mining_points += 2000
|
||||
drill_upgrade = 0
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
else
|
||||
user.visible_message("<span class='danger'>\The [user] swipes \his ID card through \the [src], attempting to shut it down.</span>", "<span class='danger'>You swipe your ID card through \the [src], attempting to shut it down.</span>")
|
||||
|
||||
if(emagged)
|
||||
return
|
||||
|
||||
if(allowed(usr))
|
||||
shut_down()
|
||||
else
|
||||
user << "<span class='danger'>Access denied.</span>"
|
||||
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/mob/living/silicon/robot/drone/mining/verb/print_report()
|
||||
set name = "Print Message"
|
||||
set desc = "Print out a status report of your own choosing."
|
||||
set category = "Robot Commands"
|
||||
|
||||
var/input = sanitize(input(usr, "Please enter a message to print out. NOTE: BBCode does not work.", "Print readout", "") as message|null)
|
||||
if (!input)
|
||||
usr << "<span class='warning'>Cancelled.</span>"
|
||||
return
|
||||
|
||||
var/customname = input(usr, "Pick a title for the report", "Title") as text|null
|
||||
if (!customname)
|
||||
usr << "<span class='warning'>Cancelled.</span>"
|
||||
return
|
||||
|
||||
var/status_report
|
||||
switch(src.health)
|
||||
if((maxHealth - (maxHealth/3)) to maxHealth)
|
||||
status_report = "All systems nominal."
|
||||
if((maxHealth/3) to maxHealth/2)
|
||||
status_report = "Systems compromised."
|
||||
if(0 to (maxHealth/3))
|
||||
status_report = "Systems failing."
|
||||
else
|
||||
status_report = "System status unknown."
|
||||
|
||||
// Create the reply message
|
||||
usr << "<span class='warning'>You begin printing the message.</span>"
|
||||
if(do_after(src,20))
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc)
|
||||
P.name = "mining report - [customname]"
|
||||
P.info = {"<center><img src = ntlogo.png></center>
|
||||
<center><b><i>NanoTrasen Mining Drone Report</b></i><br>
|
||||
<font size = \"1\">FOR YOUR EYES ONLY</font><hr><br>
|
||||
<font size = \"1\"><font face='Courier New'>[input]</font></font><hr>
|
||||
<font size = \"1\">[status_report]</font><br>
|
||||
<center><img src = barcode[rand(0, 3)].png></center></center>"}
|
||||
P.update_icon()
|
||||
visible_message("\icon[src] <span class = 'notice'>The [usr] pings, \"[P.name] ready for review\", and happily disgorges a small printout.</span>", 2)
|
||||
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
|
||||
/**********************Minebot Upgrades**********************/
|
||||
|
||||
/obj/item/device/mine_bot_ugprade
|
||||
name = "minebot drill upgrade"
|
||||
desc = "A minebot upgrade."
|
||||
icon_state = "mainboard"
|
||||
icon = 'icons/obj/module.dmi'
|
||||
|
||||
/obj/item/device/mine_bot_ugprade/afterattack(var/mob/living/silicon/robot/drone/mining/M, mob/user, proximity)
|
||||
if(!istype(M) || !proximity)
|
||||
return
|
||||
upgrade_bot(M, user)
|
||||
|
||||
/obj/item/device/mine_bot_ugprade/proc/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
|
||||
if(M.melee_upgrade)
|
||||
user << "[src] already has a drill upgrade installed!"
|
||||
return
|
||||
M.modtype = initial(M.modtype)
|
||||
M.uneq_all()
|
||||
qdel(M.module)
|
||||
M.module = null
|
||||
if(M.ranged_upgrade)
|
||||
new /obj/item/weapon/robot_module/mining_drone/drillandplasmacutter(M)
|
||||
else
|
||||
new /obj/item/weapon/robot_module/mining_drone/drill(M)
|
||||
M.module.rebuild()
|
||||
M.recalculate_synth_capacities()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/device/mine_bot_ugprade/health
|
||||
name = "minebot chassis upgrade"
|
||||
|
||||
/obj/item/device/mine_bot_ugprade/health/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
|
||||
if(M.health_upgrade)
|
||||
user << "[src] already has a reinforced chassis!"
|
||||
return
|
||||
M.maxHealth = 100
|
||||
M.health += 55
|
||||
for(var/V in M.components) if(V != "power cell")
|
||||
var/datum/robot_component/C = M.components[V]
|
||||
C.max_damage = 30
|
||||
M.health_upgrade = 1
|
||||
qdel(src)
|
||||
|
||||
/obj/item/device/mine_bot_ugprade/plasma
|
||||
name = "minebot plasma cutter upgrade"
|
||||
|
||||
/obj/item/device/mine_bot_ugprade/plasma/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
|
||||
if(M.ranged_upgrade)
|
||||
user << "[src] already has a plasma cutter upgrade installed!"
|
||||
return
|
||||
M.modtype = initial(M.modtype)
|
||||
M.uneq_all()
|
||||
qdel(M.module)
|
||||
M.module = null
|
||||
if(M.melee_upgrade)
|
||||
new /obj/item/weapon/robot_module/mining_drone/drillandplasmacutter(M)
|
||||
else
|
||||
new /obj/item/weapon/robot_module/mining_drone/plasmacutter(M)
|
||||
M.ranged_upgrade = 1
|
||||
M.module.rebuild()
|
||||
M.recalculate_synth_capacities()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/device/mine_bot_ugprade/thermal
|
||||
name = "minebot thermal drill upgrade"
|
||||
|
||||
/obj/item/device/mine_bot_ugprade/thermal/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
|
||||
if(M.drill_upgrade)
|
||||
user << "[src] already has a thermal drill!"
|
||||
return
|
||||
if(M.emagged == 1)
|
||||
return 0
|
||||
|
||||
M.emagged = 1
|
||||
M.fakeemagged = 1
|
||||
M.drill_upgrade = 1
|
||||
qdel(src)
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/ore
|
||||
name = "rock"
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "ore2"
|
||||
icon_state = "ore1"
|
||||
w_class = 2
|
||||
var/datum/geosample/geologic_data
|
||||
var/material
|
||||
@@ -10,25 +10,25 @@
|
||||
name = "pitchblende"
|
||||
icon_state = "ore_uranium"
|
||||
origin_tech = list(TECH_MATERIAL = 5)
|
||||
material = "uranium"
|
||||
material = ORE_URANIUM
|
||||
|
||||
/obj/item/weapon/ore/iron
|
||||
name = "hematite"
|
||||
icon_state = "ore_iron"
|
||||
origin_tech = list(TECH_MATERIAL = 1)
|
||||
material = "hematite"
|
||||
material = ORE_IRON
|
||||
|
||||
/obj/item/weapon/ore/coal
|
||||
name = "raw carbon"
|
||||
icon_state = "ore_coal"
|
||||
origin_tech = list(TECH_MATERIAL = 1)
|
||||
material = "carbon"
|
||||
material = ORE_COAL
|
||||
|
||||
/obj/item/weapon/ore/glass
|
||||
name = "sand"
|
||||
icon_state = "ore_glass"
|
||||
origin_tech = list(TECH_MATERIAL = 1)
|
||||
material = "sand"
|
||||
material = ORE_SAND
|
||||
slot_flags = SLOT_HOLSTER
|
||||
|
||||
// POCKET SAND!
|
||||
@@ -46,36 +46,36 @@
|
||||
/obj/item/weapon/ore/phoron
|
||||
name = "phoron crystals"
|
||||
icon_state = "ore_phoron"
|
||||
origin_tech = list(TECH_MATERIAL = 2)
|
||||
material = "phoron"
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_PHORON = 2)
|
||||
material = ORE_PHORON
|
||||
|
||||
/obj/item/weapon/ore/silver
|
||||
name = "native silver ore"
|
||||
icon_state = "ore_silver"
|
||||
origin_tech = list(TECH_MATERIAL = 3)
|
||||
material = "silver"
|
||||
material = ORE_SILVER
|
||||
|
||||
/obj/item/weapon/ore/gold
|
||||
name = "native gold ore"
|
||||
icon_state = "ore_gold"
|
||||
origin_tech = list(TECH_MATERIAL = 4)
|
||||
material = "gold"
|
||||
material = ORE_GOLD
|
||||
|
||||
/obj/item/weapon/ore/diamond
|
||||
name = "diamonds"
|
||||
icon_state = "ore_diamond"
|
||||
origin_tech = list(TECH_MATERIAL = 6)
|
||||
material = "diamond"
|
||||
material = ORE_DIAMOND
|
||||
|
||||
/obj/item/weapon/ore/osmium
|
||||
name = "raw platinum"
|
||||
icon_state = "ore_platinum"
|
||||
material = "platinum"
|
||||
material = ORE_PLATINUM
|
||||
|
||||
/obj/item/weapon/ore/hydrogen
|
||||
name = "raw hydrogen"
|
||||
icon_state = "ore_hydrogen"
|
||||
material = "mhydrogen"
|
||||
material = ORE_HYDROGEN
|
||||
|
||||
/obj/item/weapon/ore/slag
|
||||
name = "Slag"
|
||||
@@ -86,6 +86,8 @@
|
||||
/obj/item/weapon/ore/New()
|
||||
pixel_x = rand(0,16)-8
|
||||
pixel_y = rand(0,8)-8
|
||||
if(icon_state == "ore1")
|
||||
icon_state = "ore[pick(1,2,3)]"
|
||||
|
||||
/obj/item/weapon/ore/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/device/core_sampler))
|
||||
|
||||
@@ -17,6 +17,7 @@ var/global/list/ore_data = list()
|
||||
"million" = 999
|
||||
)
|
||||
var/xarch_source_mineral = "iron"
|
||||
var/worth = 0 // Arbitrary point value for the ore redemption console
|
||||
|
||||
/ore/New()
|
||||
. = ..()
|
||||
@@ -28,7 +29,7 @@ var/global/list/ore_data = list()
|
||||
display_name = "pitchblende"
|
||||
smelts_to = "uranium"
|
||||
result_amount = 5
|
||||
spread_chance = 10
|
||||
spread_chance = 15
|
||||
ore = /obj/item/weapon/ore/uranium
|
||||
scan_icon = "mineral_uncommon"
|
||||
xarch_ages = list(
|
||||
@@ -36,6 +37,7 @@ var/global/list/ore_data = list()
|
||||
"million" = 704
|
||||
)
|
||||
xarch_source_mineral = "potassium"
|
||||
worth = 25
|
||||
|
||||
/ore/hematite
|
||||
name = ORE_IRON
|
||||
@@ -43,9 +45,10 @@ var/global/list/ore_data = list()
|
||||
smelts_to = "iron"
|
||||
alloy = 1
|
||||
result_amount = 5
|
||||
spread_chance = 25
|
||||
spread_chance = 30
|
||||
ore = /obj/item/weapon/ore/iron
|
||||
scan_icon = "mineral_common"
|
||||
worth = 4
|
||||
|
||||
/ore/coal
|
||||
name = ORE_COAL
|
||||
@@ -53,21 +56,22 @@ var/global/list/ore_data = list()
|
||||
smelts_to = "plastic"
|
||||
alloy = 1
|
||||
result_amount = 5
|
||||
spread_chance = 25
|
||||
spread_chance = 35
|
||||
ore = /obj/item/weapon/ore/coal
|
||||
scan_icon = "mineral_common"
|
||||
worth = 2
|
||||
|
||||
/ore/glass
|
||||
name = ORE_SAND
|
||||
display_name = "sand"
|
||||
smelts_to = "glass"
|
||||
compresses_to = "sandstone"
|
||||
worth = 1
|
||||
|
||||
/ore/phoron
|
||||
name = ORE_PHORON
|
||||
display_name = "phoron crystals"
|
||||
compresses_to = "phoron"
|
||||
//smelts_to = something that explodes violently on the conveyor, huhuhuhu
|
||||
result_amount = 5
|
||||
spread_chance = 25
|
||||
ore = /obj/item/weapon/ore/phoron
|
||||
@@ -79,15 +83,17 @@ var/global/list/ore_data = list()
|
||||
"billion_lower" = 10
|
||||
)
|
||||
xarch_source_mineral = "phoron"
|
||||
worth = 8
|
||||
|
||||
/ore/silver
|
||||
name = ORE_SILVER
|
||||
display_name = "native silver"
|
||||
smelts_to = "silver"
|
||||
result_amount = 5
|
||||
spread_chance = 10
|
||||
spread_chance = 15
|
||||
ore = /obj/item/weapon/ore/silver
|
||||
scan_icon = "mineral_uncommon"
|
||||
worth = 20
|
||||
|
||||
/ore/gold
|
||||
smelts_to = ORE_GOLD
|
||||
@@ -103,16 +109,18 @@ var/global/list/ore_data = list()
|
||||
"billion" = 4,
|
||||
"billion_lower" = 3
|
||||
)
|
||||
worth = 30
|
||||
|
||||
/ore/diamond
|
||||
name = ORE_DIAMOND
|
||||
display_name = "diamond"
|
||||
compresses_to = "diamond"
|
||||
result_amount = 5
|
||||
spread_chance = 10
|
||||
spread_chance = 5
|
||||
ore = /obj/item/weapon/ore/diamond
|
||||
scan_icon = "mineral_rare"
|
||||
xarch_source_mineral = "nitrogen"
|
||||
worth = 50
|
||||
|
||||
/ore/platinum
|
||||
name = ORE_PLATINUM
|
||||
@@ -121,9 +129,10 @@ var/global/list/ore_data = list()
|
||||
compresses_to = "osmium"
|
||||
alloy = 1
|
||||
result_amount = 5
|
||||
spread_chance = 10
|
||||
spread_chance = 15
|
||||
ore = /obj/item/weapon/ore/osmium
|
||||
scan_icon = "mineral_rare"
|
||||
worth = 15
|
||||
|
||||
/ore/hydrogen
|
||||
name = ORE_HYDROGEN
|
||||
@@ -131,3 +140,4 @@ var/global/list/ore_data = list()
|
||||
smelts_to = "tritium"
|
||||
compresses_to = "mhydrogen"
|
||||
scan_icon = "mineral_rare"
|
||||
worth = 30
|
||||
|
||||
@@ -392,6 +392,12 @@ var/list/holder_mob_icon_cache = list()
|
||||
item_state = "constructiondrone"
|
||||
w_class = 6//You're not fitting this thing in a backpack
|
||||
|
||||
/obj/item/weapon/holder/drone/mining
|
||||
name = "mining drone"
|
||||
desc = "It's a plucky mining drone."
|
||||
icon_state = "mdrone"
|
||||
item_state = "mdrone"
|
||||
|
||||
/obj/item/weapon/holder/cat
|
||||
name = "cat"
|
||||
desc = "It's a cat. Meow."
|
||||
|
||||
@@ -191,7 +191,7 @@ var/list/mob_hat_cache = list()
|
||||
|
||||
if(stat == 2)
|
||||
|
||||
if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave.
|
||||
if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave.
|
||||
user << "<span class='danger'>The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.</span>"
|
||||
return
|
||||
|
||||
@@ -254,10 +254,10 @@ var/list/mob_hat_cache = list()
|
||||
//For some goddamn reason robots have this hardcoded. Redefining it for our fragile friends here.
|
||||
/mob/living/silicon/robot/drone/updatehealth()
|
||||
if(status_flags & GODMODE)
|
||||
health = 35
|
||||
health = maxHealth
|
||||
stat = CONSCIOUS
|
||||
return
|
||||
health = 35 - (getBruteLoss() + getFireLoss())
|
||||
health = maxHealth - (getBruteLoss() + getFireLoss())
|
||||
return
|
||||
|
||||
//Easiest to check this here, then check again in the robot proc.
|
||||
@@ -265,7 +265,7 @@ var/list/mob_hat_cache = list()
|
||||
//Drones killed by damage will gib.
|
||||
/mob/living/silicon/robot/drone/handle_regular_status_updates()
|
||||
var/turf/T = get_turf(src)
|
||||
if((!T || health <= -35 || (master_fabricator && T.z != master_fabricator.z)) && src.stat != DEAD)
|
||||
if((!T || health <= -maxHealth || (master_fabricator && T.z != master_fabricator.z)) && src.stat != DEAD)
|
||||
timeofdeath = world.time
|
||||
death() //Possibly redundant, having trouble making death() cooperate.
|
||||
gib()
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
|
||||
var/opened = 0
|
||||
var/emagged = 0
|
||||
var/fakeemagged = 0 //for dumb illegal weapons module
|
||||
var/wiresexposed = 0
|
||||
var/locked = 1
|
||||
var/has_power = 1
|
||||
@@ -254,7 +255,7 @@
|
||||
if(new_sprites && new_sprites.len)
|
||||
module_sprites = new_sprites.Copy()
|
||||
//Custom_sprite check and entry
|
||||
|
||||
|
||||
if (custom_sprite == 1)
|
||||
var/list/valid_states = icon_states(CUSTOM_ITEM_SYNTH)
|
||||
if("[ckey]-[modtype]" in valid_states)
|
||||
@@ -268,7 +269,7 @@
|
||||
else
|
||||
icontype = module_sprites[1]
|
||||
icon_state = module_sprites[icontype]
|
||||
|
||||
|
||||
updateicon()
|
||||
return module_sprites
|
||||
|
||||
@@ -463,7 +464,7 @@
|
||||
|
||||
/mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj)
|
||||
..(Proj)
|
||||
if(prob(75) && Proj.damage > 0)
|
||||
if(prob(75) && Proj.damage > 0)
|
||||
spark_system.queue()
|
||||
return 2
|
||||
|
||||
@@ -1112,7 +1113,7 @@
|
||||
return
|
||||
|
||||
if(opened)//Cover is open
|
||||
if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice
|
||||
if(emagged && !fakeemagged) return//Prevents the X has hit Y with Z message also you cant emag them twice
|
||||
if(wiresexposed)
|
||||
user << "You must close the panel first"
|
||||
return
|
||||
@@ -1120,6 +1121,8 @@
|
||||
sleep(6)
|
||||
if(prob(50))
|
||||
emagged = 1
|
||||
if(fakeemagged)
|
||||
fakeemagged = 0
|
||||
lawupdate = 0
|
||||
disconnect_from_ai()
|
||||
user << "You emag [src]'s interface."
|
||||
|
||||
@@ -359,7 +359,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/weapon/screwdriver(src)
|
||||
src.modules += new /obj/item/weapon/wrench(src)
|
||||
src.modules += new /obj/item/weapon/crowbar(src)
|
||||
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
src.modules += new /obj/item/weapon/weldingtool/experimental(src)
|
||||
src.modules += new /obj/item/device/pipe_painter(src)
|
||||
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
|
||||
src.modules += new /obj/item/weapon/gripper(src)
|
||||
@@ -642,7 +642,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/weapon/gripper/miner(src)
|
||||
src.modules += new /obj/item/weapon/mining_scanner(src)
|
||||
src.modules += new /obj/item/weapon/crowbar(src)
|
||||
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/research
|
||||
@@ -736,7 +736,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/hud/sec(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src)
|
||||
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
|
||||
src.modules += new /obj/item/borg/combat/shield(src)
|
||||
src.modules += new /obj/item/borg/combat/mobility(src)
|
||||
src.modules += new /obj/item/weapon/crowbar(src)
|
||||
@@ -766,7 +766,7 @@ var/global/list/robot_modules = list(
|
||||
robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
|
||||
src.modules += robot.internals
|
||||
|
||||
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
|
||||
src.emag.name = "Plasma Cutter"
|
||||
|
||||
var/datum/matter_synth/metal = new /datum/matter_synth/metal(25000)
|
||||
@@ -839,3 +839,61 @@ var/global/list/robot_modules = list(
|
||||
LR.Charge(R, amount)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/robot_module/mining_drone
|
||||
name = "mining drone module"
|
||||
no_slip = 1
|
||||
networks = list(NETWORK_MINE)
|
||||
|
||||
/obj/item/weapon/robot_module/mining_drone/basic/New(var/mob/living/silicon/robot/robot)
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/material(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/ore(src)
|
||||
src.modules += new /obj/item/weapon/pickaxe/drill(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
|
||||
src.modules += new /obj/item/weapon/gripper/miner(src)
|
||||
src.modules += new /obj/item/weapon/mining_scanner(src)
|
||||
|
||||
src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src)
|
||||
src.emag.name = "Mounted Thermal Drill"
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/mining_drone/drill/New(var/mob/living/silicon/robot/robot)
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/material(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/ore(src)
|
||||
src.modules += new /obj/item/weapon/pickaxe/jackhammer(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
|
||||
src.modules += new /obj/item/weapon/gripper/miner(src)
|
||||
src.modules += new /obj/item/weapon/mining_scanner(src)
|
||||
|
||||
src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src)
|
||||
src.emag.name = "Mounted Thermal Drill"
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/mining_drone/plasmacutter/New(var/mob/living/silicon/robot/robot)
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/material(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/ore(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
|
||||
src.modules += new /obj/item/weapon/gripper/miner(src)
|
||||
src.modules += new /obj/item/weapon/mining_scanner(src)
|
||||
|
||||
src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src)
|
||||
src.emag.name = "Mounted Thermal Drill"
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/mining_drone/drillandplasmacutter/New(var/mob/living/silicon/robot/robot)
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/material(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/ore(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
|
||||
src.modules += new /obj/item/weapon/pickaxe/jackhammer(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
|
||||
src.modules += new /obj/item/weapon/gripper/miner(src)
|
||||
src.modules += new /obj/item/weapon/mining_scanner(src)
|
||||
|
||||
src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src)
|
||||
src.emag.name = "Mounted Thermal Drill"
|
||||
..()
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(L.faction == src.faction && !attack_same)
|
||||
if((L.faction == src.faction) && !attack_same)
|
||||
continue
|
||||
else if(L in friends)
|
||||
continue
|
||||
|
||||
@@ -137,25 +137,6 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/can_fall()
|
||||
if(Allow_Spacemove())
|
||||
return 0
|
||||
|
||||
if(Check_Shoegrip()) //scaling hull with magboots
|
||||
for(var/turf/simulated/T in trange(1,src))
|
||||
if(T.density)
|
||||
return 0
|
||||
..()
|
||||
|
||||
/mob/living/silicon/robot/can_fall()
|
||||
if(Allow_Spacemove()) //Checks for active jetpack
|
||||
return 0
|
||||
|
||||
for(var/turf/simulated/T in trange(1,src)) //Robots get "magboots"
|
||||
if(T.density)
|
||||
return 0
|
||||
..()
|
||||
|
||||
/obj/effect/can_fall()
|
||||
return FALSE
|
||||
|
||||
@@ -181,17 +162,28 @@
|
||||
|
||||
if(istype(landing, /turf/simulated/open))
|
||||
visible_message("\The [src] falls from the level above through \the [landing]!", "You hear a whoosh of displaced air.")
|
||||
else
|
||||
else if(!istype(landing, /turf/space))
|
||||
visible_message("\The [src] falls from the level above and slams onto \the [landing]!", "You hear something slam onto the floor.")
|
||||
|
||||
/mob/living/carbon/human/handle_fall(var/turf/landing)
|
||||
if(..())
|
||||
return
|
||||
|
||||
var/area/area1 = get_area(landing)
|
||||
if(!area1.has_gravity())
|
||||
return
|
||||
|
||||
if(istype(landing, /turf/simulated/open))
|
||||
var/turf/simulated/open/open = landing
|
||||
var/area/area2 = get_area(open.below)
|
||||
if(!area2.has_gravity())
|
||||
return
|
||||
|
||||
var/damage = 20
|
||||
apply_damage(rand(0, damage), BRUTE, "head")
|
||||
apply_damage(rand(0, damage), BRUTE, "chest")
|
||||
apply_damage(rand(0, damage), BRUTE, "l_leg")
|
||||
apply_damage(rand(0, damage), BRUTE, "r_leg")
|
||||
apply_damage(10 + rand(10, damage), BRUTE, "l_leg")
|
||||
apply_damage(10 + rand(10, damage), BRUTE, "r_leg")
|
||||
apply_damage(rand(0, damage), BRUTE, "l_arm")
|
||||
apply_damage(rand(0, damage), BRUTE, "r_arm")
|
||||
weakened = max(weakened,2)
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
/turf/space/CanZPass(atom, direction)
|
||||
return 1
|
||||
|
||||
var/global/list/total_openspace = list()
|
||||
|
||||
/turf/simulated/open
|
||||
name = "open space"
|
||||
icon = 'icons/turf/space.dmi'
|
||||
@@ -23,6 +25,18 @@
|
||||
|
||||
var/turf/below
|
||||
|
||||
/turf/simulated/open/airless
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/open/New()
|
||||
total_openspace += src
|
||||
|
||||
/turf/simulated/open/Destroy()
|
||||
total_openspace -= src
|
||||
..()
|
||||
|
||||
/turf/simulated/open/post_change()
|
||||
..()
|
||||
update()
|
||||
@@ -51,6 +65,8 @@
|
||||
O.hide(0)
|
||||
|
||||
/turf/simulated/open/update_icon()
|
||||
overlays.Cut()
|
||||
underlays.Cut()
|
||||
if(below)
|
||||
var/image/t_img = list()
|
||||
var/image/temp = image(icon = below.icon, icon_state = below.icon_state)
|
||||
@@ -135,4 +151,4 @@
|
||||
|
||||
//Most things use is_plating to test if there is a cover tile on top (like regular floors)
|
||||
/turf/simulated/open/is_plating()
|
||||
return 1
|
||||
return 1
|
||||
@@ -53,7 +53,7 @@
|
||||
info = parsepencode(text)
|
||||
else
|
||||
info = ""
|
||||
|
||||
|
||||
update_icon()
|
||||
update_space(info)
|
||||
updateinfolinks()
|
||||
@@ -134,7 +134,7 @@
|
||||
if (icon_state == "paper_plane")
|
||||
user.show_message(span("alert", "The paper is already folded into a plane."))
|
||||
return
|
||||
user.visible_message(span("notice", "\The [user] carefully folds \the [src] into a plane."),
|
||||
user.visible_message(span("notice", "\The [user] carefully folds \the [src] into a plane."),
|
||||
span("notice", "You carefully fold \the [src] into a plane."), "You hear paper rustling.")
|
||||
icon_state = "paper_plane"
|
||||
throw_range = 8
|
||||
@@ -547,4 +547,4 @@ Please note: Cell timers will \[b\]NOT\[/b\] function without a valid incident f
|
||||
..()
|
||||
|
||||
/obj/item/weapon/paper/sentencing/update_icon()
|
||||
return
|
||||
return
|
||||
@@ -148,6 +148,18 @@
|
||||
/obj/effect/projectile/solar/impact
|
||||
icon_state = "impact_solar"
|
||||
|
||||
//----------------------------
|
||||
// Treye beam
|
||||
//----------------------------
|
||||
/obj/effect/projectile/trilaser/tracer
|
||||
icon_state = "plasmacutter"
|
||||
|
||||
/obj/effect/projectile/trilaser/muzzle
|
||||
icon_state = "muzzle_plasmacutter"
|
||||
|
||||
/obj/effect/projectile/trilaser/impact
|
||||
icon_state = "impact_plasmacutter"
|
||||
|
||||
//----------------------------
|
||||
// Pulse muzzle
|
||||
//----------------------------
|
||||
|
||||
@@ -0,0 +1,343 @@
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator
|
||||
name = "proto-kinetic accelerator"
|
||||
desc = "A reloadable, ranged mining tool that does increased damage in low pressure. Capable of holding up to six slots worth of mod kits."
|
||||
icon = 'icons/obj/mining_contained.dmi'
|
||||
icon_state = "kineticgun"
|
||||
item_state = "kineticgun"
|
||||
contained_sprite = 1
|
||||
charge_meter = 0
|
||||
fire_delay = 16
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4, TECH_POWER = 4)
|
||||
projectile_type = /obj/item/projectile/kinetic
|
||||
fire_sound = 'sound/weapons/Kenetic_accel.ogg'
|
||||
|
||||
var/max_mod_capacity = 100
|
||||
var/list/modkits = list()
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(mob/living/user as mob)
|
||||
if(power_supply.charge < power_supply.maxcharge)
|
||||
user << "<span class='notice'>You begin charging \the [src]...</span>"
|
||||
if(do_after(user,20))
|
||||
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
|
||||
user.visible_message(
|
||||
"<span class='warning'>\The [user] pumps \the [src]!</span>",
|
||||
"<span class='warning'>You pump \the [src]]!</span>"
|
||||
)
|
||||
power_supply.charge = power_supply.maxcharge
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user)
|
||||
..()
|
||||
if(max_mod_capacity)
|
||||
user << "<b>[get_remaining_mod_capacity()]%</b> mod capacity remaining."
|
||||
for(var/A in get_modkits())
|
||||
var/obj/item/borg/upgrade/modkit/M = A
|
||||
user << "<span class='notice'>There is a [M.name] mod installed, using <b>[M.cost]%</b> capacity.</span>"
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user)
|
||||
if(istype(A, /obj/item/weapon/crowbar))
|
||||
if(modkits.len)
|
||||
user << "<span class='notice'>You pry the modifications out.</span>"
|
||||
playsound(loc, 100, 1)
|
||||
for(var/obj/item/borg/upgrade/modkit/M in modkits)
|
||||
M.uninstall(src)
|
||||
else
|
||||
user << "<span class='notice'>There are no modifications currently installed.</span>"
|
||||
else if(istype(A, /obj/item/borg/upgrade/modkit))
|
||||
var/obj/item/borg/upgrade/modkit/MK = A
|
||||
MK.install(src, user)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity()
|
||||
var/current_capacity_used = 0
|
||||
for(var/A in get_modkits())
|
||||
var/obj/item/borg/upgrade/modkit/M = A
|
||||
current_capacity_used += M.cost
|
||||
return max_mod_capacity - current_capacity_used
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_modkits()
|
||||
. = list()
|
||||
for(var/A in modkits)
|
||||
. += A
|
||||
|
||||
//Projectiles
|
||||
/obj/item/projectile/kinetic
|
||||
name = "kinetic force"
|
||||
icon_state = null
|
||||
damage = 30
|
||||
damage_type = BRUTE
|
||||
check_armour = "bomb"
|
||||
kill_count = 5
|
||||
|
||||
var/pressure_decrease = 0.25
|
||||
var/turf_aoe = FALSE
|
||||
var/mob_aoe = 0
|
||||
var/list/hit_overlays = list()
|
||||
|
||||
/obj/item/projectile/kinetic/launch_from_gun(atom/target, mob/user, obj/item/weapon/gun/launcher, var/target_zone, var/x_offset=0, var/y_offset=0)
|
||||
if(istype(launcher, /obj/item/weapon/gun/energy/kinetic_accelerator))
|
||||
var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = launcher
|
||||
for(var/A in KA.get_modkits())
|
||||
var/obj/item/borg/upgrade/modkit/M = A
|
||||
M.modify_projectile(src)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/kinetic/on_impact(var/atom/A)
|
||||
strike_thing(A)
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/kinetic/proc/strike_thing(atom/target)
|
||||
var/turf/target_turf = get_turf(target)
|
||||
if(!target_turf)
|
||||
target_turf = get_turf(src)
|
||||
var/datum/gas_mixture/environment = target_turf.return_air()
|
||||
var/pressure = environment.return_pressure()
|
||||
if(pressure > 50)
|
||||
name = "weakened [name]"
|
||||
damage *= pressure_decrease
|
||||
if(istype(target_turf, /turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/M = target_turf
|
||||
M.GetDrilled(1)
|
||||
var/obj/effect/overlay/temp/kinetic_blast/K = getFromPool(/obj/effect/overlay/temp/kinetic_blast, target_turf)
|
||||
K.color = color
|
||||
for(var/type in hit_overlays)
|
||||
getFromPool(type, target_turf)
|
||||
if(turf_aoe)
|
||||
for(var/T in orange(1, target_turf))
|
||||
if(istype(T, /turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/M = T
|
||||
M.GetDrilled(1)
|
||||
if(mob_aoe)
|
||||
for(var/mob/living/L in range(1, target_turf) - firer - target)
|
||||
L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor)
|
||||
L << "<span class='userdanger'>You're struck by a [name]!</span>"
|
||||
|
||||
|
||||
//Modkits
|
||||
/obj/item/borg/upgrade/modkit
|
||||
name = "modification kit"
|
||||
desc = "An upgrade for kinetic accelerators."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "modkit"
|
||||
origin_tech = "programming=2;materials=2;magnets=4"
|
||||
var/denied_type = null
|
||||
var/maximum_of_type = 1
|
||||
var/cost = 30
|
||||
var/modifier = 1 //For use in any mod kit that has numerical modifiers
|
||||
|
||||
/obj/item/borg/upgrade/modkit/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>Occupies <b>[cost]%</b> of mod capacity.</span>"
|
||||
|
||||
/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user)
|
||||
if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user))
|
||||
install(A, user)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R)
|
||||
if(..())
|
||||
return
|
||||
|
||||
for(var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules)
|
||||
return install(H, usr)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
|
||||
. = TRUE
|
||||
if(denied_type)
|
||||
var/number_of_denied = 0
|
||||
for(var/A in KA.get_modkits())
|
||||
var/obj/item/borg/upgrade/modkit/M = A
|
||||
if(istype(M, denied_type))
|
||||
number_of_denied++
|
||||
if(number_of_denied >= maximum_of_type)
|
||||
. = FALSE
|
||||
break
|
||||
if(KA.get_remaining_mod_capacity() >= cost)
|
||||
if(.)
|
||||
user << "<span class='notice'>You install the modkit.</span>"
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user.unEquip(src)
|
||||
forceMove(KA)
|
||||
KA.modkits += src
|
||||
else
|
||||
user << "<span class='notice'>The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits.</span>"
|
||||
else
|
||||
user << "<span class='notice'>You don't have room(<b>[KA.get_remaining_mod_capacity()]%</b> remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.</span>"
|
||||
. = FALSE
|
||||
|
||||
|
||||
|
||||
/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
forceMove(get_turf(KA))
|
||||
KA.modkits -= src
|
||||
|
||||
/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
|
||||
|
||||
//Range
|
||||
/obj/item/borg/upgrade/modkit/range
|
||||
name = "range increase"
|
||||
desc = "Increases the range of a kinetic accelerator when installed."
|
||||
modifier = 20
|
||||
cost = 24 //so you can fit four plus a tracer cosmetic
|
||||
|
||||
/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.kill_count += modifier
|
||||
|
||||
|
||||
//Damage
|
||||
/obj/item/borg/upgrade/modkit/damage
|
||||
name = "damage increase"
|
||||
desc = "Increases the damage of kinetic accelerator when installed."
|
||||
modifier = 10
|
||||
|
||||
/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.damage += modifier
|
||||
|
||||
|
||||
//Cooldown
|
||||
/obj/item/borg/upgrade/modkit/cooldown
|
||||
name = "cooldown decrease"
|
||||
desc = "Decreases the cooldown of a kinetic accelerator and increases the recharge rate."
|
||||
modifier = 2
|
||||
|
||||
/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
KA.fire_delay -= modifier
|
||||
KA.recharge_time -= modifier
|
||||
|
||||
/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
KA.fire_delay += modifier
|
||||
KA.recharge_time += modifier
|
||||
..()
|
||||
|
||||
|
||||
//AoE blasts
|
||||
/obj/item/borg/upgrade/modkit/aoe
|
||||
modifier = 0
|
||||
|
||||
/obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.name = "kinetic explosion"
|
||||
if(!K.turf_aoe && !K.mob_aoe)
|
||||
K.hit_overlays += /obj/effect/overlay/temp/explosion/fast
|
||||
K.mob_aoe += modifier
|
||||
|
||||
/obj/item/borg/upgrade/modkit/aoe/turfs
|
||||
name = "mining explosion"
|
||||
desc = "Causes the kinetic accelerator to destroy rock in an AoE."
|
||||
denied_type = /obj/item/borg/upgrade/modkit/aoe/turfs
|
||||
|
||||
/obj/item/borg/upgrade/modkit/aoe/turfs/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
..()
|
||||
K.turf_aoe = TRUE
|
||||
|
||||
/obj/item/borg/upgrade/modkit/aoe/turfs/andmobs
|
||||
name = "offensive mining explosion"
|
||||
desc = "Causes the kinetic accelerator to destroy rock and damage mobs in an AoE."
|
||||
maximum_of_type = 3
|
||||
modifier = 0.25
|
||||
|
||||
/obj/item/borg/upgrade/modkit/aoe/mobs
|
||||
name = "offensive explosion"
|
||||
desc = "Causes the kinetic accelerator to damage mobs in an AoE."
|
||||
modifier = 0.2
|
||||
|
||||
|
||||
//Indoors
|
||||
/obj/item/borg/upgrade/modkit/indoors
|
||||
name = "decrease pressure penalty"
|
||||
desc = "Increases the damage a kinetic accelerator does in a high pressure environment."
|
||||
modifier = 2
|
||||
denied_type = /obj/item/borg/upgrade/modkit/indoors
|
||||
maximum_of_type = 2
|
||||
cost = 40
|
||||
|
||||
/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.pressure_decrease *= modifier
|
||||
|
||||
/obj/item/borg/upgrade/modkit/tracer
|
||||
name = "white tracer bolts"
|
||||
desc = "Causes kinetic accelerator bolts to have a white tracer trail and explosion."
|
||||
cost = 4
|
||||
denied_type = /obj/item/borg/upgrade/modkit/tracer
|
||||
var/bolt_color = "#FFFFFF"
|
||||
|
||||
/obj/item/borg/upgrade/modkit/tracer/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.icon_state = "ka_tracer"
|
||||
K.color = bolt_color
|
||||
|
||||
/obj/item/borg/upgrade/modkit/tracer/adjustable
|
||||
name = "adjustable tracer bolts"
|
||||
desc = "Causes kinetic accelerator bolts to have a adjustably-colored tracer trail and explosion. Use in-hand to change color."
|
||||
|
||||
/obj/item/borg/upgrade/modkit/tracer/adjustable/attack_self(mob/user)
|
||||
bolt_color = input(user,"Choose Color") as color
|
||||
|
||||
/*******************PLASMA CUTTER*******************/
|
||||
|
||||
/obj/item/weapon/gun/energy/plasmacutter/mounted
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/plasmacutter
|
||||
name = "plasma cutter"
|
||||
desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
|
||||
contained_sprite = 1
|
||||
charge_meter = 0
|
||||
icon = 'icons/obj/mining_contained.dmi'
|
||||
icon_state = "plasma"
|
||||
item_state = "plasma"
|
||||
fire_sound = 'sound/weapons/plasma_cutter.ogg'
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
w_class = 3
|
||||
force = 15
|
||||
sharp = 1
|
||||
edge = 1
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 4000)
|
||||
projectile_type = /obj/item/projectile/beam/plasmacutter
|
||||
max_shots = 15
|
||||
|
||||
/obj/item/projectile/beam/plasmacutter
|
||||
name = "plasma arc"
|
||||
icon_state = "omnilaser"
|
||||
damage = 15
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
kill_count = 5
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
muzzle_type = /obj/effect/projectile/trilaser/muzzle
|
||||
tracer_type = /obj/effect/projectile/trilaser/tracer
|
||||
impact_type = /obj/effect/projectile/trilaser/impact
|
||||
|
||||
/obj/item/projectile/beam/plasmacutter/on_impact(var/atom/A)
|
||||
strike_thing(A)
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/beam/plasmacutter/proc/strike_thing(var/atom/A)
|
||||
if(istype(A, /turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/M = A
|
||||
if(prob(33))
|
||||
M.GetDrilled(1)
|
||||
return
|
||||
else if(prob(88))
|
||||
M.emitter_blasts_taken += 2
|
||||
M.emitter_blasts_taken += 1
|
||||
|
||||
else if(istype(A, /mob/living))
|
||||
var/mob/living/L = A
|
||||
L.apply_damage(15, BRUTE, def_zone)
|
||||
if(istype(A, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = L
|
||||
var/ultimate_def_zone = check_zone(def_zone)
|
||||
if(H.has_organ(ultimate_def_zone))
|
||||
var/obj/item/organ/external/E = H.get_organ(ultimate_def_zone)
|
||||
if(E.damage > 15 && prob((4*E.damage)))
|
||||
E.droplimb(0,DROPLIMB_EDGE)
|
||||
@@ -181,7 +181,7 @@
|
||||
force = 30
|
||||
projectile_type = /obj/item/projectile/energy/bfg
|
||||
slot_flags = SLOT_BACK
|
||||
max_shots = 10
|
||||
max_shots = 3
|
||||
sel_mode = 1
|
||||
fire_delay = 10
|
||||
accuracy = 20
|
||||
@@ -212,6 +212,7 @@
|
||||
)
|
||||
|
||||
action_button_name = "Wield gatling laser"
|
||||
charge_cost = 50
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca/gatlinglaser/can_wield()
|
||||
return 1
|
||||
@@ -335,7 +336,7 @@
|
||||
"<span class='danger'>You hear a low pulsing roar!</span>"
|
||||
)
|
||||
is_charging = 1
|
||||
sleep(40)
|
||||
sleep(20)
|
||||
is_charging = 0
|
||||
if(!istype(user.get_active_hand(), src))
|
||||
return
|
||||
@@ -387,6 +388,7 @@
|
||||
self_recharge = 1
|
||||
recharge_time = 1
|
||||
charge_meter = 1
|
||||
charge_cost = 50
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="2 second burst", burst=10, burst_delay = 1, fire_delay = 20),
|
||||
@@ -424,7 +426,49 @@
|
||||
"<span class='danger'>You hear a low pulsing roar!</span>"
|
||||
)
|
||||
is_charging = 1
|
||||
sleep(60)
|
||||
sleep(40)
|
||||
is_charging = 0
|
||||
if(!istype(user.get_active_hand(), src))
|
||||
return
|
||||
msg_admin_attack("[key_name_admin(user)] shot with \a [src.type] [key_name_admin(src)]'s target (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca/mountedthermaldrill
|
||||
name = "mounted thermal drill"
|
||||
desc = "Pierce the heavens? Son, there won't <i>be</i> any heavens when you're through with it."
|
||||
contained_sprite = 1
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "thermaldrill"
|
||||
item_state = "thermaldrill"
|
||||
origin_tech = "combat=6;phorontech=8,"
|
||||
fire_sound = 'sound/magic/lightningbolt.ogg'
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 4
|
||||
force = 15
|
||||
projectile_type = /obj/item/projectile/beam/thermaldrill
|
||||
max_shots = 90
|
||||
sel_mode = 1
|
||||
burst = 30
|
||||
burst_delay = 1
|
||||
fire_delay = 60
|
||||
self_recharge = 1
|
||||
recharge_time = 1
|
||||
charge_meter = 1
|
||||
use_external_power = 1
|
||||
charge_cost = 50
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca/mountedthermaldrill/special_check(var/mob/user)
|
||||
..()
|
||||
if(is_charging)
|
||||
user << "<span class='danger'>\The [src] is already charging!</span>"
|
||||
return 0
|
||||
user.visible_message(
|
||||
"<span class='danger'>\The [user] begins charging the [src]!</span>",
|
||||
"<span class='danger'>You begin charging the [src]!</span>",
|
||||
"<span class='danger'>You hear a low pulsing roar!</span>"
|
||||
)
|
||||
is_charging = 1
|
||||
sleep(30)
|
||||
is_charging = 0
|
||||
if(!istype(user.get_active_hand(), src))
|
||||
return
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/boltaction/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != 3)
|
||||
if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/gun/energy/plasmacutter) && w_class != 3)
|
||||
user << "<span class='notice'>You begin to shorten the barrel and stock of \the [src].</span>"
|
||||
if(loaded.len)
|
||||
afterattack(user, user)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/improvised/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
if(w_class > 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter)))
|
||||
if(w_class == 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/gun/energy/plasmacutter)))
|
||||
user << "<span class='notice'>You begin to shorten the barrel of \the [src].</span>"
|
||||
if(loaded.len)
|
||||
for(var/i in 1 to max_shells)
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
//this is largely hacky and bad :( -Pete
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
if(w_class > 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter)))
|
||||
if(w_class == 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/gun/energy/plasmacutter)))
|
||||
user << "<span class='notice'>You begin to shorten the barrel of \the [src].</span>"
|
||||
if(loaded.len)
|
||||
for(var/i in 1 to max_shells)
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
/obj/item/projectile/beam/megaglaive
|
||||
name = "thermal lance"
|
||||
icon_state = "megaglaive"
|
||||
damage = 6
|
||||
damage = 10
|
||||
incinerate = 5
|
||||
armor_penetration = 10
|
||||
no_attack_log = 1
|
||||
@@ -239,10 +239,27 @@
|
||||
src.transform = effect_transform
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/megaglaive/on_impact(var/atom/A)
|
||||
if(isturf(A))
|
||||
if(istype(A, /turf/simulated/mineral))
|
||||
if(prob(75)) //likely because its a mining tool
|
||||
var/turf/simulated/mineral/M = A
|
||||
if(prob(10))
|
||||
M.GetDrilled(1)
|
||||
else if(!M.emitter_blasts_taken)
|
||||
M.emitter_blasts_taken += 1
|
||||
else if(prob(33))
|
||||
M.emitter_blasts_taken += 1
|
||||
if(ismob(A))
|
||||
var/mob/living/M = A
|
||||
M.apply_effect(1, INCINERATE, 0)
|
||||
explosion(A, -1, 0, 2)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/thermaldrill
|
||||
name = "thermal lance"
|
||||
icon_state = "megaglaive"
|
||||
damage = 3
|
||||
damage = 5
|
||||
no_attack_log = 1
|
||||
|
||||
muzzle_type = /obj/effect/projectile/solar/muzzle
|
||||
@@ -254,7 +271,13 @@
|
||||
if(istype(A, /turf/simulated/mineral))
|
||||
if(prob(75)) //likely because its a mining tool
|
||||
var/turf/simulated/mineral/M = A
|
||||
M.GetDrilled()
|
||||
if(prob(33))
|
||||
M.GetDrilled(1)
|
||||
else if(!M.emitter_blasts_taken)
|
||||
M.emitter_blasts_taken += 2
|
||||
else if(prob(66))
|
||||
M.emitter_blasts_taken += 2
|
||||
|
||||
if(ismob(A))
|
||||
var/mob/living/M = A
|
||||
M.apply_effect(1, INCINERATE, 0)
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
var/door_count = 0
|
||||
var/empty_count = 0
|
||||
while((ore_count>0) && (ore_turfs.len>0))
|
||||
if(!priority_process)
|
||||
if(!priority_process)
|
||||
CHECK_TICK
|
||||
var/check_cell = pick(ore_turfs)
|
||||
ore_turfs -= check_cell
|
||||
@@ -99,3 +99,77 @@
|
||||
CHECK_TICK
|
||||
|
||||
game_log("ASGEN", "Applied [num_applied] turfs.")
|
||||
|
||||
/datum/random_map/automata/cave_system/high_yield
|
||||
descriptor = "high yield caves"
|
||||
wall_type = /turf/simulated/mineral/random/low_chance
|
||||
mineral_sparse = /turf/simulated/mineral/random/high_chance
|
||||
mineral_rich = /turf/simulated/mineral/random/higher_chance
|
||||
|
||||
/datum/random_map/automata/cave_system/chasms
|
||||
descriptor = "chasm caverns"
|
||||
wall_type = /turf/unsimulated/mask
|
||||
floor_type = /turf/simulated/open/airless
|
||||
target_turf_type = /turf/unsimulated/chasm_mask
|
||||
mineral_sparse = /turf/unsimulated/mask
|
||||
mineral_rich = /turf/unsimulated/mask
|
||||
cell_threshold = 5
|
||||
|
||||
/datum/random_map/automata/cave_system/chasms/apply_to_map()
|
||||
if(!origin_x) origin_x = 1
|
||||
if(!origin_y) origin_y = 1
|
||||
if(!origin_z) origin_z = 1
|
||||
|
||||
var/tmp_cell
|
||||
var/x
|
||||
var/y
|
||||
var/new_path
|
||||
var/num_applied = 0
|
||||
for (var/thing in block(locate(origin_x, origin_y, origin_z), locate(limit_x, limit_y, origin_z)))
|
||||
var/turf/T = thing
|
||||
new_path = null
|
||||
if (!T || (target_turf_type && !istype(T, target_turf_type)))
|
||||
continue
|
||||
|
||||
x = T.x
|
||||
y = T.y
|
||||
|
||||
PREPARE_CELL(x,y)
|
||||
|
||||
if (!tmp_cell)
|
||||
continue
|
||||
|
||||
switch (map[tmp_cell])
|
||||
if(DOOR_CHAR)
|
||||
new_path = mineral_sparse
|
||||
if(EMPTY_CHAR)
|
||||
new_path = mineral_rich
|
||||
if(FLOOR_CHAR)
|
||||
var/turf/below = GetBelow(T)
|
||||
if(below)
|
||||
var/area/below_area = get_area(below)
|
||||
if(below_area in the_station_areas)
|
||||
new_path = wall_type
|
||||
else if(below.density)
|
||||
new_path = wall_type
|
||||
else
|
||||
new_path = floor_type
|
||||
if(WALL_CHAR)
|
||||
new_path = wall_type
|
||||
|
||||
if (!new_path)
|
||||
continue
|
||||
|
||||
num_applied += 1
|
||||
new new_path(T)
|
||||
CHECK_TICK
|
||||
|
||||
game_log("ASGEN", "Applied [num_applied] turfs.")
|
||||
|
||||
/datum/random_map/automata/cave_system/chasms/surface
|
||||
descriptor = "chasm surface"
|
||||
wall_type = /turf/simulated/floor/asteroid
|
||||
floor_type = /turf/simulated/open/airless
|
||||
target_turf_type = /turf/unsimulated/chasm_mask
|
||||
mineral_sparse = /turf/simulated/floor/asteroid
|
||||
mineral_rich = /turf/simulated/floor/asteroid
|
||||
@@ -84,18 +84,44 @@
|
||||
else
|
||||
user << "<span class='notice'>It is spent.</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack
|
||||
name = "stimpack"
|
||||
desc = "A simple chemical cocktail of hyperzine and tramadol designed to boost efficiency by 6,000% (estimated). Hoo-rah!"
|
||||
volume = 20
|
||||
amount_per_transfer_from_this = 20
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack/New()
|
||||
..()
|
||||
reagents.add_reagent("hyperzine", 12)
|
||||
reagents.add_reagent("tramadol", 8)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/survival
|
||||
name = "survival autoinjector"
|
||||
desc = "A special cocktail designed to keep you alive in the field should disaster seek to prevail."
|
||||
volume = 35
|
||||
amount_per_transfer_from_this = 35
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/survival/New()
|
||||
..()
|
||||
reagents.add_reagent("tricordrazine", 15)
|
||||
reagents.add_reagent("inaprovaline", 10)
|
||||
reagents.add_reagent("oxycodone", 5)
|
||||
reagents.add_reagent("methylphenidate", 5)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/combat
|
||||
name = "combat hypospray"
|
||||
desc = "A hypospray loaded with combat stimulants."
|
||||
item_state = "combat_hypo"
|
||||
icon_state = "combat_hypo"
|
||||
volume = 20
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/combat/New()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/combat/New()
|
||||
..()
|
||||
reagents.add_reagent("oxycodone", 5)
|
||||
reagents.add_reagent("synaptizine", 5)
|
||||
reagents.add_reagent("hyperzine", 5)
|
||||
reagents.add_reagent("arithrazine", 5)
|
||||
|
||||
|
||||
return
|
||||
|
||||
@@ -318,7 +318,7 @@ other types of metals and chemistry for reagents).
|
||||
id = "plasmacutter"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 500, "gold" = 500, "phoron" = 500)
|
||||
build_path = /obj/item/weapon/pickaxe/plasmacutter
|
||||
build_path = /obj/item/weapon/gun/energy/plasmacutter
|
||||
sort_string = "KAAAC"
|
||||
|
||||
/datum/design/item/weapon/mining/pick_diamond
|
||||
|
||||
@@ -695,7 +695,7 @@
|
||||
id = "plasmacutter_module"
|
||||
req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_PHORON = 4)
|
||||
materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250)
|
||||
build_path = /obj/item/rig_module/device/plasmacutter
|
||||
build_path = /obj/item/rig_module/mounted/plasmacutter
|
||||
|
||||
/datum/design/hardsuitmodules/jet_module
|
||||
name = "hardsuit maneuvering jets"
|
||||
|
||||
@@ -107,12 +107,17 @@
|
||||
|
||||
/obj/structure/boulder/Bumped(AM)
|
||||
. = ..()
|
||||
|
||||
if(istype(AM,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand))
|
||||
attackby(H.l_hand,H)
|
||||
var/obj/item/weapon/pickaxe/P = H.l_hand
|
||||
if(P.autodrill)
|
||||
attackby(H.l_hand,H)
|
||||
else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand)
|
||||
attackby(H.r_hand,H)
|
||||
var/obj/item/weapon/pickaxe/P = H.r_hand
|
||||
if(P.autodrill)
|
||||
attackby(H.r_hand,H)
|
||||
|
||||
else if(istype(AM,/mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = AM
|
||||
|
||||
@@ -8,11 +8,17 @@
|
||||
icon_state = "pick_brush"
|
||||
item_state = "syringe_0"
|
||||
digspeed = 20
|
||||
digspeed_unwielded = 20
|
||||
digspeed_wielded = 20
|
||||
force = 2.0
|
||||
desc = "Thick metallic wires for clearing away dust and loose scree (1 centimetre excavation depth)."
|
||||
excavation_amount = 0.5
|
||||
drill_sound = 'sound/weapons/thudswoosh.ogg'
|
||||
drill_verb = "brushing"
|
||||
w_class = 2
|
||||
can_wield = 0
|
||||
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/weapon/pickaxe/one_pick
|
||||
name = "1/6 pick"
|
||||
@@ -20,11 +26,17 @@
|
||||
icon_state = "pick1"
|
||||
item_state = "syringe_0"
|
||||
digspeed = 20
|
||||
digspeed_unwielded = 20
|
||||
digspeed_wielded = 20
|
||||
force = 2.0
|
||||
desc = "A miniature excavation tool for precise digging (2 centimetre excavation depth)."
|
||||
excavation_amount = 1
|
||||
drill_sound = 'sound/items/Screwdriver.ogg'
|
||||
drill_verb = "delicately picking"
|
||||
w_class = 2
|
||||
can_wield = 0
|
||||
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/weapon/pickaxe/two_pick
|
||||
name = "1/3 pick"
|
||||
@@ -32,11 +44,17 @@
|
||||
icon_state = "pick2"
|
||||
item_state = "syringe_0"
|
||||
digspeed = 20
|
||||
digspeed_unwielded = 20
|
||||
digspeed_wielded = 20
|
||||
force = 2.0
|
||||
desc = "A miniature excavation tool for precise digging (4 centimetre excavation depth)."
|
||||
excavation_amount = 2
|
||||
drill_sound = 'sound/items/Screwdriver.ogg'
|
||||
drill_verb = "delicately picking"
|
||||
w_class = 2
|
||||
can_wield = 0
|
||||
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/weapon/pickaxe/three_pick
|
||||
name = "1/2 pick"
|
||||
@@ -44,11 +62,17 @@
|
||||
icon_state = "pick3"
|
||||
item_state = "syringe_0"
|
||||
digspeed = 20
|
||||
digspeed_unwielded = 20
|
||||
digspeed_wielded = 20
|
||||
force = 2.0
|
||||
desc = "A miniature excavation tool for precise digging (6 centimetre excavation depth)."
|
||||
excavation_amount = 3
|
||||
drill_sound = 'sound/items/Screwdriver.ogg'
|
||||
drill_verb = "delicately picking"
|
||||
w_class = 2
|
||||
can_wield = 0
|
||||
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/weapon/pickaxe/four_pick
|
||||
name = "2/3 pick"
|
||||
@@ -56,11 +80,17 @@
|
||||
icon_state = "pick4"
|
||||
item_state = "syringe_0"
|
||||
digspeed = 20
|
||||
digspeed_unwielded = 20
|
||||
digspeed_wielded = 20
|
||||
force = 2.0
|
||||
desc = "A miniature excavation tool for precise digging (8 centimetre excavation depth)."
|
||||
excavation_amount = 4
|
||||
drill_sound = 'sound/items/Screwdriver.ogg'
|
||||
drill_verb = "delicately picking"
|
||||
w_class = 2
|
||||
can_wield = 0
|
||||
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/weapon/pickaxe/five_pick
|
||||
name = "5/6 pick"
|
||||
@@ -68,11 +98,17 @@
|
||||
icon_state = "pick5"
|
||||
item_state = "syringe_0"
|
||||
digspeed = 20
|
||||
digspeed_unwielded = 20
|
||||
digspeed_wielded = 20
|
||||
force = 2.0
|
||||
desc = "A miniature excavation tool for precise digging (10 centimetre excavation depth)."
|
||||
excavation_amount = 5
|
||||
drill_sound = 'sound/items/Screwdriver.ogg'
|
||||
drill_verb = "delicately picking"
|
||||
w_class = 2
|
||||
can_wield = 0
|
||||
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/weapon/pickaxe/six_pick
|
||||
name = "1/1 pick"
|
||||
@@ -80,23 +116,35 @@
|
||||
icon_state = "pick6"
|
||||
item_state = "syringe_0"
|
||||
digspeed = 20
|
||||
digspeed_unwielded = 20
|
||||
digspeed_wielded = 20
|
||||
force = 2.0
|
||||
desc = "A miniature excavation tool for precise digging (12 centimetre excavation depth)."
|
||||
excavation_amount = 6
|
||||
drill_sound = 'sound/items/Screwdriver.ogg'
|
||||
drill_verb = "delicately picking"
|
||||
w_class = 2
|
||||
can_wield = 0
|
||||
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/weapon/pickaxe/hand
|
||||
name = "hand pickaxe"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "pick_hand"
|
||||
item_state = "syringe_0"
|
||||
digspeed = 30
|
||||
digspeed = 20
|
||||
digspeed_unwielded = 20
|
||||
digspeed_wielded = 20
|
||||
force = 10.0
|
||||
desc = "A smaller, more precise version of the pickaxe (30 centimetre excavation depth)."
|
||||
excavation_amount = 15
|
||||
drill_sound = 'sound/items/Crowbar.ogg'
|
||||
drill_verb = "clearing"
|
||||
w_class = 3
|
||||
can_wield = 0
|
||||
|
||||
action_button_name = null
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Pack for holding pickaxes
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
/datum/surgery_step/fix_dead_tissue //Debridement
|
||||
priority = 2
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel = 100,
|
||||
/obj/item/weapon/scalpel = 100,
|
||||
/obj/item/weapon/material/knife = 75,
|
||||
/obj/item/weapon/material/shard = 50
|
||||
)
|
||||
@@ -173,7 +173,7 @@
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/weldingtool = 80,
|
||||
/obj/item/weapon/circular_saw = 60,
|
||||
/obj/item/weapon/pickaxe/plasmacutter = 100
|
||||
/obj/item/weapon/gun/energy/plasmacutter = 100
|
||||
)
|
||||
|
||||
can_infect = 0
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
/datum/surgery_step/robotics/repair_brute
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/weldingtool = 100,
|
||||
/obj/item/weapon/pickaxe/plasmacutter = 50
|
||||
/obj/item/weapon/gun/energy/plasmacutter = 50
|
||||
)
|
||||
|
||||
min_duration = 50
|
||||
@@ -197,7 +197,7 @@
|
||||
/datum/surgery_step/robotics/fix_organ_robotic //For artificial organs
|
||||
allowed_tools = list(
|
||||
/obj/item/stack/nanopaste = 100,
|
||||
/obj/item/weapon/bonegel = 30,
|
||||
/obj/item/weapon/bonegel = 30,
|
||||
/obj/item/weapon/screwdriver = 70
|
||||
)
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
..()
|
||||
cell = new /obj/item/weapon/cell/high(src)
|
||||
key = new(src)
|
||||
var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs
|
||||
var/image/I = new(icon = icon, icon_state = "[icon_state]_overlay", layer = src.layer + 0.2) //over mobs
|
||||
overlays += I
|
||||
turn_off() //so engine verbs are correctly set
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 326 KiB After Width: | Height: | Size: 370 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 128 KiB |
|
Before Width: | Height: | Size: 312 KiB After Width: | Height: | Size: 314 KiB |