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
This commit is contained in:
LordFowl
2017-03-22 18:14:37 -04:00
committed by GitHub
parent a2fbcaa18b
commit 3c64b62c27
128 changed files with 3734 additions and 1079 deletions
+5 -2
View File
@@ -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"
+1
View File
@@ -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>")
+1 -1
View File
@@ -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
+15 -5
View File
@@ -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)
-6
View File
@@ -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
+11
View File
@@ -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."
+17 -17
View File
@@ -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)
+110 -397
View File
@@ -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
View File
@@ -1,6 +1,7 @@
/area/ai_monitored
name = "AI Monitored Area"
var/obj/machinery/camera/motioncamera = null
station_area = 1
/area/ai_monitored/New()
+5
View File
@@ -23,6 +23,11 @@
luminosity = 0
else
luminosity = 1
if(centcomm_area)
centcom_areas |= src
if(station_area)
the_station_areas |= src
..()
+3
View File
@@ -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"
+26 -2
View File
@@ -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"
+9 -1
View File
@@ -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)
+3 -3
View File
@@ -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
+2 -1
View File
@@ -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()))
+1
View File
@@ -194,6 +194,7 @@
return
icon_state = "launcherbtt"
active = 0
update_icon()
return
+5
View File
@@ -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
+17 -2
View File
@@ -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)
+19 -2
View File
@@ -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
+116
View File
@@ -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
+48
View File
@@ -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
+8 -5
View File
@@ -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
+1 -3
View File
@@ -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
+11 -1
View File
@@ -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
+24 -33
View File
@@ -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
+2
View File
@@ -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
+17 -1
View File
@@ -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?
+2 -2
View File
@@ -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>"
+11 -1
View File
@@ -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
+1 -1
View File
@@ -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
..()
+1 -8
View File
@@ -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()
+3 -1
View File
@@ -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
/*
+3 -3
View File
@@ -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>"
+11
View File
@@ -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
+3 -3
View File
@@ -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"
+1
View File
@@ -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"
+36 -1
View File
@@ -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
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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()
+66 -4
View File
@@ -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)
+71
View File
@@ -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()
..()
+7
View File
@@ -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)
+4
View File
@@ -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)
+217
View File
@@ -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 ..()
File diff suppressed because it is too large Load Diff
+207 -70
View File
@@ -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)
+242
View File
@@ -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)
+14 -12
View File
@@ -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 -7
View File
@@ -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
+6
View File
@@ -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
+14 -22
View File
@@ -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)
+17 -1
View File
@@ -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
+3 -3
View File
@@ -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
+12
View File
@@ -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)
+26 -3
View File
@@ -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)
+75 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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
)
+1 -1
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 KiB

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 KiB

After

Width:  |  Height:  |  Size: 314 KiB

Some files were not shown because too many files have changed in this diff Show More