mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 08:37:43 +01:00
[MIRROR] Remove hideous inline tab indentation, and bans it in contributing guidelines (#3394)
* Remove hideous inline tab indentation, and bans it in contributing guidelines * a Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
This commit is contained in:
co-authored by
Mothblocks
Gandalf2k15
parent
7635f198f4
commit
b332b46b65
@@ -92,9 +92,9 @@
|
||||
return FALSE
|
||||
|
||||
// This signal will check if the mob is mounting this atom to ride it. There are 3 possibilities for how this goes
|
||||
// 1. This movable doesn't have a ridable element and can't be ridden, so nothing gets returned, so continue on
|
||||
// 2. There's a ridable element but we failed to mount it for whatever reason (maybe it has no seats left, for example), so we cancel the buckling
|
||||
// 3. There's a ridable element and we were successfully able to mount, so keep it going and continue on with buckling
|
||||
// 1. This movable doesn't have a ridable element and can't be ridden, so nothing gets returned, so continue on
|
||||
// 2. There's a ridable element but we failed to mount it for whatever reason (maybe it has no seats left, for example), so we cancel the buckling
|
||||
// 3. There's a ridable element and we were successfully able to mount, so keep it going and continue on with buckling
|
||||
if(SEND_SIGNAL(src, COMSIG_MOVABLE_PREBUCKLE, M, force, buckle_mob_flags) & COMPONENT_BLOCK_BUCKLE)
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/blessed_aware, "blessing", I)
|
||||
RegisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORT, .proc/block_cult_teleport)
|
||||
|
||||
/obj/effect/blessing/Destroy()
|
||||
/obj/effect/blessing/Destroy()
|
||||
UnregisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORT)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
name = "bump-teleporter"
|
||||
icon = 'icons/hud/screen_gen.dmi'
|
||||
icon_state = "x2"
|
||||
var/id = null //id of this bump_teleporter.
|
||||
var/id_target = null //id of bump_teleporter which this moves you to.
|
||||
invisibility = INVISIBILITY_ABSTRACT //nope, can't see this
|
||||
var/id = null //id of this bump_teleporter.
|
||||
var/id_target = null //id of bump_teleporter which this moves you to.
|
||||
invisibility = INVISIBILITY_ABSTRACT //nope, can't see this
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
opacity = FALSE
|
||||
|
||||
@@ -145,21 +145,21 @@
|
||||
to_chat(user, "<span class='warning'>The wall is far too cluttered to place a poster!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You start placing the poster on the wall...</span>" )
|
||||
to_chat(user, "<span class='notice'>You start placing the poster on the wall...</span>" )
|
||||
|
||||
var/obj/structure/sign/poster/D = P.poster_structure
|
||||
|
||||
var/temp_loc = get_turf(user)
|
||||
flick("poster_being_set",D)
|
||||
D.forceMove(src)
|
||||
qdel(P) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway
|
||||
qdel(P) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway
|
||||
playsound(D.loc, 'sound/items/poster_being_created.ogg', 100, TRUE)
|
||||
|
||||
if(do_after(user, PLACE_SPEED, target=src))
|
||||
if(!D || QDELETED(D))
|
||||
return
|
||||
|
||||
if(iswallturf(src) && user && user.loc == temp_loc) //Let's check if everything is still there
|
||||
if(iswallturf(src) && user && user.loc == temp_loc) //Let's check if everything is still there
|
||||
to_chat(user, "<span class='notice'>You place the poster!</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
///////////////////////////////////////////////
|
||||
//FOAM EFFECT DATUM
|
||||
/datum/effect_system/foam_spread
|
||||
var/amount = 10 // the size of the foam spread.
|
||||
var/amount = 10 // the size of the foam spread.
|
||||
var/obj/chemholder
|
||||
effect_type = /obj/effect/particle_effect/foam
|
||||
var/metal = 0
|
||||
@@ -259,7 +259,7 @@
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "metalfoam"
|
||||
density = TRUE
|
||||
opacity = TRUE // changed in New()
|
||||
opacity = TRUE // changed in New()
|
||||
anchored = TRUE
|
||||
layer = EDGED_TURF_LAYER
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
@@ -84,10 +84,10 @@
|
||||
//Reagent-based explosion effect
|
||||
|
||||
/datum/effect_system/reagents_explosion
|
||||
var/amount // TNT equivalent
|
||||
var/flashing = FALSE // does explosion creates flash effect?
|
||||
var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion
|
||||
var/explosion_message = 1 //whether we show a message to mobs.
|
||||
var/amount // TNT equivalent
|
||||
var/flashing = FALSE // does explosion creates flash effect?
|
||||
var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion
|
||||
var/explosion_message = 1 //whether we show a message to mobs.
|
||||
|
||||
/datum/effect_system/reagents_explosion/set_up(amt, loca, flash = FALSE, flash_fact = 0, message = TRUE)
|
||||
amount = amt
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
. += "This is a [generation]\th generation [name]!"
|
||||
|
||||
/**
|
||||
* Creates a new glowshroom structure.
|
||||
* Creates a new glowshroom structure.
|
||||
*
|
||||
* Arguments:
|
||||
* * newseed - Seed of the shroom
|
||||
@@ -169,7 +169,7 @@
|
||||
continue
|
||||
|
||||
Decay(TRUE, 2) // Decay before spawning new mushrooms to reduce their endurance
|
||||
if(QDELETED(src)) //Decay can end us
|
||||
if(QDELETED(src)) //Decay can end us
|
||||
return
|
||||
var/obj/structure/glowshroom/child = new type(newLoc, myseed, TRUE, TRUE)
|
||||
child.generation = generation + 1
|
||||
|
||||
@@ -380,7 +380,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
|
||||
|
||||
/obj/effect/landmark/thunderdome/one/Initialize(mapload)
|
||||
..()
|
||||
GLOB.tdome1 += loc
|
||||
GLOB.tdome1 += loc
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/effect/landmark/thunderdome/two
|
||||
|
||||
@@ -19,12 +19,12 @@
|
||||
anchored = TRUE
|
||||
var/mech_sized = FALSE
|
||||
var/obj/effect/portal/linked
|
||||
var/hardlinked = TRUE //Requires a linked portal at all times. Destroy if there's no linked portal, if there is destroy it when this one is deleted.
|
||||
var/hardlinked = TRUE //Requires a linked portal at all times. Destroy if there's no linked portal, if there is destroy it when this one is deleted.
|
||||
var/teleport_channel = TELEPORT_CHANNEL_BLUESPACE
|
||||
var/turf/hard_target //For when a portal needs a hard target and isn't to be linked.
|
||||
var/atmos_link = FALSE //Link source/destination atmos.
|
||||
var/turf/open/atmos_source //Atmos link source
|
||||
var/turf/open/atmos_destination //Atmos link destination
|
||||
var/turf/hard_target //For when a portal needs a hard target and isn't to be linked.
|
||||
var/atmos_link = FALSE //Link source/destination atmos.
|
||||
var/turf/open/atmos_source //Atmos link source
|
||||
var/turf/open/atmos_destination //Atmos link destination
|
||||
var/allow_anchored = FALSE
|
||||
var/innate_accuracy_penalty = 0
|
||||
var/last_effect = 0
|
||||
@@ -117,7 +117,7 @@
|
||||
return FALSE
|
||||
LAZYINITLIST(atmos_source.atmos_adjacent_turfs)
|
||||
LAZYINITLIST(atmos_destination.atmos_adjacent_turfs)
|
||||
if(atmos_source.atmos_adjacent_turfs[atmos_destination] || atmos_destination.atmos_adjacent_turfs[atmos_source]) //Already linked!
|
||||
if(atmos_source.atmos_adjacent_turfs[atmos_destination] || atmos_destination.atmos_adjacent_turfs[atmos_source]) //Already linked!
|
||||
return FALSE
|
||||
atmos_source.atmos_adjacent_turfs[atmos_destination] = TRUE
|
||||
atmos_destination.atmos_adjacent_turfs[atmos_source] = TRUE
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/datum/proximity_monitor
|
||||
var/atom/host //the atom we are tracking
|
||||
var/atom/host //the atom we are tracking
|
||||
var/atom/hasprox_receiver //the atom that will receive HasProximity calls.
|
||||
var/atom/last_host_loc
|
||||
var/list/checkers //list of /obj/effect/abstract/proximity_checkers
|
||||
var/current_range
|
||||
var/ignore_if_not_on_turf //don't check turfs in range if the host's loc isn't a turf
|
||||
var/ignore_if_not_on_turf //don't check turfs in range if the host's loc isn't a turf
|
||||
var/wire = FALSE
|
||||
|
||||
/datum/proximity_monitor/New(atom/_host, range, _ignore_if_not_on_turf = TRUE)
|
||||
@@ -41,12 +41,12 @@
|
||||
var/atom/_host = host
|
||||
var/atom/new_host_loc = _host.loc
|
||||
if(last_host_loc != new_host_loc)
|
||||
last_host_loc = new_host_loc //hopefully this won't cause GC issues with containers
|
||||
last_host_loc = new_host_loc //hopefully this won't cause GC issues with containers
|
||||
var/curr_range = current_range
|
||||
SetRange(curr_range, TRUE)
|
||||
if(curr_range)
|
||||
testing("HasProx: [host] -> [host]")
|
||||
hasprox_receiver.HasProximity(host) //if we are processing, we're guaranteed to be a movable
|
||||
hasprox_receiver.HasProximity(host) //if we are processing, we're guaranteed to be a movable
|
||||
|
||||
/datum/proximity_monitor/proc/SetRange(range, force_rebuild = FALSE)
|
||||
if(!force_rebuild && range == current_range)
|
||||
@@ -63,7 +63,7 @@
|
||||
var/atom/loc_to_use = ignore_if_not_on_turf ? _host.loc : get_turf(_host)
|
||||
if(wire && !isturf(loc_to_use)) //it makes assemblies attached on wires work
|
||||
loc_to_use = get_turf(loc_to_use)
|
||||
if(!isturf(loc_to_use)) //only check the host's loc
|
||||
if(!isturf(loc_to_use)) //only check the host's loc
|
||||
if(range)
|
||||
var/obj/effect/abstract/proximity_checker/pc
|
||||
if(old_checkers_len)
|
||||
@@ -73,7 +73,7 @@
|
||||
else
|
||||
pc = new(loc_to_use, src)
|
||||
|
||||
checkers_local += pc //only check the host's loc
|
||||
checkers_local += pc //only check the host's loc
|
||||
return
|
||||
|
||||
var/list/turfs = RANGE_TURFS(range, loc_to_use)
|
||||
@@ -86,7 +86,7 @@
|
||||
var/obj/effect/abstract/proximity_checker/pc = checkers_local[I]
|
||||
pc.forceMove(turfs[I])
|
||||
else
|
||||
qdel(checkers_local[I]) //delete the leftovers
|
||||
qdel(checkers_local[I]) //delete the leftovers
|
||||
|
||||
if(old_checkers_len < turfs_len)
|
||||
//create what we lack
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
#define CELSIUS_TO_KELVIN(T_K) ((T_K) + T0C)
|
||||
#define CELSIUS_TO_KELVIN(T_K) ((T_K) + T0C)
|
||||
|
||||
#define OPTIMAL_TEMP_K_PLA_BURN_SCALE(PRESSURE_P,PRESSURE_O,TEMP_O) (((PRESSURE_P) * GLOB.meta_gas_info[/datum/gas/plasma][META_GAS_SPECIFIC_HEAT]) / (((PRESSURE_P) * GLOB.meta_gas_info[/datum/gas/plasma][META_GAS_SPECIFIC_HEAT] + (PRESSURE_O) * GLOB.meta_gas_info[/datum/gas/oxygen][META_GAS_SPECIFIC_HEAT]) / PLASMA_UPPER_TEMPERATURE - (PRESSURE_O) * GLOB.meta_gas_info[/datum/gas/oxygen][META_GAS_SPECIFIC_HEAT] / CELSIUS_TO_KELVIN(TEMP_O)))
|
||||
#define OPTIMAL_TEMP_K_PLA_BURN_RATIO(PRESSURE_P,PRESSURE_O,TEMP_O) (CELSIUS_TO_KELVIN(TEMP_O) * PLASMA_OXYGEN_FULLBURN * (PRESSURE_P) / (PRESSURE_O))
|
||||
#define OPTIMAL_TEMP_K_PLA_BURN_SCALE(PRESSURE_P,PRESSURE_O,TEMP_O) (((PRESSURE_P) * GLOB.meta_gas_info[/datum/gas/plasma][META_GAS_SPECIFIC_HEAT]) / (((PRESSURE_P) * GLOB.meta_gas_info[/datum/gas/plasma][META_GAS_SPECIFIC_HEAT] + (PRESSURE_O) * GLOB.meta_gas_info[/datum/gas/oxygen][META_GAS_SPECIFIC_HEAT]) / PLASMA_UPPER_TEMPERATURE - (PRESSURE_O) * GLOB.meta_gas_info[/datum/gas/oxygen][META_GAS_SPECIFIC_HEAT] / CELSIUS_TO_KELVIN(TEMP_O)))
|
||||
#define OPTIMAL_TEMP_K_PLA_BURN_RATIO(PRESSURE_P,PRESSURE_O,TEMP_O) (CELSIUS_TO_KELVIN(TEMP_O) * PLASMA_OXYGEN_FULLBURN * (PRESSURE_P) / (PRESSURE_O))
|
||||
|
||||
/obj/effect/spawner/newbomb
|
||||
name = "bomb"
|
||||
icon = 'icons/hud/screen_gen.dmi'
|
||||
icon_state = "x"
|
||||
var/temp_p = 1500
|
||||
var/temp_o = 1000 // tank temperatures
|
||||
var/temp_o = 1000 // tank temperatures
|
||||
var/pressure_p = 10 * ONE_ATMOSPHERE
|
||||
var/pressure_o = 10 * ONE_ATMOSPHERE //tank pressures
|
||||
var/pressure_o = 10 * ONE_ATMOSPHERE //tank pressures
|
||||
var/assembly_type
|
||||
|
||||
/obj/effect/spawner/newbomb/Initialize()
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
icon = 'icons/effects/landmarks_static.dmi'
|
||||
icon_state = "random_loot"
|
||||
layer = OBJ_LAYER
|
||||
var/lootcount = 1 //how many items will be spawned
|
||||
var/lootdoubles = TRUE //if the same item can be spawned twice
|
||||
var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect)
|
||||
var/lootcount = 1 //how many items will be spawned
|
||||
var/lootdoubles = TRUE //if the same item can be spawned twice
|
||||
var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect)
|
||||
var/fan_out_items = FALSE //Whether the items should be distributed to offsets 0,1,-1,2,-2,3,-3.. This overrides pixel_x/y on the spawner itself
|
||||
|
||||
/obj/effect/spawner/lootdrop/Initialize(mapload)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
/* Sends a message to mob when triggered*/
|
||||
|
||||
/obj/effect/step_trigger/message
|
||||
var/message //the message to give to the mob
|
||||
var/message //the message to give to the mob
|
||||
var/once = 1
|
||||
mobs_only = TRUE
|
||||
|
||||
@@ -44,9 +44,9 @@
|
||||
|
||||
/obj/effect/step_trigger/thrower
|
||||
var/direction = SOUTH // the direction of throw
|
||||
var/tiles = 3 // if 0: forever until atom hits a stopper
|
||||
var/tiles = 3 // if 0: forever until atom hits a stopper
|
||||
var/immobilize = 1 // if nonzero: prevents mobs from moving while they're being flung
|
||||
var/speed = 1 // delay of movement
|
||||
var/speed = 1 // delay of movement
|
||||
var/facedir = 0 // if 1: atom faces the direction of movement
|
||||
var/nostop = 0 // if 1: will only be stopped by teleporters
|
||||
var/list/affecting = list()
|
||||
@@ -106,7 +106,7 @@
|
||||
/* Instant teleporter */
|
||||
|
||||
/obj/effect/step_trigger/teleporter
|
||||
var/teleport_x = 0 // teleportation coordinates (if one is null, then no teleport!)
|
||||
var/teleport_x = 0 // teleportation coordinates (if one is null, then no teleport!)
|
||||
var/teleport_y = 0
|
||||
var/teleport_z = 0
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
/obj/effect/step_trigger/teleport_fancy
|
||||
var/locationx
|
||||
var/locationy
|
||||
var/uses = 1 //0 for infinite uses
|
||||
var/uses = 1 //0 for infinite uses
|
||||
var/entersparks = 0
|
||||
var/exitsparks = 0
|
||||
var/entersmoke = 0
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
appearance = look
|
||||
scale_to(1,scaling, FALSE)
|
||||
turn_to(angle_override, FALSE)
|
||||
if(!isnull(new_loc)) //If you want to null it just delete it...
|
||||
if(!isnull(new_loc)) //If you want to null it just delete it...
|
||||
forceMove(new_loc)
|
||||
for(var/i in 1 to increment)
|
||||
pixel_x += round((sin(angle_override)+16*sin(angle_override)*2), 1)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/proc/generate_tracer_between_points(datum/point/starting, datum/point/ending, beam_type, color, qdel_in = 5, light_range = 2, light_color_override, light_intensity = 1, instance_key) //Do not pass z-crossing points as that will not be properly (and likely will never be properly until it's absolutely needed) supported!
|
||||
/proc/generate_tracer_between_points(datum/point/starting, datum/point/ending, beam_type, color, qdel_in = 5, light_range = 2, light_color_override, light_intensity = 1, instance_key) //Do not pass z-crossing points as that will not be properly (and likely will never be properly until it's absolutely needed) supported!
|
||||
if(!istype(starting) || !istype(ending) || !ispath(beam_type))
|
||||
return
|
||||
var/datum/point/midpoint = point_midpoint_points(starting, ending)
|
||||
|
||||
@@ -13,14 +13,14 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
blocks_emissive = EMISSIVE_BLOCK_GENERIC
|
||||
|
||||
/* !!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!
|
||||
/* !!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!
|
||||
|
||||
IF YOU ADD MORE ICON CRAP TO THIS
|
||||
ENSURE YOU ALSO ADD THE NEW VARS TO CHAMELEON ITEM_ACTION'S update_item() PROC (/datum/action/item_action/chameleon/change/proc/update_item())
|
||||
WASHING MASHINE'S dye_item() PROC (/obj/item/proc/dye_item())
|
||||
AND ALSO TO THE CHANGELING PROFILE DISGUISE SYSTEMS (/datum/changelingprofile / /datum/antagonist/changeling/proc/create_profile() / /proc/changeling_transform())
|
||||
|
||||
!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!! */
|
||||
!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!! */
|
||||
|
||||
///icon state for inhand overlays, if null the normal icon_state will be used.
|
||||
var/inhand_icon_state = null
|
||||
@@ -36,14 +36,14 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
///Forced mob worn layer instead of the standard preferred ssize.
|
||||
var/alternate_worn_layer
|
||||
|
||||
/* !!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!
|
||||
/* !!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!
|
||||
|
||||
IF YOU ADD MORE ICON CRAP TO THIS
|
||||
ENSURE YOU ALSO ADD THE NEW VARS TO CHAMELEON ITEM_ACTION'S update_item() PROC (/datum/action/item_action/chameleon/change/proc/update_item())
|
||||
WASHING MASHINE'S dye_item() PROC (/obj/item/proc/dye_item())
|
||||
AND ALSO TO THE CHANGELING PROFILE DISGUISE SYSTEMS (/datum/changelingprofile / /datum/antagonist/changeling/proc/create_profile() / /proc/changeling_transform())
|
||||
|
||||
!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!! */
|
||||
!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!! */
|
||||
|
||||
///Dimensions of the icon file used when this item is worn, eg: hats.dmi (32x32 sprite, 64x64 sprite, etc.). Allows inhands/worn sprites to be of any size, but still centered on a mob properly
|
||||
var/worn_x_dimension = 32
|
||||
@@ -216,7 +216,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
hitsound = "swing_hit"
|
||||
|
||||
/obj/item/Destroy()
|
||||
item_flags &= ~DROPDEL //prevent reqdels
|
||||
item_flags &= ~DROPDEL //prevent reqdels
|
||||
if(ismob(loc))
|
||||
var/mob/m = loc
|
||||
m.temporarilyRemoveItemFromInventory(src, TRUE)
|
||||
@@ -369,11 +369,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You burn your hand on [src]!</span>")
|
||||
var/obj/item/bodypart/affecting = C.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm")
|
||||
if(affecting?.receive_damage( 0, 5 )) // 5 burn damage
|
||||
if(affecting?.receive_damage( 0, 5 )) // 5 burn damage
|
||||
C.update_damage_overlays()
|
||||
return
|
||||
|
||||
if(!(interaction_flags_item & INTERACT_ITEM_ATTACK_HAND_PICKUP)) //See if we're supposed to auto pickup.
|
||||
if(!(interaction_flags_item & INTERACT_ITEM_ATTACK_HAND_PICKUP)) //See if we're supposed to auto pickup.
|
||||
return
|
||||
|
||||
//Heavy gravity makes picking up things very slow.
|
||||
|
||||
@@ -479,7 +479,7 @@ AI MODULES
|
||||
..()
|
||||
|
||||
/obj/item/ai_module/syndicate/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
|
||||
// ..() //We don't want this module reporting to the AI who dun it. --NEO
|
||||
// ..() //We don't want this module reporting to the AI who dun it. --NEO
|
||||
if(law_datum.owner)
|
||||
to_chat(law_datum.owner, "<span class='warning'>BZZZZT</span>")
|
||||
if(!overflow)
|
||||
|
||||
@@ -30,8 +30,8 @@ RLD
|
||||
var/matter = 0
|
||||
var/max_matter = 100
|
||||
var/no_ammo_message = "<span class='warning'>The \'Low Ammo\' light on the device blinks yellow.</span>"
|
||||
var/has_ammobar = FALSE //controls whether or not does update_icon apply ammo indicator overlays
|
||||
var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states
|
||||
var/has_ammobar = FALSE //controls whether or not does update_icon apply ammo indicator overlays
|
||||
var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states
|
||||
/// Bitflags for upgrades
|
||||
var/upgrade = NONE
|
||||
/// Bitflags for banned upgrades
|
||||
@@ -111,7 +111,7 @@ RLD
|
||||
loaded = loadwithsheets(O, user)
|
||||
if(loaded)
|
||||
to_chat(user, "<span class='notice'>[src] now holds [matter]/[max_matter] matter-units.</span>")
|
||||
update_icon() //ensures that ammo counters (if present) get updated
|
||||
update_icon() //ensures that ammo counters (if present) get updated
|
||||
return loaded
|
||||
|
||||
/obj/item/construction/proc/loadwithsheets(obj/item/stack/S, mob/user)
|
||||
@@ -178,7 +178,7 @@ RLD
|
||||
if(!. && user)
|
||||
to_chat(user, no_ammo_message)
|
||||
if(has_ammobar)
|
||||
flick("[icon_state]_empty", src) //somewhat hacky thing to make RCDs with ammo counters actually have a blinking yellow light
|
||||
flick("[icon_state]_empty", src) //somewhat hacky thing to make RCDs with ammo counters actually have a blinking yellow light
|
||||
return .
|
||||
|
||||
/obj/item/construction/proc/range_check(atom/A, mob/user)
|
||||
|
||||
@@ -15,65 +15,65 @@ RPD
|
||||
|
||||
GLOBAL_LIST_INIT(atmos_pipe_recipes, list(
|
||||
"Pipes" = list(
|
||||
new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple, TRUE),
|
||||
new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold, TRUE),
|
||||
new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w, TRUE),
|
||||
new /datum/pipe_info/pipe("Layer Adapter", /obj/machinery/atmospherics/pipe/layer_manifold, TRUE),
|
||||
new /datum/pipe_info/pipe("Multi-Deck Adapter", /obj/machinery/atmospherics/pipe/multiz, TRUE),
|
||||
new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple, TRUE),
|
||||
new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold, TRUE),
|
||||
new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w, TRUE),
|
||||
new /datum/pipe_info/pipe("Layer Adapter", /obj/machinery/atmospherics/pipe/layer_manifold, TRUE),
|
||||
new /datum/pipe_info/pipe("Multi-Deck Adapter", /obj/machinery/atmospherics/pipe/multiz, TRUE),
|
||||
),
|
||||
"Devices" = list(
|
||||
new /datum/pipe_info/pipe("Connector", /obj/machinery/atmospherics/components/unary/portables_connector, TRUE),
|
||||
new /datum/pipe_info/pipe("Gas Pump", /obj/machinery/atmospherics/components/binary/pump, TRUE),
|
||||
new /datum/pipe_info/pipe("Volume Pump", /obj/machinery/atmospherics/components/binary/volume_pump, TRUE),
|
||||
new /datum/pipe_info/pipe("Gas Filter", /obj/machinery/atmospherics/components/trinary/filter, TRUE),
|
||||
new /datum/pipe_info/pipe("Gas Mixer", /obj/machinery/atmospherics/components/trinary/mixer, TRUE),
|
||||
new /datum/pipe_info/pipe("Passive Gate", /obj/machinery/atmospherics/components/binary/passive_gate, TRUE),
|
||||
new /datum/pipe_info/pipe("Injector", /obj/machinery/atmospherics/components/unary/outlet_injector, TRUE),
|
||||
new /datum/pipe_info/pipe("Scrubber", /obj/machinery/atmospherics/components/unary/vent_scrubber, TRUE),
|
||||
new /datum/pipe_info/pipe("Unary Vent", /obj/machinery/atmospherics/components/unary/vent_pump, TRUE),
|
||||
new /datum/pipe_info/pipe("Passive Vent", /obj/machinery/atmospherics/components/unary/passive_vent, TRUE),
|
||||
new /datum/pipe_info/pipe("Manual Valve", /obj/machinery/atmospherics/components/binary/valve, TRUE),
|
||||
new /datum/pipe_info/pipe("Digital Valve", /obj/machinery/atmospherics/components/binary/valve/digital, TRUE),
|
||||
new /datum/pipe_info/pipe("Pressure Valve", /obj/machinery/atmospherics/components/binary/pressure_valve, TRUE),
|
||||
new /datum/pipe_info/pipe("Temperature Gate", /obj/machinery/atmospherics/components/binary/temperature_gate, TRUE),
|
||||
new /datum/pipe_info/pipe("Temperature Pump", /obj/machinery/atmospherics/components/binary/temperature_pump, TRUE),
|
||||
new /datum/pipe_info/pipe("Connector", /obj/machinery/atmospherics/components/unary/portables_connector, TRUE),
|
||||
new /datum/pipe_info/pipe("Gas Pump", /obj/machinery/atmospherics/components/binary/pump, TRUE),
|
||||
new /datum/pipe_info/pipe("Volume Pump", /obj/machinery/atmospherics/components/binary/volume_pump, TRUE),
|
||||
new /datum/pipe_info/pipe("Gas Filter", /obj/machinery/atmospherics/components/trinary/filter, TRUE),
|
||||
new /datum/pipe_info/pipe("Gas Mixer", /obj/machinery/atmospherics/components/trinary/mixer, TRUE),
|
||||
new /datum/pipe_info/pipe("Passive Gate", /obj/machinery/atmospherics/components/binary/passive_gate, TRUE),
|
||||
new /datum/pipe_info/pipe("Injector", /obj/machinery/atmospherics/components/unary/outlet_injector, TRUE),
|
||||
new /datum/pipe_info/pipe("Scrubber", /obj/machinery/atmospherics/components/unary/vent_scrubber, TRUE),
|
||||
new /datum/pipe_info/pipe("Unary Vent", /obj/machinery/atmospherics/components/unary/vent_pump, TRUE),
|
||||
new /datum/pipe_info/pipe("Passive Vent", /obj/machinery/atmospherics/components/unary/passive_vent, TRUE),
|
||||
new /datum/pipe_info/pipe("Manual Valve", /obj/machinery/atmospherics/components/binary/valve, TRUE),
|
||||
new /datum/pipe_info/pipe("Digital Valve", /obj/machinery/atmospherics/components/binary/valve/digital, TRUE),
|
||||
new /datum/pipe_info/pipe("Pressure Valve", /obj/machinery/atmospherics/components/binary/pressure_valve, TRUE),
|
||||
new /datum/pipe_info/pipe("Temperature Gate", /obj/machinery/atmospherics/components/binary/temperature_gate, TRUE),
|
||||
new /datum/pipe_info/pipe("Temperature Pump", /obj/machinery/atmospherics/components/binary/temperature_pump, TRUE),
|
||||
new /datum/pipe_info/meter("Meter"),
|
||||
),
|
||||
"Heat Exchange" = list(
|
||||
new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/heat_exchanging/simple, FALSE),
|
||||
new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/heat_exchanging/manifold, FALSE),
|
||||
new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w, FALSE),
|
||||
new /datum/pipe_info/pipe("Junction", /obj/machinery/atmospherics/pipe/heat_exchanging/junction, FALSE),
|
||||
new /datum/pipe_info/pipe("Heat Exchanger", /obj/machinery/atmospherics/components/unary/heat_exchanger, FALSE),
|
||||
new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/heat_exchanging/simple, FALSE),
|
||||
new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/heat_exchanging/manifold, FALSE),
|
||||
new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w, FALSE),
|
||||
new /datum/pipe_info/pipe("Junction", /obj/machinery/atmospherics/pipe/heat_exchanging/junction, FALSE),
|
||||
new /datum/pipe_info/pipe("Heat Exchanger", /obj/machinery/atmospherics/components/unary/heat_exchanger, FALSE),
|
||||
)
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(disposal_pipe_recipes, list(
|
||||
"Disposal Pipes" = list(
|
||||
new /datum/pipe_info/disposal("Pipe", /obj/structure/disposalpipe/segment, PIPE_BENDABLE),
|
||||
new /datum/pipe_info/disposal("Junction", /obj/structure/disposalpipe/junction, PIPE_TRIN_M),
|
||||
new /datum/pipe_info/disposal("Y-Junction", /obj/structure/disposalpipe/junction/yjunction),
|
||||
new /datum/pipe_info/disposal("Sort Junction", /obj/structure/disposalpipe/sorting/mail, PIPE_TRIN_M),
|
||||
new /datum/pipe_info/disposal("Trunk", /obj/structure/disposalpipe/trunk),
|
||||
new /datum/pipe_info/disposal("Bin", /obj/machinery/disposal/bin, PIPE_ONEDIR),
|
||||
new /datum/pipe_info/disposal("Outlet", /obj/structure/disposaloutlet),
|
||||
new /datum/pipe_info/disposal("Chute", /obj/machinery/disposal/delivery_chute),
|
||||
new /datum/pipe_info/disposal("Pipe", /obj/structure/disposalpipe/segment, PIPE_BENDABLE),
|
||||
new /datum/pipe_info/disposal("Junction", /obj/structure/disposalpipe/junction, PIPE_TRIN_M),
|
||||
new /datum/pipe_info/disposal("Y-Junction", /obj/structure/disposalpipe/junction/yjunction),
|
||||
new /datum/pipe_info/disposal("Sort Junction", /obj/structure/disposalpipe/sorting/mail, PIPE_TRIN_M),
|
||||
new /datum/pipe_info/disposal("Trunk", /obj/structure/disposalpipe/trunk),
|
||||
new /datum/pipe_info/disposal("Bin", /obj/machinery/disposal/bin, PIPE_ONEDIR),
|
||||
new /datum/pipe_info/disposal("Outlet", /obj/structure/disposaloutlet),
|
||||
new /datum/pipe_info/disposal("Chute", /obj/machinery/disposal/delivery_chute),
|
||||
)
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(transit_tube_recipes, list(
|
||||
"Transit Tubes" = list(
|
||||
new /datum/pipe_info/transit("Straight Tube", /obj/structure/c_transit_tube, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Straight Tube with Crossing", /obj/structure/c_transit_tube/crossing, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Curved Tube", /obj/structure/c_transit_tube/curved, PIPE_UNARY_FLIPPABLE),
|
||||
new /datum/pipe_info/transit("Diagonal Tube", /obj/structure/c_transit_tube/diagonal, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Diagonal Tube with Crossing", /obj/structure/c_transit_tube/diagonal/crossing, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Junction", /obj/structure/c_transit_tube/junction, PIPE_UNARY_FLIPPABLE),
|
||||
new /datum/pipe_info/transit("Straight Tube", /obj/structure/c_transit_tube, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Straight Tube with Crossing", /obj/structure/c_transit_tube/crossing, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Curved Tube", /obj/structure/c_transit_tube/curved, PIPE_UNARY_FLIPPABLE),
|
||||
new /datum/pipe_info/transit("Diagonal Tube", /obj/structure/c_transit_tube/diagonal, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Diagonal Tube with Crossing", /obj/structure/c_transit_tube/diagonal/crossing, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Junction", /obj/structure/c_transit_tube/junction, PIPE_UNARY_FLIPPABLE),
|
||||
),
|
||||
"Station Equipment" = list(
|
||||
new /datum/pipe_info/transit("Through Tube Station", /obj/structure/c_transit_tube/station, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Terminus Tube Station", /obj/structure/c_transit_tube/station/reverse, PIPE_UNARY),
|
||||
new /datum/pipe_info/transit("Transit Tube Pod", /obj/structure/c_transit_tube_pod, PIPE_ONEDIR),
|
||||
new /datum/pipe_info/transit("Through Tube Station", /obj/structure/c_transit_tube/station, PIPE_STRAIGHT),
|
||||
new /datum/pipe_info/transit("Terminus Tube Station", /obj/structure/c_transit_tube/station/reverse, PIPE_UNARY),
|
||||
new /datum/pipe_info/transit("Transit Tube Pod", /obj/structure/c_transit_tube_pod, PIPE_ONEDIR),
|
||||
)
|
||||
))
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
var/list/image/showing = list()
|
||||
var/client/viewing
|
||||
var/legend = FALSE //Viewing the wire legend
|
||||
var/legend = FALSE //Viewing the wire legend
|
||||
|
||||
|
||||
/obj/item/areaeditor/blueprints/Destroy()
|
||||
@@ -174,11 +174,11 @@
|
||||
/obj/item/areaeditor/blueprints/proc/view_wire_set(mob/user, wireset)
|
||||
//for some reason you can't use wireset directly as a derefencer so this is the next best :/
|
||||
for(var/device in GLOB.wire_color_directory)
|
||||
if("[device]" == wireset) //I know... don't change it...
|
||||
if("[device]" == wireset) //I know... don't change it...
|
||||
var/message = "<p><b>[GLOB.wire_name_directory[device]]:</b>"
|
||||
for(var/Col in GLOB.wire_color_directory[device])
|
||||
var/wire_name = GLOB.wire_color_directory[device][Col]
|
||||
if(!findtext(wire_name, WIRE_DUD_PREFIX)) //don't show duds
|
||||
if(!findtext(wire_name, WIRE_DUD_PREFIX)) //don't show duds
|
||||
message += "<p><span style='color: [Col]'>[Col]</span>: [wire_name]</p>"
|
||||
message += "</p>"
|
||||
return message
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#define CANDLE_LUMINOSITY 2
|
||||
#define CANDLE_LUMINOSITY 2
|
||||
/obj/item/candle
|
||||
name = "red candle"
|
||||
desc = "In Greek myth, Prometheus stole fire from the Gods and gave it to \
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* Cards
|
||||
* Contains:
|
||||
* DATA CARD
|
||||
* ID CARD
|
||||
* FINGERPRINT CARD HOLDER
|
||||
* FINGERPRINT CARD
|
||||
* DATA CARD
|
||||
* ID CARD
|
||||
* FINGERPRINT CARD HOLDER
|
||||
* FINGERPRINT CARD
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -169,10 +169,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
. = ..()
|
||||
if(!proximity || lit) //can't dip if cigarette is lit (it will heat the reagents in the glass instead)
|
||||
return
|
||||
if(istype(glass)) //you can dip cigarettes into beakers
|
||||
if(glass.reagents.trans_to(src, chem_volume, transfered_by = user)) //if reagents were transfered, show the message
|
||||
if(istype(glass)) //you can dip cigarettes into beakers
|
||||
if(glass.reagents.trans_to(src, chem_volume, transfered_by = user)) //if reagents were transfered, show the message
|
||||
to_chat(user, "<span class='notice'>You dip \the [src] into \the [glass].</span>")
|
||||
else //if not, either the beaker was empty, or the cigarette was full
|
||||
else //if not, either the beaker was empty, or the cigarette was full
|
||||
if(!glass.reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[glass] is empty!</span>")
|
||||
else
|
||||
@@ -549,7 +549,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
open_flame()
|
||||
if(reagents?.total_volume) // check if it has any reagents at all
|
||||
if(reagents?.total_volume) // check if it has any reagents at all
|
||||
handle_reagents()
|
||||
|
||||
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
|
||||
|
||||
//obj/item/circuitboard/computer/shield
|
||||
// name = "Shield Control (Computer Board)"
|
||||
// icon_state = "command"
|
||||
// build_path = /obj/machinery/computer/stationshield
|
||||
// name = "Shield Control (Computer Board)"
|
||||
// icon_state = "command"
|
||||
// build_path = /obj/machinery/computer/stationshield
|
||||
|
||||
//Engineering
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* Clown Items
|
||||
* Contains:
|
||||
* Soap
|
||||
* Bike Horns
|
||||
* Air Horns
|
||||
* Canned Laughter
|
||||
* Soap
|
||||
* Bike Horns
|
||||
* Air Horns
|
||||
* Canned Laughter
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -136,7 +136,7 @@
|
||||
|
||||
else if(ishuman(target) && user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
|
||||
var/mob/living/carbon/human/human_user = user
|
||||
user.visible_message("<span class='warning'>\the [user] washes \the [target]'s mouth out with [src.name]!</span>", "<span class='notice'>You wash \the [target]'s mouth out with [src.name]!</span>") //washes mouth out with soap sounds better than 'the soap' here if(user.zone_selected == "mouth")
|
||||
user.visible_message("<span class='warning'>\the [user] washes \the [target]'s mouth out with [src.name]!</span>", "<span class='notice'>You wash \the [target]'s mouth out with [src.name]!</span>") //washes mouth out with soap sounds better than 'the soap' here if(user.zone_selected == "mouth")
|
||||
if(human_user.lip_style)
|
||||
user.mind?.adjust_experience(/datum/skill/cleaning, CLEAN_SKILL_GENERIC_WASH_XP)
|
||||
human_user.update_lips(null)
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
var/datum/netdata/data = new(list("data" = mode,"data_secondary" = "toggle"))
|
||||
data.receiver_id = target_interface.hardware_id
|
||||
data.passkey = access_list
|
||||
data.user = user // for responce message
|
||||
data.user = user // for responce message
|
||||
|
||||
ntnet_send(data)
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
if(target.is_mouth_covered())
|
||||
to_chat(user, "<span class='warning'>Remove [ target == user ? "your" : "[target.p_their()]" ] mask!</span>")
|
||||
return
|
||||
if(target.lip_style) //if they already have lipstick on
|
||||
if(target.lip_style) //if they already have lipstick on
|
||||
to_chat(user, "<span class='warning'>You need to wipe off the old lipstick first!</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
#define RANDOM_RUNE "Random Rune"
|
||||
#define RANDOM_ANY "Random Anything"
|
||||
|
||||
#define PAINT_NORMAL 1
|
||||
#define PAINT_LARGE_HORIZONTAL 2
|
||||
#define PAINT_LARGE_HORIZONTAL_ICON 'icons/effects/96x32.dmi'
|
||||
#define PAINT_NORMAL 1
|
||||
#define PAINT_LARGE_HORIZONTAL 2
|
||||
#define PAINT_LARGE_HORIZONTAL_ICON 'icons/effects/96x32.dmi'
|
||||
|
||||
/*
|
||||
* Crayons
|
||||
@@ -361,7 +361,7 @@
|
||||
clicky = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2)
|
||||
|
||||
if(!instant)
|
||||
to_chat(user, "<span class='notice'>You start drawing a [temp] on the [target.name]...</span>")
|
||||
to_chat(user, "<span class='notice'>You start drawing a [temp] on the [target.name]...</span>")
|
||||
|
||||
if(pre_noise)
|
||||
audible_message("<span class='notice'>You hear spraying.</span>")
|
||||
|
||||
@@ -458,7 +458,7 @@
|
||||
do_help(H, user)
|
||||
|
||||
/obj/item/shockpaddles/proc/shock_touching(dmg, mob/H)
|
||||
if(isliving(H.pulledby)) //CLEAR!
|
||||
if(isliving(H.pulledby)) //CLEAR!
|
||||
var/mob/living/M = H.pulledby
|
||||
if(M.electrocute_act(30, H))
|
||||
M.visible_message("<span class='danger'>[M] is electrocuted by [M.p_their()] contact with [H]!</span>")
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
/*
|
||||
* Dehydrated Carp
|
||||
* Instant carp, just add water
|
||||
* Dehydrated Carp
|
||||
* Instant carp, just add water
|
||||
*/
|
||||
|
||||
//Child of carpplushie because this should do everything the toy does and more
|
||||
/obj/item/toy/plush/carpplushie/dehy_carp
|
||||
var/mob/owner = null //Carp doesn't attack owner, set when using in hand
|
||||
var/owned = 0 //Boolean, no owner to begin with
|
||||
var/mob/owner = null //Carp doesn't attack owner, set when using in hand
|
||||
var/owned = 0 //Boolean, no owner to begin with
|
||||
var/mobtype = /mob/living/simple_animal/hostile/carp //So admins can change what mob spawns via var fuckery
|
||||
|
||||
//Attack self
|
||||
/obj/item/toy/plush/carpplushie/dehy_carp/attack_self(mob/user)
|
||||
src.add_fingerprint(user) //Anyone can add their fingerprints to it with this
|
||||
src.add_fingerprint(user) //Anyone can add their fingerprints to it with this
|
||||
if(!owned)
|
||||
to_chat(user, "<span class='notice'>You pet [src]. You swear it looks up at you.</span>")
|
||||
owner = user
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
|
||||
GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
#define PDA_SCANNER_NONE 0
|
||||
#define PDA_SCANNER_MEDICAL 1
|
||||
#define PDA_SCANNER_FORENSICS 2 //unused
|
||||
#define PDA_SCANNER_REAGENT 3
|
||||
#define PDA_SCANNER_HALOGEN 4
|
||||
#define PDA_SCANNER_GAS 5
|
||||
#define PDA_SPAM_DELAY 2 MINUTES
|
||||
#define PDA_SCANNER_NONE 0
|
||||
#define PDA_SCANNER_MEDICAL 1
|
||||
#define PDA_SCANNER_FORENSICS 2 //unused
|
||||
#define PDA_SCANNER_REAGENT 3
|
||||
#define PDA_SCANNER_HALOGEN 4
|
||||
#define PDA_SCANNER_GAS 5
|
||||
#define PDA_SPAM_DELAY 2 MINUTES
|
||||
|
||||
/obj/item/pda//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
|
||||
name = "\improper PDA"
|
||||
@@ -74,13 +74,13 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
var/obj/item/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
|
||||
var/ownjob = null //related to above
|
||||
|
||||
var/obj/item/paicard/pai = null // A slot for a personal AI device
|
||||
var/obj/item/paicard/pai = null // A slot for a personal AI device
|
||||
|
||||
var/datum/picture/picture //Scanned photo
|
||||
|
||||
var/list/contained_item = list(/obj/item/pen, /obj/item/toy/crayon, /obj/item/lipstick, /obj/item/flashlight/pen, /obj/item/clothing/mask/cigarette)
|
||||
var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion or removal. Same as above.
|
||||
var/overlays_x_offset = 0 //x offset to use for certain overlays
|
||||
var/overlays_x_offset = 0 //x offset to use for certain overlays
|
||||
|
||||
var/underline_flag = TRUE //flag for underline
|
||||
|
||||
@@ -115,7 +115,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
if(inserted_item)
|
||||
inserted_item = new inserted_item(src)
|
||||
else
|
||||
inserted_item = new /obj/item/pen(src)
|
||||
inserted_item = new /obj/item/pen(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/pda/equipped(mob/user, slot)
|
||||
@@ -640,9 +640,9 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
if("pai")
|
||||
switch(href_list["option"])
|
||||
if("1") // Configure pAI device
|
||||
if("1") // Configure pAI device
|
||||
pai.attack_self(U)
|
||||
if("2") // Eject pAI device
|
||||
if("2") // Eject pAI device
|
||||
usr.put_in_hands(pai)
|
||||
to_chat(usr, "<span class='notice'>You remove the pAI from the [name].</span>")
|
||||
|
||||
@@ -1007,7 +1007,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
to_chat(user, "<span class='notice'>You put the ID into \the [src]'s slot.</span>")
|
||||
updateSelfDialog()//Update self dialog on success.
|
||||
|
||||
return //Return in case of failed check or when successful.
|
||||
return //Return in case of failed check or when successful.
|
||||
updateSelfDialog()//For the non-input related code.
|
||||
else if(istype(C, /obj/item/paicard) && !pai)
|
||||
if(!user.transferItemToLoc(C, src))
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
|
||||
#define CART_SECURITY (1<<0)
|
||||
#define CART_ENGINE (1<<1)
|
||||
#define CART_ATMOS (1<<2)
|
||||
#define CART_MEDICAL (1<<3)
|
||||
#define CART_MANIFEST (1<<4)
|
||||
#define CART_CLOWN (1<<5)
|
||||
#define CART_MIME (1<<6)
|
||||
#define CART_JANITOR (1<<7)
|
||||
#define CART_REAGENT_SCANNER (1<<8)
|
||||
#define CART_NEWSCASTER (1<<9)
|
||||
#define CART_REMOTE_DOOR (1<<10)
|
||||
#define CART_STATUS_DISPLAY (1<<11)
|
||||
#define CART_QUARTERMASTER (1<<12)
|
||||
#define CART_HYDROPONICS (1<<13)
|
||||
#define CART_DRONEPHONE (1<<14)
|
||||
#define CART_SECURITY (1<<0)
|
||||
#define CART_ENGINE (1<<1)
|
||||
#define CART_ATMOS (1<<2)
|
||||
#define CART_MEDICAL (1<<3)
|
||||
#define CART_MANIFEST (1<<4)
|
||||
#define CART_CLOWN (1<<5)
|
||||
#define CART_MIME (1<<6)
|
||||
#define CART_JANITOR (1<<7)
|
||||
#define CART_REAGENT_SCANNER (1<<8)
|
||||
#define CART_NEWSCASTER (1<<9)
|
||||
#define CART_REMOTE_DOOR (1<<10)
|
||||
#define CART_STATUS_DISPLAY (1<<11)
|
||||
#define CART_QUARTERMASTER (1<<12)
|
||||
#define CART_HYDROPONICS (1<<13)
|
||||
#define CART_DRONEPHONE (1<<14)
|
||||
|
||||
|
||||
/obj/item/cartridge//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
|
||||
@@ -42,7 +42,7 @@
|
||||
var/datum/data/record/active3 = null //Security
|
||||
var/obj/machinery/computer/monitor/powmonitor = null // Power Monitor
|
||||
var/list/powermonitors = list()
|
||||
var/message1 // used for status_displays
|
||||
var/message1 // used for status_displays
|
||||
var/message2
|
||||
var/list/stored_data = list()
|
||||
var/current_channel
|
||||
@@ -707,9 +707,9 @@ Code:
|
||||
menu += "\[<A href='byond://?src=[REF(src)];mule=home'>Return Home</A>\]<BR>"
|
||||
|
||||
else
|
||||
menu += "<BR>\[<A href='byond://?src=[REF(src)];op=patroloff'>Stop Patrol</A>\] " //patrolon
|
||||
menu += "\[<A href='byond://?src=[REF(src)];op=patrolon'>Start Patrol</A>\] " //patroloff
|
||||
menu += "\[<A href='byond://?src=[REF(src)];op=summon'>Summon Bot</A>\]<BR>" //summon
|
||||
menu += "<BR>\[<A href='byond://?src=[REF(src)];op=patroloff'>Stop Patrol</A>\] " //patrolon
|
||||
menu += "\[<A href='byond://?src=[REF(src)];op=patrolon'>Start Patrol</A>\] " //patroloff
|
||||
menu += "\[<A href='byond://?src=[REF(src)];op=summon'>Summon Bot</A>\]<BR>" //summon
|
||||
menu += "Keep an ID inserted to upload access codes upon summoning."
|
||||
|
||||
menu += "<HR><A href='byond://?src=[REF(src)];op=botlist'>[PDAIMG(back)]Return to bot list</A>"
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
name = "\improper Detomatix cartridge"
|
||||
icon_state = "cart"
|
||||
access = CART_REMOTE_DOOR
|
||||
remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing.
|
||||
remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing.
|
||||
charges = 4
|
||||
|
||||
/obj/item/cartridge/virus/syndicate/send_virus(obj/item/pda/target, mob/living/U)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
#define BUGMODE_LIST 0
|
||||
#define BUGMODE_MONITOR 1
|
||||
#define BUGMODE_TRACK 2
|
||||
#define BUGMODE_LIST 0
|
||||
#define BUGMODE_MONITOR 1
|
||||
#define BUGMODE_TRACK 2
|
||||
|
||||
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
name = "camera bug"
|
||||
desc = "For illicit snooping through the camera network."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "camera_bug"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
inhand_icon_state = "camera_bug"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
icon_state = "camera_bug"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
inhand_icon_state = "camera_bug"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
item_flags = NOBLUDGEON
|
||||
|
||||
var/obj/machinery/camera/current = null
|
||||
|
||||
@@ -56,8 +56,8 @@
|
||||
add_fingerprint(user)
|
||||
if(istype(M) && on && (user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH)))
|
||||
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly
|
||||
return ..() //just hit them in the head
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly
|
||||
return ..() //just hit them in the head
|
||||
|
||||
if(!ISADVANCEDTOOLUSER(user))
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
@@ -82,7 +82,7 @@
|
||||
to_chat(user, "<span class='warning'>[M] doesn't have any eyes!</span>")
|
||||
return
|
||||
|
||||
if(M == user) //they're using it on themselves
|
||||
if(M == user) //they're using it on themselves
|
||||
if(M.flash_act(visual = 1))
|
||||
M.visible_message("<span class='notice'>[M] directs [src] to [M.p_their()] eyes.</span>", "<span class='notice'>You wave the light in front of your eyes! Trippy!</span>")
|
||||
else
|
||||
@@ -92,7 +92,7 @@
|
||||
"<span class='danger'>You direct [src] to [M]'s eyes.</span>")
|
||||
if(M.stat == DEAD || (M.is_blind()) || !M.flash_act(visual = 1)) //mob is dead or fully blind
|
||||
to_chat(user, "<span class='warning'>[M]'s pupils don't react to the light!</span>")
|
||||
else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-ray vision
|
||||
else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-ray vision
|
||||
to_chat(user, "<span class='danger'>[M]'s pupils give an eerie glow!</span>")
|
||||
else //they're okay!
|
||||
to_chat(user, "<span class='notice'>[M]'s pupils narrow.</span>")
|
||||
@@ -357,7 +357,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/mining_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi'
|
||||
desc = "A mining lantern."
|
||||
light_range = 6 // luminosity when on
|
||||
light_range = 6 // luminosity when on
|
||||
light_system = MOVABLE_LIGHT
|
||||
|
||||
/obj/item/flashlight/lantern/heirloom_moth
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
var/track_cooldown = 0
|
||||
var/track_delay = 10 //How often it checks for proximity
|
||||
var/detect_state = PROXIMITY_NONE
|
||||
var/rangealert = 8 //Glows red when inside
|
||||
var/rangealert = 8 //Glows red when inside
|
||||
var/rangewarning = 20 //Glows yellow when inside
|
||||
var/hud_type = DATA_HUD_AI_DETECT
|
||||
var/hud_on = FALSE
|
||||
|
||||
@@ -146,9 +146,9 @@
|
||||
|
||||
attack_self(usr)
|
||||
|
||||
// WIRE_SIGNAL = 1
|
||||
// WIRE_RECEIVE = 2
|
||||
// WIRE_TRANSMIT = 4
|
||||
// WIRE_SIGNAL = 1
|
||||
// WIRE_RECEIVE = 2
|
||||
// WIRE_TRANSMIT = 4
|
||||
|
||||
/obj/item/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
|
||||
pai = personality
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
custom_price = PAYCHECK_MEDIUM * 10
|
||||
custom_premium_price = PAYCHECK_MEDIUM * 14
|
||||
|
||||
var/obj/item/reagent_containers/beaker = null ///Creating an empty slot for a beaker that can be added to dispense into
|
||||
var/amount = 30 ///The amount of reagent that is to be dispensed currently
|
||||
var/obj/item/reagent_containers/beaker = null ///Creating an empty slot for a beaker that can be added to dispense into
|
||||
var/amount = 30 ///The amount of reagent that is to be dispensed currently
|
||||
|
||||
var/list/dispensable_reagents = list() ///List in which all currently dispensable reagents go
|
||||
var/list/dispensable_reagents = list() ///List in which all currently dispensable reagents go
|
||||
|
||||
/obj/item/storage/portable_chem_mixer/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -97,9 +97,9 @@
|
||||
* Replaces the beaker of the portable chemical mixer with another beaker, or simply adds the new beaker if none is in currently
|
||||
*
|
||||
* Checks if a valid user and a valid new beaker exist and attempts to replace the current beaker in the portable chemical mixer with the one in hand. Simply places the new beaker in if no beaker is currently loaded
|
||||
* Arguments:
|
||||
* * mob/living/user - The user who is trying to exchange beakers
|
||||
* * obj/item/reagent_containers/new_beaker - The new beaker that the user wants to put into the device
|
||||
* Arguments:
|
||||
* * mob/living/user - The user who is trying to exchange beakers
|
||||
* * obj/item/reagent_containers/new_beaker - The new beaker that the user wants to put into the device
|
||||
*/
|
||||
/obj/item/storage/portable_chem_mixer/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
|
||||
if(!user)
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
custom_materials = list(/datum/material/iron=750)
|
||||
var/drain_rate = 2000000 // amount of power to drain per tick
|
||||
var/power_drained = 0 // has drained this much power
|
||||
var/max_power = 6e8 // maximum power that can be drained before exploding
|
||||
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
||||
var/drain_rate = 2000000 // amount of power to drain per tick
|
||||
var/power_drained = 0 // has drained this much power
|
||||
var/max_power = 6e8 // maximum power that can be drained before exploding
|
||||
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
||||
var/admins_warned = FALSE // stop spam, only warn the admins once that we are about to boom
|
||||
|
||||
var/obj/structure/cable/attached // the attached cable
|
||||
var/obj/structure/cable/attached // the attached cable
|
||||
|
||||
/obj/item/powersink/update_icon_state()
|
||||
icon_state = "powersink[mode == OPERATING]"
|
||||
|
||||
@@ -360,7 +360,7 @@
|
||||
return
|
||||
emped++ //There's been an EMP; better count it
|
||||
var/curremp = emped //Remember which EMP this was
|
||||
if (listening && ismob(loc)) // if the radio is turned on and on someone's person they notice
|
||||
if (listening && ismob(loc)) // if the radio is turned on and on someone's person they notice
|
||||
to_chat(loc, "<span class='warning'>\The [src] overloads.</span>")
|
||||
broadcasting = FALSE
|
||||
listening = FALSE
|
||||
@@ -437,6 +437,6 @@
|
||||
recalculateChannels()
|
||||
|
||||
|
||||
/obj/item/radio/off // Station bounced radios, their only difference is spawning with the speakers off, this was made to help the lag.
|
||||
listening = 0 // And it's nice to have a subtype too for future features.
|
||||
/obj/item/radio/off // Station bounced radios, their only difference is spawning with the speakers off, this was made to help the lag.
|
||||
listening = 0 // And it's nice to have a subtype too for future features.
|
||||
dog_fashion = /datum/dog_fashion/back
|
||||
|
||||
@@ -112,7 +112,7 @@ GENE SCANNER
|
||||
to_chat(user, "<span class='notice'>You switch the health analyzer to report extra info on wounds.</span>")
|
||||
|
||||
/obj/item/healthanalyzer/attack(mob/living/M, mob/living/carbon/human/user)
|
||||
flick("[icon_state]-scan", src) //makes it so that it plays the scan animation upon scanning, including clumsy scanning
|
||||
flick("[icon_state]-scan", src) //makes it so that it plays the scan animation upon scanning, including clumsy scanning
|
||||
|
||||
// Clumsiness/brain damage check
|
||||
if ((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50))
|
||||
@@ -922,7 +922,7 @@ GENE SCANNER
|
||||
var/selected_target = null
|
||||
|
||||
/obj/item/scanner_wand/attack(mob/living/M, mob/living/carbon/human/user)
|
||||
flick("[icon_state]_active", src) //nice little visual flash when scanning someone else.
|
||||
flick("[icon_state]_active", src) //nice little visual flash when scanning someone else.
|
||||
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(25))
|
||||
user.visible_message("<span class='warning'>[user] targets himself for scanning.</span>", \
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
say("Recording started.")
|
||||
update_sound()
|
||||
update_icon()
|
||||
var/used = mytape.used_capacity //to stop runtimes when you eject the tape
|
||||
var/used = mytape.used_capacity //to stop runtimes when you eject the tape
|
||||
var/max = mytape.max_capacity
|
||||
while(recording && used < max)
|
||||
mytape.used_capacity += 1 SECONDS
|
||||
@@ -221,7 +221,7 @@
|
||||
update_sound()
|
||||
say("Playback started.")
|
||||
playsound(src, 'sound/items/taperecorder/taperecorder_play.ogg', 50, FALSE)
|
||||
var/used = mytape.used_capacity //to stop runtimes when you eject the tape
|
||||
var/used = mytape.used_capacity //to stop runtimes when you eject the tape
|
||||
var/max = mytape.max_capacity
|
||||
for(var/i = 1, used <= max, sleep(playsleepseconds))
|
||||
if(!mytape)
|
||||
|
||||
@@ -34,7 +34,7 @@ effective or pretty fucking useless.
|
||||
|
||||
|
||||
/obj/item/batterer/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
|
||||
if(!user) return
|
||||
if(!user) return
|
||||
if(times_used >= max_uses)
|
||||
to_chat(user, "<span class='danger'>The mind batterer has been burnt out!</span>")
|
||||
return
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
attached_device = A
|
||||
to_chat(user, "<span class='notice'>You attach the [item] to the valve controls and secure it.</span>")
|
||||
A.holder = src
|
||||
A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb).
|
||||
A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb).
|
||||
log_bomber(user, "attached a [item.name] to a ttv -", src, null, FALSE)
|
||||
attacher = user
|
||||
return
|
||||
@@ -87,7 +87,7 @@
|
||||
if(toggle)
|
||||
toggle = FALSE
|
||||
toggle_valve()
|
||||
addtimer(CALLBACK(src, .proc/toggle_off), 5) //To stop a signal being spammed from a proxy sensor constantly going off or whatever
|
||||
addtimer(CALLBACK(src, .proc/toggle_off), 5) //To stop a signal being spammed from a proxy sensor constantly going off or whatever
|
||||
|
||||
/obj/item/transfer_valve/proc/toggle_off()
|
||||
toggle = TRUE
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
M.dna.unique_enzymes = fields["UE"]
|
||||
M.name = M.real_name
|
||||
M.dna.blood_type = fields["blood_type"]
|
||||
if(fields["UI"]) //UI+UE
|
||||
if(fields["UI"]) //UI+UE
|
||||
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
||||
M.updateappearance(mutations_overlay_update=1)
|
||||
log_attack("[log_msg] [loc_name(user)]")
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
log_combat(user, target, "injected", src)
|
||||
|
||||
if(!inject(target, user)) //Now we actually do the heavy lifting.
|
||||
if(!inject(target, user)) //Now we actually do the heavy lifting.
|
||||
to_chat(user, "<span class='notice'>It appears that [target] does not have compatible DNA.</span>")
|
||||
|
||||
used = 1
|
||||
@@ -437,7 +437,7 @@
|
||||
var/duration = 600
|
||||
|
||||
/obj/item/dnainjector/timed/inject(mob/living/carbon/M, mob/user)
|
||||
if(M.stat == DEAD) //prevents dead people from having their DNA changed
|
||||
if(M.stat == DEAD) //prevents dead people from having their DNA changed
|
||||
to_chat(user, "<span class='notice'>You can't modify [M]'s DNA while [M.p_theyre()] dead.</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -474,7 +474,7 @@
|
||||
M.name = M.real_name
|
||||
M.dna.blood_type = fields["blood_type"]
|
||||
M.dna.temporary_mutations[UE_CHANGED] = endtime
|
||||
if(fields["UI"]) //UI+UE
|
||||
if(fields["UI"]) //UI+UE
|
||||
if(!M.dna.previous["UI"])
|
||||
M.dna.previous["UI"] = M.dna.uni_identity
|
||||
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)//stole from chainsaw code
|
||||
var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
B.organ_flags &= ~ORGAN_VITAL //this cant possibly be a good idea
|
||||
B.organ_flags &= ~ORGAN_VITAL //this cant possibly be a good idea
|
||||
var/randdir
|
||||
for(var/i in 1 to 24)//like a headless chicken!
|
||||
if(user.is_holding(src))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Emags
|
||||
* Contains:
|
||||
* EMAGS AND DOORMAGS
|
||||
* EMAGS AND DOORMAGS
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
desc = "A light and compact fibreglass-framed model fire extinguisher."
|
||||
icon_state = "miniFE0"
|
||||
inhand_icon_state = "miniFE"
|
||||
hitsound = null //it is much lighter, after all.
|
||||
hitsound = null //it is much lighter, after all.
|
||||
flags_1 = null //doesn't CONDUCT_1
|
||||
throwforce = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
light_system = MOVABLE_LIGHT
|
||||
light_on = FALSE
|
||||
var/status = FALSE
|
||||
var/lit = FALSE //on or off
|
||||
var/lit = FALSE //on or off
|
||||
var/operating = FALSE//cooldown
|
||||
var/obj/item/weldingtool/weldtool = null
|
||||
var/obj/item/assembly/igniter/igniter = null
|
||||
@@ -195,7 +195,7 @@
|
||||
var/turf/previousturf = get_turf(src)
|
||||
for(var/turf/T in turflist)
|
||||
if(T == previousturf)
|
||||
continue //so we don't burn the tile we be standin on
|
||||
continue //so we don't burn the tile we be standin on
|
||||
var/list/turfs_sharing_with_prev = previousturf.GetAtmosAdjacentTurfs(alldir=1)
|
||||
if(!(T in turfs_sharing_with_prev))
|
||||
break
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
foodtypes = MEAT | BREAKFAST
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/food/omelette //FUCK THIS
|
||||
/obj/item/food/omelette //FUCK THIS
|
||||
name = "omelette du fromage"
|
||||
desc = "That's all you can say!"
|
||||
icon_state = "omelette"
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
icon_state = "royalcheese"
|
||||
food_reagents = list(/datum/reagent/consumable/nutriment = 15, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/gold = 20, /datum/reagent/toxin/mutagen = 5)
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
tastes = list("cheese" = 4, "royalty" = 1)
|
||||
tastes = list("cheese" = 4, "royalty" = 1)
|
||||
rat_heal = 70
|
||||
|
||||
/obj/item/food/cheese
|
||||
@@ -481,7 +481,7 @@
|
||||
icon = 'icons/obj/lollipop.dmi'
|
||||
icon_state = "lollipop_stick"
|
||||
inhand_icon_state = "lollipop_stick"
|
||||
food_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/iron = 10, /datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/omnizine = 2) //Honk
|
||||
food_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/iron = 10, /datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/omnizine = 2) //Honk
|
||||
var/mutable_appearance/head
|
||||
var/headcolor = rgb(0, 0, 0)
|
||||
tastes = list("candy" = 1)
|
||||
@@ -590,7 +590,7 @@
|
||||
icon = 'icons/obj/lollipop.dmi'
|
||||
icon_state = "gumball"
|
||||
worn_icon_state = "bubblegum"
|
||||
food_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/sal_acid = 2, /datum/reagent/medicine/oxandrolone = 2) //Kek
|
||||
food_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/sal_acid = 2, /datum/reagent/medicine/oxandrolone = 2) //Kek
|
||||
tastes = list("candy")
|
||||
foodtypes = JUNKFOOD
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
@@ -805,5 +805,5 @@
|
||||
junkiness = junkiness,\
|
||||
check_liked = CALLBACK(src, .proc/check_liked))
|
||||
|
||||
/obj/item/food/rationpack/proc/check_liked(fraction, mob/M) //Nobody likes rationpacks. Nobody.
|
||||
/obj/item/food/rationpack/proc/check_liked(fraction, mob/M) //Nobody likes rationpacks. Nobody.
|
||||
return FOOD_DISLIKED
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Gifts and wrapping paper
|
||||
* Contains:
|
||||
* Gifts
|
||||
* Wrapping Paper
|
||||
* Gifts
|
||||
* Wrapping Paper
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
wires = new /datum/wires/explosive/chem_grenade(src)
|
||||
|
||||
/obj/item/grenade/chem_grenade/examine(mob/user)
|
||||
display_timer = (stage == GRENADE_READY) //show/hide the timer based on assembly state
|
||||
display_timer = (stage == GRENADE_READY) //show/hide the timer based on assembly state
|
||||
. = ..()
|
||||
if(user.can_see_reagents())
|
||||
if(beakers.len)
|
||||
@@ -66,7 +66,7 @@
|
||||
else if(stage == GRENADE_READY)
|
||||
det_time = det_time == 50 ? 30 : 50 //toggle between 30 and 50
|
||||
if(landminemode)
|
||||
landminemode.time = det_time * 0.1 //overwrites the proxy sensor activation timer
|
||||
landminemode.time = det_time * 0.1 //overwrites the proxy sensor activation timer
|
||||
|
||||
to_chat(user, "<span class='notice'>You modify the time delay. It's set for [DisplayTimeText(det_time)].</span>")
|
||||
else
|
||||
@@ -194,7 +194,7 @@
|
||||
stage_change(GRENADE_EMPTY)
|
||||
active = FALSE
|
||||
return
|
||||
// logs from custom assemblies priming are handled by the wire component
|
||||
// logs from custom assemblies priming are handled by the wire component
|
||||
log_game("A grenade detonated at [AREACOORD(detonation_turf)]")
|
||||
|
||||
update_mob()
|
||||
@@ -211,7 +211,7 @@
|
||||
banned_containers = list()
|
||||
affected_area = 5
|
||||
ignition_temp = 25 // Large grenades are slightly more effective at setting off heat-sensitive mixtures than smaller grenades.
|
||||
threatscale = 1.1 // 10% more effective.
|
||||
threatscale = 1.1 // 10% more effective.
|
||||
|
||||
/obj/item/grenade/chem_grenade/large/detonate(mob/living/lanced_by)
|
||||
if(stage != GRENADE_READY)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M)
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
return
|
||||
M.show_message("<span class='warning'>BANG</span>", MSG_AUDIBLE)
|
||||
var/distance = max(0,get_dist(get_turf(src),T))
|
||||
@@ -32,7 +32,7 @@
|
||||
M.add_confusion(max(30/max(1,distance), 10))
|
||||
|
||||
//Bang
|
||||
if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this.
|
||||
if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this.
|
||||
//M.Paralyze(20) - SKYRAT EDIT REMOVAL - COMBAT
|
||||
//M.Knockdown(200) - SKYRAT EDIT REMOVAL - COMBAT
|
||||
M.StaminaKnockdown(40, TRUE, TRUE, knockdown_amt = 5 SECONDS)
|
||||
@@ -91,7 +91,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/stingbang/proc/pop(turf/T , mob/living/M)
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
return
|
||||
M.show_message("<span class='warning'>POP</span>", MSG_AUDIBLE)
|
||||
var/distance = max(0,get_dist(get_turf(src),T))
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
/obj/item/grenade/iedcasing/detonate(mob/living/lanced_by) //Blowing that can up
|
||||
. = ..()
|
||||
update_mob()
|
||||
explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball.
|
||||
explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball.
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/iedcasing/change_det_time()
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/hypnotic/proc/bang(turf/T, mob/living/M)
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
return
|
||||
var/distance = max(0,get_dist(get_turf(src),T))
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
notify_ghosts("[user] has planted \a [src] on [target] with a [det_time] second fuse!", source = target, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Explosive Planted")
|
||||
|
||||
moveToNullspace() //Yep
|
||||
moveToNullspace() //Yep
|
||||
|
||||
if(istype(AM, /obj/item)) //your crappy throwing star can't fly so good with a giant brick of c4 on it.
|
||||
var/obj/item/I = AM
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/spawner_type = null // must be an object path
|
||||
var/deliveryamt = 1 // amount of type to deliver
|
||||
|
||||
/obj/item/grenade/spawnergrenade/detonate(mob/living/lanced_by) // Prime now just handles the two loops that query for people in lockers and people who can see it.
|
||||
/obj/item/grenade/spawnergrenade/detonate(mob/living/lanced_by) // Prime now just handles the two loops that query for people in lockers and people who can see it.
|
||||
. = ..()
|
||||
update_mob()
|
||||
if(spawner_type && deliveryamt)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/circlegame/dropped(mob/user)
|
||||
UnregisterSignal(user, COMSIG_PARENT_EXAMINE) //loc will have changed by the time this is called, so Destroy() can't catch it
|
||||
UnregisterSignal(user, COMSIG_PARENT_EXAMINE) //loc will have changed by the time this is called, so Destroy() can't catch it
|
||||
// this is a dropdel item.
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -531,9 +531,9 @@
|
||||
S.ckey = C.ckey
|
||||
S.fully_replace_character_name(null, "The spirit of [name]")
|
||||
S.status_flags |= GODMODE
|
||||
S.copy_languages(user, LANGUAGE_MASTER) //Make sure the sword can understand and communicate with the user.
|
||||
S.copy_languages(user, LANGUAGE_MASTER) //Make sure the sword can understand and communicate with the user.
|
||||
S.update_atom_languages()
|
||||
grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue
|
||||
grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue
|
||||
var/input = sanitize_name(stripped_input(S,"What are you named?", ,"", MAX_NAME_LEN))
|
||||
|
||||
if(src && input)
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
var/icon_on = "potato_active"
|
||||
var/detonation_timerid
|
||||
var/activation_time = 0
|
||||
var/timer = 600 //deciseconds
|
||||
var/timer = 600 //deciseconds
|
||||
var/show_timer = FALSE
|
||||
var/reusable = FALSE //absolute madman
|
||||
var/reusable = FALSE //absolute madman
|
||||
var/sticky = TRUE
|
||||
var/forceful_attachment = TRUE
|
||||
var/stimulant = TRUE
|
||||
@@ -80,7 +80,7 @@
|
||||
L.SetImmobilized(0)
|
||||
L.SetParalyzed(0)
|
||||
L.SetUnconscious(0)
|
||||
L.reagents.add_reagent(/datum/reagent/medicine/muscle_stimulant, clamp(5 - L.reagents.get_reagent_amount(/datum/reagent/medicine/muscle_stimulant), 0, 5)) //If you don't have legs or get bola'd, tough luck!
|
||||
L.reagents.add_reagent(/datum/reagent/medicine/muscle_stimulant, clamp(5 - L.reagents.get_reagent_amount(/datum/reagent/medicine/muscle_stimulant), 0, 5)) //If you don't have legs or get bola'd, tough luck!
|
||||
|
||||
|
||||
/obj/item/hot_potato/examine(mob/user)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
var/obj/effect/countdown/hourglass/countdown
|
||||
var/time = 1 MINUTES
|
||||
var/finish_time //So countdown doesn't need to fiddle with timers
|
||||
var/timing_id //if present we're timing
|
||||
var/timing_id //if present we're timing
|
||||
var/hand_activated = TRUE
|
||||
icon = 'icons/obj/hourglass.dmi'
|
||||
icon_state = "hourglass_idle"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/* Kitchen tools
|
||||
* Contains:
|
||||
* Fork
|
||||
* Kitchen knives
|
||||
* Ritual Knife
|
||||
* Bloodletter
|
||||
* Butcher's cleaver
|
||||
* Combat Knife
|
||||
* Rolling Pins
|
||||
* Plastic Utensils
|
||||
* Fork
|
||||
* Kitchen knives
|
||||
* Ritual Knife
|
||||
* Bloodletter
|
||||
* Butcher's cleaver
|
||||
* Combat Knife
|
||||
* Rolling Pins
|
||||
* Plastic Utensils
|
||||
*/
|
||||
|
||||
/obj/item/kitchen
|
||||
@@ -92,7 +92,7 @@
|
||||
sharpness = SHARP_EDGED
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
|
||||
item_flags = EYE_STAB
|
||||
var/bayonet = FALSE //Can this be attached to a gun?
|
||||
var/bayonet = FALSE //Can this be attached to a gun?
|
||||
wound_bonus = -5
|
||||
bare_wound_bonus = 10
|
||||
tool_behaviour = TOOL_KNIFE
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
<li>Insert the nuclear authorisation disk into slot.</li>
|
||||
<li>Type numeric authorisation code into the keypad. This should have been provided. Note: If you make a mistake press R to reset the device.
|
||||
<li>Press the E button to log onto the device.</li>
|
||||
You now have activated the device. To deactivate the buttons at anytime for example when you've already prepped the bomb for detonation remove the auth disk OR press the R on the keypad.<br>
|
||||
You now have activated the device. To deactivate the buttons at anytime for example when you've already prepped the bomb for detonation remove the auth disk OR press the R on the keypad.<br>
|
||||
Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option.<br>
|
||||
Note: Nanotrasen is a pain in the neck.<br>
|
||||
Toggle off the SAFETY.<br>
|
||||
|
||||
@@ -345,7 +345,7 @@
|
||||
///List of mobs that have already been mobbed.
|
||||
var/static/list/mob_mobs = list()
|
||||
|
||||
#define NICKNAME_CAP (MAX_NAME_LEN/2)
|
||||
#define NICKNAME_CAP (MAX_NAME_LEN/2)
|
||||
/obj/item/virgin_mary/attackby(obj/item/W, mob/user, params)
|
||||
. = ..()
|
||||
if(resistance_flags & ON_FIRE)
|
||||
|
||||
@@ -35,11 +35,11 @@
|
||||
cleaner.mind.adjust_experience(/datum/skill/cleaning, total_experience_gain)
|
||||
A.wash(CLEAN_SCRUB)
|
||||
|
||||
reagents.expose(A, TOUCH, 10) //Needed for proper floor wetting.
|
||||
reagents.expose(A, TOUCH, 10) //Needed for proper floor wetting.
|
||||
var/val2remove = 1
|
||||
if(cleaner?.mind)
|
||||
val2remove = round(cleaner.mind.get_skill_modifier(/datum/skill/cleaning, SKILL_SPEED_MODIFIER),0.1)
|
||||
reagents.remove_any(val2remove) //reaction() doesn't use up the reagents
|
||||
reagents.remove_any(val2remove) //reaction() doesn't use up the reagents
|
||||
|
||||
|
||||
/obj/item/mop/afterattack(atom/A, mob/user, proximity)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//NEVER USE THIS IT SUX -PETETHEGOAT
|
||||
//NEVER USE THIS IT SUX -PETETHEGOAT
|
||||
//IT SUCKS A BIT LESS -GIACOM
|
||||
|
||||
/obj/item/paint
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
to_chat(user, "<span class='notice'>You start pushing out of [src]... (This will take about 20 seconds.)</span>")
|
||||
if(!do_after(user, 200, target = user) || open || !locked || !(user in occupants))
|
||||
return
|
||||
loc.visible_message("<span class='warning'>[user] shoves out of [src]!</span>", null, null, null, user)
|
||||
loc.visible_message("<span class='warning'>[user] shoves out of [src]!</span>", null, null, null, user)
|
||||
to_chat(user, "<span class='notice'>You shove open [src]'s door against the lock's resistance and fall out!</span>")
|
||||
locked = FALSE
|
||||
open = TRUE
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
var/obj/item/toy/plush/lover
|
||||
var/obj/item/toy/plush/partner
|
||||
var/obj/item/toy/plush/plush_child
|
||||
var/obj/item/toy/plush/paternal_parent //who initiated creation
|
||||
var/obj/item/toy/plush/maternal_parent //who owns, see love()
|
||||
var/obj/item/toy/plush/paternal_parent //who initiated creation
|
||||
var/obj/item/toy/plush/maternal_parent //who owns, see love()
|
||||
var/static/list/breeding_blacklist = typecacheof(/obj/item/toy/plush/carpplushie/dehy_carp) // you cannot have sexual relations with this plush
|
||||
var/list/scorned = list() //who the plush hates
|
||||
var/list/scorned_by = list() //who hates the plush, to remove external references on Destroy()
|
||||
var/list/scorned = list() //who the plush hates
|
||||
var/list/scorned_by = list() //who hates the plush, to remove external references on Destroy()
|
||||
var/heartbroken = FALSE
|
||||
var/vowbroken = FALSE
|
||||
var/young = FALSE
|
||||
@@ -46,11 +46,11 @@
|
||||
else
|
||||
gender = MALE
|
||||
|
||||
love_message = list("\n[src] is so happy, \he could rip a seam!")
|
||||
partner_message = list("\n[src] has a ring on \his finger! It says bound to my dear [partner].")
|
||||
heartbroken_message = list("\n[src] looks so sad.")
|
||||
vowbroken_message = list("\n[src] lost \his ring...")
|
||||
parent_message = list("\n[src] can't remember what sleep is.")
|
||||
love_message = list("\n[src] is so happy, \he could rip a seam!")
|
||||
partner_message = list("\n[src] has a ring on \his finger! It says bound to my dear [partner].")
|
||||
heartbroken_message = list("\n[src] looks so sad.")
|
||||
vowbroken_message = list("\n[src] lost \his ring...")
|
||||
parent_message = list("\n[src] can't remember what sleep is.")
|
||||
|
||||
normal_desc = desc
|
||||
|
||||
@@ -165,11 +165,11 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plush/proc/love(obj/item/toy/plush/Kisser, mob/living/user) //~<3
|
||||
var/chance = 100 //to steal a kiss, surely there's a 100% chance no-one would reject a plush such as I?
|
||||
var/concern = 20 //perhaps something might cloud true love with doubt
|
||||
var/loyalty = 30 //why should another get between us?
|
||||
var/duty = 50 //conquering another's is what I live for
|
||||
/obj/item/toy/plush/proc/love(obj/item/toy/plush/Kisser, mob/living/user) //~<3
|
||||
var/chance = 100 //to steal a kiss, surely there's a 100% chance no-one would reject a plush such as I?
|
||||
var/concern = 20 //perhaps something might cloud true love with doubt
|
||||
var/loyalty = 30 //why should another get between us?
|
||||
var/duty = 50 //conquering another's is what I live for
|
||||
|
||||
//we are not catholic
|
||||
if(young == TRUE || Kisser.young == TRUE)
|
||||
@@ -188,19 +188,19 @@
|
||||
"<span class='notice'>That didn't feel like it worked.</span>", NONE)
|
||||
|
||||
//first comes love
|
||||
else if(Kisser.lover != src && Kisser.partner != src) //cannot be lovers or married
|
||||
if(Kisser.lover) //if the initiator has a lover
|
||||
Kisser.lover.heartbreak(Kisser) //the old lover can get over the kiss-and-run whilst the kisser has some fun
|
||||
chance -= concern //one heart already broken, what does another mean?
|
||||
if(lover) //if the recipient has a lover
|
||||
chance -= loyalty //mustn't... but those lips
|
||||
if(partner) //if the recipient has a partner
|
||||
chance -= duty //do we mate for life?
|
||||
else if(Kisser.lover != src && Kisser.partner != src) //cannot be lovers or married
|
||||
if(Kisser.lover) //if the initiator has a lover
|
||||
Kisser.lover.heartbreak(Kisser) //the old lover can get over the kiss-and-run whilst the kisser has some fun
|
||||
chance -= concern //one heart already broken, what does another mean?
|
||||
if(lover) //if the recipient has a lover
|
||||
chance -= loyalty //mustn't... but those lips
|
||||
if(partner) //if the recipient has a partner
|
||||
chance -= duty //do we mate for life?
|
||||
|
||||
if(prob(chance)) //did we bag a date?
|
||||
if(prob(chance)) //did we bag a date?
|
||||
user.visible_message("<span class='notice'>[user] makes [Kisser] kiss [src]!</span>",
|
||||
"<span class='notice'>You make [Kisser] kiss [src]!</span>")
|
||||
if(lover) //who cares for the past, we live in the present
|
||||
if(lover) //who cares for the past, we live in the present
|
||||
lover.heartbreak(src)
|
||||
new_lover(Kisser)
|
||||
Kisser.new_lover(src)
|
||||
@@ -209,14 +209,14 @@
|
||||
"<span class='notice'>That didn't feel like it worked, this time.</span>", NONE)
|
||||
|
||||
//then comes marriage
|
||||
else if(Kisser.lover == src && Kisser.partner != src) //need to be lovers (assumes loving is a two way street) but not married (also assumes similar)
|
||||
else if(Kisser.lover == src && Kisser.partner != src) //need to be lovers (assumes loving is a two way street) but not married (also assumes similar)
|
||||
user.visible_message("<span class='notice'>[user] pronounces [Kisser] and [src] married! D'aw.</span>",
|
||||
"<span class='notice'>You pronounce [Kisser] and [src] married!</span>")
|
||||
new_partner(Kisser)
|
||||
Kisser.new_partner(src)
|
||||
|
||||
//then comes a baby in a baby's carriage, or an adoption in an adoption's orphanage
|
||||
else if(Kisser.partner == src && !plush_child) //the one advancing does not take ownership of the child and we have a one child policy in the toyshop
|
||||
else if(Kisser.partner == src && !plush_child) //the one advancing does not take ownership of the child and we have a one child policy in the toyshop
|
||||
user.visible_message("<span class='notice'>[user] is going to break [Kisser] and [src] by bashing them like that.</span>",
|
||||
"<span class='notice'>[Kisser] passionately embraces [src] in your hands. Look away you perv!</span>")
|
||||
user.client.give_award(/datum/award/achievement/misc/rule8, user)
|
||||
@@ -236,20 +236,20 @@
|
||||
/obj/item/toy/plush/proc/heartbreak(obj/item/toy/plush/Brutus)
|
||||
if(lover != Brutus)
|
||||
to_chat(world, "lover != Brutus")
|
||||
return //why are we considering someone we don't love?
|
||||
return //why are we considering someone we don't love?
|
||||
|
||||
scorned.Add(Brutus)
|
||||
Brutus.scorned_by(src)
|
||||
|
||||
lover = null
|
||||
Brutus.lover = null //feeling's mutual
|
||||
Brutus.lover = null //feeling's mutual
|
||||
|
||||
heartbroken = TRUE
|
||||
mood_message = pick(heartbroken_message)
|
||||
|
||||
if(partner == Brutus) //oh dear...
|
||||
if(partner == Brutus) //oh dear...
|
||||
partner = null
|
||||
Brutus.partner = null //it'd be weird otherwise
|
||||
Brutus.partner = null //it'd be weird otherwise
|
||||
vowbroken = TRUE
|
||||
mood_message = pick(vowbroken_message)
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
|
||||
/obj/item/toy/plush/proc/new_lover(obj/item/toy/plush/Juliet)
|
||||
if(lover == Juliet)
|
||||
return //nice try
|
||||
return //nice try
|
||||
lover = Juliet
|
||||
|
||||
cheer_up()
|
||||
@@ -269,14 +269,14 @@
|
||||
mood_message = pick(love_message)
|
||||
update_desc()
|
||||
|
||||
if(partner) //who?
|
||||
partner = null //more like who cares
|
||||
if(partner) //who?
|
||||
partner = null //more like who cares
|
||||
|
||||
/obj/item/toy/plush/proc/new_partner(obj/item/toy/plush/Apple_of_my_eye)
|
||||
if(partner == Apple_of_my_eye)
|
||||
return //double marriage is just insecurity
|
||||
return //double marriage is just insecurity
|
||||
if(lover != Apple_of_my_eye)
|
||||
return //union not born out of love will falter
|
||||
return //union not born out of love will falter
|
||||
|
||||
partner = Apple_of_my_eye
|
||||
|
||||
@@ -288,27 +288,27 @@
|
||||
|
||||
/obj/item/toy/plush/proc/plop(obj/item/toy/plush/Daddy)
|
||||
if(partner != Daddy)
|
||||
return FALSE //we do not have bastards in our toyshop
|
||||
return FALSE //we do not have bastards in our toyshop
|
||||
|
||||
if(is_type_in_typecache(Daddy, breeding_blacklist))
|
||||
return FALSE // some love is forbidden
|
||||
|
||||
if(prob(50)) //it has my eyes
|
||||
if(prob(50)) //it has my eyes
|
||||
plush_child = new type(get_turf(loc))
|
||||
else //it has your eyes
|
||||
else //it has your eyes
|
||||
plush_child = new Daddy.type(get_turf(loc))
|
||||
|
||||
plush_child.make_young(src, Daddy)
|
||||
|
||||
/obj/item/toy/plush/proc/make_young(obj/item/toy/plush/Mama, obj/item/toy/plush/Dada)
|
||||
if(Mama == Dada)
|
||||
return //cloning is reserved for plants and spacemen
|
||||
return //cloning is reserved for plants and spacemen
|
||||
|
||||
maternal_parent = Mama
|
||||
paternal_parent = Dada
|
||||
young = TRUE
|
||||
name = "[Mama] Jr" //Icelandic naming convention pending
|
||||
normal_desc = "[src] is a little baby of [maternal_parent] and [paternal_parent]!" //original desc won't be used so the child can have moods
|
||||
name = "[Mama] Jr" //Icelandic naming convention pending
|
||||
normal_desc = "[src] is a little baby of [maternal_parent] and [paternal_parent]!" //original desc won't be used so the child can have moods
|
||||
update_desc()
|
||||
|
||||
Mama.mood_message = pick(Mama.parent_message)
|
||||
@@ -316,13 +316,13 @@
|
||||
Dada.mood_message = pick(Dada.parent_message)
|
||||
Dada.update_desc()
|
||||
|
||||
/obj/item/toy/plush/proc/bad_news(obj/item/toy/plush/Deceased) //cotton to cotton, sawdust to sawdust
|
||||
/obj/item/toy/plush/proc/bad_news(obj/item/toy/plush/Deceased) //cotton to cotton, sawdust to sawdust
|
||||
var/is_that_letter_for_me = FALSE
|
||||
if(partner == Deceased) //covers marriage
|
||||
if(partner == Deceased) //covers marriage
|
||||
is_that_letter_for_me = TRUE
|
||||
partner = null
|
||||
lover = null
|
||||
else if(lover == Deceased) //covers lovers
|
||||
else if(lover == Deceased) //covers lovers
|
||||
is_that_letter_for_me = TRUE
|
||||
lover = null
|
||||
|
||||
@@ -343,7 +343,7 @@
|
||||
//covers bad memories
|
||||
if(Deceased in scorned)
|
||||
scorned.Remove(Deceased)
|
||||
cheer_up() //what cold button eyes you have
|
||||
cheer_up() //what cold button eyes you have
|
||||
|
||||
if(Deceased in scorned_by)
|
||||
scorned_by.Remove(Deceased)
|
||||
@@ -355,11 +355,11 @@
|
||||
mood_message = pick(heartbroken_message)
|
||||
update_desc()
|
||||
|
||||
/obj/item/toy/plush/proc/cheer_up() //it'll be all right
|
||||
/obj/item/toy/plush/proc/cheer_up() //it'll be all right
|
||||
if(!heartbroken)
|
||||
return //you cannot make smile what is already
|
||||
return //you cannot make smile what is already
|
||||
if(vowbroken)
|
||||
return //it's a pretty big deal
|
||||
return //it's a pretty big deal
|
||||
|
||||
heartbroken = !heartbroken
|
||||
|
||||
@@ -367,7 +367,7 @@
|
||||
mood_message = null
|
||||
update_desc()
|
||||
|
||||
/obj/item/toy/plush/proc/heal_memories() //time fixes all wounds
|
||||
/obj/item/toy/plush/proc/heal_memories() //time fixes all wounds
|
||||
if(!vowbroken)
|
||||
vowbroken = !vowbroken
|
||||
if(mood_message in vowbroken_message)
|
||||
@@ -402,7 +402,7 @@
|
||||
icon_state = "plushvar"
|
||||
divine = TRUE
|
||||
var/obj/item/toy/plush/narplush/clash_target
|
||||
gender = MALE //he's a boy, right?
|
||||
gender = MALE //he's a boy, right?
|
||||
|
||||
/obj/item/toy/plush/ratplush/Moved()
|
||||
. = ..()
|
||||
@@ -489,7 +489,7 @@
|
||||
icon_state = "narplush"
|
||||
divine = TRUE
|
||||
var/clashing
|
||||
gender = FEMALE //it's canon if the toy is
|
||||
gender = FEMALE //it's canon if the toy is
|
||||
|
||||
/obj/item/toy/plush/narplush/Moved()
|
||||
. = ..()
|
||||
@@ -547,7 +547,7 @@
|
||||
attack_verb_continuous = list("blorbles", "slimes", "absorbs")
|
||||
attack_verb_simple = list("blorble", "slime", "absorb")
|
||||
squeak_override = list('sound/effects/blobattack.ogg' = 1)
|
||||
gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy
|
||||
gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy
|
||||
|
||||
/obj/item/toy/plush/awakenedplushie
|
||||
name = "awakened plushie"
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
var/pressureSetting = 1 //How powerful the cannon is - higher pressure = more gas but more powerful throws
|
||||
var/checktank = TRUE
|
||||
var/range_multiplier = 1
|
||||
var/throw_amount = 1 //How many items to throw per fire
|
||||
var/throw_amount = 1 //How many items to throw per fire
|
||||
var/fire_mode = PCANNON_FIFO
|
||||
var/automatic = FALSE
|
||||
var/clumsyCheck = TRUE
|
||||
var/list/allowed_typecache //Leave as null to allow all.
|
||||
var/list/allowed_typecache //Leave as null to allow all.
|
||||
var/charge_amount = 1
|
||||
var/charge_ticks = 1
|
||||
var/charge_tick = 0
|
||||
@@ -43,7 +43,7 @@
|
||||
if(selfcharge)
|
||||
init_charge()
|
||||
|
||||
/obj/item/pneumatic_cannon/proc/init_charge() //wrapper so it can be vv'd easier
|
||||
/obj/item/pneumatic_cannon/proc/init_charge() //wrapper so it can be vv'd easier
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/pneumatic_cannon/process()
|
||||
@@ -101,13 +101,13 @@
|
||||
load_item(IW, user)
|
||||
|
||||
/obj/item/pneumatic_cannon/proc/can_load_item(obj/item/I, mob/user)
|
||||
if(!istype(I)) //Players can't load non items, this allows for admin varedit inserts.
|
||||
if(!istype(I)) //Players can't load non items, this allows for admin varedit inserts.
|
||||
return TRUE
|
||||
if(allowed_typecache && !is_type_in_typecache(I, allowed_typecache))
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>[I] won't fit into [src]!</span>")
|
||||
return
|
||||
if((loadedWeightClass + I.w_class) > maxWeightClass) //Only make messages if there's a user
|
||||
if((loadedWeightClass + I.w_class) > maxWeightClass) //Only make messages if there's a user
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>\The [I] won't fit into \the [src]!</span>")
|
||||
return FALSE
|
||||
@@ -120,7 +120,7 @@
|
||||
/obj/item/pneumatic_cannon/proc/load_item(obj/item/I, mob/user)
|
||||
if(!can_load_item(I, user))
|
||||
return FALSE
|
||||
if(user) //Only use transfer proc if there's a user, otherwise just set loc.
|
||||
if(user) //Only use transfer proc if there's a user, otherwise just set loc.
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return FALSE
|
||||
to_chat(user, "<span class='notice'>You load \the [I] into \the [src].</span>")
|
||||
@@ -286,7 +286,7 @@
|
||||
range_multiplier = 3
|
||||
fire_mode = PCANNON_FIFO
|
||||
throw_amount = 1
|
||||
maxWeightClass = 150 //50 pies. :^)
|
||||
maxWeightClass = 150 //50 pies. :^)
|
||||
clumsyCheck = FALSE
|
||||
var/static/list/pie_typecache = typecacheof(/obj/item/food/pie)
|
||||
|
||||
@@ -298,11 +298,11 @@
|
||||
automatic = TRUE
|
||||
selfcharge = TRUE
|
||||
charge_type = /obj/item/food/pie/cream
|
||||
maxWeightClass = 60 //20 pies.
|
||||
maxWeightClass = 60 //20 pies.
|
||||
|
||||
/obj/item/pneumatic_cannon/pie/selfcharge/cyborg
|
||||
name = "low velocity pie cannon"
|
||||
automatic = FALSE
|
||||
charge_type = /obj/item/food/pie/cream/nostun
|
||||
maxWeightClass = 6 //2 pies
|
||||
charge_ticks = 2 //4 second/pie
|
||||
maxWeightClass = 6 //2 pies
|
||||
charge_ticks = 2 //4 second/pie
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//**************
|
||||
//*****Keys*******************
|
||||
//************** ** **
|
||||
//************** ** **
|
||||
/obj/item/keycard
|
||||
name = "security keycard"
|
||||
desc = "This feels like it belongs to a door."
|
||||
|
||||
@@ -363,7 +363,7 @@
|
||||
. = ..()
|
||||
check_amount()
|
||||
|
||||
/obj/item/borg/lollipop/proc/check_amount() //Doesn't even use processing ticks.
|
||||
/obj/item/borg/lollipop/proc/check_amount() //Doesn't even use processing ticks.
|
||||
if(charging)
|
||||
return
|
||||
if(candy < candymax)
|
||||
@@ -431,7 +431,7 @@
|
||||
user.visible_message("<span class='warning'>[user] blasts a flying lollipop at [target]!</span>")
|
||||
check_amount()
|
||||
|
||||
/obj/item/borg/lollipop/proc/shootG(atom/target, mob/living/user, params) //Most certainly a good idea.
|
||||
/obj/item/borg/lollipop/proc/shootG(atom/target, mob/living/user, params) //Most certainly a good idea.
|
||||
if(candy <= 0)
|
||||
to_chat(user, "<span class='warning'>Not enough gumballs left!</span>")
|
||||
return FALSE
|
||||
@@ -518,7 +518,7 @@
|
||||
S.color = color
|
||||
dropped = TRUE
|
||||
|
||||
/obj/item/ammo_casing/caseless/lollipop //NEEDS RANDOMIZED COLOR LOGIC.
|
||||
/obj/item/ammo_casing/caseless/lollipop //NEEDS RANDOMIZED COLOR LOGIC.
|
||||
name = "Lollipop"
|
||||
desc = "Why are you seeing this?!"
|
||||
projectile_type = /obj/projectile/bullet/reusable/lollipop
|
||||
@@ -590,7 +590,7 @@
|
||||
var/projectile_damage_coefficient = 0.5
|
||||
/// Energy cost per tracked projectile damage amount per second
|
||||
var/projectile_damage_tick_ecost_coefficient = 10
|
||||
var/projectile_speed_coefficient = 1.5 //Higher the coefficient slower the projectile.
|
||||
var/projectile_speed_coefficient = 1.5 //Higher the coefficient slower the projectile.
|
||||
/// Energy cost per tracked projectile per second
|
||||
var/projectile_tick_speed_ecost = 75
|
||||
var/list/obj/projectile/tracked
|
||||
@@ -693,7 +693,7 @@
|
||||
var/usage = 0
|
||||
for(var/I in tracked)
|
||||
var/obj/projectile/P = I
|
||||
if(!P.stun && P.nodamage) //No damage
|
||||
if(!P.stun && P.nodamage) //No damage
|
||||
continue
|
||||
usage += projectile_tick_speed_ecost * delta_time
|
||||
usage += tracked[I] * projectile_damage_tick_ecost_coefficient * delta_time
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/installed = FALSE
|
||||
var/require_model = FALSE
|
||||
var/list/model_type = null
|
||||
/// Bitflags listing model compatibility. Used in the exosuit fabricator for creating sub-categories.
|
||||
/// Bitflags listing model compatibility. Used in the exosuit fabricator for creating sub-categories.
|
||||
var/list/model_flags = NONE
|
||||
// if true, is not stored in the robot to be ejected
|
||||
// if model is reset
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon = 'icons/obj/shields.dmi'
|
||||
block_chance = 50
|
||||
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 70)
|
||||
var/transparent = FALSE // makes beam projectiles pass through the shield
|
||||
var/transparent = FALSE // makes beam projectiles pass through the shield
|
||||
|
||||
/obj/item/shield/proc/on_shield_block(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", damage = 0, attack_type = MELEE_ATTACK)
|
||||
return TRUE
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
if(txt && user.canUseTopic(src, BE_CLOSE))
|
||||
label = txt
|
||||
name = "[label] sign"
|
||||
desc = "It reads: [label]"
|
||||
desc = "It reads: [label]"
|
||||
|
||||
/obj/item/picket_sign/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon))
|
||||
|
||||
@@ -165,13 +165,13 @@
|
||||
/*
|
||||
* Bone Spear
|
||||
*/
|
||||
/obj/item/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification.
|
||||
/obj/item/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification.
|
||||
icon_state = "bone_spear0"
|
||||
name = "bone spear"
|
||||
desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology."
|
||||
force = 12
|
||||
throwforce = 22
|
||||
armour_penetration = 15 //Enhanced armor piercing
|
||||
armour_penetration = 15 //Enhanced armor piercing
|
||||
|
||||
/obj/item/spear/bonespear/ComponentInitialize()
|
||||
. = ..()
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
|
||||
/obj/item/stack/medical/mesh/Initialize(mapload, new_amount, merge = TRUE, list/mat_override=null, mat_amt=1)
|
||||
. = ..()
|
||||
if(amount == max_amount) //only seal full mesh packs
|
||||
if(amount == max_amount) //only seal full mesh packs
|
||||
is_open = FALSE
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* Glass stack types
|
||||
* Contains:
|
||||
* Glass sheets
|
||||
* Reinforced glass sheets
|
||||
* Glass shards - TODO: Move this into code/game/object/item/weapons
|
||||
* Glass sheets
|
||||
* Reinforced glass sheets
|
||||
* Glass shards - TODO: Move this into code/game/object/item/weapons
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -411,67 +411,67 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
|
||||
/*
|
||||
* Cardboard
|
||||
*/
|
||||
GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
new/datum/stack_recipe("box", /obj/item/storage/box), \
|
||||
new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3), \
|
||||
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \
|
||||
GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
new/datum/stack_recipe("box", /obj/item/storage/box), \
|
||||
new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3), \
|
||||
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \
|
||||
new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5), \
|
||||
null, \
|
||||
new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5), \
|
||||
null, \
|
||||
|
||||
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
|
||||
new/datum/stack_recipe("folder", /obj/item/folder), \
|
||||
null, \
|
||||
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
|
||||
new/datum/stack_recipe("folder", /obj/item/folder), \
|
||||
null, \
|
||||
//TO-DO: Find a proper way to just change the illustration on the box. Code isn't the issue, input is.
|
||||
new/datum/stack_recipe_list("fancy boxes", list(
|
||||
new /datum/stack_recipe("donut box", /obj/item/storage/fancy/donut_box), \
|
||||
new /datum/stack_recipe("egg box", /obj/item/storage/fancy/egg_box), \
|
||||
new /datum/stack_recipe("donk-pockets box", /obj/item/storage/box/donkpockets), \
|
||||
new /datum/stack_recipe("donk-pockets spicy box", /obj/item/storage/box/donkpockets/donkpocketspicy), \
|
||||
new /datum/stack_recipe("donk-pockets teriyaki box", /obj/item/storage/box/donkpockets/donkpocketteriyaki), \
|
||||
new /datum/stack_recipe("donk-pockets pizza box", /obj/item/storage/box/donkpockets/donkpocketpizza), \
|
||||
new /datum/stack_recipe("donk-pockets berry box", /obj/item/storage/box/donkpockets/donkpocketberry), \
|
||||
new /datum/stack_recipe("donk-pockets honk box", /obj/item/storage/box/donkpockets/donkpockethonk), \
|
||||
new /datum/stack_recipe("donut box", /obj/item/storage/fancy/donut_box), \
|
||||
new /datum/stack_recipe("egg box", /obj/item/storage/fancy/egg_box), \
|
||||
new /datum/stack_recipe("donk-pockets box", /obj/item/storage/box/donkpockets), \
|
||||
new /datum/stack_recipe("donk-pockets spicy box", /obj/item/storage/box/donkpockets/donkpocketspicy), \
|
||||
new /datum/stack_recipe("donk-pockets teriyaki box", /obj/item/storage/box/donkpockets/donkpocketteriyaki), \
|
||||
new /datum/stack_recipe("donk-pockets pizza box", /obj/item/storage/box/donkpockets/donkpocketpizza), \
|
||||
new /datum/stack_recipe("donk-pockets berry box", /obj/item/storage/box/donkpockets/donkpocketberry), \
|
||||
new /datum/stack_recipe("donk-pockets honk box", /obj/item/storage/box/donkpockets/donkpockethonk), \
|
||||
new /datum/stack_recipe("monkey cube box", /obj/item/storage/box/monkeycubes),
|
||||
new /datum/stack_recipe("nugget box", /obj/item/storage/fancy/nugget_box), \
|
||||
null, \
|
||||
new /datum/stack_recipe("nugget box", /obj/item/storage/fancy/nugget_box), \
|
||||
null, \
|
||||
|
||||
new /datum/stack_recipe("lethal ammo box", /obj/item/storage/box/lethalshot), \
|
||||
new /datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot), \
|
||||
new /datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag), \
|
||||
new /datum/stack_recipe("flashbang box", /obj/item/storage/box/flashbangs), \
|
||||
new /datum/stack_recipe("flashes box", /obj/item/storage/box/flashes), \
|
||||
new /datum/stack_recipe("handcuffs box", /obj/item/storage/box/handcuffs), \
|
||||
new /datum/stack_recipe("ID card box", /obj/item/storage/box/ids), \
|
||||
new /datum/stack_recipe("PDA box", /obj/item/storage/box/pdas), \
|
||||
null, \
|
||||
new /datum/stack_recipe("lethal ammo box", /obj/item/storage/box/lethalshot), \
|
||||
new /datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot), \
|
||||
new /datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag), \
|
||||
new /datum/stack_recipe("flashbang box", /obj/item/storage/box/flashbangs), \
|
||||
new /datum/stack_recipe("flashes box", /obj/item/storage/box/flashes), \
|
||||
new /datum/stack_recipe("handcuffs box", /obj/item/storage/box/handcuffs), \
|
||||
new /datum/stack_recipe("ID card box", /obj/item/storage/box/ids), \
|
||||
new /datum/stack_recipe("PDA box", /obj/item/storage/box/pdas), \
|
||||
null, \
|
||||
|
||||
new /datum/stack_recipe("pillbottle box", /obj/item/storage/box/pillbottles), \
|
||||
new /datum/stack_recipe("beaker box", /obj/item/storage/box/beakers), \
|
||||
new /datum/stack_recipe("syringe box", /obj/item/storage/box/syringes), \
|
||||
new /datum/stack_recipe("latex gloves box", /obj/item/storage/box/gloves), \
|
||||
new /datum/stack_recipe("sterile masks box", /obj/item/storage/box/masks), \
|
||||
new /datum/stack_recipe("body bag box", /obj/item/storage/box/bodybags), \
|
||||
new /datum/stack_recipe("perscription glasses box", /obj/item/storage/box/rxglasses), \
|
||||
new /datum/stack_recipe("medipen box", /obj/item/storage/box/medipens), \
|
||||
new /datum/stack_recipe("oxygen tank box", /obj/item/storage/box/emergencytank), \
|
||||
new /datum/stack_recipe("extended oxygen tank box", /obj/item/storage/box/engitank), \
|
||||
null, \
|
||||
new /datum/stack_recipe("pillbottle box", /obj/item/storage/box/pillbottles), \
|
||||
new /datum/stack_recipe("beaker box", /obj/item/storage/box/beakers), \
|
||||
new /datum/stack_recipe("syringe box", /obj/item/storage/box/syringes), \
|
||||
new /datum/stack_recipe("latex gloves box", /obj/item/storage/box/gloves), \
|
||||
new /datum/stack_recipe("sterile masks box", /obj/item/storage/box/masks), \
|
||||
new /datum/stack_recipe("body bag box", /obj/item/storage/box/bodybags), \
|
||||
new /datum/stack_recipe("perscription glasses box", /obj/item/storage/box/rxglasses), \
|
||||
new /datum/stack_recipe("medipen box", /obj/item/storage/box/medipens), \
|
||||
new /datum/stack_recipe("oxygen tank box", /obj/item/storage/box/emergencytank), \
|
||||
new /datum/stack_recipe("extended oxygen tank box", /obj/item/storage/box/engitank), \
|
||||
null, \
|
||||
|
||||
new /datum/stack_recipe("survival box", /obj/item/storage/box/survival), \
|
||||
new /datum/stack_recipe("extended tank survival box", /obj/item/storage/box/survival/engineer), \
|
||||
new /datum/stack_recipe("disk box", /obj/item/storage/box/disks), \
|
||||
new /datum/stack_recipe("light tubes box", /obj/item/storage/box/lights/tubes), \
|
||||
new /datum/stack_recipe("light bulbs box", /obj/item/storage/box/lights/bulbs), \
|
||||
new /datum/stack_recipe("mixed lights box", /obj/item/storage/box/lights/mixed), \
|
||||
new /datum/stack_recipe("mouse traps box", /obj/item/storage/box/mousetraps), \
|
||||
new /datum/stack_recipe("survival box", /obj/item/storage/box/survival), \
|
||||
new /datum/stack_recipe("extended tank survival box", /obj/item/storage/box/survival/engineer), \
|
||||
new /datum/stack_recipe("disk box", /obj/item/storage/box/disks), \
|
||||
new /datum/stack_recipe("light tubes box", /obj/item/storage/box/lights/tubes), \
|
||||
new /datum/stack_recipe("light bulbs box", /obj/item/storage/box/lights/bulbs), \
|
||||
new /datum/stack_recipe("mixed lights box", /obj/item/storage/box/lights/mixed), \
|
||||
new /datum/stack_recipe("mouse traps box", /obj/item/storage/box/mousetraps), \
|
||||
new /datum/stack_recipe("candle box", /obj/item/storage/fancy/candle_box)
|
||||
)),
|
||||
|
||||
null, \
|
||||
null, \
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/cardboard //BubbleWrap //it's cardboard you fuck
|
||||
/obj/item/stack/sheet/cardboard //BubbleWrap //it's cardboard you fuck
|
||||
name = "cardboard"
|
||||
desc = "Large sheets of card, like boxes folded flat."
|
||||
singular_name = "cardboard sheet"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* Stack type objects!
|
||||
* Contains:
|
||||
* Stacks
|
||||
* Recipe datum
|
||||
* Recipe list datum
|
||||
* Stacks
|
||||
* Recipe datum
|
||||
* Recipe list datum
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -415,7 +415,7 @@
|
||||
return FALSE
|
||||
if(mats_per_unit != check.mats_per_unit)
|
||||
return FALSE
|
||||
if(is_cyborg) // No merging cyborg stacks into other stacks
|
||||
if(is_cyborg) // No merging cyborg stacks into other stacks
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* Backpacks
|
||||
* Contains:
|
||||
* Backpack
|
||||
* Backpack Types
|
||||
* Satchel Types
|
||||
* Backpack
|
||||
* Backpack Types
|
||||
* Satchel Types
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -17,7 +17,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = ITEM_SLOT_BACK //ERROOOOO
|
||||
slot_flags = ITEM_SLOT_BACK //ERROOOOO
|
||||
resistance_flags = NONE
|
||||
max_integrity = 300
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
/*
|
||||
* These absorb the functionality of the plant bag, ore satchel, etc.
|
||||
* They use the use_to_pickup, quick_gather, and quick_empty functions
|
||||
* that were already defined in weapon/storage, but which had been
|
||||
* re-implemented in other classes.
|
||||
* These absorb the functionality of the plant bag, ore satchel, etc.
|
||||
* They use the use_to_pickup, quick_gather, and quick_empty functions
|
||||
* that were already defined in weapon/storage, but which had been
|
||||
* re-implemented in other classes.
|
||||
*
|
||||
* Contains:
|
||||
* Trash Bag
|
||||
* Mining Satchel
|
||||
* Plant Bag
|
||||
* Sheet Snatcher
|
||||
* Book Bag
|
||||
* Contains:
|
||||
* Trash Bag
|
||||
* Mining Satchel
|
||||
* Plant Bag
|
||||
* Sheet Snatcher
|
||||
* Book Bag
|
||||
* Biowaste Bag
|
||||
*
|
||||
* -Sayu
|
||||
* -Sayu
|
||||
*/
|
||||
|
||||
// Generic non-item
|
||||
@@ -386,7 +386,7 @@
|
||||
desc = "A cheap metal tray to pile today's meal onto."
|
||||
|
||||
/*
|
||||
* Chemistry bag
|
||||
* Chemistry bag
|
||||
*/
|
||||
|
||||
/obj/item/storage/bag/chemistry
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
/*
|
||||
* Everything derived from the common cardboard box.
|
||||
* Basically everything except the original is a kit (starts full).
|
||||
* Everything derived from the common cardboard box.
|
||||
* Basically everything except the original is a kit (starts full).
|
||||
*
|
||||
* Contains:
|
||||
* Empty box, starter boxes (survival/engineer),
|
||||
* Latex glove and sterile mask boxes,
|
||||
* Syringe, beaker, dna injector boxes,
|
||||
* Blanks, flashbangs, and EMP grenade boxes,
|
||||
* Tracking and chemical implant boxes,
|
||||
* Prescription glasses and drinking glass boxes,
|
||||
* Condiment bottle and silly cup boxes,
|
||||
* Donkpocket and monkeycube boxes,
|
||||
* ID and security PDA cart boxes,
|
||||
* Handcuff, mousetrap, and pillbottle boxes,
|
||||
* Snap-pops and matchboxes,
|
||||
* Replacement light boxes.
|
||||
* Action Figure Boxes
|
||||
* Various paper bags.
|
||||
* Contains:
|
||||
* Empty box, starter boxes (survival/engineer),
|
||||
* Latex glove and sterile mask boxes,
|
||||
* Syringe, beaker, dna injector boxes,
|
||||
* Blanks, flashbangs, and EMP grenade boxes,
|
||||
* Tracking and chemical implant boxes,
|
||||
* Prescription glasses and drinking glass boxes,
|
||||
* Condiment bottle and silly cup boxes,
|
||||
* Donkpocket and monkeycube boxes,
|
||||
* ID and security PDA cart boxes,
|
||||
* Handcuff, mousetrap, and pillbottle boxes,
|
||||
* Snap-pops and matchboxes,
|
||||
* Replacement light boxes.
|
||||
* Action Figure Boxes
|
||||
* Various paper bags.
|
||||
*
|
||||
* For syndicate call-ins see uplink_kits.dm
|
||||
* For syndicate call-ins see uplink_kits.dm
|
||||
*/
|
||||
|
||||
/obj/item/storage/box
|
||||
@@ -556,7 +556,7 @@
|
||||
new /obj/item/pda(src)
|
||||
new /obj/item/cartridge/head(src)
|
||||
|
||||
var/newcart = pick( /obj/item/cartridge/engineering,
|
||||
var/newcart = pick( /obj/item/cartridge/engineering,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/cartridge/medical,
|
||||
/obj/item/cartridge/signal/toxins,
|
||||
@@ -656,7 +656,7 @@
|
||||
|
||||
/obj/item/storage/box/alienhandcuffs/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/restraints/handcuffs/alien(src)
|
||||
new /obj/item/restraints/handcuffs/alien(src)
|
||||
|
||||
/obj/item/storage/box/fakesyndiesuit
|
||||
name = "boxed space suit and helmet"
|
||||
@@ -1083,7 +1083,7 @@
|
||||
name = "box of materials"
|
||||
illustration = "implant"
|
||||
|
||||
/obj/item/storage/box/material/PopulateContents() //less uranium because radioactive
|
||||
/obj/item/storage/box/material/PopulateContents() //less uranium because radioactive
|
||||
var/static/items_inside = list(
|
||||
/obj/item/stack/sheet/iron/fifty=1,\
|
||||
/obj/item/stack/sheet/glass/fifty=1,\
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
* .. Sorry for the shitty path name, I couldnt think of a better one.
|
||||
*
|
||||
* WARNING: var/icon_type is used for both examine text and sprite name. Please look at the procs below and adjust your sprite names accordingly
|
||||
* TODO: Cigarette boxes should be ported to this standard
|
||||
* TODO: Cigarette boxes should be ported to this standard
|
||||
*
|
||||
* Contains:
|
||||
* Donut Box
|
||||
* Egg Box
|
||||
* Candle Box
|
||||
* Cigarette Box
|
||||
* Cigar Case
|
||||
* Heart Shaped Box w/ Chocolates
|
||||
* Donut Box
|
||||
* Egg Box
|
||||
* Candle Box
|
||||
* Cigarette Box
|
||||
* Cigar Case
|
||||
* Heart Shaped Box w/ Chocolates
|
||||
*/
|
||||
|
||||
/obj/item/storage/fancy
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* First aid storage
|
||||
* Contains:
|
||||
* First Aid Kits
|
||||
* Pill Bottles
|
||||
* Dice Pack (in a pill bottle)
|
||||
* First Aid Kits
|
||||
* Pill Bottles
|
||||
* Dice Pack (in a pill bottle)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
/obj/item/ammo_box/a762,
|
||||
/obj/item/gun/ballistic/automatic/toy/pistol,
|
||||
/obj/item/ammo_box/magazine/toy/pistol,
|
||||
/obj/item/gun/energy/e_gun/mini,
|
||||
/obj/item/gun/energy/e_gun/mini,
|
||||
/obj/item/gun/energy/disabler,
|
||||
/obj/item/gun/energy/dueling
|
||||
))
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/*
|
||||
* Absorbs /obj/item/secstorage.
|
||||
* Reimplements it only slightly to use existing storage functionality.
|
||||
* Absorbs /obj/item/secstorage.
|
||||
* Reimplements it only slightly to use existing storage functionality.
|
||||
*
|
||||
* Contains:
|
||||
* Secure Briefcase
|
||||
* Wall Safe
|
||||
* Contains:
|
||||
* Secure Briefcase
|
||||
* Wall Safe
|
||||
*/
|
||||
|
||||
// -----------------------------
|
||||
@@ -173,7 +173,7 @@
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.set_holdable(null, list(/obj/item/storage/secure/briefcase))
|
||||
STR.max_w_class = 8 //??
|
||||
STR.max_w_class = 8 //??
|
||||
|
||||
/obj/item/storage/secure/safe/PopulateContents()
|
||||
new /obj/item/paper(src)
|
||||
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
//floorbot assembly
|
||||
/obj/item/storage/toolbox/attackby(obj/item/stack/tile/iron/T, mob/user, params)
|
||||
var/list/allowed_toolbox = list(/obj/item/storage/toolbox/emergency, //which toolboxes can be made into floorbots
|
||||
var/list/allowed_toolbox = list(/obj/item/storage/toolbox/emergency, //which toolboxes can be made into floorbots
|
||||
/obj/item/storage/toolbox/electrical,
|
||||
/obj/item/storage/toolbox/mechanical,
|
||||
/obj/item/storage/toolbox/artistic,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
if("recon")
|
||||
new /obj/item/clothing/glasses/thermal/xray(src) // ~8 tc?
|
||||
new /obj/item/storage/briefcase/launchpad(src) //6 tc
|
||||
new /obj/item/binoculars(src) // 2 tc?
|
||||
new /obj/item/binoculars(src) // 2 tc?
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2 tc
|
||||
new /obj/item/storage/box/syndie_kit/space(src) //4 tc
|
||||
new /obj/item/grenade/frag(src) // ~2 tc each?
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/* Types of tanks!
|
||||
* Contains:
|
||||
* Oxygen
|
||||
* Anesthetic
|
||||
* Air
|
||||
* Plasma
|
||||
* Emergency Oxygen
|
||||
* Generic
|
||||
* Oxygen
|
||||
* Anesthetic
|
||||
* Air
|
||||
* Plasma
|
||||
* Emergency Oxygen
|
||||
* Generic
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -67,7 +67,7 @@
|
||||
worn_icon_state = "plasmatank"
|
||||
tank_holder_icon_state = null
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = null //they have no straps!
|
||||
slot_flags = null //they have no straps!
|
||||
force = 8
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
worn_icon = null
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
force = 5
|
||||
volume = 24 //enough so they need to refill but not that often to be a chore
|
||||
volume = 24 //enough so they need to refill but not that often to be a chore
|
||||
w_class = WEIGHT_CLASS_SMALL //thanks i forgot this
|
||||
|
||||
/obj/item/tank/internals/plasmaman/belt/full/populate_gas()
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
tank = loc
|
||||
if(!istype(tank))
|
||||
return INITIALIZE_HINT_QDEL
|
||||
reagents = tank.reagents //This mister is really just a proxy for the tank's reagents
|
||||
reagents = tank.reagents //This mister is really just a proxy for the tank's reagents
|
||||
|
||||
/obj/item/reagent_containers/spray/mister/attack_self()
|
||||
return
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
/* Teleportation devices.
|
||||
* Contains:
|
||||
* Locator
|
||||
* Hand-tele
|
||||
* Locator
|
||||
* Hand-tele
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -213,7 +213,7 @@
|
||||
var/list/dangerous_turfs = list()
|
||||
for(var/turf/dangerous_turf in urange(10, orange=1))
|
||||
if(dangerous_turf.x > world.maxx - PORTAL_DANGEROUS_EDGE_LIMIT || dangerous_turf.x < PORTAL_DANGEROUS_EDGE_LIMIT)
|
||||
continue //putting them at the edge is dumb
|
||||
continue //putting them at the edge is dumb
|
||||
if(dangerous_turf.y > world.maxy - PORTAL_DANGEROUS_EDGE_LIMIT || dangerous_turf.y < PORTAL_DANGEROUS_EDGE_LIMIT)
|
||||
continue
|
||||
var/area/dangerous_area = dangerous_turf.loc
|
||||
@@ -277,7 +277,7 @@
|
||||
/obj/item/hand_tele/proc/on_portal_destroy(obj/effect/portal/P)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
active_portal_pairs -= P //If this portal pair is made by us it'll be erased along with the other portal by the portal.
|
||||
active_portal_pairs -= P //If this portal pair is made by us it'll be erased along with the other portal by the portal.
|
||||
|
||||
/obj/item/hand_tele/proc/is_parent_of_portal(obj/effect/portal/P)
|
||||
if(!istype(P))
|
||||
|
||||
@@ -35,11 +35,11 @@
|
||||
custom_materials = list(/datum/material/iron=70, /datum/material/glass=30)
|
||||
///Whether the welding tool is on or off.
|
||||
var/welding = FALSE
|
||||
var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
|
||||
var/max_fuel = 20 //The max amount of fuel the welder can hold
|
||||
var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
|
||||
var/max_fuel = 20 //The max amount of fuel the welder can hold
|
||||
var/change_icons = 1
|
||||
var/can_off_process = 0
|
||||
var/burned_fuel_for = 0 //when fuel was last removed
|
||||
var/burned_fuel_for = 0 //when fuel was last removed
|
||||
var/acti_sound = 'sound/items/welderactivate.ogg'
|
||||
var/deac_sound = 'sound/items/welderdeactivate.ogg'
|
||||
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
/* Toys!
|
||||
* Contains
|
||||
* Balloons
|
||||
* Fake singularity
|
||||
* Toy gun
|
||||
* Toy crossbow
|
||||
* Toy swords
|
||||
* Crayons
|
||||
* Snap pops
|
||||
* AI core prizes
|
||||
* Toy codex gigas
|
||||
* Skeleton toys
|
||||
* Cards
|
||||
* Toy nuke
|
||||
* Fake meteor
|
||||
* Foam armblade
|
||||
* Toy big red button
|
||||
* Beach ball
|
||||
* Toy xeno
|
||||
* Balloons
|
||||
* Fake singularity
|
||||
* Toy gun
|
||||
* Toy crossbow
|
||||
* Toy swords
|
||||
* Crayons
|
||||
* Snap pops
|
||||
* AI core prizes
|
||||
* Toy codex gigas
|
||||
* Skeleton toys
|
||||
* Cards
|
||||
* Toy nuke
|
||||
* Fake meteor
|
||||
* Foam armblade
|
||||
* Toy big red button
|
||||
* Beach ball
|
||||
* Toy xeno
|
||||
* Kitty toys!
|
||||
* Snowballs
|
||||
* Clockwork Watches
|
||||
* Toy Daggers
|
||||
* Squeaky Brain
|
||||
* Broken Radio
|
||||
* Snowballs
|
||||
* Clockwork Watches
|
||||
* Toy Daggers
|
||||
* Squeaky Brain
|
||||
* Broken Radio
|
||||
*/
|
||||
|
||||
/obj/item/toy
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
var/armor_protection = 0
|
||||
if(damage_flag)
|
||||
armor_protection = armor.getRating(damage_flag)
|
||||
if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor.
|
||||
if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor.
|
||||
armor_protection = clamp(armor_protection - armour_penetration, min(armor_protection, 0), 100)
|
||||
return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION)
|
||||
|
||||
@@ -241,7 +241,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
|
||||
|
||||
if(current_integrity != 0 && current_max != 0)
|
||||
var/percentage = current_integrity / current_max
|
||||
current_integrity = max(1, round(percentage * new_max)) //don't destroy it as a result
|
||||
current_integrity = max(1, round(percentage * new_max)) //don't destroy it as a result
|
||||
obj_integrity = current_integrity
|
||||
|
||||
max_integrity = new_max
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/bare_wound_bonus = 0
|
||||
|
||||
var/datum/armor/armor
|
||||
var/obj_integrity //defaults to max_integrity
|
||||
var/obj_integrity //defaults to max_integrity
|
||||
var/max_integrity = 500
|
||||
var/integrity_failure = 0 //0 if we have no special broken behavior, otherwise is a percentage of at what point the obj breaks. 0.5 being 50%
|
||||
///Damage under this value will be completely ignored
|
||||
@@ -125,8 +125,8 @@
|
||||
|
||||
/obj/proc/handle_internal_lifeform(mob/lifeform_inside_me, breath_request)
|
||||
//Return: (NONSTANDARD)
|
||||
// null if object handles breathing logic for lifeform
|
||||
// datum/air_group to tell lifeform to process using that breath return
|
||||
// null if object handles breathing logic for lifeform
|
||||
// datum/air_group to tell lifeform to process using that breath return
|
||||
//DEFAULT: Take air from turf to give to have mob process
|
||||
|
||||
if(breath_request>0)
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
. += "Its transmitter seems to be <b>[active? "on" : "off"]</b>."
|
||||
. += "<span class='notice'>You could [active? "deactivate" : "activate"] it with a multitool.</span>"
|
||||
|
||||
/obj/structure/ai_core/latejoin_inactive/proc/is_available() //If people still manage to use this feature to spawn-kill AI latejoins ahelp them.
|
||||
/obj/structure/ai_core/latejoin_inactive/proc/is_available() //If people still manage to use this feature to spawn-kill AI latejoins ahelp them.
|
||||
if(!available)
|
||||
return FALSE
|
||||
if(!safety_checks)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* Alien shit!
|
||||
* Contains:
|
||||
* structure/alien
|
||||
* Resin
|
||||
* Weeds
|
||||
* Egg
|
||||
* structure/alien
|
||||
* Resin
|
||||
* Weeds
|
||||
* Egg
|
||||
*/
|
||||
|
||||
|
||||
@@ -259,7 +259,7 @@
|
||||
#define BURST "burst"
|
||||
#define GROWING "growing"
|
||||
#define GROWN "grown"
|
||||
#define MIN_GROWTH_TIME 900 //time it takes to grow a hugger
|
||||
#define MIN_GROWTH_TIME 900 //time it takes to grow a hugger
|
||||
#define MAX_GROWTH_TIME 1500
|
||||
|
||||
/obj/structure/alien/egg
|
||||
@@ -271,7 +271,7 @@
|
||||
anchored = TRUE
|
||||
max_integrity = 100
|
||||
integrity_failure = 0.05
|
||||
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
|
||||
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
|
||||
layer = MOB_LAYER
|
||||
var/obj/item/clothing/mask/facehugger/child
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Beds... get your mind out of the gutter, they're for sleeping!
|
||||
* Contains:
|
||||
* Beds
|
||||
* Roller beds
|
||||
* Beds
|
||||
* Roller beds
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/obj/structure/chair/Initialize()
|
||||
. = ..()
|
||||
if(!anchored) //why would you put these on the shuttle?
|
||||
if(!anchored) //why would you put these on the shuttle?
|
||||
addtimer(CALLBACK(src, .proc/RemoveFromLatejoin), 0)
|
||||
if(prob(0.2))
|
||||
name = "tactical [name]"
|
||||
@@ -53,7 +53,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/proc/RemoveFromLatejoin()
|
||||
SSjob.latejoin_trackers -= src //These may be here due to the arrivals shuttle
|
||||
SSjob.latejoin_trackers -= src //These may be here due to the arrivals shuttle
|
||||
|
||||
/obj/structure/chair/deconstruct()
|
||||
// If we have materials, and don't have the NOCONSTRUCT flag
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user