Merge pull request #11643 from Markolie/turfs

Lavaland fixes, continued
This commit is contained in:
Crazy Lemon
2019-06-02 17:58:56 -07:00
committed by GitHub
57 changed files with 797 additions and 664 deletions
@@ -280,7 +280,7 @@
dir = 8
},
/obj/machinery/iv_drip,
/obj/item/reagent_containers/food/drinks/waterbottle/large,
/obj/item/reagent_containers/glass/beaker/waterbottle/large,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"aR" = (
@@ -719,7 +719,7 @@
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
dir = 4
},
/turf/simulated/floor/engine,
/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -731,7 +731,7 @@
target_pressure = 4500
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
dir = 4
},
/turf/simulated/floor/engine,
/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -1108,10 +1108,6 @@
/obj/machinery/atmospherics/pipe/simple/visible/yellow,
/turf/simulated/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"bQ" = (
/obj/machinery/atmospherics/pipe/simple/visible/yellow,
/turf/simulated/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"bR" = (
/obj/machinery/optable,
/obj/effect/decal/cleanable/dirt,
@@ -2625,21 +2621,21 @@
"ft" = (
/obj/effect/turf_decal/box/white/corners,
/obj/structure/closet/crate,
/obj/item/reagent_containers/food/drinks/waterbottle/large{
/obj/item/reagent_containers/glass/beaker/waterbottle/large{
pixel_x = -3;
pixel_y = 3
},
/obj/item/reagent_containers/food/drinks/waterbottle/large{
/obj/item/reagent_containers/glass/beaker/waterbottle/large{
pixel_x = -3;
pixel_y = 3
},
/obj/item/reagent_containers/food/drinks/waterbottle/large,
/obj/item/reagent_containers/food/drinks/waterbottle/large,
/obj/item/reagent_containers/food/drinks/waterbottle/large{
/obj/item/reagent_containers/glass/beaker/waterbottle/large,
/obj/item/reagent_containers/glass/beaker/waterbottle/large,
/obj/item/reagent_containers/glass/beaker/waterbottle/large{
pixel_x = 3;
pixel_y = -3
},
/obj/item/reagent_containers/food/drinks/waterbottle/large{
/obj/item/reagent_containers/glass/beaker/waterbottle/large{
pixel_x = 3;
pixel_y = -3
},
@@ -3947,7 +3943,8 @@
"iI" = (
/obj/machinery/door/airlock/vault{
id_tag = "syndie_lavaland_vault";
req_access_txt = "150"
req_access_txt = "150";
locked = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -6036,7 +6033,7 @@
/area/ruin/unpowered/syndicate_lava_base/engineering)
"nf" = (
/obj/structure/sign/fire,
/turf/simulated/wall/mineral/plastitanium/nodiagonal,
/turf/simulated/wall/mineral/plastitanium/coated,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"nh" = (
/obj/machinery/telecomms/relay/preset/ruskie{
@@ -6628,7 +6625,7 @@
d2 = 2;
icon_state = "1-2"
},
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/on{
dir = 8
},
/turf/simulated/floor/engine,
@@ -6849,6 +6846,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/engine,
/area/ruin/unpowered/syndicate_lava_base/testlab)
"yd" = (
/obj/machinery/atmospherics/pipe/simple/visible/yellow,
/turf/simulated/wall/mineral/plastitanium/coated,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"yU" = (
/turf/simulated/wall/mineral/plastitanium/explosive,
/area/ruin/unpowered/syndicate_lava_base/chemistry)
@@ -6918,6 +6919,9 @@
},
/turf/simulated/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"RI" = (
/turf/simulated/wall/mineral/plastitanium/coated,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"RV" = (
/obj/structure/sign/fire,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -8687,9 +8691,9 @@ IJ
IJ
IJ
uB
ju
ju
ju
RI
RI
RI
ab
ab
ab
@@ -8737,10 +8741,10 @@ mF
nc
ju
bh
ju
RI
oz
ju
ju
RI
RI
nf
ab
ab
@@ -8835,12 +8839,12 @@ bF
ca
bL
bO
bQ
bi
Qt
bi
yd
oB
ju
ju
RI
RI
nf
ab
ab
@@ -8887,7 +8891,7 @@ bM
RV
tW
RE
ju
RI
oH
nf
ab
@@ -8937,7 +8941,7 @@ bN
bP
cl
cn
ju
RI
ab
ab
ab
@@ -8987,7 +8991,7 @@ mK
kD
cm
co
ju
RI
ab
ab
ab
@@ -9034,10 +9038,10 @@ Au
kD
bB
ju
ju
ju
ju
ju
RI
RI
RI
RI
ab
ab
ab
+5 -5
View File
@@ -17671,7 +17671,7 @@
/obj/item/reagent_containers/food/drinks/drinkingglass{
pixel_x = -5
},
/obj/item/reagent_containers/food/drinks/waterbottle,
/obj/item/reagent_containers/glass/beaker/waterbottle,
/turf/simulated/floor/plating,
/area/maintenance/fpmaint2)
"aDE" = (
@@ -18969,7 +18969,7 @@
/area/crew_quarters/courtroom)
"aGr" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/food/drinks/waterbottle,
/obj/item/reagent_containers/glass/beaker/waterbottle,
/turf/simulated/floor/plasteel{
icon_state = "red";
dir = 4
@@ -20138,7 +20138,7 @@
/area/crew_quarters/courtroom)
"aIX" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/waterbottle{
/obj/item/reagent_containers/glass/beaker/waterbottle{
pixel_x = 5
},
/obj/item/reagent_containers/food/drinks/drinkingglass{
@@ -22042,7 +22042,7 @@
/obj/item/reagent_containers/food/drinks/drinkingglass{
pixel_x = -5
},
/obj/item/reagent_containers/food/drinks/waterbottle{
/obj/item/reagent_containers/glass/beaker/waterbottle{
pixel_x = 5
},
/turf/simulated/floor/carpet,
@@ -22758,7 +22758,7 @@
/area/maintenance/fpmaint)
"aOw" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/waterbottle{
/obj/item/reagent_containers/glass/beaker/waterbottle{
pixel_x = 5
},
/obj/item/reagent_containers/food/drinks/drinkingglass{
+4 -1
View File
@@ -15,7 +15,7 @@
/turf/simulated/floor/pod,
/area/survivalpod)
"d" = (
/obj/machinery/smartfridge/survival_pod/loaded,
/obj/machinery/smartfridge/survival_pod,
/turf/simulated/floor/pod,
/area/survivalpod)
"e" = (
@@ -30,6 +30,9 @@
/area/survivalpod)
"g" = (
/obj/machinery/sleeper/survival_pod,
/obj/machinery/vending/wallmed1/survival_pod{
pixel_x = -24
},
/turf/simulated/floor/pod,
/area/survivalpod)
"h" = (
+5 -2
View File
@@ -9,7 +9,7 @@
/turf/simulated/wall/mineral/titanium/survival,
/area/survivalpod)
"c" = (
/obj/machinery/smartfridge/survival_pod/loaded,
/obj/machinery/smartfridge/survival_pod,
/turf/simulated/floor/pod,
/area/survivalpod)
"d" = (
@@ -39,6 +39,9 @@
/area/survivalpod)
"i" = (
/obj/machinery/sleeper/survival_pod,
/obj/machinery/vending/wallmed1/survival_pod{
pixel_x = -24
},
/turf/simulated/floor/pod,
/area/survivalpod)
"j" = (
@@ -161,7 +164,7 @@
icon_state = "cutout_lusty";
name = "lusty xenomorph maid"
},
/turf/simulated/floor/carpet/black,
/turf/simulated/floor/carpet/black,
/area/survivalpod)
"A" = (
/obj/structure/table/wood/fancy/black,
@@ -56,6 +56,9 @@
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume
name = "large dual port air vent"
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/on
on = TRUE
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/New()
..()
air1.volume = 1000
+3 -2
View File
@@ -13,15 +13,16 @@ var/global/datum/repository/air_alarm/air_alarm_repository = new()
if(SSticker && SSticker.current_state < GAME_STATE_PLAYING && istype(passed_alarm)) // Generating the list for the first time as the game hasn't started - no need to run through the machines list everything every time
alarms = cache_entry.data // Don't deleate the list
if(is_station_contact(passed_alarm.z)) // Still need sanity checks
if(is_station_contact(passed_alarm.z) && passed_alarm.remote_control) // Still need sanity checks
alarms[++alarms.len] = passed_alarm.get_nano_data_console()
else
for(var/obj/machinery/alarm/alarm in (monitored_alarms ? monitored_alarms : GLOB.air_alarms)) // Generating the whole list again is a bad habit but I can't be bothered to fix it right now
if(!monitored_alarms && !is_station_contact(alarm.z))
continue
if(!alarm.remote_control)
continue
alarms[++alarms.len] = alarm.get_nano_data_console()
cache_entry.timestamp = world.time //+ 10 SECONDS
cache_entry.data = alarms
return alarms
+3 -3
View File
@@ -1964,7 +1964,7 @@ var/list/ghostteleportlocs = list()
/area/traitor
name = "\improper Syndicate Base"
icon_state = "syndie_hall"
report_alerts = 0
report_alerts = FALSE
/area/traitor/rnd
name = "\improper Syndicate Research and Development"
@@ -2134,7 +2134,7 @@ var/list/ghostteleportlocs = list()
/area/awaymission
name = "\improper Strange Location"
icon_state = "away"
report_alerts = 0
report_alerts = FALSE
/area/awaymission/example
name = "\improper Strange Station"
@@ -2160,7 +2160,7 @@ var/list/ghostteleportlocs = list()
/area/awaycontent
name = "space"
report_alerts = 0
report_alerts = FALSE
/area/awaycontent/a1
icon_state = "awaycontent1"
+8 -7
View File
@@ -19,9 +19,9 @@
var/eject = null
var/debug = 0
var/debug = FALSE
var/requires_power = TRUE
var/always_unpowered = 0 //this gets overriden to 1 for space in area/New()
var/always_unpowered = FALSE //this gets overriden to 1 for space in area/New()
var/power_equip = TRUE
var/power_light = TRUE
@@ -33,7 +33,7 @@
var/static_equip
var/static_light = FALSE
var/static_environ
var/has_gravity = TRUE
var/list/apc = list()
var/no_air = null
@@ -128,10 +128,11 @@
/area/proc/atmosalert(danger_level, var/alarm_source, var/force = FALSE)
if(danger_level == ATMOS_ALARM_NONE)
SSalarms.atmosphere_alarm.clearAlarm(src, alarm_source)
else
SSalarms.atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level)
if(report_alerts)
if(danger_level == ATMOS_ALARM_NONE)
SSalarms.atmosphere_alarm.clearAlarm(src, alarm_source)
else
SSalarms.atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level)
//Check all the alarms before lowering atmosalm. Raising is perfectly fine. If force = 1 we don't care.
for(var/obj/machinery/alarm/AA in src)
+1
View File
@@ -36,6 +36,7 @@
name = "Secret Base"
icon_state = "dk_yellow"
ambientsounds = list('sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg')
report_alerts = FALSE
/area/ruin/unpowered/syndicate_lava_base/engineering
name = "Syndicate Lavaland Engineering"
+2 -2
View File
@@ -398,8 +398,8 @@
return
/atom/movable/proc/water_act(var/volume, var/temperature, var/source) //amount of water acting : temperature of water in kelvin : object that called it (for shennagins)
return 1
/atom/movable/proc/water_act(volume, temperature, source, method = TOUCH) //amount of water acting : temperature of water in kelvin : object that called it (for shennagins)
return TRUE
/atom/movable/proc/handle_buckled_mob_movement(newloc,direct)
if(!buckled_mob.Move(newloc, direct))
@@ -96,7 +96,7 @@
for(var/obj/item/implant/mindshield/I in H.contents)
if(I && I.implanted)
possible_traitors -= player
if(!H.job) //Golems, special events stuff, etc.
if(!H.job || H.mind.offstation_role) //Golems, special events stuff, etc.
possible_traitors -= player
//message_admins("Live Players: [playercount]")
//message_admins("Live Traitors: [traitorcount]")
@@ -344,6 +344,10 @@
to_chat(S, "<span class='warning'>We have created these for our own benefit. Aborting.</span>")
return FALSE
/obj/structure/shuttle/engine/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
to_chat(S, "<span class='warning'>This shuttle may be important to us later. Aborting.</span>")
return FALSE
////END CTRL CLICK FOR SWARMERS////
/mob/living/simple_animal/hostile/swarmer/proc/Fabricate(var/atom/fabrication_object,var/fabrication_cost = 0)
+1 -1
View File
@@ -532,7 +532,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
var/list/priority_targets = list()
for(var/datum/mind/possible_target in SSticker.minds)
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (possible_target.assigned_role != possible_target.special_role))
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (possible_target.assigned_role != possible_target.special_role) && !possible_target.offstation_role)
possible_targets += possible_target
for(var/role in roles)
if(possible_target.assigned_role == role)
+1 -1
View File
@@ -49,7 +49,7 @@
if(!employee.job_objectives.len)//If the employee had no objectives, don't need to process this.
continue
if(employee.assigned_role == employee.special_role) //If the character is an offstation character, skip them.
if(employee.assigned_role == employee.special_role || employee.offstation_role) //If the character is an offstation character, skip them.
continue
var/tasks_completed=0
+9 -7
View File
@@ -86,8 +86,8 @@
var/frequency = ATMOS_VENTSCRUB
//var/skipprocess = 0 //Experimenting
var/alarm_frequency = ATMOS_FIRE_FREQ
var/remote_control = 0
var/rcon_setting = 2
var/remote_control = TRUE
var/rcon_setting = RCON_AUTO
var/rcon_time = 0
var/locked = 1
var/datum/wires/alarm/wires = null
@@ -98,7 +98,7 @@
// Waiting on a device to respond.
// Specifies an id_tag. NULL means we aren't waiting.
var/waiting_on_device=null
var/waiting_on_device = null
var/mode = AALARM_MODE_SCRUBBING
var/preset = AALARM_PRESET_HUMAN
@@ -117,16 +117,18 @@
var/list/TLV = list()
var/report_danger_level = 1
var/report_danger_level = TRUE
var/automatic_emergency = 1 //Does the alarm automaticly respond to an emergency condition
var/automatic_emergency = TRUE //Does the alarm automaticly respond to an emergency condition
/obj/machinery/alarm/monitor
report_danger_level = 0
report_danger_level = FALSE
/obj/machinery/alarm/syndicate //general syndicate access
report_danger_level = 0
report_danger_level = FALSE
remote_control = FALSE
req_access = list(access_syndicate)
req_one_access = list()
/obj/machinery/alarm/monitor/server
preset = AALARM_PRESET_SERVER
+7 -7
View File
@@ -1130,10 +1130,10 @@
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?"
icon_state = "wallmed"
icon_deny = "wallmed-deny"
req_access_txt = "5"
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
req_access = list(access_medical)
density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude
products = list(/obj/item/stack/medical/bruise_pack = 2, /obj/item/stack/medical/ointment = 2, /obj/item/reagent_containers/hypospray/autoinjector = 4, /obj/item/healthanalyzer = 1)
contraband = list(/obj/item/reagent_containers/syringe/charcoal = 4,/obj/item/reagent_containers/syringe/antiviral = 4,/obj/item/reagent_containers/food/pill/tox = 1)
contraband = list(/obj/item/reagent_containers/syringe/charcoal = 4, /obj/item/reagent_containers/syringe/antiviral = 4, /obj/item/reagent_containers/food/pill/tox = 1)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0)
/obj/machinery/vending/wallmed2
@@ -1141,10 +1141,10 @@
desc = "Wall-mounted Medical Equipment dispenser."
icon_state = "wallmed"
icon_deny = "wallmed-deny"
req_access_txt = "5"
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
products = list(/obj/item/reagent_containers/hypospray/autoinjector = 5,/obj/item/reagent_containers/syringe/charcoal = 3,/obj/item/stack/medical/bruise_pack = 3,
/obj/item/stack/medical/ointment =3,/obj/item/healthanalyzer = 3)
req_access = list(access_medical)
density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude
products = list(/obj/item/reagent_containers/hypospray/autoinjector = 5, /obj/item/reagent_containers/syringe/charcoal = 3, /obj/item/stack/medical/bruise_pack = 3,
/obj/item/stack/medical/ointment = 3, /obj/item/healthanalyzer = 3)
contraband = list(/obj/item/reagent_containers/food/pill/tox = 3)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0)
@@ -1,16 +1,23 @@
//temporary visual effects
/obj/effect/temp_visual
anchored = 1
icon_state = "nothing"
anchored = TRUE
layer = ABOVE_MOB_LAYER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
var/duration = 10
var/duration = 10 //in deciseconds
var/randomdir = TRUE
var/timerid
/obj/effect/temp_visual/New()
/obj/effect/temp_visual/Initialize(mapload)
. = ..()
if(randomdir)
setDir(pick(cardinal))
QDEL_IN(src, duration)
timerid = QDEL_IN(src, duration)
/obj/effect/temp_visual/Destroy()
. = ..()
deltimer(timerid)
/obj/effect/temp_visual/singularity_act()
return
@@ -24,7 +31,7 @@
/obj/effect/temp_visual/dir_setting
randomdir = FALSE
/obj/effect/temp_visual/dir_setting/New(loc, set_dir)
/obj/effect/temp_visual/dir_setting/Initialize(mapload, set_dir)
if(set_dir)
setDir(set_dir)
..()
. = ..()
+4
View File
@@ -149,6 +149,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
/obj/item/blob_act()
qdel(src)
/obj/item/water_act(volume, temperature, source, method = TOUCH)
. = ..()
extinguish()
/obj/item/verb/move_to_top()
set name = "Move To Top"
set category = null
+4
View File
@@ -22,6 +22,10 @@
owned = 0
return ..()
/obj/item/toy/carpplushie/dehy_carp/water_act(volume, temperature, source, method = TOUCH)
. = ..()
if(volume >= 1)
Swell()
/obj/item/toy/carpplushie/dehy_carp/afterattack(obj/O, mob/user,proximity)
if(!proximity) return
@@ -205,7 +205,12 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
else
..()
//Step two - washing..... it's actually in washing machine code.
//Step two - washing (also handled by water reagent code and washing machine code)
/obj/item/stack/sheet/hairlesshide/water_act(volume, temperature, source, method = TOUCH)
. = ..()
if(volume >= 10)
new /obj/item/stack/sheet/wetleather(get_turf(src), amount)
qdel(src)
//Step three - drying
/obj/item/stack/sheet/wetleather/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
@@ -385,8 +385,8 @@ var/global/list/datum/stack_recipe/brass_recipes = list (\
GLOBAL_LIST_INIT(plastic_recipes, list(
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = 1, on_floor = 1, time = 40), \
new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2), \
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/empty), \
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/large/empty,3), \
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), \
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), \
new /datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("plastic ashtray", /obj/item/ashtray/plastic, 2, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("plastic fork", /obj/item/kitchen/utensil/pfork, 1, on_floor = 1), \
+2 -2
View File
@@ -600,7 +600,7 @@
wateract = (W.wash(user, src))
busy = 0
if(wateract)
W.water_act(20,310.15,src)
W.water_act(20, 310.15, src)
if("Disconnect")
user.visible_message("<span class='notice'>[user] starts disconnecting [src].</span>", "<span class='notice'>You begin disconnecting [src]...</span>")
if(do_after(user, 40 * O.toolspeed, target = src))
@@ -633,7 +633,7 @@
wateract = (O.wash(user, src))
busy = 0
if(wateract)
O.water_act(20,310.15,src)
O.water_act(20, 310.15, src)
/obj/structure/sink/update_icon()
..()
+17
View File
@@ -18,8 +18,25 @@
visibilityChanged()
/turf/simulated/proc/break_tile()
return
/turf/simulated/proc/burn_tile()
return
/turf/simulated/proc/water_act(volume, temperature, source)
if(volume >= 3)
MakeSlippery()
for(var/mob/living/carbon/slime/M in src)
M.apply_water()
var/hotspot = (locate(/obj/effect/hotspot) in src)
if(hotspot)
var/datum/gas_mixture/lowertemp = remove_air(air.total_moles())
lowertemp.temperature = max(min(lowertemp.temperature-2000,lowertemp.temperature / 2), 0)
lowertemp.react()
assume_air(lowertemp)
qdel(hotspot)
/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost
if(wet >= wet_setting)
+20 -17
View File
@@ -120,30 +120,31 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","
/turf/simulated/floor/proc/make_plating()
return ChangeTurf(/turf/simulated/floor/plating)
/turf/simulated/floor/ChangeTurf(turf/simulated/floor/T, defer_change = FALSE, keep_icon = TRUE)
if(!istype(src,/turf/simulated/floor)) return ..() //fucking turfs switch the fucking src of the fucking running procs
if(!ispath(T,/turf/simulated/floor)) return ..()
var/old_icon = icon_regular_floor
var/old_plating = icon_plating
var/old_dir = dir
/turf/simulated/floor/ChangeTurf(turf/simulated/floor/T, defer_change = FALSE, ignore_air = FALSE)
if(!istype(src,/turf/simulated/floor))
return ..() //fucking turfs switch the fucking src of the fucking running procs
if(!ispath(T,/turf/simulated/floor))
return ..()
var/turf/simulated/floor/W = ..()
if(keep_icon)
W.icon_regular_floor = old_icon
W.icon_plating = old_plating
W.dir = old_dir
W.update_icon()
return W
/turf/simulated/floor/attackby(obj/item/C as obj, mob/user as mob, params)
if(!C || !user)
return 1
return TRUE
if(..())
return 1
return TRUE
if(intact && iscrowbar(C))
pry_tile(C, user)
return 1
return TRUE
if(intact && istype(C, /obj/item/stack/tile))
try_replace_tile(C, user, params)
if(istype(C, /obj/item/pipe))
var/obj/item/pipe/P = C
if(P.pipe_type != -1) // ANY PIPE
@@ -152,6 +153,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","
"<span class='notice'>You slide [P] along \the [src].</span>", \
"You hear the scrape of metal against something.")
user.drop_item()
if(P.is_bent_pipe()) // bent pipe rotation fix see construction.dm
P.dir = 5
if(user.dir == 1)
@@ -161,13 +163,14 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","
else if(user.dir == 4)
P.dir = 10
else
P.dir = user.dir
P.setDir(user.dir)
P.x = src.x
P.y = src.y
P.z = src.z
P.loc = src
return 1
return 0
P.forceMove(src)
return TRUE
return FALSE
/turf/simulated/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
if(T.turf_type == type)
+6 -3
View File
@@ -18,6 +18,9 @@
if(prob(floor_variance))
icon_state = "[environment_type][rand(0,12)]"
/turf/simulated/floor/plating/asteroid/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
/turf/simulated/floor/plating/asteroid/burn_tile()
return
@@ -58,14 +61,14 @@
gets_dug()
return
if(istype(W,/obj/item/storage/bag/ore))
else if(istype(W,/obj/item/storage/bag/ore))
var/obj/item/storage/bag/ore/S = W
if(S.collection_mode == 1)
for(var/obj/item/stack/ore/O in src.contents)
O.attackby(W,user)
return
if(istype(W, /obj/item/stack/tile))
else if(istype(W, /obj/item/stack/tile))
var/obj/item/stack/tile/Z = W
if(!Z.use(1))
return
@@ -164,7 +167,7 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
has_data = TRUE
/turf/simulated/floor/plating/asteroid/airless/cave/volcanic
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast = 50, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, \
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, \
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 40, /mob/living/simple_animal/hostile/spawner/lavaland = 2, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion = 30, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, \
SPAWN_MEGAFAUNA = 6, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10)
+29 -10
View File
@@ -25,16 +25,16 @@
/turf/simulated/floor/plating/attackby(obj/item/C, mob/user, params)
if(..())
return 1
return TRUE
if(istype(C, /obj/item/stack/rods))
if(broken || burnt)
to_chat(user, "<span class='warning'>Repair the plating first!</span>")
return 1
return TRUE
var/obj/item/stack/rods/R = C
if(R.get_amount() < 2)
to_chat(user, "<span class='warning'>You need two rods to make a reinforced floor!</span>")
return 1
return TRUE
else
to_chat(user, "<span class='notice'>You begin reinforcing the floor...</span>")
if(do_after(user, 30 * C.toolspeed, target = src))
@@ -43,7 +43,7 @@
playsound(src, C.usesound, 80, 1)
R.use(2)
to_chat(user, "<span class='notice'>You reinforce the floor.</span>")
return 1
return TRUE
else if(istype(C, /obj/item/stack/tile))
if(!broken && !burnt)
@@ -54,20 +54,20 @@
playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
else
to_chat(user, "<span class='warning'>This section is too damaged to support a tile! Use a welder to fix the damage.</span>")
return 1
return TRUE
else if(istype(C, /obj/item/weldingtool))
var/obj/item/weldingtool/welder = C
if( welder.isOn() && (broken || burnt) )
if(welder.remove_fuel(0,user))
if(welder.isOn() && (broken || burnt))
if(welder.remove_fuel(0, user))
to_chat(user, "<span class='danger'>You fix some dents on the broken plating.</span>")
playsound(src, welder.usesound, 80, 1)
overlays -= current_overlay
current_overlay = null
burnt = 0
broken = 0
burnt = FALSE
broken = FALSE
update_icon()
return 1
return TRUE
/turf/simulated/floor/plating/airless
icon_state = "plating"
@@ -103,6 +103,9 @@
/turf/simulated/floor/engine/attack_hand(mob/user as mob)
user.Move_Pulled(src)
/turf/simulated/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
/turf/simulated/floor/engine/attackby(obj/item/C as obj, mob/user as mob, params)
if(!C || !user)
return
@@ -115,6 +118,7 @@
new /obj/item/stack/rods(src, 2)
ChangeTurf(/turf/simulated/floor/plating)
return
if(istype(C, /obj/item/stack/sheet/plasteel) && !insulated) //Insulating the floor
to_chat(user, "<span class='notice'>You begin insulating [src]...</span>")
if(do_after(user, 40, target = src) && !insulated) //You finish insulating the insulated insulated insulated insulated insulated insulated insulated insulated vacuum floor
@@ -220,6 +224,9 @@
/turf/simulated/floor/snow/ex_act(severity)
return
/turf/simulated/floor/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
/turf/simulated/floor/plating/metalfoam
name = "foamed metal plating"
icon_state = "metalfoam"
@@ -236,6 +243,9 @@
if(MFOAM_IRON)
icon_state = "ironfoam"
/turf/simulated/floor/plating/metalfoam/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
/turf/simulated/floor/plating/metalfoam/attackby(var/obj/item/C, mob/user, params)
if(..())
return 1
@@ -277,3 +287,12 @@
/turf/simulated/floor/plating/abductor/New()
..()
icon_state = "alienpod[rand(1,9)]"
/turf/simulated/floor/plating/abductor/break_tile()
return //unbreakable
/turf/simulated/floor/plating/abductor/burn_tile()
return //unburnable
/turf/simulated/floor/plating/abductor/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
+1 -1
View File
@@ -22,7 +22,7 @@
var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles
var/last_act = 0
var/scan_state = null //Holder for the image we display when we're pinged by a mining scanner
var/defer_change = 0
var/defer_change = FALSE
/turf/simulated/mineral/New()
if (!canSmoothWith)
@@ -275,8 +275,19 @@
icon_state = "map-overspace"
fixed_underlay = list("space"=1)
/turf/simulated/wall/mineral/plastitanium/coated
name = "coated wall"
max_temperature = INFINITY
icon_state = "map-shuttle_nd"
smooth = SMOOTH_MORE
/turf/simulated/wall/mineral/plastitanium/coated/Initialize(mapload)
. = ..()
desc += " It seems to have additional plating to protect against heat."
/turf/simulated/wall/mineral/plastitanium/explosive
var/explosive_wall_group = EXPLOSIVE_WALL_GROUP_SYNDICATE_BASE
icon_state = "map-shuttle_nd"
smooth = SMOOTH_MORE
/turf/simulated/wall/mineral/plastitanium/explosive/Initialize(mapload)
+3 -4
View File
@@ -180,11 +180,11 @@
if(L)
qdel(L)
/turf/proc/TerraformTurf(path, defer_change = FALSE, keep_icon = TRUE, ignore_air = FALSE)
return ChangeTurf(path, defer_change, keep_icon, ignore_air)
/turf/proc/TerraformTurf(path, defer_change = FALSE, ignore_air = FALSE)
return ChangeTurf(path, defer_change, ignore_air)
//Creates a new turf
/turf/proc/ChangeTurf(path, defer_change = FALSE, keep_icon = TRUE, ignore_air = FALSE)
/turf/proc/ChangeTurf(path, defer_change = FALSE, ignore_air = FALSE)
if(!path)
return
if(!use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed
@@ -209,7 +209,6 @@
if(!defer_change)
W.AfterChange(ignore_air)
W.blueprint_data = old_blueprint_data
recalc_atom_opacity()
@@ -176,7 +176,7 @@ var/global/dmm_suite/preloader/_preloader = new
for(var/t in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])))
var/turf/T = t
//we do this after we load everything in. if we don't; we'll have weird atmos bugs regarding atmos adjacent turfs
T.AfterChange(1,keep_cabling = TRUE)
T.AfterChange(1, keep_cabling = TRUE)
return bounds
/**
@@ -321,7 +321,7 @@ var/global/dmm_suite/preloader/_preloader = new
var/turf/T = locate(x,y,z)
if(T)
if(ispath(path, /turf))
T.ChangeTurf(path, 1, 0)
T.ChangeTurf(path, TRUE)
instance = T
else if(ispath(path, /area))
@@ -3,7 +3,7 @@
/area/awaymission/academy
name = "\improper Academy Asteroids"
icon_state = "away"
report_alerts = 0
report_alerts = FALSE
/area/awaymission/academy/headmaster
name = "\improper Academy Fore Block"
@@ -3,7 +3,7 @@
/area/awaymission/centcomAway
name = "XCC-P5831"
icon_state = "away"
report_alerts = 0
report_alerts = FALSE
/area/awaymission/centcomAway/general
name = "XCC-P5831"
@@ -354,31 +354,6 @@
icon_state = "goonbag"
list_reagents = list("wine" = 70)
/obj/item/reagent_containers/food/drinks/waterbottle
name = "bottle of water"
desc = "A bottle of water filled at an old Earth bottling facility."
icon = 'icons/obj/drinks.dmi'
icon_state = "smallbottle"
item_state = "bottle"
list_reagents = list("water" = 49.5, "fluorine" = 0.5) //see desc, don't think about it too hard
materials = list(MAT_GLASS = 0)
volume = 50
amount_per_transfer_from_this = 10
/obj/item/reagent_containers/food/drinks/waterbottle/empty
list_reagents = list()
/obj/item/reagent_containers/food/drinks/waterbottle/large
desc = "A fresh commercial-sized bottle of water."
icon_state = "largebottle"
materials = list(MAT_GLASS = 0)
list_reagents = list("water" = 100)
volume = 100
amount_per_transfer_from_this = 20
/obj/item/reagent_containers/food/drinks/waterbottle/large/empty
list_reagents = list()
/obj/item/reagent_containers/food/drinks/oilcan
name = "oil can"
desc = "Contains oil intended for use on cyborgs, robots, and other synthetics."
@@ -237,8 +237,9 @@
var/datum/species/monkey_type = /datum/species/monkey
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature)
if(volume >= 5)
/obj/item/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature, source, method = TOUCH)
. = ..()
if(volume >= 1)
return Expand()
/obj/item/reagent_containers/food/snacks/monkeycube/wash(mob/user, atom/source)
@@ -11,17 +11,15 @@
idle_power_usage = 5
active_power_usage = 100
var/max_n_of_items = 1500
var/icon_on = "smartfridge"
var/icon_off = "smartfridge-off"
var/icon_panel = "smartfridge-panel"
var/item_quants = list()
var/seconds_electrified = 0;
var/shoot_inventory = 0
var/locked = 0
var/scan_id = 1
var/is_secure = 0
var/seconds_electrified = 0
var/shoot_inventory = FALSE
var/locked = FALSE
var/scan_id = TRUE
var/is_secure = FALSE
var/can_dry = FALSE
var/drying = FALSE
var/visible_contents = TRUE
var/datum/wires/smartfridge/wires = null
/obj/machinery/smartfridge/New()
@@ -65,8 +63,6 @@
desc = "When you need seeds fast!"
icon = 'icons/obj/vending.dmi'
icon_state = "seeds"
icon_on = "seeds"
icon_off = "seeds-off"
/obj/machinery/smartfridge/seeds/accept_check(obj/item/O)
if(istype(O,/obj/item/seeds/))
@@ -77,7 +73,6 @@
name = "\improper Refrigerated Medicine Storage"
desc = "A refrigerated storage unit for storing medicine and chemicals."
icon_state = "smartfridge" //To fix the icon in the map editor.
icon_on = "smartfridge"
/obj/machinery/smartfridge/medbay/accept_check(obj/item/O)
if(istype(O,/obj/item/reagent_containers/glass))
@@ -104,7 +99,6 @@
name = "\improper Secure Refrigerated Medicine Storage"
desc = "A refrigerated storage unit for storing medicine and chemicals."
icon_state = "smartfridge" //To fix the icon in the map editor.
icon_on = "smartfridge"
req_one_access_txt = "5;33"
/obj/machinery/smartfridge/secure/medbay/accept_check(obj/item/O)
@@ -122,7 +116,6 @@
name = "\improper Smart Chemical Storage"
desc = "A refrigerated storage unit for medicine and chemical storage."
icon_state = "smartfridge" //To fix the icon in the map editor.
icon_on = "smartfridge"
req_access_txt = "33"
var/list/spawn_meds = list()
@@ -162,12 +155,7 @@
desc = "A machine capable of storing a variety of disks. Denoted by most as the DSU (disk storage unit)."
icon_state = "disktoaster"
pass_flags = PASSTABLE
/obj/machinery/smartfridge/disks/accept_check(obj/item/O)
if(istype(O, /obj/item/disk/))
return TRUE
else
return FALSE
visible_contents = FALSE
// ----------------------------
// Virology Medical Smartfridge
@@ -227,7 +215,7 @@
/obj/machinery/smartfridge/update_icon()
if(stat & (BROKEN|NOPOWER))
icon_state = "[initial(icon_state)]-off"
else
else if(visible_contents)
switch(contents.len)
if(0)
icon_state = "[initial(icon_state)]"
@@ -237,6 +225,8 @@
icon_state = "[initial(icon_state)]2"
if(76 to INFINITY)
icon_state = "[initial(icon_state)]3"
else
icon_state = "[initial(icon_state)]"
/*******************
* Item Adding
@@ -460,13 +450,12 @@
name = "drying rack"
desc = "A wooden contraption, used to dry plant products, food and leather."
icon = 'icons/obj/hydroponics/equipment.dmi'
icon_state = "drying_rack_on"
icon_state = "drying_rack"
use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 200
icon_on = "drying_rack_on"
icon_off = "drying_rack"
can_dry = TRUE
visible_contents = FALSE
/obj/machinery/smartfridge/drying_rack/New()
..()
@@ -524,6 +513,7 @@
/obj/machinery/smartfridge/drying_rack/update_icon()
..()
overlays.Cut()
if(drying)
overlays += "drying_rack_drying"
@@ -0,0 +1,357 @@
/area/survivalpod
name = "\improper Emergency Shelter"
icon_state = "away"
requires_power = FALSE
has_gravity = TRUE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/obj/item/survivalcapsule
name = "bluespace shelter capsule"
desc = "An emergency shelter stored within a pocket of bluespace."
icon_state = "capsule"
icon = 'icons/obj/mining.dmi'
w_class = WEIGHT_CLASS_TINY
origin_tech = "engineering=3;bluespace=3"
var/template_id = "shelter_alpha"
var/datum/map_template/shelter/template
var/used = FALSE
/obj/item/survivalcapsule/proc/get_template()
if(template)
return
template = shelter_templates[template_id]
if(!template)
log_runtime("Shelter template ([template_id]) not found!", src)
qdel(src)
/obj/item/survivalcapsule/examine(mob/user)
. = ..()
get_template()
to_chat(user, "This capsule has the [template.name] stored.")
to_chat(user, template.description)
/obj/item/survivalcapsule/attack_self()
// Can't grab when capsule is New() because templates aren't loaded then
get_template()
if(used == FALSE)
loc.visible_message("<span class='warning'>[src] begins to shake. Stand back!</span>")
used = TRUE
sleep(50)
var/turf/deploy_location = get_turf(src)
var/status = template.check_deploy(deploy_location)
switch(status)
if(SHELTER_DEPLOY_BAD_AREA)
loc.visible_message("<span class='warning'>[src] will not function in this area.</span>")
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
var/width = template.width
var/height = template.height
loc.visible_message("<span class='warning'>[src] doesn't have room to deploy! You need to clear a [width]x[height] area!</span>")
if(status != SHELTER_DEPLOY_ALLOWED)
used = FALSE
return
playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
var/turf/T = deploy_location
if(!is_mining_level(T.z))//only report capsules away from the mining/lavaland level
message_admins("[key_name_admin(usr)] ([ADMIN_QUE(usr,"?")]) ([ADMIN_FLW(usr,"FLW")]) activated a bluespace capsule away from the mining level! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)")
log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [T.x], [T.y], [T.z]")
template.load(deploy_location, centered = TRUE)
new /obj/effect/particle_effect/smoke(get_turf(src))
qdel(src)
/obj/item/survivalcapsule/luxury
name = "luxury bluespace shelter capsule"
desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace."
origin_tech = "engineering=3;bluespace=4"
template_id = "shelter_beta"
//Pod turfs and objects
//Window
/obj/structure/window/shuttle/survival_pod
name = "pod window"
icon = 'icons/obj/smooth_structures/pod_window.dmi'
icon_state = "smooth"
dir = FULLTILE_WINDOW_DIR
max_integrity = 100
fulltile = TRUE
reinf = TRUE
heat_resistance = 1600
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100)
smooth = SMOOTH_MORE
canSmoothWith = list(/turf/simulated/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod)
explosion_block = 3
level = 3
glass_type = /obj/item/stack/sheet/titaniumglass
glass_amount = 2
/obj/structure/window/reinforced/survival_pod
name = "pod window"
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "pwindow"
//Floors
/turf/simulated/floor/pod
name = "pod floor"
icon_state = "podfloor"
icon_regular_floor = "podfloor"
floor_tile = /obj/item/stack/tile/pod
/turf/simulated/floor/pod/light
icon_state = "podfloor_light"
icon_regular_floor = "podfloor_light"
floor_tile = /obj/item/stack/tile/pod/light
/turf/simulated/floor/pod/dark
icon_state = "podfloor_dark"
icon_regular_floor = "podfloor_dark"
floor_tile = /obj/item/stack/tile/pod/dark
//Door
/obj/machinery/door/airlock/survival_pod
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_pod
/obj/machinery/door/airlock/survival_pod/glass
opacity = FALSE
glass = TRUE
/obj/structure/door_assembly/door_assembly_pod
name = "pod airlock assembly"
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
base_name = "pod airlock"
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
airlock_type = /obj/machinery/door/airlock/survival_pod
glass_type = /obj/machinery/door/airlock/survival_pod/glass
//Windoor
/obj/machinery/door/window/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "windoor"
base_state = "windoor"
//Table
/obj/structure/table/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "table"
smooth = SMOOTH_FALSE
//Sleeper
/obj/machinery/sleeper/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "sleeper-open"
density = FALSE
/obj/machinery/sleeper/survival_pod/New()
..()
component_parts = list()
component_parts += new /obj/item/circuitboard/sleeper/survival(null)
var/obj/item/stock_parts/matter_bin/B = new(null)
B.rating = initial_bin_rating
component_parts += B
component_parts += new /obj/item/stock_parts/manipulator(null)
component_parts += new /obj/item/stock_parts/console_screen(null)
component_parts += new /obj/item/stock_parts/console_screen(null)
component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
//NanoMed
/obj/machinery/vending/wallmed1/survival_pod
name = "survival pod medical supply"
desc = "Wall-mounted Medical Equipment dispenser. This one seems just a tiny bit smaller."
req_access = list()
refill_canister = null
products = list(/obj/item/reagent_containers/food/pill/patch/styptic = 5,
/obj/item/reagent_containers/food/pill/patch/silver_sulf = 5,
/obj/item/reagent_containers/food/pill/charcoal = 2,
/obj/item/stack/medical/bruise_pack/advanced = 1,
/obj/item/stack/medical/ointment/advanced = 1,
/obj/item/reagent_containers/hypospray/autoinjector = 2,
/obj/item/stack/medical/splint = 1)
contraband = list(/obj/item/reagent_containers/food/pill/tox = 2,
/obj/item/reagent_containers/food/pill/morphine = 2)
//Computer
/obj/item/gps/computer
name = "pod computer"
icon_state = "pod_computer"
icon = 'icons/obj/lavaland/pod_computer.dmi'
anchored = 1
density = 1
pixel_y = -32
/obj/item/gps/computer/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench))
playsound(loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles the gps.</span>", \
"<span class='notice'>You start to disassemble the gps...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20 * W.toolspeed, target = src))
new /obj/item/gps(loc)
qdel(src)
return ..()
/obj/item/gps/computer/attack_hand(mob/user)
attack_self(user)
//Bed
/obj/structure/bed/pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "bed"
//Survival Storage Unit
/obj/machinery/smartfridge/survival_pod
name = "survival pod storage"
desc = "A heated storage unit."
icon_state = "donkvendor"
icon = 'icons/obj/lavaland/donkvendor.dmi'
light_range = 8
light_power = 1.2
light_color = "#DDFFD3"
max_n_of_items = 10
pixel_y = -4
can_deconstruct = FALSE
var/empty = FALSE
/obj/machinery/smartfridge/survival_pod/Initialize(mapload)
. = ..()
if(empty)
return
for(var/i in 1 to 5)
var/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak/W = new(src)
load(W)
if(prob(50))
var/obj/item/storage/pill_bottle/dice/D = new(src)
load(D)
else
var/obj/item/instrument/guitar/G = new(src)
load(G)
/obj/machinery/smartfridge/survival_pod/update_icon()
return
/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O)
return isitem(O)
/obj/machinery/smartfridge/survival_pod/empty
name = "dusty survival pod storage"
desc = "A heated storage unit. This one's seen better days."
empty = TRUE
//Fans
/obj/structure/fans
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "fans"
name = "environmental regulation system"
desc = "A large machine releasing a constant gust of air."
anchored = 1
density = 1
var/arbitraryatmosblockingvar = 1
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 5
/obj/structure/fans/Initialize(loc)
..()
air_update_turf(1)
/obj/structure/fans/Destroy()
arbitraryatmosblockingvar = 0
air_update_turf(1)
return ..()
/obj/structure/fans/CanAtmosPass(turf/T)
return !arbitraryatmosblockingvar
/obj/structure/fans/deconstruct()
if(buildstacktype)
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/structure/fans/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench))
playsound(loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles the fan.</span>", \
"<span class='notice'>You start to disassemble the fan...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20 * W.toolspeed, target = src))
deconstruct()
return ..()
/obj/structure/fans/tiny
name = "tiny fan"
desc = "A tiny fan, releasing a thin gust of air."
layer = TURF_LAYER+0.1
density = 0
icon_state = "fan_tiny"
buildstackamount = 2
/obj/structure/fans/tiny/invisible
name = "air flow blocker"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
unacidable = TRUE
invisibility = INVISIBILITY_ABSTRACT
//Signs
/obj/structure/sign/mining
name = "nanotrasen mining corps sign"
desc = "A sign of relief for weary miners, and a warning for would-be competitors to Nanotrasen's mining claims."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "ntpod"
/obj/structure/sign/mining/survival
name = "shelter sign"
desc = "A high visibility sign designating a safe shelter."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "survival"
//Fluff
/obj/structure/tubes
icon_state = "tubes"
icon = 'icons/obj/lavaland/survival_pod.dmi'
name = "tubes"
anchored = 1
layer = MOB_LAYER - 0.2
density = 0
/obj/structure/tubes/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench))
playsound(loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles [src].</span>", \
"<span class='notice'>You start to disassemble [src]...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20 * W.toolspeed, target = src))
new /obj/item/stack/rods(loc)
qdel(src)
return ..()
/obj/item/fakeartefact
name = "expensive forgery"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
var/possible = list(/obj/item/ship_in_a_bottle,
/obj/item/gun/energy/pulse,
/obj/item/sleeping_carp_scroll,
/obj/item/shield/changeling,
/obj/item/lava_staff,
/obj/item/katana/energy,
/obj/item/hierophant_staff,
/obj/item/storage/toolbox/green/memetic,
/obj/item/gun/projectile/automatic/l6_saw,
/obj/item/gun/magic/staff/chaos,
/obj/item/gun/magic/staff/spellblade,
/obj/item/gun/magic/wand/death,
/obj/item/gun/magic/wand/fireball,
/obj/item/stack/telecrystal/twenty,
/obj/item/banhammer)
/obj/item/fakeartefact/New()
. = ..()
var/obj/item/I = pick(possible)
name = initial(I.name)
icon = initial(I.icon)
desc = initial(I.desc)
icon_state = initial(I.icon_state)
item_state = initial(I.item_state)
@@ -198,7 +198,7 @@
user.visible_message("<span class='danger'>[user] turns \the [T] into [transform_string]!</span>")
message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>).")
log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).")
T.TerraformTurf(turf_type, keep_icon = FALSE)
T.TerraformTurf(turf_type)
timer = world.time + create_cooldown
qdel(L)
else
@@ -207,7 +207,7 @@
return
else
user.visible_message("<span class='danger'>[user] turns \the [T] into [reset_string]!</span>")
T.TerraformTurf(reset_turf_type, keep_icon = FALSE)
T.TerraformTurf(reset_turf_type)
timer = world.time + reset_cooldown
playsound(T,'sound/magic/fireball.ogg', 200, 1)
@@ -5,8 +5,6 @@
desc = "A completely indestructible chunk of crystal, rumoured to predate the start of this universe. It looks like you could store things inside it."
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "blackbox"
icon_on = "blackbox"
icon_off = "blackbox"
luminosity = 8
max_n_of_items = INFINITY
unacidable = 1
-348
View File
@@ -292,351 +292,3 @@
colorindex = 0
icon_state = "mobcap[colorindex]"
update_icon()
/*****************************Survival Pod********************************/
/area/survivalpod
name = "\improper Emergency Shelter"
icon_state = "away"
requires_power = FALSE
has_gravity = TRUE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/obj/item/survivalcapsule
name = "bluespace shelter capsule"
desc = "An emergency shelter stored within a pocket of bluespace."
icon_state = "capsule"
icon = 'icons/obj/mining.dmi'
w_class = WEIGHT_CLASS_TINY
origin_tech = "engineering=3;bluespace=3"
var/template_id = "shelter_alpha"
var/datum/map_template/shelter/template
var/used = FALSE
/obj/item/survivalcapsule/proc/get_template()
if(template)
return
template = shelter_templates[template_id]
if(!template)
log_runtime("Shelter template ([template_id]) not found!", src)
qdel(src)
/obj/item/survivalcapsule/examine(mob/user)
. = ..()
get_template()
to_chat(user, "This capsule has the [template.name] stored.")
to_chat(user, template.description)
/obj/item/survivalcapsule/attack_self()
// Can't grab when capsule is New() because templates aren't loaded then
get_template()
if(used == FALSE)
loc.visible_message("<span class='warning'>[src] begins to shake. Stand back!</span>")
used = TRUE
sleep(50)
var/turf/deploy_location = get_turf(src)
var/status = template.check_deploy(deploy_location)
switch(status)
if(SHELTER_DEPLOY_BAD_AREA)
loc.visible_message("<span class='warning'>[src] will not function in this area.</span>")
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
var/width = template.width
var/height = template.height
loc.visible_message("<span class='warning'>[src] doesn't have room to deploy! You need to clear a [width]x[height] area!</span>")
if(status != SHELTER_DEPLOY_ALLOWED)
used = FALSE
return
playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
var/turf/T = deploy_location
if(!is_mining_level(T.z))//only report capsules away from the mining/lavaland level
message_admins("[key_name_admin(usr)] ([ADMIN_QUE(usr,"?")]) ([ADMIN_FLW(usr,"FLW")]) activated a bluespace capsule away from the mining level! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)")
log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [T.x], [T.y], [T.z]")
template.load(deploy_location, centered = TRUE)
new /obj/effect/particle_effect/smoke(get_turf(src))
qdel(src)
/obj/item/survivalcapsule/luxury
name = "luxury bluespace shelter capsule"
desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace."
origin_tech = "engineering=3;bluespace=4"
template_id = "shelter_beta"
//Pod turfs and objects
//Window
/obj/structure/window/shuttle/survival_pod
name = "pod window"
icon = 'icons/obj/smooth_structures/pod_window.dmi'
icon_state = "smooth"
dir = FULLTILE_WINDOW_DIR
max_integrity = 100
fulltile = TRUE
reinf = TRUE
heat_resistance = 1600
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100)
smooth = SMOOTH_MORE
canSmoothWith = list(/turf/simulated/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod)
explosion_block = 3
level = 3
glass_type = /obj/item/stack/sheet/titaniumglass
glass_amount = 2
/obj/structure/window/reinforced/survival_pod
name = "pod window"
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "pwindow"
//Floors
/turf/simulated/floor/pod
name = "pod floor"
icon_state = "podfloor"
icon_regular_floor = "podfloor"
floor_tile = /obj/item/stack/tile/pod
/turf/simulated/floor/pod/light
icon_state = "podfloor_light"
icon_regular_floor = "podfloor_light"
floor_tile = /obj/item/stack/tile/pod/light
/turf/simulated/floor/pod/dark
icon_state = "podfloor_dark"
icon_regular_floor = "podfloor_dark"
floor_tile = /obj/item/stack/tile/pod/dark
//Door
/obj/machinery/door/airlock/survival_pod
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_pod
/obj/machinery/door/airlock/survival_pod/glass
opacity = FALSE
glass = TRUE
/obj/structure/door_assembly/door_assembly_pod
name = "pod airlock assembly"
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
base_name = "pod airlock"
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
airlock_type = /obj/machinery/door/airlock/survival_pod
glass_type = /obj/machinery/door/airlock/survival_pod/glass
//Windoor
/obj/machinery/door/window/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "windoor"
base_state = "windoor"
//Table
/obj/structure/table/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "table"
smooth = SMOOTH_FALSE
//Sleeper
/obj/machinery/sleeper/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "sleeper-open"
density = FALSE
/obj/machinery/sleeper/survival_pod/New()
..()
component_parts = list()
component_parts += new /obj/item/circuitboard/sleeper/survival(null)
var/obj/item/stock_parts/matter_bin/B = new(null)
B.rating = initial_bin_rating
component_parts += B
component_parts += new /obj/item/stock_parts/manipulator(null)
component_parts += new /obj/item/stock_parts/console_screen(null)
component_parts += new /obj/item/stock_parts/console_screen(null)
component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
//Computer
/obj/item/gps/computer
name = "pod computer"
icon_state = "pod_computer"
icon = 'icons/obj/lavaland/pod_computer.dmi'
anchored = 1
density = 1
pixel_y = -32
/obj/item/gps/computer/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench))
playsound(loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles the gps.</span>", \
"<span class='notice'>You start to disassemble the gps...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20 * W.toolspeed, target = src))
new /obj/item/gps(loc)
qdel(src)
return ..()
/obj/item/gps/computer/attack_hand(mob/user)
attack_self(user)
//Bed
/obj/structure/bed/pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "bed"
//Survival Storage Unit
/obj/machinery/smartfridge/survival_pod
name = "survival pod storage"
desc = "A heated storage unit."
icon_state = "donkvendor"
icon = 'icons/obj/lavaland/donkvendor.dmi'
icon_on = "donkvendor"
icon_off = "donkvendor"
light_range = 8
max_n_of_items = 10
pixel_y = -4
/obj/machinery/smartfridge/survival_pod/update_icon()
return
/obj/item/circuitboard/smartfridge/survival
name = "circuit board (Smartfridge Survival)"
build_path = /obj/machinery/smartfridge/survival_pod
/obj/item/circuitboard/smartfridge/attackby(obj/item/I, mob/user, params)
return
/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O)
if(istype(O, /obj/item))
return 1
return 0
/obj/machinery/smartfridge/survival_pod/New()
..()
component_parts = list()
component_parts += new /obj/item/circuitboard/smartfridge/survival(null)
component_parts += new /obj/item/stock_parts/matter_bin(null)
RefreshParts()
/obj/machinery/smartfridge/survival_pod/loaded/New()
..()
for(var/i in 1 to 5)
var/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak/W = new(src)
load(W)
if(prob(50))
var/obj/item/storage/pill_bottle/dice/D = new(src)
load(D)
else
var/obj/item/instrument/guitar/G = new(src)
load(G)
//Fans
/obj/structure/fans
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "fans"
name = "environmental regulation system"
desc = "A large machine releasing a constant gust of air."
anchored = 1
density = 1
var/arbitraryatmosblockingvar = 1
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 5
/obj/structure/fans/Initialize(loc)
..()
air_update_turf(1)
/obj/structure/fans/Destroy()
arbitraryatmosblockingvar = 0
air_update_turf(1)
return ..()
/obj/structure/fans/CanAtmosPass(turf/T)
return !arbitraryatmosblockingvar
/obj/structure/fans/deconstruct()
if(buildstacktype)
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/structure/fans/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench))
playsound(loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles the fan.</span>", \
"<span class='notice'>You start to disassemble the fan...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20 * W.toolspeed, target = src))
deconstruct()
return ..()
/obj/structure/fans/tiny
name = "tiny fan"
desc = "A tiny fan, releasing a thin gust of air."
layer = TURF_LAYER+0.1
density = 0
icon_state = "fan_tiny"
buildstackamount = 2
/obj/structure/fans/tiny/invisible
name = "air flow blocker"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
unacidable = TRUE
invisibility = INVISIBILITY_ABSTRACT
//Signs
/obj/structure/sign/mining
name = "nanotrasen mining corps sign"
desc = "A sign of relief for weary miners, and a warning for would-be competitors to Nanotrasen's mining claims."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "ntpod"
/obj/structure/sign/mining/survival
name = "shelter sign"
desc = "A high visibility sign designating a safe shelter."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "survival"
//Fluff
/obj/structure/tubes
icon_state = "tubes"
icon = 'icons/obj/lavaland/survival_pod.dmi'
name = "tubes"
anchored = 1
layer = MOB_LAYER - 0.2
density = 0
/obj/structure/tubes/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench))
playsound(loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles [src].</span>", \
"<span class='notice'>You start to disassemble [src]...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20 * W.toolspeed, target = src))
new /obj/item/stack/rods(loc)
qdel(src)
return ..()
/obj/item/fakeartefact
name = "expensive forgery"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
var/possible = list(/obj/item/ship_in_a_bottle,
/obj/item/gun/energy/pulse,
/obj/item/sleeping_carp_scroll,
/obj/item/shield/changeling,
/obj/item/lava_staff,
/obj/item/katana/energy,
/obj/item/storage/toolbox/green/memetic,
/obj/item/gun/projectile/automatic/l6_saw,
/obj/item/gun/magic/staff/chaos,
/obj/item/gun/magic/staff/spellblade,
/obj/item/gun/magic/wand/death,
/obj/item/gun/magic/wand/fireball,
/obj/item/stack/telecrystal,
/obj/item/banhammer)
/obj/item/fakeartefact/New()
. = ..()
var/obj/item/I = pick(possible)
name = initial(I.name)
icon = initial(I.icon)
desc = initial(I.desc)
icon_state = initial(I.icon_state)
item_state = initial(I.item_state)
@@ -14,11 +14,10 @@
return TRUE
..()
/mob/living/carbon/water_act(volume, temperature, source)
/mob/living/carbon/water_act(volume, temperature, source, method = TOUCH)
. = ..()
if(volume > 10) //anything over 10 volume will make the mob wetter.
wetlevel = min(wetlevel + 1,5)
..()
/mob/living/carbon/attackby(obj/item/I, mob/user, params)
if(lying && surgeries.len)
@@ -506,9 +506,9 @@ emp_act
return 0
..()
/mob/living/carbon/human/water_act(volume, temperature, source)
..()
dna.species.water_act(src,volume,temperature,source)
/mob/living/carbon/human/water_act(volume, temperature, source, method = TOUCH)
. = ..()
dna.species.water_act(src, volume, temperature, source, method)
/mob/living/carbon/human/is_eyes_covered(check_glasses = TRUE, check_head = TRUE, check_mask = TRUE)
if(check_glasses && glasses && (glasses.flags_cover & GLASSESCOVERSEYES))
@@ -718,7 +718,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u
H.sync_lighting_plane_alpha()
/datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source)
/datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source, method = TOUCH)
if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately
M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling
@@ -36,10 +36,38 @@
genemutcheck(H, REMOTETALKBLOCK, null, MUTCHK_FORCED)
H.dna.default_blocks.Add(REMOTETALKBLOCK)
/datum/species/grey/water_act(mob/living/carbon/human/H, volume, temperature, source)
..()
H.take_organ_damage(5, min(volume, 20))
H.emote("scream")
/datum/species/grey/water_act(mob/living/carbon/human/H, volume, temperature, source, method = TOUCH)
. = ..()
if(method == TOUCH)
if(volume > 25)
if(H.wear_mask)
to_chat(H, "<span class='danger'>Your [H.wear_mask] protects you from the acid!</span>")
return
if(H.head)
to_chat(H, "<span class='danger'>Your [H.wear_mask] protects you from the acid!</span>")
return
if(prob(75))
H.take_organ_damage(5, 10)
H.emote("scream")
var/obj/item/organ/external/affecting = H.get_organ("head")
if(affecting)
affecting.disfigure()
else
H.take_organ_damage(5, 10)
else
H.take_organ_damage(5, 10)
else
to_chat(H, "<span class='warning'>The water stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!</span>")
if(volume >= 10)
H.adjustFireLoss(min(max(4, (volume - 10) * 2), 20))
H.emote("scream")
to_chat(H, "<span class='warning'>The water stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!</span>")
if(volume >= 10)
H.adjustFireLoss(min(max(4, (volume - 10) * 2), 20))
H.emote("scream")
/datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H)
var/translator_pref = H.client.prefs.speciesprefs
+3 -7
View File
@@ -216,13 +216,9 @@
fire_stacks += L.fire_stacks
IgniteMob()
//Mobs on Fire end
/mob/living/water_act(volume, temperature)
if(volume >= 20) fire_stacks -= 0.5
if(volume >= 50) fire_stacks -= 1
/mob/living/water_act(volume, temperature, source, method = TOUCH)
. = ..()
adjust_fire_stacks(-(volume * 0.2))
//This is called when the mob is thrown into a dense turf
/mob/living/proc/turf_collision(var/turf/T, var/speed)
@@ -77,7 +77,6 @@
stat_attack = 1
flying = TRUE
robust_searching = 1
var/fromtendril = FALSE
loot = list()
butcher_results = list(/obj/item/stack/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
@@ -33,7 +33,7 @@
pull_force = MOVE_FORCE_VERY_STRONG
var/pre_attack = 0
var/pre_attack_icon = "Goliath_preattack"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide{layer = 4.1})
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
/mob/living/simple_animal/hostile/asteroid/goliath/Life()
..()
@@ -56,7 +56,7 @@
var/tturf = get_turf(target)
if(get_dist(src, target) <= 7)//Screen range check, so you can't get tentacle'd offscreen
visible_message("<span class='warning'>The [src.name] digs its tentacles under [target.name]!</span>")
new /obj/effect/goliath_tentacle/original(tturf, src)
new /obj/effect/temp_visual/goliath_tentacle/original(tturf, src)
ranged_cooldown = world.time + ranged_cooldown_time
icon_state = icon_aggro
pre_attack = 0
@@ -74,44 +74,104 @@
icon_state = icon_aggro
return
/obj/effect/goliath_tentacle
name = "Goliath tentacle"
// Lavaland Goliath
/mob/living/simple_animal/hostile/asteroid/goliath/beast
name = "goliath"
desc = "A hulking, armor-plated beast with long tendrils arching from its back."
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
icon_state = "goliath"
icon_living = "goliath"
icon_aggro = "goliath"
icon_dead = "goliath_dead"
throw_message = "does nothing to the tough hide of the"
pre_attack_icon = "goliath2"
butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
loot = list()
stat_attack = 1
robust_searching = 1
/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize()
. = ..()
if(prob(1))
new /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient(loc)
return INITIALIZE_HINT_QDEL
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient
name = "ancient goliath"
desc = "Goliaths are biologically immortal, and rare specimens have survived for centuries. This one is clearly ancient, and its tentacles constantly churn the earth around it."
icon_state = "Goliath"
icon_living = "Goliath"
icon_aggro = "Goliath_alert"
icon_dead = "Goliath_dead"
maxHealth = 400
health = 400
speed = 4
pre_attack_icon = "Goliath_preattack"
throw_message = "does nothing to the rocky hide of the"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days
butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/bone = 2)
wander = FALSE
var/list/cached_tentacle_turfs
var/turf/last_location
var/tentacle_recheck_cooldown = 100
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/Life()
. = ..()
if(!.) // dead
return
if(isturf(loc))
if(!LAZYLEN(cached_tentacle_turfs) || loc != last_location || tentacle_recheck_cooldown <= world.time)
LAZYCLEARLIST(cached_tentacle_turfs)
last_location = loc
tentacle_recheck_cooldown = world.time + initial(tentacle_recheck_cooldown)
for(var/turf/simulated/floor/T in orange(4, loc))
LAZYADD(cached_tentacle_turfs, T)
for(var/t in cached_tentacle_turfs)
if(isfloorturf(t))
if(prob(10))
new /obj/effect/temp_visual/goliath_tentacle(t, src)
else
cached_tentacle_turfs -= t
/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
fromtendril = TRUE
//tentacles
/obj/effect/temp_visual/goliath_tentacle
name = "goliath tentacle"
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
icon_state = "Goliath_tentacle_spawn"
layer = BELOW_MOB_LAYER
var/mob/living/spawner
var/timerid
/obj/effect/goliath_tentacle/New(var/loc, mob/living/new_spawner)
/obj/effect/temp_visual/goliath_tentacle/Initialize(mapload, mob/living/new_spawner)
. = ..()
for(var/obj/effect/goliath_tentacle/T in loc)
for(var/obj/effect/temp_visual/goliath_tentacle/T in loc)
if(T != src)
return INITIALIZE_HINT_QDEL
if(!QDELETED(new_spawner))
spawner = new_spawner
if(ismineralturf(loc))
var/turf/simulated/mineral/M = loc
M.gets_drilled()
deltimer(timerid)
timerid = addtimer(CALLBACK(src, .proc/tripanim), 7, TIMER_STOPPABLE)
/obj/effect/goliath_tentacle/original/New(var/loc, mob/living/new_spawner)
/obj/effect/temp_visual/goliath_tentacle/original/Initialize(mapload, new_spawner)
. = ..()
var/list/directions = cardinal.Copy()
for(var/i in 1 to 3)
var/spawndir = pick_n_take(directions)
var/turf/T = get_step(src, spawndir)
if(T)
new /obj/effect/goliath_tentacle(T, spawner)
new /obj/effect/temp_visual/goliath_tentacle(T, spawner)
/obj/effect/goliath_tentacle/proc/tripanim()
/obj/effect/temp_visual/goliath_tentacle/proc/tripanim()
icon_state = "Goliath_tentacle_wiggle"
deltimer(timerid)
timerid = addtimer(CALLBACK(src, .proc/trip), 3, TIMER_STOPPABLE)
/obj/effect/goliath_tentacle/proc/trip()
/obj/effect/temp_visual/goliath_tentacle/proc/trip()
var/latched = FALSE
for(var/mob/living/L in loc)
if((!QDELETED(spawner) && spawner.faction_check_mob(L)) || L.stat == DEAD)
@@ -126,22 +186,7 @@
deltimer(timerid)
timerid = addtimer(CALLBACK(src, .proc/retract), 10, TIMER_STOPPABLE)
/obj/effect/goliath_tentacle/proc/retract()
/obj/effect/temp_visual/goliath_tentacle/proc/retract()
icon_state = "Goliath_tentacle_retract"
deltimer(timerid)
timerid = QDEL_IN(src, 7)
/mob/living/simple_animal/hostile/asteroid/goliath/beast
name = "goliath"
desc = "A hulking, armor-plated beast with long tendrils arching from its back."
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
icon_state = "goliath"
icon_living = "goliath"
icon_aggro = "goliath"
icon_dead = "goliath_dead"
throw_message = "does nothing to the tough hide of the"
pre_attack_icon = "goliath2"
butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
loot = list()
stat_attack = 1
robust_searching = 1
timerid = QDEL_IN(src, 5)
@@ -236,7 +236,6 @@
del_on_death = 1
stat_attack = 1
robust_searching = 1
var/fromtendril = FALSE
var/dwarf_mob = FALSE
var/mob/living/carbon/human/stored_mob
@@ -15,6 +15,7 @@
a_intent = INTENT_HARM
var/throw_message = "bounces off of"
var/icon_aggro = null // for swapping to when we get aggressive
var/fromtendril = FALSE
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
mob_size = MOB_SIZE_LARGE
@@ -73,7 +73,7 @@
qdel(src)
/mob/living/simple_animal/hostile/spawner/lavaland/goliath
mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast
mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
/mob/living/simple_animal/hostile/spawner/lavaland/legion
mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril
@@ -42,6 +42,7 @@
/datum/nano_module/atmos_control/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
var/data[0]
data["alarms"] = air_alarm_repository.air_alarm_data(monitored_alarms)
return data
/datum/nano_module/atmos_control/proc/generate_state(air_alarm)
@@ -19,68 +19,16 @@
drink_name = "Glass of Water"
drink_desc = "The father of all refreshments."
taste_message = null
var/water_temperature = 283.15 // As reagents don't have a temperature value, we'll just use 10 celsius.
/datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
// Put out fire
M.adjust_fire_stacks(-(volume * 0.2))
if(isgrey(M)) // You gosh darn snowflakes
var/mob/living/carbon/human/G = M
if(method == TOUCH)
if(volume > 25)
if(G.wear_mask)
to_chat(G, "<span class='danger'>Your [G.wear_mask] protects you from the acid!</span>")
return
if(G.head)
to_chat(G, "<span class='danger'>Your [G.wear_mask] protects you from the acid!</span>")
return
if(prob(75))
G.take_organ_damage(5, 10)
G.emote("scream")
var/obj/item/organ/external/affecting = G.get_organ("head")
if(affecting)
affecting.disfigure()
else
G.take_organ_damage(5, 10)
else
G.take_organ_damage(5, 10)
else
to_chat(G, "<span class='warning'>The water stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!</span>")
if(volume >= 10)
G.adjustFireLoss(min(max(4, (volume - 10) * 2), 20))
G.emote("scream")
/datum/reagent/water/reaction_mob(mob/living/M, method = TOUCH, volume)
M.water_act(volume, water_temperature, src, method)
/datum/reagent/water/reaction_turf(turf/simulated/T, volume)
if(!istype(T))
return
if(volume >= 3)
T.MakeSlippery()
for(var/mob/living/carbon/slime/M in T)
M.apply_water()
var/hotspot = (locate(/obj/effect/hotspot) in T)
if(hotspot)
var/datum/gas_mixture/lowertemp = T.remove_air( T.air.total_moles())
lowertemp.temperature = max(min(lowertemp.temperature-2000,lowertemp.temperature / 2), 0)
lowertemp.react()
T.assume_air(lowertemp)
qdel(hotspot)
T.water_act(volume, water_temperature, src)
/datum/reagent/water/reaction_obj(obj/O, volume)
O.extinguish()
if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube))
var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O
cube.Expand()
// Dehydrated carp
if(istype(O, /obj/item/toy/carpplushie/dehy_carp))
var/obj/item/toy/carpplushie/dehy_carp/dehy = O
dehy.Swell() // Makes a carp
O.water_act(volume, water_temperature, src)
/datum/reagent/lube
name = "Space Lube"
@@ -55,13 +55,6 @@
update_icon()
return
// this prevented pills, food, and other things from being picked up by bags.
// possibly intentional, but removing it allows us to not duplicate functionality.
// -Sayu (storage conslidation)
/*
/obj/item/reagent_containers/attackby(obj/item/I as obj, mob/user as mob, params)
return
*/
/obj/item/reagent_containers/afterattack(obj/target, mob/user , flag)
return
@@ -56,9 +56,54 @@
if(!is_open_container())
to_chat(user, "<span class='notice'>Airtight lid seals it completely.</span>")
/obj/item/reagent_containers/glass/attack(mob/M, mob/user, def_zone)
if(!is_open_container())
return ..()
if(!reagents || !reagents.total_volume)
to_chat(user, "<span class='warning'>[src] is empty!</span>")
return
if(istype(M))
var/list/transferred = list()
for(var/datum/reagent/R in reagents.reagent_list)
transferred += R.name
var/contained = english_list(transferred)
if(user.a_intent == INTENT_HARM)
M.visible_message("<span class='danger'>[user] splashes the contents of [src] onto [M]!</span>", \
"<span class='userdanger'>[user] splashes the contents of [src] onto [M]!</span>")
add_attack_logs(M, user, "Splashed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL)
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
reagents.reaction(M, TOUCH)
reagents.clear_reagents()
else
if(M != user)
M.visible_message("<span class='danger'>[user] attempts to feed something to [M].</span>", \
"<span class='userdanger'>[user] attempts to feed something to you.</span>")
if(!do_mob(user, M))
return
if(!reagents || !reagents.total_volume)
return // The drink might be empty after the delay, such as by spam-feeding
M.visible_message("<span class='danger'>[user] feeds something to [M].</span>", "<span class='userdanger'>[user] feeds something to you.</span>")
add_attack_logs(M, user, "Fed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL)
else
to_chat(user, "<span class='notice'>You swallow a gulp of [src].</span>")
reagents.reaction(M, INGEST)
addtimer(CALLBACK(reagents, /datum/reagents.proc/trans_to, M, 5), 5)
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
else
return ..()
/obj/item/reagent_containers/glass/afterattack(obj/target, mob/user, proximity)
if(!proximity)
return
if(!is_open_container())
return
@@ -66,26 +111,7 @@
if(istype(target, type))
return
if(user.a_intent != INTENT_HELP && ismob(target) && target.reagents && reagents.total_volume)
to_chat(user, "<span class='notice'>You splash the solution onto [target].</span>")
var/mob/living/M = target
var/list/injected = list()
for(var/datum/reagent/R in reagents.reagent_list)
injected += R.name
var/contained = english_list(injected)
add_attack_logs(M, user, "Splashed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL)
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
for(var/mob/O in viewers(world.view, user))
O.show_message(text("<span class='warning'>[] has been splashed with something by []!</span>", target, user), 1)
reagents.reaction(target, TOUCH)
spawn(5) reagents.clear_reagents()
return
else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(target.reagents && !target.reagents.total_volume)
to_chat(user, "<span class='warning'>[target] is empty and can't be refilled!</span>")
return
@@ -116,12 +142,11 @@
else if(istype(target, /obj/effect/decal)) //stops splashing while scooping up fluids
return
else if(reagents.total_volume)
to_chat(user, "<span class='notice'>You splash the solution onto [target].</span>")
else if(reagents.total_volume && user.a_intent == INTENT_HARM)
user.visible_message("<span class='danger'>[user] splashes the contents of [src] onto [target]!</span>", \
"<span class='notice'>You splash the contents of [src] onto [target].</span>")
reagents.reaction(target, TOUCH)
spawn(5) reagents.clear_reagents()
return
reagents.clear_reagents()
/obj/item/reagent_containers/glass/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/pen) || istype(I, /obj/item/flashlight/pen))
@@ -338,3 +363,28 @@
qdel(src)
else
..()
/obj/item/reagent_containers/glass/beaker/waterbottle
name = "bottle of water"
desc = "A bottle of water filled at an old Earth bottling facility."
icon = 'icons/obj/drinks.dmi'
icon_state = "smallbottle"
item_state = "bottle"
list_reagents = list("water" = 49.5, "fluorine" = 0.5) //see desc, don't think about it too hard
materials = list(MAT_GLASS = 0)
volume = 50
amount_per_transfer_from_this = 10
/obj/item/reagent_containers/glass/beaker/waterbottle/empty
list_reagents = list()
/obj/item/reagent_containers/glass/beaker/waterbottle/large
desc = "A fresh commercial-sized bottle of water."
icon_state = "largebottle"
materials = list(MAT_GLASS = 0)
list_reagents = list("water" = 100)
volume = 100
amount_per_transfer_from_this = 20
/obj/item/reagent_containers/glass/beaker/waterbottle/large/empty
list_reagents = list()
@@ -76,6 +76,12 @@
icon_state = "pill16"
list_reagents = list("adminordrazine" = 50)
/obj/item/reagent_containers/food/pill/morphine
name = "Morphine pill"
desc = "Commonly used to treat insomnia."
icon_state = "pill8"
list_reagents = list("morphine" = 30)
/obj/item/reagent_containers/food/pill/methamphetamine
name = "Methamphetamine pill"
desc = "Helps improve the ability to concentrate."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

+1
View File
@@ -1636,6 +1636,7 @@
#include "code\modules\mining\satchel_ore_boxdm.dm"
#include "code\modules\mining\shelters.dm"
#include "code\modules\mining\equipment\marker_beacons.dm"
#include "code\modules\mining\equipment\survival_pod.dm"
#include "code\modules\mining\laborcamp\laborshuttle.dm"
#include "code\modules\mining\laborcamp\laborstacker.dm"
#include "code\modules\mining\lavaland\ash_flora.dm"