mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-25 01:22:24 +00:00
Merge remote-tracking branch 'upstream/dev-freeze' into dev
Conflicts: code/game/objects/items/stacks/tiles/plasteel.dm code/game/objects/items/stacks/tiles/tile_types.dm code/modules/materials/materials.dm code/modules/mob/living/carbon/human/life.dm code/modules/mob/living/silicon/pai/pai.dm code/modules/surgery/implant.dm code/setup.dm
This commit is contained in:
@@ -114,10 +114,10 @@
|
||||
ReplaceWithLattice()
|
||||
return
|
||||
|
||||
if (istype(C, /obj/item/stack/tile/plasteel))
|
||||
if (istype(C, /obj/item/stack/tile/steel))
|
||||
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
||||
if(L)
|
||||
var/obj/item/stack/tile/plasteel/S = C
|
||||
var/obj/item/stack/tile/steel/S = C
|
||||
if (S.get_amount() < 1)
|
||||
return
|
||||
qdel(L)
|
||||
|
||||
@@ -226,14 +226,15 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
|
||||
//Returns the firelevel
|
||||
/datum/gas_mixture/proc/zburn(zone/zone, force_burn, no_check = 0)
|
||||
#ifdef FIREDBG
|
||||
log_debug("***************** FIREDBG *****************")
|
||||
if(zone) log_debug("Burning [zone.name]!")
|
||||
#endif
|
||||
|
||||
. = 0
|
||||
if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null)))
|
||||
var/gas_fuel = 0 //in the case of mixed gas/liquid fires, the gas burns first.
|
||||
|
||||
#ifdef FIREDBG
|
||||
log_debug("***************** FIREDBG *****************")
|
||||
log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!")
|
||||
#endif
|
||||
|
||||
var/gas_fuel = 0
|
||||
var/liquid_fuel = 0
|
||||
var/total_fuel = 0
|
||||
var/total_oxidizers = 0
|
||||
@@ -269,23 +270,27 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
|
||||
//calculate the firelevel.
|
||||
var/firelevel = calculate_firelevel(total_fuel, total_oxidizers, reaction_limit)
|
||||
var/firelevel_ratio = firelevel / vsc.fire_firelevel_multiplier
|
||||
|
||||
|
||||
//vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).
|
||||
var/gas_reaction_progress = min(0.2, (firelevel/vsc.fire_firelevel_multiplier))*gas_fuel*FIRE_GAS_BURNRATE_MULT
|
||||
//vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).)
|
||||
var/min_burn = 0.30*volume*group_multiplier/CELL_VOLUME //in moles - so that fires with very small gas concentrations burn out fast
|
||||
var/gas_reaction_progress = max(min_burn, firelevel_ratio*gas_fuel)*FIRE_GAS_BURNRATE_MULT
|
||||
|
||||
//liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning. Limit the burn rate to a certain amount per area.
|
||||
var/liquid_reaction_progress = ((firelevel/vsc.fire_firelevel_multiplier)*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT
|
||||
var/liquid_reaction_progress = (firelevel_ratio*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT
|
||||
|
||||
var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress
|
||||
var/used_fuel = min(total_reaction_progress, reaction_limit)
|
||||
var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT)
|
||||
|
||||
#ifdef FIREDBG
|
||||
log_debug("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]")
|
||||
log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]")
|
||||
log_debug("firelevel -> [firelevel] / [vsc.fire_firelevel_multiplier]")
|
||||
log_debug("liquid_reaction_progress = [liquid_reaction_progress]")
|
||||
log_debug("gas_reaction_progress = [gas_reaction_progress]")
|
||||
log_debug("used_fuel = [used_fuel]; used_oxidizers = [used_oxidizers]; reaction_limit=[reaction_limit]")
|
||||
log_debug("total_reaction_progress = [total_reaction_progress]")
|
||||
log_debug("used_fuel = [used_fuel], used_oxidizers = [used_oxidizers]; ")
|
||||
#endif
|
||||
|
||||
//if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out
|
||||
@@ -297,8 +302,8 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
//*** Remove fuel and oxidizer, add carbon dioxide and heat
|
||||
|
||||
//remove and add gasses as calculated
|
||||
var/used_gas_fuel = between(0.25, used_fuel*(gas_reaction_progress/total_reaction_progress), gas_fuel) //remove in proportion to the relative reaction progress
|
||||
var/used_liquid_fuel = between(0.25, used_fuel-used_gas_fuel, liquid_fuel)
|
||||
var/used_gas_fuel = min(max(0.25, used_fuel*(gas_reaction_progress/total_reaction_progress)), gas_fuel) //remove in proportion to the relative reaction progress
|
||||
var/used_liquid_fuel = min(max(0.25, used_fuel-used_gas_fuel), liquid_fuel)
|
||||
|
||||
//remove_by_flag() and adjust_gas() handle the group_multiplier for us.
|
||||
remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers)
|
||||
@@ -309,10 +314,10 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
zone.remove_liquidfuel(used_liquid_fuel, !check_combustability())
|
||||
|
||||
//calculate the energy produced by the reaction and then set the new temperature of the mix
|
||||
temperature = (starting_energy + vsc.fire_fuel_energy_release * used_fuel) / heat_capacity()
|
||||
temperature = (starting_energy + vsc.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity()
|
||||
|
||||
#ifdef FIREDBG
|
||||
log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_gas_fuel+used_liquid_fuel]")
|
||||
log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")
|
||||
log_debug("new temperature = [temperature]")
|
||||
#endif
|
||||
|
||||
@@ -353,7 +358,7 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
|
||||
|
||||
. = 0
|
||||
for(var/g in gas)
|
||||
if(gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1)
|
||||
if(gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.005)
|
||||
. = 1
|
||||
break
|
||||
|
||||
|
||||
@@ -297,7 +297,7 @@ var/global/datum/controller/radio/radio_controller
|
||||
devices_line -= null
|
||||
if (devices_line.len==0)
|
||||
devices -= devices_filter
|
||||
qdel(devices_line)
|
||||
del(devices_line)
|
||||
|
||||
/datum/signal
|
||||
var/obj/source
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
|
||||
for(var/obj/machinery/power/apc/C in world)
|
||||
if(C.cell && C.z in config.station_levels)
|
||||
if(!C.is_critical && C.cell && (C.z in config.station_levels))
|
||||
C.cell.charge = 0
|
||||
|
||||
/proc/power_restore(var/announce = 1)
|
||||
@@ -29,7 +29,7 @@
|
||||
if(announce)
|
||||
command_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
|
||||
for(var/obj/machinery/power/apc/C in world)
|
||||
if(C.cell && C.z in config.station_levels)
|
||||
if(C.cell && (C.z in config.station_levels))
|
||||
C.cell.charge = C.cell.maxcharge
|
||||
for(var/obj/machinery/power/smes/S in world)
|
||||
var/area/current_area = get_area(S)
|
||||
|
||||
@@ -399,7 +399,7 @@
|
||||
imp += "[I] implanted:"
|
||||
else
|
||||
unknown_body++
|
||||
if(unknown_body || e.hidden)
|
||||
if(unknown_body)
|
||||
imp += "Unknown body present:"
|
||||
|
||||
if(!AN && !open && !infected & !imp)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0)
|
||||
|
||||
/obj/machinery/floorlayer/New()
|
||||
T = new/obj/item/stack/tile/plasteel(src)
|
||||
T = new/obj/item/stack/tile/steel(src)
|
||||
..()
|
||||
|
||||
/obj/machinery/floorlayer/Move(new_turf,M_Dir)
|
||||
|
||||
@@ -13,6 +13,7 @@ obj/machinery/recharger
|
||||
var/icon_state_charged = "recharger2"
|
||||
var/icon_state_charging = "recharger1"
|
||||
var/icon_state_idle = "recharger0" //also when unpowered
|
||||
var/portable = 1
|
||||
|
||||
obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||
if(istype(user,/mob/living/silicon))
|
||||
@@ -45,7 +46,7 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||
G.loc = src
|
||||
charging = G
|
||||
update_icon()
|
||||
else if(istype(G, /obj/item/weapon/wrench))
|
||||
else if(portable && istype(G, /obj/item/weapon/wrench))
|
||||
if(charging)
|
||||
user << "<span class='warning'>Remove [charging] first!</span>"
|
||||
return
|
||||
@@ -155,3 +156,4 @@ obj/machinery/recharger/wallcharger
|
||||
icon_state_charged = "wrecharger2"
|
||||
icon_state_charging = "wrecharger1"
|
||||
icon_state_idle = "wrecharger0"
|
||||
portable = 0
|
||||
|
||||
@@ -254,7 +254,7 @@ Alien plants should do something if theres a lot of poison
|
||||
|
||||
|
||||
/obj/effect/alien/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 300)
|
||||
if(exposed_temperature > 300 + T0C)
|
||||
health -= 5
|
||||
healthcheck()
|
||||
|
||||
@@ -425,7 +425,7 @@ Alien plants should do something if theres a lot of poison
|
||||
Burst()
|
||||
|
||||
/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 500)
|
||||
if(exposed_temperature > 500 + T0C)
|
||||
health -= 5
|
||||
healthcheck()
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 300)
|
||||
if(exposed_temperature > 300 + T0C)
|
||||
health -= 5
|
||||
healthcheck()
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
if(istype(A, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = A
|
||||
|
||||
if(F.is_plasteel_floor()) // only tiled floors
|
||||
if(F.is_steel_floor()) // only tiled floors
|
||||
if(tile_dir_mode)
|
||||
var/D = get_dir(usr, F)
|
||||
if(usr.loc == F)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/stack/tile/plasteel
|
||||
/obj/item/stack/tile/steel
|
||||
name = "floor tile"
|
||||
singular_name = "floor tile"
|
||||
desc = "Those could work as a pretty decent throwing weapon"
|
||||
desc = "Those could work as a pretty decent throwing weapon" //why?
|
||||
icon_state = "tile"
|
||||
force = 6.0
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 937.5)
|
||||
@@ -10,23 +10,23 @@
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
|
||||
/obj/item/stack/tile/plasteel/New(var/loc, var/amount=null)
|
||||
/obj/item/stack/tile/steel/New(var/loc, var/amount=null)
|
||||
..()
|
||||
src.pixel_x = rand(1, 14)
|
||||
src.pixel_y = rand(1, 14)
|
||||
return
|
||||
|
||||
/obj/item/stack/tile/plasteel/cyborg
|
||||
/obj/item/stack/tile/steel/cyborg
|
||||
name = "floor tile synthesizer"
|
||||
desc = "A device that makes floor tiles."
|
||||
gender = NEUTER
|
||||
matter = null
|
||||
uses_charge = 1
|
||||
charge_costs = list(250)
|
||||
stacktype = /obj/item/stack/tile/plasteel
|
||||
build_type = /obj/item/stack/tile/plasteel
|
||||
stacktype = /obj/item/stack/tile/steel
|
||||
build_type = /obj/item/stack/tile/steel
|
||||
|
||||
/obj/item/stack/tile/plasteel/proc/build(turf/S as turf)
|
||||
/obj/item/stack/tile/steel/proc/build(turf/S as turf)
|
||||
if (istype(S,/turf/space))
|
||||
S.ChangeTurf(/turf/simulated/floor/plating/airless)
|
||||
else
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
flags = 0
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
|
||||
/*
|
||||
@@ -41,7 +41,7 @@
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
flags = 0
|
||||
|
||||
/obj/item/stack/tile/wood/cyborg
|
||||
name = "wood floor tile synthesizer"
|
||||
@@ -63,4 +63,4 @@
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
flags = 0
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob)
|
||||
|
||||
if (istype(C, /obj/item/stack/tile/plasteel))
|
||||
if (istype(C, /obj/item/stack/tile/steel))
|
||||
var/turf/T = get_turf(src)
|
||||
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead
|
||||
return
|
||||
|
||||
@@ -29,7 +29,7 @@ var/list/wood_icons = list("wood","wood-broken")
|
||||
/turf/simulated/floor
|
||||
|
||||
//Note to coders, the 'intact' var can no longer be used to determine if the floor is a plating or not.
|
||||
//Use the is_plating(), is_plasteel_floor() and is_light_floor() procs instead. --Errorage
|
||||
//Use the is_plating(), is_steel_floor() and is_light_floor() procs instead. --Errorage
|
||||
name = "floor"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "floor"
|
||||
@@ -42,7 +42,7 @@ var/list/wood_icons = list("wood","wood-broken")
|
||||
var/broken = 0
|
||||
var/burnt = 0
|
||||
var/mineral = DEFAULT_WALL_MATERIAL
|
||||
var/floor_type = /obj/item/stack/tile/plasteel
|
||||
var/floor_type = /obj/item/stack/tile/steel
|
||||
var/lightfloor_state // for light floors, this is the state of the tile. 0-7, 0x4 is on-bit - use the helper procs below
|
||||
|
||||
proc/get_lightfloor_state()
|
||||
@@ -102,13 +102,23 @@ var/list/wood_icons = list("wood","wood-broken")
|
||||
return
|
||||
|
||||
/turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
|
||||
var/temp_destroy = get_damage_temperature()
|
||||
if(!burnt && prob(5))
|
||||
burn_tile()
|
||||
else if(prob(1) && !is_plating())
|
||||
make_plating()
|
||||
burn_tile()
|
||||
burn_tile(exposed_temperature)
|
||||
else if(temp_destroy && exposed_temperature >= (temp_destroy + 100) && prob(1) && !is_plating())
|
||||
make_plating() //destroy the tile, exposing plating
|
||||
burn_tile(exposed_temperature)
|
||||
return
|
||||
|
||||
//should be a little bit lower than the temperature required to destroy the material
|
||||
/turf/simulated/floor/proc/get_damage_temperature()
|
||||
if(is_steel_floor()) return T0C+1400
|
||||
if(is_wood_floor()) return T0C+200
|
||||
if(is_carpet_floor()) return T0C+200
|
||||
if(is_grass_floor()) return T0C+80
|
||||
return null
|
||||
|
||||
/turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
|
||||
var/dir_to = get_dir(src, adj_turf)
|
||||
|
||||
@@ -122,7 +132,7 @@ var/list/wood_icons = list("wood","wood-broken")
|
||||
turf/simulated/floor/proc/update_icon()
|
||||
if(lava)
|
||||
return
|
||||
else if(is_plasteel_floor())
|
||||
else if(is_steel_floor())
|
||||
if(!broken && !burnt)
|
||||
icon_state = icon_regular_floor
|
||||
else if(is_plating())
|
||||
@@ -237,8 +247,8 @@ turf/simulated/floor/proc/update_icon()
|
||||
make_plating()
|
||||
break_tile()
|
||||
|
||||
/turf/simulated/floor/is_plasteel_floor()
|
||||
if(ispath(floor_type, /obj/item/stack/tile/plasteel))
|
||||
/turf/simulated/floor/is_steel_floor()
|
||||
if(ispath(floor_type, /obj/item/stack/tile/steel))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -277,7 +287,7 @@ turf/simulated/floor/proc/update_icon()
|
||||
if(istype(src,/turf/simulated/floor/mech_bay_recharge_floor))
|
||||
src.ChangeTurf(/turf/simulated/floor/plating)
|
||||
if(broken) return
|
||||
if(is_plasteel_floor())
|
||||
if(is_steel_floor())
|
||||
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
||||
broken = 1
|
||||
else if(is_light_floor())
|
||||
@@ -296,28 +306,38 @@ turf/simulated/floor/proc/update_icon()
|
||||
src.icon_state = "sand[pick("1","2","3")]"
|
||||
broken = 1
|
||||
|
||||
/turf/simulated/floor/proc/burn_tile()
|
||||
/turf/simulated/floor/proc/burn_tile(var/exposed_temperature)
|
||||
if(istype(src,/turf/simulated/floor/engine)) return
|
||||
if(istype(src,/turf/simulated/floor/plating/airless/asteroid)) return//Asteroid tiles don't burn
|
||||
if(broken || burnt) return
|
||||
if(is_plasteel_floor())
|
||||
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
||||
burnt = 1
|
||||
else if(is_plasteel_floor())
|
||||
|
||||
var/damage_temp = get_damage_temperature()
|
||||
|
||||
if(broken) return
|
||||
if(burnt)
|
||||
if(is_steel_floor() && exposed_temperature >= damage_temp) //allow upgrading from scorched tiles to damaged tiles
|
||||
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
||||
broken = 1
|
||||
return
|
||||
|
||||
if(is_steel_floor() && exposed_temperature >= T0C+300) //enough to char the floor, but not hot enough to actually burn holes in it
|
||||
src.icon_state = "floorscorched[pick(1,2)]"
|
||||
burnt = 1
|
||||
else if(is_plating())
|
||||
src.icon_state = "panelscorched"
|
||||
burnt = 1
|
||||
else if(is_wood_floor())
|
||||
src.icon_state = "wood-broken"
|
||||
burnt = 1
|
||||
else if(is_carpet_floor())
|
||||
src.icon_state = "carpet-broken"
|
||||
burnt = 1
|
||||
else if(is_grass_floor())
|
||||
src.icon_state = "sand[pick("1","2","3")]"
|
||||
burnt = 1
|
||||
else if(exposed_temperature >= damage_temp)
|
||||
if(is_steel_floor())
|
||||
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
||||
burnt = 1
|
||||
else if(is_plating())
|
||||
src.icon_state = "panelscorched"
|
||||
burnt = 1
|
||||
else if(is_wood_floor())
|
||||
src.icon_state = "wood-broken"
|
||||
burnt = 1
|
||||
else if(is_carpet_floor())
|
||||
src.icon_state = "carpet-broken"
|
||||
burnt = 1
|
||||
else if(is_grass_floor())
|
||||
src.icon_state = "sand[pick("1","2","3")]"
|
||||
burnt = 1
|
||||
|
||||
//This proc will set floor_type to null and the update_icon() proc will then change the icon_state of the turf
|
||||
//This proc auto corrects the grass tiles' siding.
|
||||
@@ -351,13 +371,13 @@ turf/simulated/floor/proc/update_icon()
|
||||
//This proc will make the turf a plasteel floor tile. The expected argument is the tile to make the turf with
|
||||
//If none is given it will make a new object. dropping or unequipping must be handled before or after calling
|
||||
//this proc.
|
||||
/turf/simulated/floor/proc/make_plasteel_floor(var/obj/item/stack/tile/plasteel/T = null)
|
||||
/turf/simulated/floor/proc/make_plasteel_floor(var/obj/item/stack/tile/steel/T = null)
|
||||
broken = 0
|
||||
burnt = 0
|
||||
intact = 1
|
||||
set_light(0)
|
||||
if(T)
|
||||
if(istype(T,/obj/item/stack/tile/plasteel))
|
||||
if(istype(T,/obj/item/stack/tile/steel))
|
||||
floor_type = T.type
|
||||
if (icon_regular_floor)
|
||||
icon_state = icon_regular_floor
|
||||
@@ -368,7 +388,7 @@ turf/simulated/floor/proc/update_icon()
|
||||
levelupdate()
|
||||
return
|
||||
//if you gave a valid parameter, it won't get thisf ar.
|
||||
floor_type = /obj/item/stack/tile/plasteel
|
||||
floor_type = /obj/item/stack/tile/steel
|
||||
icon_state = "floor"
|
||||
icon_regular_floor = icon_state
|
||||
|
||||
|
||||
@@ -35,10 +35,10 @@
|
||||
ReplaceWithLattice()
|
||||
return
|
||||
|
||||
if (istype(C, /obj/item/stack/tile/plasteel))
|
||||
if (istype(C, /obj/item/stack/tile/steel))
|
||||
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
||||
if(L)
|
||||
var/obj/item/stack/tile/plasteel/S = C
|
||||
var/obj/item/stack/tile/steel/S = C
|
||||
if (S.get_amount() < 1)
|
||||
return
|
||||
qdel(L)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
level = 1.0
|
||||
|
||||
//for floors, use is_plating(), is_plasteel_floor() and is_light_floor()
|
||||
//for floors, use is_plating(), is_steel_floor() and is_light_floor()
|
||||
var/intact = 1
|
||||
|
||||
//Properties for open tiles (/floor)
|
||||
@@ -156,7 +156,7 @@
|
||||
return 0
|
||||
/turf/proc/is_asteroid_floor()
|
||||
return 0
|
||||
/turf/proc/is_plasteel_floor()
|
||||
/turf/proc/is_steel_floor()
|
||||
return 0
|
||||
/turf/proc/is_light_floor()
|
||||
return 0
|
||||
|
||||
@@ -641,13 +641,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
|
||||
if ("pirate")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
||||
|
||||
@@ -178,6 +178,25 @@
|
||||
return ..()
|
||||
|
||||
|
||||
// here because it's similar to below
|
||||
|
||||
// Returns null if no DB connection can be established, or -1 if the requested key was not found in the database
|
||||
|
||||
/proc/get_player_age(key)
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
return null
|
||||
|
||||
var/sql_ckey = sql_sanitize_text(ckey(key))
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT datediff(Now(),firstseen) as age FROM erro_player WHERE ckey = '[sql_ckey]'")
|
||||
query.Execute()
|
||||
|
||||
if(query.NextRow())
|
||||
return text2num(query.item[1])
|
||||
else
|
||||
return -1
|
||||
|
||||
|
||||
/client/proc/log_client_to_db()
|
||||
|
||||
|
||||
@@ -141,21 +141,18 @@
|
||||
desc = "A pair of kitty ears. Meow!"
|
||||
icon_state = "kitty"
|
||||
body_parts_covered = 0
|
||||
var/icon/mob
|
||||
var/icon/mob2
|
||||
siemens_coefficient = 1.5
|
||||
item_icons = list()
|
||||
|
||||
update_icon(var/mob/living/carbon/human/user)
|
||||
if(!istype(user)) return
|
||||
mob = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty")
|
||||
mob2 = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty2")
|
||||
mob.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
|
||||
mob2.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
|
||||
var/icon/ears = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty")
|
||||
ears.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
|
||||
|
||||
var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner")
|
||||
var/icon/earbit2 = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner2")
|
||||
mob.Blend(earbit, ICON_OVERLAY)
|
||||
mob2.Blend(earbit2, ICON_OVERLAY)
|
||||
ears.Blend(earbit, ICON_OVERLAY)
|
||||
|
||||
item_icons[icon_head] = ears
|
||||
|
||||
/obj/item/clothing/head/richard
|
||||
name = "chicken mask"
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("floor tile", /obj/item/stack/tile/plasteel, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("floor tile", /obj/item/stack/tile/steel, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
|
||||
recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1)
|
||||
|
||||
@@ -68,7 +68,7 @@ var/list/name_to_material
|
||||
// Attributes
|
||||
var/cut_delay = 0 // Delay in ticks when cutting through this wall.
|
||||
var/radioactivity // Radiation var. Used in wall and object processing to irradiate surroundings.
|
||||
var/ignition_point // Point at which the material catches on fire.
|
||||
var/ignition_point // K, point at which the material catches on fire.
|
||||
var/melting_point = 1800 // K, walls will take damage if they're next to a fire hotter than this
|
||||
var/integrity = 150 // General-use HP value for products.
|
||||
var/opacity = 1 // Is the material transparent? 0.5< makes transparent walls/doors.
|
||||
@@ -247,7 +247,7 @@ var/list/name_to_material
|
||||
/material/phoron
|
||||
name = "phoron"
|
||||
stack_type = /obj/item/stack/material/phoron
|
||||
ignition_point = 100
|
||||
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE
|
||||
icon_base = "stone"
|
||||
icon_colour = "#FC2BC5"
|
||||
shard_type = SHARD_SHARD
|
||||
@@ -430,7 +430,7 @@ var/list/name_to_material
|
||||
name = "phoron glass"
|
||||
stack_type = /obj/item/stack/material/glass/phoronglass
|
||||
flags = MATERIAL_BRITTLE
|
||||
ignition_point = 300
|
||||
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE+300
|
||||
integrity = 200 // idk why but phoron windows are strong, so.
|
||||
icon_colour = "#FC2BC5"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3, TECH_PHORON = 2)
|
||||
@@ -459,6 +459,7 @@ var/list/name_to_material
|
||||
icon_colour = "#CCCCCC"
|
||||
hardness = 10
|
||||
weight = 12
|
||||
melting_point = T0C+371 //assuming heat resistant plastic
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3)
|
||||
|
||||
/material/plastic/holographic
|
||||
@@ -521,6 +522,8 @@ var/list/name_to_material
|
||||
shard_can_repair = 0 // you can't weld splinters back into planks
|
||||
hardness = 15
|
||||
weight = 18
|
||||
melting_point = T0C+300 //okay, not melting in this case, but hot enough to destroy wood
|
||||
ignition_point = T0C+288
|
||||
stack_origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
||||
dooropen_noise = 'sound/effects/doorcreaky.ogg'
|
||||
door_icon_base = "wood"
|
||||
@@ -542,6 +545,8 @@ var/list/name_to_material
|
||||
icon_colour = "#AAAAAA"
|
||||
hardness = 1
|
||||
weight = 1
|
||||
ignition_point = T0C+232 //"the temperature at which book-paper catches fire, and burns." close enough
|
||||
melting_point = T0C+232 //temperature at which cardboard walls would be destroyed
|
||||
stack_origin_tech = list(TECH_MATERIAL = 1)
|
||||
door_icon_base = "wood"
|
||||
destruction_desc = "crumples"
|
||||
@@ -550,6 +555,8 @@ var/list/name_to_material
|
||||
name = "cloth"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
door_icon_base = "wood"
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
flags = MATERIAL_PADDING
|
||||
|
||||
/material/cult
|
||||
@@ -578,6 +585,7 @@ var/list/name_to_material
|
||||
icon_colour = "#E85DD8"
|
||||
dooropen_noise = 'sound/effects/attackblob.ogg'
|
||||
door_icon_base = "resin"
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/resin/can_open_material_door(var/mob/living/user)
|
||||
var/mob/living/carbon/M = user
|
||||
@@ -591,6 +599,8 @@ var/list/name_to_material
|
||||
icon_colour = "#5C4831"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+300
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/carpet
|
||||
name = "carpet"
|
||||
@@ -598,12 +608,16 @@ var/list/name_to_material
|
||||
use_name = "red upholstery"
|
||||
icon_colour = "#DA020A"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/cotton
|
||||
name = "cotton"
|
||||
display_name ="cotton"
|
||||
icon_colour = "#FFFFFF"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/cloth_teal
|
||||
name = "teal"
|
||||
@@ -611,6 +625,8 @@ var/list/name_to_material
|
||||
use_name = "teal cloth"
|
||||
icon_colour = "#00EAFA"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/cloth_black
|
||||
name = "black"
|
||||
@@ -618,6 +634,8 @@ var/list/name_to_material
|
||||
use_name = "black cloth"
|
||||
icon_colour = "#505050"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/cloth_green
|
||||
name = "green"
|
||||
@@ -625,6 +643,8 @@ var/list/name_to_material
|
||||
use_name = "green cloth"
|
||||
icon_colour = "#01C608"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/cloth_puple
|
||||
name = "purple"
|
||||
@@ -632,6 +652,8 @@ var/list/name_to_material
|
||||
use_name = "purple cloth"
|
||||
icon_colour = "#9C56C4"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/cloth_blue
|
||||
name = "blue"
|
||||
@@ -639,6 +661,8 @@ var/list/name_to_material
|
||||
use_name = "blue cloth"
|
||||
icon_colour = "#6B6FE3"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/cloth_beige
|
||||
name = "beige"
|
||||
@@ -646,6 +670,8 @@ var/list/name_to_material
|
||||
use_name = "beige cloth"
|
||||
icon_colour = "#E8E7C8"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
|
||||
/material/cloth_lime
|
||||
name = "lime"
|
||||
@@ -653,3 +679,5 @@ var/list/name_to_material
|
||||
use_name = "lime cloth"
|
||||
icon_colour = "#62E36C"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
|
||||
if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles
|
||||
if(eattiles)
|
||||
for(var/obj/item/stack/tile/plasteel/T in view(src))
|
||||
for(var/obj/item/stack/tile/steel/T in view(src))
|
||||
if(T in ignorelist)
|
||||
continue
|
||||
target = T
|
||||
@@ -217,7 +217,7 @@
|
||||
if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs
|
||||
var/obj/item/I
|
||||
if(building == 1)
|
||||
I = new /obj/item/stack/tile/plasteel(src)
|
||||
I = new /obj/item/stack/tile/steel(src)
|
||||
else
|
||||
I = PoolOrNew(/obj/item/stack/rods, src)
|
||||
A.attackby(I, src)
|
||||
@@ -232,14 +232,14 @@
|
||||
visible_message("<span class='notice'>[src] begins to improve the floor.</span>")
|
||||
if(do_after(src, 50))
|
||||
if(!F.floor_type)
|
||||
var/obj/item/stack/tile/plasteel/T = new /obj/item/stack/tile/plasteel(src)
|
||||
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(src)
|
||||
F.attackby(T, src)
|
||||
addTiles(-1)
|
||||
target = null
|
||||
repairing = 0
|
||||
update_icons()
|
||||
else if(istype(A, /obj/item/stack/tile/plasteel) && amount < maxAmount)
|
||||
var/obj/item/stack/tile/plasteel/T = A
|
||||
else if(istype(A, /obj/item/stack/tile/steel) && amount < maxAmount)
|
||||
var/obj/item/stack/tile/steel/T = A
|
||||
visible_message("<span class='notice'>[src] begins to collect tiles.</span>")
|
||||
repairing = 1
|
||||
update_icons()
|
||||
@@ -271,7 +271,7 @@
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
var/obj/item/stack/tile/plasteel/T = new /obj/item/stack/tile/plasteel(Tsec)
|
||||
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(Tsec)
|
||||
T.amount = amount
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
@@ -287,8 +287,8 @@
|
||||
|
||||
/* Assembly */
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/plasteel/T, mob/user as mob)
|
||||
if(!istype(T, /obj/item/stack/tile/plasteel))
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/steel/T, mob/user as mob)
|
||||
if(!istype(T, /obj/item/stack/tile/steel))
|
||||
..()
|
||||
return
|
||||
if(contents.len >= 1)
|
||||
|
||||
@@ -381,7 +381,8 @@
|
||||
|
||||
/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
bodytemperature = max(bodytemperature, BODYTEMP_HEAT_DAMAGE_LIMIT+10)
|
||||
var/temp_inc = max(BODYTEMP_HEATING_MAX*(1-get_heat_protection()), 0)
|
||||
bodytemperature = min(bodytemperature + temp_inc, exposed_temperature)
|
||||
|
||||
/mob/living/carbon/can_use_hands()
|
||||
if(handcuffed)
|
||||
|
||||
@@ -962,11 +962,18 @@
|
||||
spawn(rand(20,50))
|
||||
client.dir = 1
|
||||
|
||||
if(hallucination<=2)
|
||||
hallucination = 0
|
||||
halloss = 0
|
||||
else
|
||||
hallucination -= 2
|
||||
if(hallucination)
|
||||
if(hallucination >= 20)
|
||||
if(prob(3))
|
||||
fake_attack(src)
|
||||
if(!handling_hal)
|
||||
spawn handle_hallucinations() //The not boring kind!
|
||||
if(client && prob(5))
|
||||
client.dir = pick(2,4,8)
|
||||
var/client/C = client
|
||||
spawn(rand(20,50))
|
||||
if(C)
|
||||
C.dir = 1
|
||||
|
||||
else
|
||||
for(var/atom/a in hallucinations)
|
||||
|
||||
@@ -636,17 +636,24 @@ var/global/list/damage_icon_parts = list()
|
||||
/mob/living/carbon/human/update_inv_head(var/update_icons=1)
|
||||
if(head)
|
||||
head.screen_loc = ui_head //TODO
|
||||
var/image/standing
|
||||
if(istype(head,/obj/item/clothing/head/kitty))
|
||||
standing = image("icon" = head:mob)
|
||||
else
|
||||
if(head.icon_override)
|
||||
standing = image("icon" = head.icon_override, "icon_state" = "[head.icon_state]")
|
||||
else if(head.sprite_sheets && head.sprite_sheets[species.name])
|
||||
standing = image("icon" = head.sprite_sheets[species.name], "icon_state" = "[head.icon_state]")
|
||||
else
|
||||
standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]")
|
||||
|
||||
|
||||
//Determine the icon to use
|
||||
var/t_icon = INV_HEAD_DEF_ICON
|
||||
if(head.icon_override)
|
||||
t_icon = head.icon_override
|
||||
else if(head.sprite_sheets && head.sprite_sheets[species.name])
|
||||
t_icon = head.sprite_sheets[species.name]
|
||||
else if(head.item_icons && (icon_head in head.item_icons))
|
||||
t_icon = head.item_icons[icon_head]
|
||||
|
||||
//Determine the state to use
|
||||
var/t_state = head.icon_state
|
||||
if(head.item_state)
|
||||
t_state = head.item_state
|
||||
|
||||
//Create the image
|
||||
var/image/standing = image(icon = t_icon, icon_state = t_state)
|
||||
|
||||
if(head.blood_DNA)
|
||||
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood")
|
||||
bloodsies.color = head.blood_color
|
||||
|
||||
@@ -239,6 +239,12 @@
|
||||
adjust_fire_stacks(2)
|
||||
IgniteMob()
|
||||
|
||||
/mob/living/proc/get_cold_protection()
|
||||
return 0
|
||||
|
||||
/mob/living/proc/get_heat_protection()
|
||||
return 0
|
||||
|
||||
//Finds the effective temperature that the mob is burning at.
|
||||
/mob/living/proc/fire_burn_temperature()
|
||||
if (fire_stacks <= 0)
|
||||
|
||||
@@ -271,9 +271,10 @@
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/H = holder
|
||||
for(var/obj/item/organ/external/affecting in H.organs)
|
||||
if(affecting.hidden == card)
|
||||
if(card in affecting.implants)
|
||||
affecting.take_damage(rand(30,50))
|
||||
H.visible_message("<span class='danger'>\The [src] explodes out of \the [H]'s [affecting.name][(affecting.status & ORGAN_ROBOT) ? " in a shower of gore" : ""]!</span>")
|
||||
affecting.implants -= card
|
||||
H.visible_message("<span class='danger'>\The [src] explodes out of \the [H]'s [affecting.name] in shower of gore!</span>")
|
||||
break
|
||||
holder.drop_from_inventory(card)
|
||||
else if(istype(card.loc,/obj/item/device/pda))
|
||||
|
||||
@@ -372,7 +372,7 @@ var/global/list/robot_modules = list(
|
||||
C.synths = list(wire)
|
||||
src.modules += C
|
||||
|
||||
var/obj/item/stack/tile/plasteel/cyborg/S = new /obj/item/stack/tile/plasteel/cyborg(src)
|
||||
var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src)
|
||||
S.synths = list(metal)
|
||||
src.modules += S
|
||||
|
||||
@@ -695,7 +695,7 @@ var/global/list/robot_modules = list(
|
||||
C.synths = list(wire)
|
||||
src.modules += C
|
||||
|
||||
var/obj/item/stack/tile/plasteel/cyborg/S = new /obj/item/stack/tile/plasteel/cyborg(src)
|
||||
var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src)
|
||||
S.synths = list(metal)
|
||||
src.modules += S
|
||||
|
||||
|
||||
@@ -190,7 +190,10 @@ datum/preferences
|
||||
qdel(I)
|
||||
var/jobflag
|
||||
var/dept
|
||||
if(job_civilian_high)
|
||||
if (job_civilian_low & ASSISTANT)
|
||||
jobflag = job_civilian_low
|
||||
dept = CIVILIAN
|
||||
else if(job_civilian_high)
|
||||
jobflag = job_civilian_high
|
||||
dept = CIVILIAN
|
||||
else if (job_medsci_high)
|
||||
@@ -199,7 +202,6 @@ datum/preferences
|
||||
else if (job_engsec_high)
|
||||
jobflag = job_engsec_high
|
||||
dept = ENGSEC
|
||||
|
||||
if(jobflag && dept && job_master)
|
||||
for (var/datum/job/J in job_master.occupations)
|
||||
if((J.department_flag & dept) && (J.flag & jobflag))
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
//Having them here also makes for a nice reference list of the various overlay-updating procs available
|
||||
|
||||
//default item on-mob icons
|
||||
#define INV_HEAD_DEF_ICON 'icons/mob/head.dmi'
|
||||
#define INV_BACK_DEF_ICON 'icons/mob/back.dmi'
|
||||
#define INV_L_HAND_DEF_ICON 'icons/mob/items/lefthand.dmi'
|
||||
#define INV_R_HAND_DEF_ICON 'icons/mob/items/righthand.dmi'
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
var/cavity = 0
|
||||
var/sabotaged = 0 // If a prosthetic limb is emagged, it will detonate when it fails.
|
||||
var/encased // Needs to be opened with a saw to access the organs.
|
||||
var/obj/item/hidden = null
|
||||
var/list/implants = list()
|
||||
var/wound_update_accuracy = 1 // how often wounds should be updated, a higher number means less often
|
||||
var/joint = "joint" // Descriptive string used in dislocation.
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "paper"
|
||||
item_state = "paper"
|
||||
throwforce = 0
|
||||
w_class = 1.0
|
||||
throw_range = 1
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
explosion(src.loc,1,2,4)
|
||||
else if (reagents.total_volume > 100)
|
||||
explosion(src.loc,0,1,3)
|
||||
else
|
||||
else if (reagents.total_volume > 50)
|
||||
explosion(src.loc,-1,1,2)
|
||||
if(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -120,8 +120,9 @@
|
||||
var/closing = 0
|
||||
|
||||
/datum/computer/file/embedded_program/docking/simple/escape_pod/proc/arm()
|
||||
armed = 1
|
||||
open_door()
|
||||
if(!armed)
|
||||
armed = 1
|
||||
open_door()
|
||||
|
||||
|
||||
/datum/computer/file/embedded_program/docking/simple/escape_pod/receive_user_command(command)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
/obj/item/weapon/scalpel/laser1 = 75, \
|
||||
/obj/item/weapon/melee/energy/sword = 5
|
||||
)
|
||||
|
||||
priority = 2
|
||||
min_duration = 90
|
||||
max_duration = 110
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/manager = 100
|
||||
)
|
||||
|
||||
priority = 2
|
||||
min_duration = 80
|
||||
max_duration = 120
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && !affected.cavity && !affected.hidden
|
||||
return affected && !affected.cavity
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -106,7 +106,15 @@
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && !istype(user,/mob/living/silicon/robot) && !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected)
|
||||
if(istype(user,/mob/living/silicon/robot))
|
||||
return
|
||||
if(affected && affected.cavity)
|
||||
var/total_volume = tool.w_class
|
||||
for(var/obj/item/I in affected.implants)
|
||||
if(istype(I,/obj/item/weapon/implant))
|
||||
continue
|
||||
total_volume += I.w_class
|
||||
return total_volume <= get_max_wclass(affected)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -126,8 +134,8 @@
|
||||
affected.wounds += I
|
||||
affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1)
|
||||
user.drop_item()
|
||||
affected.hidden = tool
|
||||
tool.loc = target
|
||||
affected.implants += tool
|
||||
tool.loc = affected
|
||||
affected.cavity = 0
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
@@ -162,7 +170,7 @@
|
||||
|
||||
if (affected.implants.len)
|
||||
|
||||
var/obj/item/obj = affected.implants[1]
|
||||
var/obj/item/obj = pick(affected.implants)
|
||||
|
||||
if(istype(obj,/obj/item/weapon/implant))
|
||||
var/obj/item/weapon/implant/imp = obj
|
||||
@@ -189,6 +197,8 @@
|
||||
worm.leave_host()
|
||||
else
|
||||
obj.loc = get_turf(target)
|
||||
obj.add_blood(target)
|
||||
obj.update_icon()
|
||||
if(istype(obj,/obj/item/weapon/implant))
|
||||
var/obj/item/weapon/implant/imp = obj
|
||||
imp.imp_in = null
|
||||
@@ -196,16 +206,6 @@
|
||||
else
|
||||
user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.name].", \
|
||||
"\blue There's something inside [target]'s [affected.name], but you just missed it this time." )
|
||||
else if (affected.hidden)
|
||||
user.visible_message("\blue [user] takes something out of [target]'s [affected.name] with \the [tool].", \
|
||||
"\blue You take something out of [target]'s [affected.name]s with \the [tool]." )
|
||||
affected.hidden.loc = get_turf(target)
|
||||
if(!affected.hidden.blood_DNA)
|
||||
affected.hidden.blood_DNA = list()
|
||||
affected.hidden.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type
|
||||
affected.hidden.update_icon()
|
||||
affected.hidden = null
|
||||
|
||||
else
|
||||
user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \
|
||||
"\blue You could not find anything inside [target]'s [affected.name]." )
|
||||
|
||||
@@ -232,6 +232,7 @@
|
||||
gas[g] = gas[g] * (1 - ratio)
|
||||
|
||||
removed.temperature = temperature
|
||||
removed.volume = volume * group_multiplier / out_group_multiplier
|
||||
update_values()
|
||||
removed.update_values()
|
||||
|
||||
|
||||
@@ -179,9 +179,10 @@ var/world_topic_spam_protect_time = world.timeofday
|
||||
return "Bad Key"
|
||||
|
||||
var/client/C
|
||||
var/req_ckey = ckey(input["adminmsg"])
|
||||
|
||||
for(var/client/K in clients)
|
||||
if(K.ckey == input["adminmsg"])
|
||||
if(K.ckey == req_ckey)
|
||||
C = K
|
||||
break
|
||||
if(!C)
|
||||
@@ -222,10 +223,28 @@ var/world_topic_spam_protect_time = world.timeofday
|
||||
world_topic_spam_protect_ip = addr
|
||||
return "Bad Key"
|
||||
|
||||
return show_player_info_irc(input["notes"])
|
||||
return show_player_info_irc(ckey(input["notes"]))
|
||||
|
||||
else if(copytext(T,1,4) == "age")
|
||||
var/input[] = params2list(T)
|
||||
if(input["key"] != config.comms_password)
|
||||
if(world_topic_spam_protect_ip == addr && abs(world_topic_spam_protect_time - world.time) < 50)
|
||||
spawn(50)
|
||||
world_topic_spam_protect_time = world.time
|
||||
return "Bad Key (Throttled)"
|
||||
|
||||
world_topic_spam_protect_time = world.time
|
||||
world_topic_spam_protect_ip = addr
|
||||
return "Bad Key"
|
||||
|
||||
var/age = get_player_age(input["age"])
|
||||
if(isnum(age))
|
||||
if(age >= 0)
|
||||
return "[age]"
|
||||
else
|
||||
return "Ckey not found"
|
||||
else
|
||||
return "Database connection failed or not set up"
|
||||
|
||||
|
||||
/world/Reboot(var/reason)
|
||||
|
||||
Reference in New Issue
Block a user