mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +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()
|
ReplaceWithLattice()
|
||||||
return
|
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)
|
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
||||||
if(L)
|
if(L)
|
||||||
var/obj/item/stack/tile/plasteel/S = C
|
var/obj/item/stack/tile/steel/S = C
|
||||||
if (S.get_amount() < 1)
|
if (S.get_amount() < 1)
|
||||||
return
|
return
|
||||||
qdel(L)
|
qdel(L)
|
||||||
|
|||||||
@@ -226,14 +226,15 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
|||||||
|
|
||||||
//Returns the firelevel
|
//Returns the firelevel
|
||||||
/datum/gas_mixture/proc/zburn(zone/zone, force_burn, no_check = 0)
|
/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
|
. = 0
|
||||||
if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null)))
|
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/liquid_fuel = 0
|
||||||
var/total_fuel = 0
|
var/total_fuel = 0
|
||||||
var/total_oxidizers = 0
|
var/total_oxidizers = 0
|
||||||
@@ -269,23 +270,27 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
|||||||
|
|
||||||
//calculate the firelevel.
|
//calculate the firelevel.
|
||||||
var/firelevel = calculate_firelevel(total_fuel, total_oxidizers, reaction_limit)
|
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).)
|
||||||
//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 = min(0.2, (firelevel/vsc.fire_firelevel_multiplier))*gas_fuel*FIRE_GAS_BURNRATE_MULT
|
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.
|
//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/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress
|
||||||
var/used_fuel = min(total_reaction_progress, reaction_limit)
|
var/used_fuel = min(total_reaction_progress, reaction_limit)
|
||||||
var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT)
|
var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT)
|
||||||
|
|
||||||
#ifdef FIREDBG
|
#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("firelevel -> [firelevel] / [vsc.fire_firelevel_multiplier]")
|
||||||
log_debug("liquid_reaction_progress = [liquid_reaction_progress]")
|
log_debug("liquid_reaction_progress = [liquid_reaction_progress]")
|
||||||
log_debug("gas_reaction_progress = [gas_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
|
#endif
|
||||||
|
|
||||||
//if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out
|
//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 fuel and oxidizer, add carbon dioxide and heat
|
||||||
|
|
||||||
//remove and add gasses as calculated
|
//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_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 = between(0.25, used_fuel-used_gas_fuel, liquid_fuel)
|
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() and adjust_gas() handle the group_multiplier for us.
|
||||||
remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers)
|
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())
|
zone.remove_liquidfuel(used_liquid_fuel, !check_combustability())
|
||||||
|
|
||||||
//calculate the energy produced by the reaction and then set the new temperature of the mix
|
//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
|
#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]")
|
log_debug("new temperature = [temperature]")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -353,7 +358,7 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
|
|||||||
|
|
||||||
. = 0
|
. = 0
|
||||||
for(var/g in gas)
|
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
|
. = 1
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ var/global/datum/controller/radio/radio_controller
|
|||||||
devices_line -= null
|
devices_line -= null
|
||||||
if (devices_line.len==0)
|
if (devices_line.len==0)
|
||||||
devices -= devices_filter
|
devices -= devices_filter
|
||||||
qdel(devices_line)
|
del(devices_line)
|
||||||
|
|
||||||
/datum/signal
|
/datum/signal
|
||||||
var/obj/source
|
var/obj/source
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
|
|
||||||
for(var/obj/machinery/power/apc/C in world)
|
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
|
C.cell.charge = 0
|
||||||
|
|
||||||
/proc/power_restore(var/announce = 1)
|
/proc/power_restore(var/announce = 1)
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
if(announce)
|
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')
|
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)
|
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
|
C.cell.charge = C.cell.maxcharge
|
||||||
for(var/obj/machinery/power/smes/S in world)
|
for(var/obj/machinery/power/smes/S in world)
|
||||||
var/area/current_area = get_area(S)
|
var/area/current_area = get_area(S)
|
||||||
|
|||||||
@@ -399,7 +399,7 @@
|
|||||||
imp += "[I] implanted:"
|
imp += "[I] implanted:"
|
||||||
else
|
else
|
||||||
unknown_body++
|
unknown_body++
|
||||||
if(unknown_body || e.hidden)
|
if(unknown_body)
|
||||||
imp += "Unknown body present:"
|
imp += "Unknown body present:"
|
||||||
|
|
||||||
if(!AN && !open && !infected & !imp)
|
if(!AN && !open && !infected & !imp)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0)
|
var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0)
|
||||||
|
|
||||||
/obj/machinery/floorlayer/New()
|
/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)
|
/obj/machinery/floorlayer/Move(new_turf,M_Dir)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ obj/machinery/recharger
|
|||||||
var/icon_state_charged = "recharger2"
|
var/icon_state_charged = "recharger2"
|
||||||
var/icon_state_charging = "recharger1"
|
var/icon_state_charging = "recharger1"
|
||||||
var/icon_state_idle = "recharger0" //also when unpowered
|
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)
|
obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||||
if(istype(user,/mob/living/silicon))
|
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
|
G.loc = src
|
||||||
charging = G
|
charging = G
|
||||||
update_icon()
|
update_icon()
|
||||||
else if(istype(G, /obj/item/weapon/wrench))
|
else if(portable && istype(G, /obj/item/weapon/wrench))
|
||||||
if(charging)
|
if(charging)
|
||||||
user << "<span class='warning'>Remove [charging] first!</span>"
|
user << "<span class='warning'>Remove [charging] first!</span>"
|
||||||
return
|
return
|
||||||
@@ -155,3 +156,4 @@ obj/machinery/recharger/wallcharger
|
|||||||
icon_state_charged = "wrecharger2"
|
icon_state_charged = "wrecharger2"
|
||||||
icon_state_charging = "wrecharger1"
|
icon_state_charging = "wrecharger1"
|
||||||
icon_state_idle = "wrecharger0"
|
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)
|
/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
|
health -= 5
|
||||||
healthcheck()
|
healthcheck()
|
||||||
|
|
||||||
@@ -425,7 +425,7 @@ Alien plants should do something if theres a lot of poison
|
|||||||
Burst()
|
Burst()
|
||||||
|
|
||||||
/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
/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
|
health -= 5
|
||||||
healthcheck()
|
healthcheck()
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||||
if(exposed_temperature > 300)
|
if(exposed_temperature > 300 + T0C)
|
||||||
health -= 5
|
health -= 5
|
||||||
healthcheck()
|
healthcheck()
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
if(istype(A, /turf/simulated/floor))
|
if(istype(A, /turf/simulated/floor))
|
||||||
var/turf/simulated/floor/F = A
|
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)
|
if(tile_dir_mode)
|
||||||
var/D = get_dir(usr, F)
|
var/D = get_dir(usr, F)
|
||||||
if(usr.loc == F)
|
if(usr.loc == F)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/obj/item/stack/tile/plasteel
|
/obj/item/stack/tile/steel
|
||||||
name = "floor tile"
|
name = "floor tile"
|
||||||
singular_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"
|
icon_state = "tile"
|
||||||
force = 6.0
|
force = 6.0
|
||||||
matter = list(DEFAULT_WALL_MATERIAL = 937.5)
|
matter = list(DEFAULT_WALL_MATERIAL = 937.5)
|
||||||
@@ -10,23 +10,23 @@
|
|||||||
throw_range = 20
|
throw_range = 20
|
||||||
flags = CONDUCT
|
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_x = rand(1, 14)
|
||||||
src.pixel_y = rand(1, 14)
|
src.pixel_y = rand(1, 14)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/stack/tile/plasteel/cyborg
|
/obj/item/stack/tile/steel/cyborg
|
||||||
name = "floor tile synthesizer"
|
name = "floor tile synthesizer"
|
||||||
desc = "A device that makes floor tiles."
|
desc = "A device that makes floor tiles."
|
||||||
gender = NEUTER
|
gender = NEUTER
|
||||||
matter = null
|
matter = null
|
||||||
uses_charge = 1
|
uses_charge = 1
|
||||||
charge_costs = list(250)
|
charge_costs = list(250)
|
||||||
stacktype = /obj/item/stack/tile/plasteel
|
stacktype = /obj/item/stack/tile/steel
|
||||||
build_type = /obj/item/stack/tile/plasteel
|
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))
|
if (istype(S,/turf/space))
|
||||||
S.ChangeTurf(/turf/simulated/floor/plating/airless)
|
S.ChangeTurf(/turf/simulated/floor/plating/airless)
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
throwforce = 1.0
|
throwforce = 1.0
|
||||||
throw_speed = 5
|
throw_speed = 5
|
||||||
throw_range = 20
|
throw_range = 20
|
||||||
flags = CONDUCT
|
flags = 0
|
||||||
origin_tech = list(TECH_BIO = 1)
|
origin_tech = list(TECH_BIO = 1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
throwforce = 1.0
|
throwforce = 1.0
|
||||||
throw_speed = 5
|
throw_speed = 5
|
||||||
throw_range = 20
|
throw_range = 20
|
||||||
flags = CONDUCT
|
flags = 0
|
||||||
|
|
||||||
/obj/item/stack/tile/wood/cyborg
|
/obj/item/stack/tile/wood/cyborg
|
||||||
name = "wood floor tile synthesizer"
|
name = "wood floor tile synthesizer"
|
||||||
@@ -63,4 +63,4 @@
|
|||||||
throwforce = 1.0
|
throwforce = 1.0
|
||||||
throw_speed = 5
|
throw_speed = 5
|
||||||
throw_range = 20
|
throw_range = 20
|
||||||
flags = CONDUCT
|
flags = 0
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
|
|
||||||
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob)
|
/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)
|
var/turf/T = get_turf(src)
|
||||||
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead
|
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ var/list/wood_icons = list("wood","wood-broken")
|
|||||||
/turf/simulated/floor
|
/turf/simulated/floor
|
||||||
|
|
||||||
//Note to coders, the 'intact' var can no longer be used to determine if the floor is a plating or not.
|
//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"
|
name = "floor"
|
||||||
icon = 'icons/turf/floors.dmi'
|
icon = 'icons/turf/floors.dmi'
|
||||||
icon_state = "floor"
|
icon_state = "floor"
|
||||||
@@ -42,7 +42,7 @@ var/list/wood_icons = list("wood","wood-broken")
|
|||||||
var/broken = 0
|
var/broken = 0
|
||||||
var/burnt = 0
|
var/burnt = 0
|
||||||
var/mineral = DEFAULT_WALL_MATERIAL
|
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
|
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()
|
proc/get_lightfloor_state()
|
||||||
@@ -102,13 +102,23 @@ var/list/wood_icons = list("wood","wood-broken")
|
|||||||
return
|
return
|
||||||
|
|
||||||
/turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
/turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||||
|
|
||||||
|
var/temp_destroy = get_damage_temperature()
|
||||||
if(!burnt && prob(5))
|
if(!burnt && prob(5))
|
||||||
burn_tile()
|
burn_tile(exposed_temperature)
|
||||||
else if(prob(1) && !is_plating())
|
else if(temp_destroy && exposed_temperature >= (temp_destroy + 100) && prob(1) && !is_plating())
|
||||||
make_plating()
|
make_plating() //destroy the tile, exposing plating
|
||||||
burn_tile()
|
burn_tile(exposed_temperature)
|
||||||
return
|
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)
|
/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)
|
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()
|
turf/simulated/floor/proc/update_icon()
|
||||||
if(lava)
|
if(lava)
|
||||||
return
|
return
|
||||||
else if(is_plasteel_floor())
|
else if(is_steel_floor())
|
||||||
if(!broken && !burnt)
|
if(!broken && !burnt)
|
||||||
icon_state = icon_regular_floor
|
icon_state = icon_regular_floor
|
||||||
else if(is_plating())
|
else if(is_plating())
|
||||||
@@ -237,8 +247,8 @@ turf/simulated/floor/proc/update_icon()
|
|||||||
make_plating()
|
make_plating()
|
||||||
break_tile()
|
break_tile()
|
||||||
|
|
||||||
/turf/simulated/floor/is_plasteel_floor()
|
/turf/simulated/floor/is_steel_floor()
|
||||||
if(ispath(floor_type, /obj/item/stack/tile/plasteel))
|
if(ispath(floor_type, /obj/item/stack/tile/steel))
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
@@ -277,7 +287,7 @@ turf/simulated/floor/proc/update_icon()
|
|||||||
if(istype(src,/turf/simulated/floor/mech_bay_recharge_floor))
|
if(istype(src,/turf/simulated/floor/mech_bay_recharge_floor))
|
||||||
src.ChangeTurf(/turf/simulated/floor/plating)
|
src.ChangeTurf(/turf/simulated/floor/plating)
|
||||||
if(broken) return
|
if(broken) return
|
||||||
if(is_plasteel_floor())
|
if(is_steel_floor())
|
||||||
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
||||||
broken = 1
|
broken = 1
|
||||||
else if(is_light_floor())
|
else if(is_light_floor())
|
||||||
@@ -296,28 +306,38 @@ turf/simulated/floor/proc/update_icon()
|
|||||||
src.icon_state = "sand[pick("1","2","3")]"
|
src.icon_state = "sand[pick("1","2","3")]"
|
||||||
broken = 1
|
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/engine)) return
|
||||||
if(istype(src,/turf/simulated/floor/plating/airless/asteroid)) return//Asteroid tiles don't burn
|
if(istype(src,/turf/simulated/floor/plating/airless/asteroid)) return//Asteroid tiles don't burn
|
||||||
if(broken || burnt) return
|
|
||||||
if(is_plasteel_floor())
|
var/damage_temp = get_damage_temperature()
|
||||||
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
|
||||||
burnt = 1
|
if(broken) return
|
||||||
else if(is_plasteel_floor())
|
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)]"
|
src.icon_state = "floorscorched[pick(1,2)]"
|
||||||
burnt = 1
|
burnt = 1
|
||||||
else if(is_plating())
|
else if(exposed_temperature >= damage_temp)
|
||||||
src.icon_state = "panelscorched"
|
if(is_steel_floor())
|
||||||
burnt = 1
|
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
||||||
else if(is_wood_floor())
|
burnt = 1
|
||||||
src.icon_state = "wood-broken"
|
else if(is_plating())
|
||||||
burnt = 1
|
src.icon_state = "panelscorched"
|
||||||
else if(is_carpet_floor())
|
burnt = 1
|
||||||
src.icon_state = "carpet-broken"
|
else if(is_wood_floor())
|
||||||
burnt = 1
|
src.icon_state = "wood-broken"
|
||||||
else if(is_grass_floor())
|
burnt = 1
|
||||||
src.icon_state = "sand[pick("1","2","3")]"
|
else if(is_carpet_floor())
|
||||||
burnt = 1
|
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 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.
|
//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
|
//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
|
//If none is given it will make a new object. dropping or unequipping must be handled before or after calling
|
||||||
//this proc.
|
//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
|
broken = 0
|
||||||
burnt = 0
|
burnt = 0
|
||||||
intact = 1
|
intact = 1
|
||||||
set_light(0)
|
set_light(0)
|
||||||
if(T)
|
if(T)
|
||||||
if(istype(T,/obj/item/stack/tile/plasteel))
|
if(istype(T,/obj/item/stack/tile/steel))
|
||||||
floor_type = T.type
|
floor_type = T.type
|
||||||
if (icon_regular_floor)
|
if (icon_regular_floor)
|
||||||
icon_state = icon_regular_floor
|
icon_state = icon_regular_floor
|
||||||
@@ -368,7 +388,7 @@ turf/simulated/floor/proc/update_icon()
|
|||||||
levelupdate()
|
levelupdate()
|
||||||
return
|
return
|
||||||
//if you gave a valid parameter, it won't get thisf ar.
|
//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_state = "floor"
|
||||||
icon_regular_floor = icon_state
|
icon_regular_floor = icon_state
|
||||||
|
|
||||||
|
|||||||
@@ -35,10 +35,10 @@
|
|||||||
ReplaceWithLattice()
|
ReplaceWithLattice()
|
||||||
return
|
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)
|
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
||||||
if(L)
|
if(L)
|
||||||
var/obj/item/stack/tile/plasteel/S = C
|
var/obj/item/stack/tile/steel/S = C
|
||||||
if (S.get_amount() < 1)
|
if (S.get_amount() < 1)
|
||||||
return
|
return
|
||||||
qdel(L)
|
qdel(L)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
icon = 'icons/turf/floors.dmi'
|
icon = 'icons/turf/floors.dmi'
|
||||||
level = 1.0
|
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
|
var/intact = 1
|
||||||
|
|
||||||
//Properties for open tiles (/floor)
|
//Properties for open tiles (/floor)
|
||||||
@@ -156,7 +156,7 @@
|
|||||||
return 0
|
return 0
|
||||||
/turf/proc/is_asteroid_floor()
|
/turf/proc/is_asteroid_floor()
|
||||||
return 0
|
return 0
|
||||||
/turf/proc/is_plasteel_floor()
|
/turf/proc/is_steel_floor()
|
||||||
return 0
|
return 0
|
||||||
/turf/proc/is_light_floor()
|
/turf/proc/is_light_floor()
|
||||||
return 0
|
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_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/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/steel(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/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/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/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/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/plasteel(M), slot_in_backpack)
|
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||||
|
|
||||||
if ("pirate")
|
if ("pirate")
|
||||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
||||||
|
|||||||
@@ -178,6 +178,25 @@
|
|||||||
return ..()
|
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()
|
/client/proc/log_client_to_db()
|
||||||
|
|
||||||
|
|||||||
@@ -141,21 +141,18 @@
|
|||||||
desc = "A pair of kitty ears. Meow!"
|
desc = "A pair of kitty ears. Meow!"
|
||||||
icon_state = "kitty"
|
icon_state = "kitty"
|
||||||
body_parts_covered = 0
|
body_parts_covered = 0
|
||||||
var/icon/mob
|
|
||||||
var/icon/mob2
|
|
||||||
siemens_coefficient = 1.5
|
siemens_coefficient = 1.5
|
||||||
|
item_icons = list()
|
||||||
|
|
||||||
update_icon(var/mob/living/carbon/human/user)
|
update_icon(var/mob/living/carbon/human/user)
|
||||||
if(!istype(user)) return
|
if(!istype(user)) return
|
||||||
mob = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty")
|
var/icon/ears = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty")
|
||||||
mob2 = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty2")
|
ears.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
|
||||||
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/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner")
|
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")
|
ears.Blend(earbit, ICON_OVERLAY)
|
||||||
mob.Blend(earbit, ICON_OVERLAY)
|
|
||||||
mob2.Blend(earbit2, ICON_OVERLAY)
|
item_icons[icon_head] = ears
|
||||||
|
|
||||||
/obj/item/clothing/head/richard
|
/obj/item/clothing/head/richard
|
||||||
name = "chicken mask"
|
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("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("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("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("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("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)
|
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
|
// Attributes
|
||||||
var/cut_delay = 0 // Delay in ticks when cutting through this wall.
|
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/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/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/integrity = 150 // General-use HP value for products.
|
||||||
var/opacity = 1 // Is the material transparent? 0.5< makes transparent walls/doors.
|
var/opacity = 1 // Is the material transparent? 0.5< makes transparent walls/doors.
|
||||||
@@ -247,7 +247,7 @@ var/list/name_to_material
|
|||||||
/material/phoron
|
/material/phoron
|
||||||
name = "phoron"
|
name = "phoron"
|
||||||
stack_type = /obj/item/stack/material/phoron
|
stack_type = /obj/item/stack/material/phoron
|
||||||
ignition_point = 100
|
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE
|
||||||
icon_base = "stone"
|
icon_base = "stone"
|
||||||
icon_colour = "#FC2BC5"
|
icon_colour = "#FC2BC5"
|
||||||
shard_type = SHARD_SHARD
|
shard_type = SHARD_SHARD
|
||||||
@@ -430,7 +430,7 @@ var/list/name_to_material
|
|||||||
name = "phoron glass"
|
name = "phoron glass"
|
||||||
stack_type = /obj/item/stack/material/glass/phoronglass
|
stack_type = /obj/item/stack/material/glass/phoronglass
|
||||||
flags = MATERIAL_BRITTLE
|
flags = MATERIAL_BRITTLE
|
||||||
ignition_point = 300
|
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE+300
|
||||||
integrity = 200 // idk why but phoron windows are strong, so.
|
integrity = 200 // idk why but phoron windows are strong, so.
|
||||||
icon_colour = "#FC2BC5"
|
icon_colour = "#FC2BC5"
|
||||||
stack_origin_tech = list(TECH_MATERIAL = 3, TECH_PHORON = 2)
|
stack_origin_tech = list(TECH_MATERIAL = 3, TECH_PHORON = 2)
|
||||||
@@ -459,6 +459,7 @@ var/list/name_to_material
|
|||||||
icon_colour = "#CCCCCC"
|
icon_colour = "#CCCCCC"
|
||||||
hardness = 10
|
hardness = 10
|
||||||
weight = 12
|
weight = 12
|
||||||
|
melting_point = T0C+371 //assuming heat resistant plastic
|
||||||
stack_origin_tech = list(TECH_MATERIAL = 3)
|
stack_origin_tech = list(TECH_MATERIAL = 3)
|
||||||
|
|
||||||
/material/plastic/holographic
|
/material/plastic/holographic
|
||||||
@@ -521,6 +522,8 @@ var/list/name_to_material
|
|||||||
shard_can_repair = 0 // you can't weld splinters back into planks
|
shard_can_repair = 0 // you can't weld splinters back into planks
|
||||||
hardness = 15
|
hardness = 15
|
||||||
weight = 18
|
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)
|
stack_origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
||||||
dooropen_noise = 'sound/effects/doorcreaky.ogg'
|
dooropen_noise = 'sound/effects/doorcreaky.ogg'
|
||||||
door_icon_base = "wood"
|
door_icon_base = "wood"
|
||||||
@@ -542,6 +545,8 @@ var/list/name_to_material
|
|||||||
icon_colour = "#AAAAAA"
|
icon_colour = "#AAAAAA"
|
||||||
hardness = 1
|
hardness = 1
|
||||||
weight = 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)
|
stack_origin_tech = list(TECH_MATERIAL = 1)
|
||||||
door_icon_base = "wood"
|
door_icon_base = "wood"
|
||||||
destruction_desc = "crumples"
|
destruction_desc = "crumples"
|
||||||
@@ -550,6 +555,8 @@ var/list/name_to_material
|
|||||||
name = "cloth"
|
name = "cloth"
|
||||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||||
door_icon_base = "wood"
|
door_icon_base = "wood"
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
|
||||||
/material/cult
|
/material/cult
|
||||||
@@ -578,6 +585,7 @@ var/list/name_to_material
|
|||||||
icon_colour = "#E85DD8"
|
icon_colour = "#E85DD8"
|
||||||
dooropen_noise = 'sound/effects/attackblob.ogg'
|
dooropen_noise = 'sound/effects/attackblob.ogg'
|
||||||
door_icon_base = "resin"
|
door_icon_base = "resin"
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/resin/can_open_material_door(var/mob/living/user)
|
/material/resin/can_open_material_door(var/mob/living/user)
|
||||||
var/mob/living/carbon/M = user
|
var/mob/living/carbon/M = user
|
||||||
@@ -591,6 +599,8 @@ var/list/name_to_material
|
|||||||
icon_colour = "#5C4831"
|
icon_colour = "#5C4831"
|
||||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+300
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/carpet
|
/material/carpet
|
||||||
name = "carpet"
|
name = "carpet"
|
||||||
@@ -598,12 +608,16 @@ var/list/name_to_material
|
|||||||
use_name = "red upholstery"
|
use_name = "red upholstery"
|
||||||
icon_colour = "#DA020A"
|
icon_colour = "#DA020A"
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/cotton
|
/material/cotton
|
||||||
name = "cotton"
|
name = "cotton"
|
||||||
display_name ="cotton"
|
display_name ="cotton"
|
||||||
icon_colour = "#FFFFFF"
|
icon_colour = "#FFFFFF"
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/cloth_teal
|
/material/cloth_teal
|
||||||
name = "teal"
|
name = "teal"
|
||||||
@@ -611,6 +625,8 @@ var/list/name_to_material
|
|||||||
use_name = "teal cloth"
|
use_name = "teal cloth"
|
||||||
icon_colour = "#00EAFA"
|
icon_colour = "#00EAFA"
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/cloth_black
|
/material/cloth_black
|
||||||
name = "black"
|
name = "black"
|
||||||
@@ -618,6 +634,8 @@ var/list/name_to_material
|
|||||||
use_name = "black cloth"
|
use_name = "black cloth"
|
||||||
icon_colour = "#505050"
|
icon_colour = "#505050"
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/cloth_green
|
/material/cloth_green
|
||||||
name = "green"
|
name = "green"
|
||||||
@@ -625,6 +643,8 @@ var/list/name_to_material
|
|||||||
use_name = "green cloth"
|
use_name = "green cloth"
|
||||||
icon_colour = "#01C608"
|
icon_colour = "#01C608"
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/cloth_puple
|
/material/cloth_puple
|
||||||
name = "purple"
|
name = "purple"
|
||||||
@@ -632,6 +652,8 @@ var/list/name_to_material
|
|||||||
use_name = "purple cloth"
|
use_name = "purple cloth"
|
||||||
icon_colour = "#9C56C4"
|
icon_colour = "#9C56C4"
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/cloth_blue
|
/material/cloth_blue
|
||||||
name = "blue"
|
name = "blue"
|
||||||
@@ -639,6 +661,8 @@ var/list/name_to_material
|
|||||||
use_name = "blue cloth"
|
use_name = "blue cloth"
|
||||||
icon_colour = "#6B6FE3"
|
icon_colour = "#6B6FE3"
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/cloth_beige
|
/material/cloth_beige
|
||||||
name = "beige"
|
name = "beige"
|
||||||
@@ -646,6 +670,8 @@ var/list/name_to_material
|
|||||||
use_name = "beige cloth"
|
use_name = "beige cloth"
|
||||||
icon_colour = "#E8E7C8"
|
icon_colour = "#E8E7C8"
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
|
|
||||||
/material/cloth_lime
|
/material/cloth_lime
|
||||||
name = "lime"
|
name = "lime"
|
||||||
@@ -653,3 +679,5 @@ var/list/name_to_material
|
|||||||
use_name = "lime cloth"
|
use_name = "lime cloth"
|
||||||
icon_colour = "#62E36C"
|
icon_colour = "#62E36C"
|
||||||
flags = MATERIAL_PADDING
|
flags = MATERIAL_PADDING
|
||||||
|
ignition_point = T0C+232
|
||||||
|
melting_point = T0C+300
|
||||||
|
|||||||
@@ -150,7 +150,7 @@
|
|||||||
|
|
||||||
if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles
|
if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles
|
||||||
if(eattiles)
|
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)
|
if(T in ignorelist)
|
||||||
continue
|
continue
|
||||||
target = T
|
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
|
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
|
var/obj/item/I
|
||||||
if(building == 1)
|
if(building == 1)
|
||||||
I = new /obj/item/stack/tile/plasteel(src)
|
I = new /obj/item/stack/tile/steel(src)
|
||||||
else
|
else
|
||||||
I = PoolOrNew(/obj/item/stack/rods, src)
|
I = PoolOrNew(/obj/item/stack/rods, src)
|
||||||
A.attackby(I, src)
|
A.attackby(I, src)
|
||||||
@@ -232,14 +232,14 @@
|
|||||||
visible_message("<span class='notice'>[src] begins to improve the floor.</span>")
|
visible_message("<span class='notice'>[src] begins to improve the floor.</span>")
|
||||||
if(do_after(src, 50))
|
if(do_after(src, 50))
|
||||||
if(!F.floor_type)
|
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)
|
F.attackby(T, src)
|
||||||
addTiles(-1)
|
addTiles(-1)
|
||||||
target = null
|
target = null
|
||||||
repairing = 0
|
repairing = 0
|
||||||
update_icons()
|
update_icons()
|
||||||
else if(istype(A, /obj/item/stack/tile/plasteel) && amount < maxAmount)
|
else if(istype(A, /obj/item/stack/tile/steel) && amount < maxAmount)
|
||||||
var/obj/item/stack/tile/plasteel/T = A
|
var/obj/item/stack/tile/steel/T = A
|
||||||
visible_message("<span class='notice'>[src] begins to collect tiles.</span>")
|
visible_message("<span class='notice'>[src] begins to collect tiles.</span>")
|
||||||
repairing = 1
|
repairing = 1
|
||||||
update_icons()
|
update_icons()
|
||||||
@@ -271,7 +271,7 @@
|
|||||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
new /obj/item/robot_parts/l_arm(Tsec)
|
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
|
T.amount = amount
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
s.set_up(3, 1, src)
|
s.set_up(3, 1, src)
|
||||||
@@ -287,8 +287,8 @@
|
|||||||
|
|
||||||
/* Assembly */
|
/* Assembly */
|
||||||
|
|
||||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/plasteel/T, mob/user as mob)
|
/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/plasteel))
|
if(!istype(T, /obj/item/stack/tile/steel))
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
if(contents.len >= 1)
|
if(contents.len >= 1)
|
||||||
|
|||||||
@@ -381,7 +381,8 @@
|
|||||||
|
|
||||||
/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
/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()
|
/mob/living/carbon/can_use_hands()
|
||||||
if(handcuffed)
|
if(handcuffed)
|
||||||
|
|||||||
@@ -962,11 +962,18 @@
|
|||||||
spawn(rand(20,50))
|
spawn(rand(20,50))
|
||||||
client.dir = 1
|
client.dir = 1
|
||||||
|
|
||||||
if(hallucination<=2)
|
if(hallucination)
|
||||||
hallucination = 0
|
if(hallucination >= 20)
|
||||||
halloss = 0
|
if(prob(3))
|
||||||
else
|
fake_attack(src)
|
||||||
hallucination -= 2
|
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
|
else
|
||||||
for(var/atom/a in hallucinations)
|
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)
|
/mob/living/carbon/human/update_inv_head(var/update_icons=1)
|
||||||
if(head)
|
if(head)
|
||||||
head.screen_loc = ui_head //TODO
|
head.screen_loc = ui_head //TODO
|
||||||
var/image/standing
|
|
||||||
if(istype(head,/obj/item/clothing/head/kitty))
|
//Determine the icon to use
|
||||||
standing = image("icon" = head:mob)
|
var/t_icon = INV_HEAD_DEF_ICON
|
||||||
else
|
if(head.icon_override)
|
||||||
if(head.icon_override)
|
t_icon = head.icon_override
|
||||||
standing = image("icon" = head.icon_override, "icon_state" = "[head.icon_state]")
|
else if(head.sprite_sheets && head.sprite_sheets[species.name])
|
||||||
else if(head.sprite_sheets && head.sprite_sheets[species.name])
|
t_icon = head.sprite_sheets[species.name]
|
||||||
standing = image("icon" = head.sprite_sheets[species.name], "icon_state" = "[head.icon_state]")
|
else if(head.item_icons && (icon_head in head.item_icons))
|
||||||
else
|
t_icon = head.item_icons[icon_head]
|
||||||
standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]")
|
|
||||||
|
//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)
|
if(head.blood_DNA)
|
||||||
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood")
|
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood")
|
||||||
bloodsies.color = head.blood_color
|
bloodsies.color = head.blood_color
|
||||||
|
|||||||
@@ -239,6 +239,12 @@
|
|||||||
adjust_fire_stacks(2)
|
adjust_fire_stacks(2)
|
||||||
IgniteMob()
|
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.
|
//Finds the effective temperature that the mob is burning at.
|
||||||
/mob/living/proc/fire_burn_temperature()
|
/mob/living/proc/fire_burn_temperature()
|
||||||
if (fire_stacks <= 0)
|
if (fire_stacks <= 0)
|
||||||
|
|||||||
@@ -271,9 +271,10 @@
|
|||||||
if(ishuman(holder))
|
if(ishuman(holder))
|
||||||
var/mob/living/carbon/human/H = holder
|
var/mob/living/carbon/human/H = holder
|
||||||
for(var/obj/item/organ/external/affecting in H.organs)
|
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))
|
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
|
break
|
||||||
holder.drop_from_inventory(card)
|
holder.drop_from_inventory(card)
|
||||||
else if(istype(card.loc,/obj/item/device/pda))
|
else if(istype(card.loc,/obj/item/device/pda))
|
||||||
|
|||||||
@@ -372,7 +372,7 @@ var/global/list/robot_modules = list(
|
|||||||
C.synths = list(wire)
|
C.synths = list(wire)
|
||||||
src.modules += C
|
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)
|
S.synths = list(metal)
|
||||||
src.modules += S
|
src.modules += S
|
||||||
|
|
||||||
@@ -695,7 +695,7 @@ var/global/list/robot_modules = list(
|
|||||||
C.synths = list(wire)
|
C.synths = list(wire)
|
||||||
src.modules += C
|
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)
|
S.synths = list(metal)
|
||||||
src.modules += S
|
src.modules += S
|
||||||
|
|
||||||
|
|||||||
@@ -190,7 +190,10 @@ datum/preferences
|
|||||||
qdel(I)
|
qdel(I)
|
||||||
var/jobflag
|
var/jobflag
|
||||||
var/dept
|
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
|
jobflag = job_civilian_high
|
||||||
dept = CIVILIAN
|
dept = CIVILIAN
|
||||||
else if (job_medsci_high)
|
else if (job_medsci_high)
|
||||||
@@ -199,7 +202,6 @@ datum/preferences
|
|||||||
else if (job_engsec_high)
|
else if (job_engsec_high)
|
||||||
jobflag = job_engsec_high
|
jobflag = job_engsec_high
|
||||||
dept = ENGSEC
|
dept = ENGSEC
|
||||||
|
|
||||||
if(jobflag && dept && job_master)
|
if(jobflag && dept && job_master)
|
||||||
for (var/datum/job/J in job_master.occupations)
|
for (var/datum/job/J in job_master.occupations)
|
||||||
if((J.department_flag & dept) && (J.flag & jobflag))
|
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
|
//Having them here also makes for a nice reference list of the various overlay-updating procs available
|
||||||
|
|
||||||
//default item on-mob icons
|
//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_BACK_DEF_ICON 'icons/mob/back.dmi'
|
||||||
#define INV_L_HAND_DEF_ICON 'icons/mob/items/lefthand.dmi'
|
#define INV_L_HAND_DEF_ICON 'icons/mob/items/lefthand.dmi'
|
||||||
#define INV_R_HAND_DEF_ICON 'icons/mob/items/righthand.dmi'
|
#define INV_R_HAND_DEF_ICON 'icons/mob/items/righthand.dmi'
|
||||||
|
|||||||
@@ -42,7 +42,6 @@
|
|||||||
var/cavity = 0
|
var/cavity = 0
|
||||||
var/sabotaged = 0 // If a prosthetic limb is emagged, it will detonate when it fails.
|
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/encased // Needs to be opened with a saw to access the organs.
|
||||||
var/obj/item/hidden = null
|
|
||||||
var/list/implants = list()
|
var/list/implants = list()
|
||||||
var/wound_update_accuracy = 1 // how often wounds should be updated, a higher number means less often
|
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.
|
var/joint = "joint" // Descriptive string used in dislocation.
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
gender = PLURAL
|
gender = PLURAL
|
||||||
icon = 'icons/obj/bureaucracy.dmi'
|
icon = 'icons/obj/bureaucracy.dmi'
|
||||||
icon_state = "paper"
|
icon_state = "paper"
|
||||||
|
item_state = "paper"
|
||||||
throwforce = 0
|
throwforce = 0
|
||||||
w_class = 1.0
|
w_class = 1.0
|
||||||
throw_range = 1
|
throw_range = 1
|
||||||
|
|||||||
@@ -165,7 +165,7 @@
|
|||||||
explosion(src.loc,1,2,4)
|
explosion(src.loc,1,2,4)
|
||||||
else if (reagents.total_volume > 100)
|
else if (reagents.total_volume > 100)
|
||||||
explosion(src.loc,0,1,3)
|
explosion(src.loc,0,1,3)
|
||||||
else
|
else if (reagents.total_volume > 50)
|
||||||
explosion(src.loc,-1,1,2)
|
explosion(src.loc,-1,1,2)
|
||||||
if(src)
|
if(src)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|||||||
@@ -120,8 +120,9 @@
|
|||||||
var/closing = 0
|
var/closing = 0
|
||||||
|
|
||||||
/datum/computer/file/embedded_program/docking/simple/escape_pod/proc/arm()
|
/datum/computer/file/embedded_program/docking/simple/escape_pod/proc/arm()
|
||||||
armed = 1
|
if(!armed)
|
||||||
open_door()
|
armed = 1
|
||||||
|
open_door()
|
||||||
|
|
||||||
|
|
||||||
/datum/computer/file/embedded_program/docking/simple/escape_pod/receive_user_command(command)
|
/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/scalpel/laser1 = 75, \
|
||||||
/obj/item/weapon/melee/energy/sword = 5
|
/obj/item/weapon/melee/energy/sword = 5
|
||||||
)
|
)
|
||||||
|
priority = 2
|
||||||
min_duration = 90
|
min_duration = 90
|
||||||
max_duration = 110
|
max_duration = 110
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
allowed_tools = list(
|
allowed_tools = list(
|
||||||
/obj/item/weapon/scalpel/manager = 100
|
/obj/item/weapon/scalpel/manager = 100
|
||||||
)
|
)
|
||||||
|
priority = 2
|
||||||
min_duration = 80
|
min_duration = 80
|
||||||
max_duration = 120
|
max_duration = 120
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
if(..())
|
if(..())
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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)
|
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)
|
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)
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
if(..())
|
if(..())
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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)
|
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)
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||||
@@ -126,8 +134,8 @@
|
|||||||
affected.wounds += I
|
affected.wounds += I
|
||||||
affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1)
|
affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1)
|
||||||
user.drop_item()
|
user.drop_item()
|
||||||
affected.hidden = tool
|
affected.implants += tool
|
||||||
tool.loc = target
|
tool.loc = affected
|
||||||
affected.cavity = 0
|
affected.cavity = 0
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
@@ -162,7 +170,7 @@
|
|||||||
|
|
||||||
if (affected.implants.len)
|
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))
|
if(istype(obj,/obj/item/weapon/implant))
|
||||||
var/obj/item/weapon/implant/imp = obj
|
var/obj/item/weapon/implant/imp = obj
|
||||||
@@ -189,6 +197,8 @@
|
|||||||
worm.leave_host()
|
worm.leave_host()
|
||||||
else
|
else
|
||||||
obj.loc = get_turf(target)
|
obj.loc = get_turf(target)
|
||||||
|
obj.add_blood(target)
|
||||||
|
obj.update_icon()
|
||||||
if(istype(obj,/obj/item/weapon/implant))
|
if(istype(obj,/obj/item/weapon/implant))
|
||||||
var/obj/item/weapon/implant/imp = obj
|
var/obj/item/weapon/implant/imp = obj
|
||||||
imp.imp_in = null
|
imp.imp_in = null
|
||||||
@@ -196,16 +206,6 @@
|
|||||||
else
|
else
|
||||||
user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.name].", \
|
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." )
|
"\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
|
else
|
||||||
user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \
|
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]." )
|
"\blue You could not find anything inside [target]'s [affected.name]." )
|
||||||
|
|||||||
@@ -232,6 +232,7 @@
|
|||||||
gas[g] = gas[g] * (1 - ratio)
|
gas[g] = gas[g] * (1 - ratio)
|
||||||
|
|
||||||
removed.temperature = temperature
|
removed.temperature = temperature
|
||||||
|
removed.volume = volume * group_multiplier / out_group_multiplier
|
||||||
update_values()
|
update_values()
|
||||||
removed.update_values()
|
removed.update_values()
|
||||||
|
|
||||||
|
|||||||
@@ -179,9 +179,10 @@ var/world_topic_spam_protect_time = world.timeofday
|
|||||||
return "Bad Key"
|
return "Bad Key"
|
||||||
|
|
||||||
var/client/C
|
var/client/C
|
||||||
|
var/req_ckey = ckey(input["adminmsg"])
|
||||||
|
|
||||||
for(var/client/K in clients)
|
for(var/client/K in clients)
|
||||||
if(K.ckey == input["adminmsg"])
|
if(K.ckey == req_ckey)
|
||||||
C = K
|
C = K
|
||||||
break
|
break
|
||||||
if(!C)
|
if(!C)
|
||||||
@@ -222,10 +223,28 @@ var/world_topic_spam_protect_time = world.timeofday
|
|||||||
world_topic_spam_protect_ip = addr
|
world_topic_spam_protect_ip = addr
|
||||||
return "Bad Key"
|
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)
|
/world/Reboot(var/reason)
|
||||||
|
|||||||
@@ -60,6 +60,29 @@
|
|||||||
<h3 class="author">PsiOmegaDelta updated:</h3>
|
<h3 class="author">PsiOmegaDelta updated:</h3>
|
||||||
<ul class="changes bgimages16">
|
<ul class="changes bgimages16">
|
||||||
<li class="tweak">The traitor uplink no longer displays all items in a long list, instead has categories which when accessed shows the relevant items.</li>
|
<li class="tweak">The traitor uplink no longer displays all items in a long list, instead has categories which when accessed shows the relevant items.</li>
|
||||||
|
<h2 class="date">24 June 2015</h2>
|
||||||
|
<h3 class="author">HarpyEagle updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">Fixed Tajaran name generation producing names without a space between first and last.</li>
|
||||||
|
<li class="wip">Adds docking to the mercenary shuttle. Works similarly to other shuttles, except docking and undocking is manually initiated and not automatic. A system to approve or deny dock requests still to be implemented.</li>
|
||||||
|
<li class="rscadd">Toolboxes can now hold larger items, such as stacks of metal or power cells, at the cost of having less space for other things.</li>
|
||||||
|
<li class="tweak">Gloves/shoes can now be worn even if you have one hand/foot missing. The other one still has to be present, of course. The items still drop when you first lose the hand/foot.</li>
|
||||||
|
<li class="tweak">Budget insulated gloves are somewhat less useless. On average, they will stop half the damage from getting shocked, and the worst case insulation is not as bad as it used to be. Budget gloves that are as good as regular insulated gloves are still as rare as they were before though.</li>
|
||||||
|
<li class="tweak">PTR bullets are now hitscan, to make them somewhat better for actual sniping.</li>
|
||||||
|
<li class="maptweak">The telecoms server room now has an actual cycling airlock into it.</li>
|
||||||
|
<li class="tweak">Non-vital body parts will no longer take further damage above a certain amount, and will inflict paincrit effects instead. On most humaniods the head, chest, and groin are vital.</li>
|
||||||
|
<li class="rscadd">Engineers now spawn with industrial workboots (credit: ChessPiece/Bishop).</li>
|
||||||
|
<li class="bugfix">Damaged robotic legs now more likely to have an effect.</li>
|
||||||
|
<li class="bugfix">Fixed bug preventing internal organs from taking damage in some cases.</li>
|
||||||
|
<li class="maptweak">New flavours of tables around the station. Engineering starts with more plastic.</li>
|
||||||
|
<li class="bugfix">Fixed worn items not appearing in some cases. Most notably crossbows and certain guns when worn on the back. As a side effect, laundry machines no longer transform items.</li>
|
||||||
|
<li class="bugfix">Crit oxyloss now runs in game time instead of real time. So if lag is slowing your movement the same slowdown applies to the dying person you're trying to reach.</li>
|
||||||
|
<li class="rscadd">Breathmasks can now be adjusted by clicking on them in your hand, in addition to the verb.</li>
|
||||||
|
<li class="rscadd">Wearing a space helmet or similar face-covering gear now prevents eating and force-feeding food, drink, and pills.</li>
|
||||||
|
<li class="rscadd">Phoron in air ignites above it's flashpoint temperature and a certain (very small) minimum concentration. Environments that have oxygen and are hot enough, and have phoron but not enough concentration to burn will produce flareouts, which are mostly a visual effect.</li>
|
||||||
|
<li class="rscadd">Adds animation when making unarmed attacks or attacking with melee weapons, to help make it clearer who is attacking.</li>
|
||||||
|
<li class="soundadd">Opening an unpowered door now has an appropriate sound.</li>
|
||||||
|
<li class="rscadd">Ingesting diseased blood may contract the disease.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2 class="date">19 June 2015</h2>
|
<h2 class="date">19 June 2015</h2>
|
||||||
|
|||||||
@@ -2052,3 +2052,4 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
|||||||
to help make it clearer who is attacking.
|
to help make it clearer who is attacking.
|
||||||
- soundadd: Opening an unpowered door now has an appropriate sound.
|
- soundadd: Opening an unpowered door now has an appropriate sound.
|
||||||
- rscadd: Ingesting diseased blood may contract the disease.
|
- rscadd: Ingesting diseased blood may contract the disease.
|
||||||
|
2015-06-26: {}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
"aC" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/basic{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
|
"aC" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/basic{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
|
||||||
"aD" = (/obj/structure/table/reinforced,/obj/item/stack/material/plasteel{amount = 50},/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
|
"aD" = (/obj/structure/table/reinforced,/obj/item/stack/material/plasteel{amount = 50},/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
|
||||||
"aE" = (/obj/structure/table/reinforced,/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
|
"aE" = (/obj/structure/table/reinforced,/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
|
||||||
"aF" = (/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/random/tech_supply,/obj/machinery/camera/motion/engineering_outpost,/turf/simulated/floor,/area/constructionsite/teleporter)
|
"aF" = (/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/random/tech_supply,/obj/machinery/camera/motion/engineering_outpost{c_tag = "Construction Site Teleporter"},/turf/simulated/floor,/area/constructionsite/teleporter)
|
||||||
"aG" = (/obj/structure/table/reinforced,/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
|
"aG" = (/obj/structure/table/reinforced,/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
|
||||||
"aH" = (/obj/machinery/shieldgen,/obj/structure/window/basic{tag = "icon-window (WEST)"; icon_state = "window"; dir = 8},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
|
"aH" = (/obj/machinery/shieldgen,/obj/structure/window/basic{tag = "icon-window (WEST)"; icon_state = "window"; dir = 8},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
|
||||||
"aI" = (/obj/machinery/shieldgen,/obj/structure/window/basic{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
|
"aI" = (/obj/machinery/shieldgen,/obj/structure/window/basic{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
|
||||||
|
|||||||
Reference in New Issue
Block a user