Tg 1 28 sync testing/confirmation (#5178)

* maps, tgui, tools

* defines and helpers

* onclick and controllers

* datums

fucking caught that hulk reversal too.

* game and shuttle modular

* module/admin

* oh god they fucking moved antag shit again

* haaaaate. Haaaaaaaaaate.

* enables moff wings

* more modules things

* tgstation.dme

before I forget something important

* some mob stuff

* s'more mob/living stuff

* some carbon stuff

* ayy lmaos and kitchen meat

* Human stuff

* species things

moff wings have a 'none' version too

* the rest of the module stuff.

* some strings

* misc

* mob icons

* some other icons.

* It compiles FUCK BORERS

FUCK BORERS
This commit is contained in:
Poojawa
2018-01-29 04:42:29 -06:00
committed by GitHub
parent 89fa4b0f28
commit 03086dfa91
666 changed files with 27177 additions and 35945 deletions
@@ -179,3 +179,9 @@
/obj/effect/decal/cleanable/glitter/blue
name = "blue glitter"
icon_state = "freon"
/obj/effect/decal/cleanable/plasma
name = "stabilized plasma"
desc = "A puddle of stabilized plasma."
icon_state = "flour"
color = "#C8A5DC"
@@ -53,3 +53,8 @@
/obj/effect/decal/cleanable/oil/streak
random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
/obj/effect/decal/cleanable/oil/slippery
/obj/effect/decal/cleanable/oil/slippery/Initialize()
AddComponent(/datum/component/slippery, 80, (NO_SLIP_WHEN_WALKING | SLIDE))
@@ -28,4 +28,3 @@
if(main)
paint_colour = main
add_atom_colour(paint_colour, FIXED_COLOUR_PRIORITY)
@@ -23,6 +23,51 @@
/turf/open/chasm,
/turf/open/lava))
/obj/effect/particle_effect/foam/firefighting
name = "firefighting foam"
lifetime = 20 //doesn't last as long as normal foam
amount = 0 //no spread
var/absorbed_plasma = 0
/obj/effect/particle_effect/foam/firefighting/MakeSlippery()
return
/obj/effect/particle_effect/foam/firefighting/process()
..()
var/turf/open/T = get_turf(src)
var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T)
if(hotspot && istype(T) && T.air)
qdel(hotspot)
var/datum/gas_mixture/G = T.air
var/plas_amt = min(30,G.gases[/datum/gas/plasma][MOLES]) //Absorb some plasma
G.gases[/datum/gas/plasma][MOLES] -= plas_amt
absorbed_plasma += plas_amt
if(G.temperature > T20C)
G.temperature = max(G.temperature/2,T20C)
G.garbage_collect()
T.air_update_turf()
/obj/effect/particle_effect/foam/firefighting/kill_foam()
STOP_PROCESSING(SSfastprocess, src)
if(absorbed_plasma)
var/obj/effect/decal/cleanable/plasma/P = (locate(/obj/effect/decal/cleanable/plasma) in get_turf(src))
if(!P)
P = new(loc)
P.reagents.add_reagent("stable_plasma", absorbed_plasma)
flick("[icon_state]-disolve", src)
QDEL_IN(src, 5)
/obj/effect/particle_effect/foam/firefighting/foam_mob(mob/living/L)
if(!istype(L))
return
L.adjust_fire_stacks(-2)
L.ExtinguishMob()
/obj/effect/particle_effect/foam/firefighting/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
/obj/effect/particle_effect/foam/metal
name = "aluminium foam"
+1 -1
View File
@@ -4,7 +4,7 @@
/obj/effect
icon = 'icons/effects/effects.dmi'
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
can_be_hit = FALSE
obj_flags = 0
/obj/effect/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
return
-4
View File
@@ -269,10 +269,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
name = "carpspawn"
icon_state = "carp_spawn"
// lightsout.
/obj/effect/landmark/lightsout
name = "lightsout"
// observer-start.
/obj/effect/landmark/observer_start
name = "Observer-Start"
+2 -2
View File
@@ -167,7 +167,7 @@
if(!victim.client || !istype(victim))
return
to_chat(victim, "<span class='notice'>You feel fast!</span>")
victim.status_flags |= GOTTAGOREALLYFAST
victim.add_trait(TRAIT_GOTTAGOREALLYFAST, "yellow_orb")
sleep(duration)
victim.status_flags &= ~GOTTAGOREALLYFAST
victim.remove_trait(TRAIT_GOTTAGOREALLYFAST, "yellow_orb")
to_chat(victim, "<span class='notice'>You slow down.</span>")
+21 -31
View File
@@ -26,7 +26,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
max_integrity = 200
can_be_hit = FALSE
obj_flags = NONE
var/item_flags = NONE
var/hitsound = null
var/usesound = null
@@ -61,37 +62,22 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
var/equip_delay_other = 20 //In deciseconds, how long an item takes to put on another person
var/strip_delay = 40 //In deciseconds, how long an item takes to remove from another person
var/breakouttime = 0
var/being_removed = FALSE
var/list/materials
var/needs_permit = 0 //Used by security bots to determine if this item is safe for public use.
var/emagged = FALSE
var/list/attack_verb //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]"
var/list/species_exception = null // list() of species types, if a species cannot put items in a certain slot, but species type is in list, it will be able to wear that item
var/suittoggled = FALSE
var/hooded = 0
var/mob/thrownby = null
mouse_drag_pointer = MOUSE_ACTIVE_POINTER //the icon to indicate this object is being dragged
//So items can have custom embedd values
//Because customisation is king
var/embed_chance = EMBED_CHANCE
var/embedded_fall_chance = EMBEDDED_ITEM_FALLOUT
var/embedded_pain_chance = EMBEDDED_PAIN_CHANCE
var/embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does while embedded (this*w_class)
var/embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when falling out of a limb (this*w_class)
var/embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when first embedded (this*w_class)
var/embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class)
var/embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME //A time in ticks, multiplied by the w_class.
var/datum/embedding_behavior/embedding
var/flags_cover = 0 //for flags such as GLASSESCOVERSEYES
var/heat = 0
var/sharpness = IS_BLUNT
var/tool_behaviour = TOOL_NONE
var/tool_behaviour = NONE
var/toolspeed = 1
var/block_chance = 0
@@ -109,16 +95,13 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
//Tooltip vars
var/in_inventory = FALSE//is this item equipped into an inventory slot or hand of a mob?
var/force_string //string form of an item's force. Edit this var only to set a custom force string
var/last_force_string_check = 0
var/tip_timer
var/force_string_override
var/icon_override //CIT CHANGE - adds icon_override var. Will be removed with #4322
var/trigger_guard = TRIGGER_GUARD_NONE
var/icon_override //CIT CHANGE - adds icon_override var. Will be removed with #4322
//Grinder vars
var/list/grind_results //A reagent list containing the reagents this item produces when ground up in a grinder - this can be an empty list to allow for reagent transferring only
var/list/juice_results //A reagent list containing blah blah... but when JUICED in a grinder!
@@ -135,7 +118,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
rpg_loot = new(src)
if(force_string)
force_string_override = TRUE
item_flags |= FORCE_STRING_OVERRIDE
if(!hitsound)
if(damtype == "fire")
@@ -143,6 +126,13 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
if(damtype == "brute")
hitsound = "swing_hit"
if (!embedding)
embedding = getEmbeddingBehavior()
else if (islist(embedding))
embedding = getEmbeddingBehavior(arglist(embedding))
else if (!istype(embedding, /datum/embedding_behavior))
stack_trace("Invalid type [embedding.type] found in .embedding during /obj/item Initialize()")
/obj/item/Destroy()
flags_1 &= ~DROPDEL_1 //prevent reqdels
if(ismob(loc))
@@ -413,12 +403,12 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
A.Remove(user)
if(DROPDEL_1 & flags_1)
qdel(src)
in_inventory = FALSE
item_flags &= ~IN_INVENTORY
SendSignal(COMSIG_ITEM_DROPPED,user)
// called just as an item is picked up (loc is not yet changed)
/obj/item/proc/pickup(mob/user)
in_inventory = TRUE
item_flags |= IN_INVENTORY
return
@@ -446,7 +436,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot.
A.Grant(user)
SendSignal(COMSIG_ITEM_EQUIPPED,user,slot)
in_inventory = TRUE
item_flags |= IN_INVENTORY
//sometimes we only want to grant the item's action if it's equipped in a specific slot.
/obj/item/proc/item_action_slot_check(slot, mob/user)
@@ -547,7 +537,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
M.adjust_blurriness(15)
if(M.stat != DEAD)
to_chat(M, "<span class='danger'>Your eyes start to bleed profusely!</span>")
if(!(M.has_disability(DISABILITY_BLIND) || M.has_disability(DISABILITY_NEARSIGHT)))
if(!(M.has_trait(TRAIT_BLIND) || M.has_trait(TRAIT_NEARSIGHT)))
to_chat(M, "<span class='danger'>You become nearsighted!</span>")
M.become_nearsighted(EYE_DAMAGE)
if(prob(50))
@@ -588,7 +578,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
if (callback) //call the original callback
. = callback.Invoke()
throw_speed = initial(throw_speed) //explosions change this.
in_inventory = FALSE
item_flags &= ~IN_INVENTORY
/obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/storage
if(!newLoc)
@@ -737,15 +727,15 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
last_force_string_check = force
/obj/item/proc/openTip(location, control, params, user)
if(last_force_string_check != force && !force_string_override)
if(last_force_string_check != force && !(item_flags & FORCE_STRING_OVERRIDE))
set_force_string()
if(!force_string_override)
if(!(item_flags & FORCE_STRING_OVERRIDE))
openToolTip(user,src,params,title = name,content = "[desc]<br>[force ? "<b>Force:</b> [force_string]" : ""]",theme = "")
else
openToolTip(user,src,params,title = name,content = "[desc]<br><b>Force:</b> [force_string]",theme = "")
/obj/item/MouseEntered(location, control, params)
if(in_inventory && usr.client.prefs.enable_tips)
if((item_flags & IN_INVENTORY) && usr.client.prefs.enable_tips)
var/timedelay = usr.client.prefs.tip_delay/100
var/user = usr
tip_timer = addtimer(CALLBACK(src, .proc/openTip, location, control, params, user), timedelay, TIMER_STOPPABLE)//timer takes delay in deciseconds, but the pref is in milliseconds. dividing by 100 converts it.
+6 -7
View File
@@ -173,16 +173,16 @@ AI MODULES
/******************** OneHuman ********************/
/obj/item/aiModule/zeroth/oneHuman
name = "'OneCrew' AI Module"//CIT CHANGE - changes onehuman to onecrew
name = "'OneHuman' AI Module"
var/targetName = ""
laws = list("Only SUBJECT is crew.")
laws = list("Only SUBJECT is human.")
/obj/item/aiModule/zeroth/oneHuman/attack_self(mob/user)
var/targName = stripped_input(user, "Please enter the subject who is the only crew.", "Who?", user.real_name,MAX_NAME_LEN)
var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN)
if(!targName)
return
targetName = targName
laws[1] = "Only [targetName] is crew"
laws[1] = "Only [targetName] is human"
..()
/obj/item/aiModule/zeroth/oneHuman/install(datum/ai_laws/law_datum, mob/user)
@@ -408,9 +408,8 @@ AI MODULES
laws += line
if(!laws.len) //Failsafe if something goes wrong with silicon_laws.txt.
WARNING("ERROR: empty custom board created, empty custom board deleted. Please check silicon_laws.txt. (this may be intended by the server host)")
qdel(src)
if(!laws.len)
return INITIALIZE_HINT_QDEL
/****************** T.Y.R.A.N.T. *****************/
+3 -3
View File
@@ -133,8 +133,8 @@ RSF
return
/obj/item/cookiesynth/emag_act(mob/user)
emagged = !emagged
if(emagged)
obj_flags ^= EMAGGED
if(obj_flags & EMAGGED)
to_chat(user, "<span class='warning'>You short out [src]'s reagent safety checker!</span>")
else
to_chat(user, "<span class='warning'>You reset [src]'s reagent safety checker!</span>")
@@ -144,7 +144,7 @@ RSF
var/mob/living/silicon/robot/P = null
if(iscyborg(user))
P = user
if(emagged&&!toxin)
if((obj_flags & EMAGGED)&&!toxin)
toxin = 1
to_chat(user, "Cookie Synthesizer Hacked")
else if(P.emagged&&!toxin)
+2 -2
View File
@@ -16,7 +16,7 @@
/obj/item/organ/body_egg/Insert(var/mob/living/carbon/M, special = 0)
..()
owner.status_flags |= XENO_HOST
owner.add_trait(TRAIT_XENO_HOST, TRAIT_GENERIC)
START_PROCESSING(SSobj, src)
owner.med_hud_set_status()
INVOKE_ASYNC(src, .proc/AddInfectionImages, owner)
@@ -24,7 +24,7 @@
/obj/item/organ/body_egg/Remove(var/mob/living/carbon/M, special = 0)
STOP_PROCESSING(SSobj, src)
if(owner)
owner.status_flags &= ~(XENO_HOST)
owner.remove_trait(TRAIT_XENO_HOST, TRAIT_GENERIC)
owner.med_hud_set_status()
INVOKE_ASYNC(src, .proc/RemoveInfectionImages, owner)
..()
+5 -5
View File
@@ -693,7 +693,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
cut_overlays()
if(istype(O, /obj/item/device/multitool))
if(screw && !emagged)//also kinky
if(screw && !(obj_flags & EMAGGED))//also kinky
if(!super)
cut_overlays()
super = 1
@@ -705,15 +705,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM
to_chat(user, "<span class='notice'>You decrease the voltage of [src].</span>")
add_overlay("vapeopen_low")
if(screw && emagged)
if(screw && (obj_flags & EMAGGED))
to_chat(user, "<span class='notice'>[src] can't be modified!</span>")
/obj/item/clothing/mask/vape/emag_act(mob/user)// I WON'T REGRET WRITTING THIS, SURLY.
if(screw)
if(!emagged)
if(!(obj_flags & EMAGGED))
cut_overlays()
emagged = TRUE
obj_flags |= EMAGGED
super = 0
to_chat(user, "<span class='warning'>You maximize the voltage of [src].</span>")
add_overlay("vapeopen_high")
@@ -790,7 +790,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
s.start()
vapetime = 0
if(emagged && vapetime > 3)
if((obj_flags & EMAGGED) && vapetime > 3)
var/datum/effect_system/smoke_spread/chem/s = new
s.set_up(reagents, 4, loc, silent=TRUE)
s.start()
@@ -189,16 +189,16 @@
var/contraband = FALSE
/obj/item/circuitboard/computer/cargo/multitool_act(mob/living/user)
if(!emagged)
if(!(obj_flags & EMAGGED))
contraband = !contraband
to_chat(user, "<span class='notice'>Receiver spectrum set to [contraband ? "Broad" : "Standard"].</span>")
else
to_chat(user, "<span class='notice'>The spectrum chip is unresponsive.</span>")
/obj/item/circuitboard/computer/cargo/emag_act(mob/living/user)
if(!emagged)
if(!(obj_flags & EMAGGED))
contraband = TRUE
emagged = TRUE
obj_flags |= EMAGGED
to_chat(user, "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>")
/obj/item/circuitboard/computer/cargo/express
@@ -206,15 +206,15 @@
build_path = /obj/machinery/computer/cargo/express
/obj/item/circuitboard/computer/cargo/express/multitool_act(mob/living/user)
if (!emagged)
if (!(obj_flags & EMAGGED))
to_chat(user, "<span class='notice'>Routing protocols are already set to: \"factory defaults\".</span>")
else
else
to_chat(user, "<span class='notice'>You reset the routing protocols to: \"factory defaults\".</span>")
emagged = FALSE
obj_flags &= ~EMAGGED
/obj/item/circuitboard/computer/cargo/express/emag_act(mob/living/user)
to_chat(user, "<span class='notice'>You change the routing protocols, allowing the Drop Pod to land anywhere on the station.</span>")
emagged = TRUE
obj_flags |= EMAGGED
/obj/item/circuitboard/computer/cargo/request
name = "Supply Request Console (Computer Board)"
+1 -1
View File
@@ -39,7 +39,7 @@
var/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
var/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER)
var/list/graffiti_large_h = list("secborg", "paint") // CIT CHANGE - removes yiff in hell graffiti
var/list/graffiti_large_h = list("yiffhell", "secborg", "paint")
var/list/all_drawables
+2 -2
View File
@@ -399,7 +399,7 @@
/obj/item/twohanded/shockpaddles/proc/can_defib(mob/living/carbon/H)
var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain)
return (!H.suiciding && !(H.has_disability(DISABILITY_NOCLONE)) && !H.hellbound && ((world.time - H.timeofdeath) < tlimit) && (H.getBruteLoss() < 180) && (H.getFireLoss() < 180) && H.getorgan(/obj/item/organ/heart) && BR && !BR.damaged_brain)
return (!H.suiciding && !(H.has_trait(TRAIT_NOCLONE)) && !H.hellbound && ((world.time - H.timeofdeath) < tlimit) && (H.getBruteLoss() < 180) && (H.getFireLoss() < 180) && H.getorgan(/obj/item/organ/heart) && BR && !BR.damaged_brain)
/obj/item/twohanded/shockpaddles/proc/shock_touching(dmg, mob/H)
if(isliving(H.pulledby)) //CLEAR!
@@ -520,7 +520,7 @@
shock_touching(30, H)
var/failed
if (H.suiciding || (H.has_disability(DISABILITY_NOCLONE)))
if (H.suiciding || (H.has_trait(TRAIT_NOCLONE)))
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile.</span>"
else if (H.hellbound)
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existence. Further attempts futile.</span>"
@@ -49,7 +49,7 @@
add_fingerprint(user)
if(istype(M) && on && user.zone_selected in list("eyes", "mouth"))
if((user.has_disability(DISABILITY_CLUMSY) || user.has_disability(DISABILITY_DUMB)) && prob(50)) //too dumb to use flashlight properly
if((user.has_trait(TRAIT_CLUMSY) || user.has_trait(TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
if(!user.IsAdvancedToolUser())
@@ -83,7 +83,7 @@
else
user.visible_message("<span class='warning'>[user] directs [src] to [M]'s eyes.</span>", \
"<span class='danger'>You direct [src] to [M]'s eyes.</span>")
if(M.stat == DEAD || (M.has_disability(DISABILITY_BLIND)) || !M.flash_act(visual = 1)) //mob is dead or fully blind
if(M.stat == DEAD || (M.has_trait(TRAIT_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
to_chat(user, "<span class='danger'>[M]'s pupils give an eerie glow!</span>")
@@ -46,15 +46,15 @@
if(!scanning)
current_tick_amount = 0
return
radiation_count -= radiation_count/RAD_MEASURE_SMOOTHING
radiation_count += current_tick_amount/RAD_MEASURE_SMOOTHING
if(current_tick_amount)
grace = RAD_GRACE_PERIOD
last_tick_amount = current_tick_amount
else if(!emagged)
else if(!(obj_flags & EMAGGED))
grace--
if(grace <= 0)
radiation_count = 0
@@ -66,7 +66,7 @@
if(!scanning)
return 1
to_chat(user, "<span class='info'>Alt-click it to clear stored radiation levels.</span>")
if(emagged)
if(obj_flags & EMAGGED)
to_chat(user, "<span class='warning'>The display seems to be incomprehensible.</span>")
return 1
switch(radiation_count)
@@ -89,7 +89,7 @@
if(!scanning)
icon_state = "geiger_off"
return 1
if(emagged)
if(obj_flags & EMAGGED)
icon_state = "geiger_on_emag"
return 1
switch(radiation_count)
@@ -131,7 +131,7 @@
/obj/item/device/geiger_counter/attack(mob/living/M, mob/user)
if(user.a_intent == INTENT_HELP)
if(!emagged)
if(!(obj_flags & EMAGGED))
user.visible_message("<span class='notice'>[user] scans [M] with [src].</span>", "<span class='notice'>You scan [M]'s radiation levels with [src]...</span>")
addtimer(CALLBACK(src, .proc/scan, M, user), 20, TIMER_UNIQUE) // Let's not have spamming GetAllContents
else
@@ -164,7 +164,7 @@
to_chat(user, "<span class='notice'>[icon2html(src, user)] Subject is free of radioactive contamination.</span>")
/obj/item/device/geiger_counter/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver) && emagged)
if(istype(I, /obj/item/screwdriver) && (obj_flags & EMAGGED))
if(scanning)
to_chat(user, "<span class='warning'>Turn off [src] before you perform this action!</span>")
return 0
@@ -174,7 +174,7 @@
return 0
user.visible_message("<span class='notice'>[user] refastens [src]'s maintenance panel!</span>", "<span class='notice'>You reset [src] to its factory settings!</span>")
playsound(user, 'sound/items/screwdriver2.ogg', 50, 1)
emagged = FALSE
obj_flags &= ~EMAGGED
radiation_count = 0
update_icon()
return 1
@@ -192,13 +192,13 @@
update_icon()
/obj/item/device/geiger_counter/emag_act(mob/user)
if(emagged)
if(obj_flags & EMAGGED)
return
if(scanning)
to_chat(user, "<span class='warning'>Turn off [src] before you perform this action!</span>")
return 0
to_chat(user, "<span class='warning'>You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.</span>")
emagged = TRUE
obj_flags |= EMAGGED
#undef RAD_LEVEL_NORMAL
#undef RAD_LEVEL_MODERATE
+1 -1
View File
@@ -6,7 +6,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
icon_state = "gps-c"
w_class = WEIGHT_CLASS_SMALL
slot_flags = SLOT_BELT
unique_rename = TRUE
obj_flags = UNIQUE_RENAME
var/gpstag = "COM0"
var/emped = FALSE
var/turf/locked_location
@@ -149,7 +149,7 @@
to_chat(user, "<span class='notice'>You fill \the [src] with lights from \the [S]. " + status_string() + "</span>")
/obj/item/device/lightreplacer/emag_act()
if(emagged)
if(obj_flags & EMAGGED)
return
Emag()
@@ -157,7 +157,7 @@
to_chat(user, status_string())
/obj/item/device/lightreplacer/update_icon()
icon_state = "lightreplacer[emagged]"
icon_state = "lightreplacer[(obj_flags & EMAGGED ? 1 : 0)]"
/obj/item/device/lightreplacer/proc/status_string()
return "It has [uses] light\s remaining (plus [bulb_shards] fragment\s)."
@@ -205,7 +205,7 @@
target.status = L2.status
target.switchcount = L2.switchcount
target.rigged = emagged
target.rigged = (obj_flags & EMAGGED ? 1 : 0)
target.brightness = L2.brightness
target.on = target.has_power()
target.update()
@@ -223,9 +223,9 @@
return
/obj/item/device/lightreplacer/proc/Emag()
emagged = !emagged
obj_flags ^= EMAGGED
playsound(src.loc, "sparks", 100, 1)
if(emagged)
if(obj_flags & EMAGGED)
name = "shortcircuited [initial(name)]"
else
name = initial(name)
+2 -2
View File
@@ -25,10 +25,10 @@
return voicespan
/obj/item/device/megaphone/emag_act(mob/user)
if(emagged)
if(obj_flags & EMAGGED)
return
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
emagged = TRUE
obj_flags |= EMAGGED
voicespan = list(SPAN_REALLYBIG, "userdanger")
/obj/item/device/megaphone/sec
+7 -7
View File
@@ -90,7 +90,7 @@ GAS ANALYZER
/obj/item/device/healthanalyzer/attack(mob/living/M, mob/living/carbon/human/user)
// Clumsiness/brain damage check
if ((user.has_disability(DISABILITY_CLUMSY) || user.has_disability(DISABILITY_DUMB)) && prob(50))
if ((user.has_trait(TRAIT_CLUMSY) || user.has_trait(TRAIT_DUMB)) && prob(50))
to_chat(user, "<span class='notice'>You stupidly try to analyze the floor's vitals!</span>")
user.visible_message("<span class='warning'>[user] has analyzed the floor's vitals!</span>")
to_chat(user, "<span class='info'>Analyzing results for The floor:\n\tOverall status: <b>Healthy</b>")
@@ -120,7 +120,7 @@ GAS ANALYZER
var/brute_loss = M.getBruteLoss()
var/mob_status = (M.stat == DEAD ? "<span class='alert'><b>Deceased</b></span>" : "<b>[round(M.health/M.maxHealth,0.01)*100] % healthy</b>")
if(M.status_flags & FAKEDEATH && !advanced)
if(M.has_trait(TRAIT_FAKEDEATH) && !advanced)
mob_status = "<span class='alert'><b>Deceased</b></span>"
oxy_loss = max(rand(1, 40), oxy_loss, (300 - (tox_loss + fire_loss + brute_loss))) // Random oxygen loss
@@ -181,10 +181,10 @@ GAS ANALYZER
to_chat(user, "\t<span class='info'><b>==EAR STATUS==</b></span>")
if(istype(ears))
var/healthy = TRUE
if(C.has_disability(DISABILITY_DEAF, GENETIC_MUTATION))
if(C.has_trait(TRAIT_DEAF, GENETIC_MUTATION))
healthy = FALSE
to_chat(user, "\t<span class='alert'>Subject is genetically deaf.</span>")
else if(C.has_disability(DISABILITY_DEAF))
else if(C.has_trait(TRAIT_DEAF))
healthy = FALSE
to_chat(user, "\t<span class='alert'>Subject is deaf.</span>")
else
@@ -202,10 +202,10 @@ GAS ANALYZER
to_chat(user, "\t<span class='info'><b>==EYE STATUS==</b></span>")
if(istype(eyes))
var/healthy = TRUE
if(C.has_disability(DISABILITY_BLIND))
if(C.has_trait(TRAIT_BLIND))
to_chat(user, "\t<span class='alert'>Subject is blind.</span>")
healthy = FALSE
if(C.has_disability(DISABILITY_NEARSIGHT))
if(C.has_trait(TRAIT_NEARSIGHT))
to_chat(user, "\t<span class='alert'>Subject is nearsighted.</span>")
healthy = FALSE
if(eyes.eye_damage > 30)
@@ -245,7 +245,7 @@ GAS ANALYZER
to_chat(user, "<span class='info'>Body temperature: [round(M.bodytemperature-T0C,0.1)] &deg;C ([round(M.bodytemperature*1.8-459.67,0.1)] &deg;F)</span>")
// Time of death
if(M.tod && (M.stat == DEAD || ((M.status_flags & FAKEDEATH) && !advanced)))
if(M.tod && (M.stat == DEAD || ((M.has_trait(TRAIT_FAKEDEATH)) && !advanced)))
to_chat(user, "<span class='info'>Time of Death:</span> [M.tod]")
var/tdelta = round(world.time - M.timeofdeath)
if(tdelta < (DEFIB_TIME_LIMIT * 10))
+2 -2
View File
@@ -31,7 +31,7 @@
/obj/item/dnainjector/proc/inject(mob/living/carbon/M, mob/user)
prepare()
if(M.has_dna() && !(RADIMMUNE in M.dna.species.species_traits) && !(M.has_disability(DISABILITY_NOCLONE)))
if(M.has_dna() && !(RADIMMUNE in M.dna.species.species_traits) && !(M.has_trait(TRAIT_NOCLONE)))
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
for(var/datum/mutation/human/HM in remove_mutations)
@@ -313,7 +313,7 @@
to_chat(user, "<span class='notice'>You can't modify [M]'s DNA while [M.p_theyre()] dead.</span>")
return FALSE
if(M.has_dna() && !(M.has_disability(DISABILITY_NOCLONE)))
if(M.has_dna() && !(M.has_trait(TRAIT_NOCLONE)))
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
var/endtime = world.time+duration
+1 -1
View File
@@ -32,7 +32,7 @@
qdel(src)
/obj/item/grenade/proc/clown_check(mob/living/carbon/human/user)
if(user.has_disability(DISABILITY_CLUMSY) && prob(50))
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")
preprime(user, 5, FALSE)
return FALSE
+1 -1
View File
@@ -113,7 +113,7 @@
var/obj/item/I = AM
I.throw_speed = max(1, (I.throw_speed - 3))
I.throw_range = max(1, (I.throw_range - 3))
I.embed_chance = 0
I.embedding = I.embedding.setRating(embed_chance = 0)
message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time] second fuse",0,1)
log_game("[key_name(user)] planted [name] on [target.name] at [COORD(src)] with [det_time] second fuse")
+1 -1
View File
@@ -43,7 +43,7 @@
/obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
if(!istype(C))
return
if(user.has_disability(DISABILITY_CLUMSY) && prob(50))
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
to_chat(user, "<span class='warning'>Uh... how do those things work?!</span>")
apply_cuffs(user,user)
return
+1 -1
View File
@@ -10,7 +10,7 @@
throw_range = 4
throwforce = 10
w_class = WEIGHT_CLASS_TINY
unique_rename = TRUE
obj_flags = UNIQUE_RENAME
var/reskinned = FALSE
/obj/item/nullrod/suicide_act(mob/user)
+2 -2
View File
@@ -49,7 +49,7 @@
forkload = null
else if(user.zone_selected == "eyes")
if(user.has_disability(DISABILITY_CLUMSY) && prob(50))
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
M = user
return eyestab(M,user)
else
@@ -75,7 +75,7 @@
/obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user)
if(user.zone_selected == "eyes")
if(user.has_disability(DISABILITY_CLUMSY) && prob(50))
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
M = user
return eyestab(M,user)
else
+1 -2
View File
@@ -95,8 +95,7 @@
throw_speed = 3
throw_range = 5
sharpness = IS_SHARP
embed_chance = 75
embedded_impact_pain_multiplier = 10
embedding = list("embed_chance" = 75, "embedded_impact_pain_multiplier" = 10)
armour_penetration = 35
block_chance = 50
+4 -4
View File
@@ -1,5 +1,5 @@
/obj/item/melee
needs_permit = 1
item_flags = NEEDS_PERMIT
/obj/item/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user)
if(target.check_block())
@@ -52,7 +52,7 @@
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
flags_1 = CONDUCT_1
unique_rename = 1
obj_flags = UNIQUE_RENAME
force = 15
throwforce = 10
w_class = WEIGHT_CLASS_BULKY
@@ -99,7 +99,7 @@
return ..()
add_fingerprint(user)
if((user.has_disability(DISABILITY_CLUMSY)) && prob(50))
if((user.has_trait(TRAIT_CLUMSY)) && prob(50))
to_chat(user, "<span class ='danger'>You club yourself over the head.</span>")
user.Knockdown(60 * force)
if(ishuman(user))
@@ -148,7 +148,7 @@
item_state = null
slot_flags = SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
needs_permit = 0
item_flags = NONE
force = 0
on = FALSE
@@ -72,6 +72,6 @@
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
/obj/item/melee/transforming/proc/clumsy_transform_effect(mob/living/user)
if(user.has_disability(DISABILITY_CLUMSY) && prob(50))
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
to_chat(user, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
user.take_bodypart_damage(5,5)
+1 -1
View File
@@ -147,7 +147,7 @@
if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting))
to_chat(user, "<span class='warning'>\The [src] lets out a weak hiss and doesn't react!</span>")
return
if(user.has_disability(DISABILITY_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user))
if(user.has_trait(TRAIT_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user))
var/mob/living/carbon/C = user
C.visible_message("<span class='warning'>[C] loses their grip on [src], causing it to go off!</span>", "<span class='userdanger'>[src] slips out of your hands and goes off!</span>")
C.dropItemToGround(src, TRUE)
+3 -3
View File
@@ -280,14 +280,14 @@
var/cooldown = 0
/obj/item/device/harmalarm/emag_act(mob/user)
emagged = !emagged
if(emagged)
obj_flags ^= EMAGGED
if(obj_flags & EMAGGED)
to_chat(user, "<font color='red'>You short out the safeties on [src]!</font>")
else
to_chat(user, "<font color='red'>You reset the safeties on [src]!</font>")
/obj/item/device/harmalarm/attack_self(mob/user)
var/safety = !emagged
var/safety = !(obj_flags & EMAGGED)
if(cooldown > world.time)
to_chat(user, "<font color='red'>The device is still recharging!</font>")
return
+1 -1
View File
@@ -78,7 +78,7 @@
return (active)
/obj/item/shield/energy/attack_self(mob/living/carbon/human/user)
if(user.has_disability(DISABILITY_CLUMSY) && prob(50))
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
to_chat(user, "<span class='warning'>You beat yourself in the head with [src].</span>")
user.take_bodypart_damage(5)
active = !active
+1 -1
View File
@@ -94,7 +94,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
if (user.has_disability(DISABILITY_CLUMSY) && prob(50))
if (user.has_trait(TRAIT_CLUMSY) && prob(50))
to_chat(user, "<span class='danger'>[src] slips out of your hand and hits your head.</span>")
user.take_bodypart_damage(10)
user.Unconscious(400)
+1 -1
View File
@@ -108,7 +108,7 @@
add_fingerprint(user)
/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user)
if(status && user.has_disability(DISABILITY_CLUMSY) && prob(50))
if(status && user.has_trait(TRAIT_CLUMSY) && prob(50))
user.visible_message("<span class='danger'>[user] accidentally hits themself with [src]!</span>", \
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
user.Knockdown(stunforce*3)
+1 -1
View File
@@ -125,7 +125,7 @@
H.dropItemToGround(W)
if(prob(50))
step(W, pick(GLOB.alldirs))
H.status_flags |= DISFIGURED
H.add_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)
H.bleed_rate = 5
H.gib_animation()
sleep(3)
+1 -1
View File
@@ -8,7 +8,7 @@
/obj/item/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
..()
if(status && user.has_disability(DISABILITY_CLUMSY) && prob(50))
if(status && user.has_trait(TRAIT_CLUMSY) && prob(50))
user.visible_message("<span class='danger'>[user] accidentally hits themself with [src]!</span>", \
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
if(do_teleport(user, get_turf(user), 50))//honk honk
+11 -8
View File
@@ -203,6 +203,11 @@
toolspeed = 0.5
damtype = "fire"
usesound = 'sound/weapons/bladeslice.ogg'
var/usesLeft
/obj/item/scalpel/supermatter/Initialize()
. = ..()
usesLeft = rand(2, 4)
/obj/item/hemostat/supermatter
name = "supermatter extraction tongs"
@@ -227,10 +232,7 @@
if(!sliver)
return
if(ismovableatom(O) && O != sliver)
Consume(O)
to_chat(usr, "<span class='notice'>\The [sliver] is dusted along with \the [O]!</span>")
QDEL_NULL(sliver)
update_icon()
Consume(O, user)
/obj/item/hemostat/supermatter/throw_impact(atom/hit_atom) // no instakill supermatter javelins
if(sliver)
@@ -249,11 +251,12 @@
else
investigate_log("has consumed [AM].", "supermatter")
qdel(AM)
user.visible_message("<span class='danger'>As [user] touches \the [AM] with \a [src], silence fills the room...</span>",\
"<span class='userdanger'>You touch \the [AM] with \the [src], and everything suddenly goes silent.</span>\n<span class='notice'>\The [AM] flashes into dust, and soon as you can register this, you do as well.</span>",\
if (user)
user.visible_message("<span class='danger'>As [user] touches [AM] with \a [src], silence fills the room...</span>",\
"<span class='userdanger'>You touch [AM] with [src], and everything suddenly goes silent.</span>\n<span class='notice'>[AM] and [sliver] flash into dust, and soon as you can register this, you do as well.</span>",\
"<span class='italics'>Everything suddenly goes silent.</span>")
radiation_pulse(user, 500, 2)
user.dust()
radiation_pulse(src, 500, 2)
playsound(src, 'sound/effects/supermatter.ogg', 50, 1)
user.dust()
QDEL_NULL(sliver)
update_icon()
+1 -1
View File
@@ -75,7 +75,7 @@
return ..()
if(user.zone_selected != "eyes" && user.zone_selected != "head")
return ..()
if(user.has_disability(DISABILITY_CLUMSY) && prob(50))
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
M = user
return eyestab(M,user)
@@ -30,6 +30,7 @@
var/light_intensity = 2 //how powerful the emitted light is when used.
var/burned_fuel_for = 0 //when fuel was last removed
heat = 3800
tool_behaviour = TOOL_WELDER
toolspeed = 1
/obj/item/weldingtool/Initialize()
+6 -6
View File
@@ -289,7 +289,7 @@
/obj/item/twohanded/dualsaber/suicide_act(mob/living/carbon/user)
if(wielded)
user.visible_message("<span class='suicide'>[user] begins spinning way too fast! It looks like [user.p_theyre()] trying to commit suicide!</span>")
var/obj/item/bodypart/head/myhead = user.get_bodypart("head")//stole from chainsaw code
var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN)
B.vital = FALSE//this cant possibly be a good idea
@@ -305,8 +305,8 @@
else
user.visible_message("<span class='suicide'>[user] panics and starts choking to death!</span>")
return OXYLOSS
else
user.visible_message("<span class='suicide'>[user] begins beating [user.p_them()]self to death with \the [src]'s handle! It probably would've been cooler if [user.p_they()] turned it on first!</span>")
return BRUTELOSS
@@ -343,7 +343,7 @@
unwield()
return
..()
if(user.has_disability(DISABILITY_CLUMSY) && (wielded) && prob(40))
if(user.has_trait(TRAIT_CLUMSY) && (wielded) && prob(40))
impale(user)
return
if((wielded) && prob(50))
@@ -459,7 +459,7 @@
force_wielded = 18
throwforce = 20
throw_speed = 4
embedded_impact_pain_multiplier = 3
embedding = list("embedded_impact_pain_multiplier" = 3)
armour_penetration = 10
materials = list(MAT_METAL=1150, MAT_GLASS=2075)
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -778,7 +778,7 @@
force_wielded = 20 //I have no idea how to balance
throwforce = 22
throw_speed = 4
embedded_impact_pain_multiplier = 3
embedding = list("embedded_impact_pain_multiplier" = 3)
armour_penetration = 15 //Enhanced armor piercing
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
+4 -6
View File
@@ -105,10 +105,10 @@
/obj/item/claymore/highlander/pickup(mob/living/user)
to_chat(user, "<span class='notice'>The power of Scotland protects you! You are shielded from all stuns and knockdowns.</span>")
user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!")
user.status_flags += IGNORESLOWDOWN
user.add_trait(TRAIT_IGNORESLOWDOWN, HIGHLANDER)
/obj/item/claymore/highlander/dropped(mob/living/user)
user.status_flags -= IGNORESLOWDOWN
user.remove_trait(TRAIT_IGNORESLOWDOWN, HIGHLANDER)
qdel(src) //If this ever happens, it's because you lost an arm
/obj/item/claymore/highlander/examine(mob/user)
@@ -267,10 +267,8 @@
force = 2
throwforce = 20 //This is never used on mobs since this has a 100% embed chance.
throw_speed = 4
embedded_pain_multiplier = 4
embedding = list("embedded_pain_multiplier" = 4, "embed_chance" = 100, "embedded_fall_chance" = 0)
w_class = WEIGHT_CLASS_SMALL
embed_chance = 100
embedded_fall_chance = 0 //Hahaha!
sharpness = IS_SHARP
materials = list(MAT_METAL=500, MAT_GLASS=500)
resistance_flags = FIRE_PROOF
@@ -454,7 +452,7 @@
name = "liz o' nine tails"
desc = "A whip fashioned from the severed tails of lizards."
icon_state = "tailwhip"
needs_permit = 0
item_flags = NONE
/obj/item/melee/chainofcommand/tailwhip/kitty
name = "cat o' nine tails"
+4 -4
View File
@@ -27,7 +27,7 @@
return 0
var/armor_protection = 0
if(damage_flag)
armor_protection = armor[damage_flag]
armor_protection = armor.getRating(damage_flag)
if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor.
armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100)
return round(damage_amount * (100 - armor_protection)*0.01, 0.1)
@@ -178,7 +178,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
if(!(resistance_flags & ACID_PROOF))
for(var/armour_value in armor)
if(armour_value != "acid" && armour_value != "fire")
armor[armour_value] = max(armor[armour_value] - round(sqrt(acid_level)*0.1), 0)
armor = armor.modifyAllRatings(0 - round(sqrt(acid_level)*0.1))
if(prob(33))
playsound(loc, 'sound/items/welder.ogg', 150, 1)
take_damage(min(1 + round(sqrt(acid_level)*0.3), 300), BURN, "acid", 0)
@@ -222,13 +222,13 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
/obj/proc/tesla_act(var/power)
being_shocked = TRUE
obj_flags |= BEING_SHOCKED
var/power_bounced = power / 2
tesla_zap(src, 3, power_bounced)
addtimer(CALLBACK(src, .proc/reset_shocked), 10)
/obj/proc/reset_shocked()
being_shocked = FALSE
obj_flags &= ~BEING_SHOCKED
//the obj is deconstructed into pieces, whether through careful disassembly or when destroyed.
/obj/proc/deconstruct(disassembled = TRUE)
+37 -26
View File
@@ -1,57 +1,64 @@
/obj
var/crit_fail = FALSE
animate_movement = 2
var/throwforce = 0
var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING!
var/obj_flags = CAN_BE_HIT
var/set_obj_flags // ONLY FOR MAPPING: Sets flags from a string list, handled in Initialize. Usage: set_obj_flags = "EMAGGED;!CAN_BE_HIT" to set EMAGGED and clear CAN_BE_HIT.
var/damtype = BRUTE
var/force = 0
var/list/armor
var/datum/armor/armor
var/obj_integrity //defaults to max_integrity
var/max_integrity = 500
var/integrity_failure = 0 //0 if we have no special broken behavior
var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF
var/can_be_hit = TRUE //can this be bludgeoned by items?
var/acid_level = 0 //how much acid is on that obj
var/being_shocked = FALSE
var/on_blueprints = FALSE //Are we visible on the station blueprints at roundstart?
var/force_blueprints = FALSE //forces the obj to be on the blueprints, regardless of when it was created.
var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset.
var/unique_rename = FALSE // can you customize the description/name of the thing?
var/current_skin //Has the item been reskinned?
var/list/unique_reskin //List of options to reskin.
var/dangerous_possession = FALSE //Admin possession yes/no
/obj/vv_edit_var(vname, vval)
switch(vname)
if("dangerous_possession")
return FALSE
if("obj_flags")
if ((obj_flags & DANGEROUS_POSSESSION) && !(vval & DANGEROUS_POSSESSION))
return FALSE
if("control_object")
var/obj/O = vval
if(istype(O) && O.dangerous_possession)
if(istype(O) && (O.obj_flags & DANGEROUS_POSSESSION))
return FALSE
..()
/obj/Initialize()
. = ..()
if (!armor)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
if (islist(armor))
armor = getArmor(arglist(armor))
else if (!armor)
armor = getArmor()
else if (!istype(armor, /datum/armor))
stack_trace("Invalid type [armor.type] found in .armor during /obj Initialize()")
if(obj_integrity == null)
obj_integrity = max_integrity
if(on_blueprints && isturf(loc))
if (set_obj_flags)
var/flagslist = splittext(set_obj_flags,";")
var/list/string_to_objflag = GLOB.bitfields["obj_flags"]
for (var/flag in flagslist)
if (findtext(flag,"!",1,2))
flag = copytext(flag,1-(length(flag))) // Get all but the initial !
obj_flags &= ~string_to_objflag[flag]
else
obj_flags |= string_to_objflag[flag]
if((obj_flags & ON_BLUEPRINTS) && isturf(loc))
var/turf/T = loc
if(force_blueprints)
T.add_blueprints(src)
else
T.add_blueprints_preround(src)
T.add_blueprints_preround(src)
/obj/Destroy(force=FALSE)
if(!ismachinery(src))
@@ -98,7 +105,7 @@
return null
/obj/proc/updateUsrDialog()
if(in_use)
if(obj_flags & IN_USE)
var/is_in_use = 0
var/list/nearby = viewers(1, src)
for(var/mob/M in nearby)
@@ -120,11 +127,14 @@
if(H.dna.check_mutation(TK))
is_in_use = 1
src.attack_hand(usr)
in_use = is_in_use
if (is_in_use)
obj_flags |= IN_USE
else
obj_flags &= ~IN_USE
/obj/proc/updateDialog()
// Check that people are actually using the machine. If not, don't update anymore.
if(in_use)
if(obj_flags & IN_USE)
var/list/nearby = viewers(1, src)
var/is_in_use = 0
for(var/mob/M in nearby)
@@ -134,7 +144,7 @@
var/ai_in_use = AutoUpdateAI(src)
if(!ai_in_use && !is_in_use)
in_use = 0
obj_flags &= ~IN_USE
/obj/attack_ghost(mob/user)
@@ -162,7 +172,7 @@
unset_machine()
src.machine = O
if(istype(O))
O.in_use = 1
O.obj_flags |= IN_USE
/obj/item/proc/updateSelfDialog()
var/mob/M = src.loc
@@ -205,10 +215,11 @@
. = ..()
.["Delete all of type"] = "?_src_=vars;[HrefToken()];delall=[REF(src)]"
.["Osay"] = "?_src_=vars;[HrefToken()];osay[REF(src)]"
.["Modify armor values"] = "?_src_=vars;[HrefToken()];modarmor=[REF(src)]"
/obj/examine(mob/user)
..()
if(unique_rename)
if(obj_flags & UNIQUE_RENAME)
to_chat(user, "<span class='notice'>Use a pen on it to rename it or change its description.</span>")
if(unique_reskin && !current_skin)
to_chat(user, "<span class='notice'>Alt-click it to reskin it.</span>")
+3 -3
View File
@@ -83,7 +83,7 @@
to_chat(user, "<span class='notice'>You close the maintenance panel.</span>")
if(!broken && !emagged)
set_sign(pick(barsigns))
else if(emagged)
else if(obj_flags & EMAGGED)
set_sign(new /datum/barsign/hiddensigns/syndibarsign)
else
set_sign(new /datum/barsign/hiddensigns/empbarsign)
@@ -91,7 +91,7 @@
else if(istype(I, /obj/item/stack/cable_coil) && panel_open)
var/obj/item/stack/cable_coil/C = I
if(emagged) //Emagged, not broken by EMP
if(obj_flags & EMAGGED) //Emagged, not broken by EMP
to_chat(user, "<span class='warning'>Sign has been damaged beyond repair!</span>")
return
else if(!broken)
@@ -118,7 +118,7 @@
if(broken || emagged)
to_chat(user, "<span class='warning'>Nothing interesting happens!</span>")
return
emagged = TRUE
obj_flags |= EMAGGED
to_chat(user, "<span class='notice'>You emag the barsign. Takeover in progress...</span>")
sleep(10 SECONDS)
set_sign(new /datum/barsign/hiddensigns/syndibarsign)
@@ -223,6 +223,14 @@ LINEN BINS
item_color = "ian"
dream_messages = list("a dog", "a corgi", "woof", "bark", "arf")
/obj/item/bedsheet/cosmos
name = "cosmic space bedsheet"
desc = "Made from the dreams of those who wonder at the stars."
icon_state = "sheetcosmos"
item_color = "cosmos"
dream_messages = list("the infinite cosmos", "Hans Zimmer music", "a flight through space", "the galaxy", "being fabulous", "shooting stars")
light_power = 2
light_range = 1.4
/obj/item/bedsheet/random
icon_state = "random_bedsheet"
+47
View File
@@ -0,0 +1,47 @@
/obj/structure/headpike
name = "spooky head on a spear"
desc = "When you really want to send a message."
icon = 'icons/obj/structures.dmi'
icon_state = "headpike"
density = FALSE
anchored = TRUE
var/bonespear = FALSE
var/obj/item/twohanded/spear/spear
var/obj/item/bodypart/head/victim
/obj/structure/headpike/bone //for bone spears
icon_state = "headpike-bone"
bonespear = TRUE
/obj/structure/headpike/CheckParts(list/parts_list)
..()
victim = locate(/obj/item/bodypart/head) in parts_list
name = "[victim.name] on a spear"
update_icon()
if(bonespear)
spear = locate(/obj/item/twohanded/bonespear) in parts_list
else
spear = locate(/obj/item/twohanded/spear) in parts_list
/obj/structure/headpike/Initialize()
. = ..()
pixel_x = rand(-8, 8)
/obj/structure/headpike/update_icon()
..()
var/obj/item/bodypart/head/H = locate() in contents
var/mutable_appearance/MA = new()
if(H)
MA.copy_overlays(H)
MA.pixel_y = 12
add_overlay(H)
/obj/structure/headpike/attack_hand(mob/user)
..()
to_chat(user, "<span class='notice'>You take down [src].</span>")
victim.forceMove(drop_location())
victim = null
spear.forceMove(drop_location())
spear = null
qdel(src)
@@ -17,7 +17,7 @@
L.buckled.unbuckle_mob(L,force=1)
L.visible_message("<span class='warning'>[L]'s skin rapidly turns to marble!</span>", "<span class='userdanger'>Your body freezes up! Can't... move... can't... think...</span>")
L.forceMove(src)
L.add_disability(DISABILITY_MUTE, STATUE_MUTE)
L.add_trait(TRAIT_MUTE, STATUE_MUTE)
L.faction += "mimic" //Stops mimics from instaqdeling people in statues
L.status_flags |= GODMODE
obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues
@@ -59,7 +59,7 @@
if(petrified_mob)
petrified_mob.status_flags &= ~GODMODE
petrified_mob.forceMove(loc)
petrified_mob.remove_disability(DISABILITY_MUTE, STATUE_MUTE)
petrified_mob.remove_trait(TRAIT_MUTE, STATUE_MUTE)
petrified_mob.take_overall_damage((petrified_mob.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob
petrified_mob.faction -= "mimic"
petrified_mob = null
@@ -0,0 +1,123 @@
/obj/structure/sign
icon = 'icons/obj/decals.dmi'
anchored = TRUE
opacity = 0
density = FALSE
layer = SIGN_LAYER
max_integrity = 100
armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50)
var/buildable_sign = 1 //unwrenchable and modifiable
/obj/structure/sign/ComponentInitialize()
. = ..()
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION) // Since this is on a wall if it becomes irradiated it will smuggle the radiation past the wall
/obj/structure/sign/basic
name = "blank sign"
desc = "How can signs be real if our eyes aren't real?"
icon_state = "backing"
/obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1)
else
playsound(loc, 'sound/weapons/tap.ogg', 50, 1)
if(BURN)
playsound(loc, 'sound/items/welder.ogg', 80, 1)
/obj/structure/sign/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/wrench) && buildable_sign)
user.visible_message("<span class='notice'>[user] starts removing [src]...</span>", \
"<span class='notice'>You start unfastening [src].</span>")
playsound(src, O.usesound, 50, 1)
if(!do_after(user, 30*O.toolspeed, target = src))
return
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
user.visible_message("<span class='notice'>[user] unfastens [src].</span>", \
"<span class='notice'>You unfasten [src].</span>")
var/obj/item/sign_backing/SB = new (get_turf(user))
SB.icon_state = icon_state
SB.sign_path = type
qdel(src)
else if(istype(O, /obj/item/pen) && buildable_sign)
var/list/sign_types = list("Secure Area", "Biohazard", "High Voltage", "Radiation", "Hard Vacuum Ahead", "Disposal: Leads To Space", "Danger: Fire", "No Smoking", "Medbay", "Science", "Chemistry", \
"Hydroponics", "Xenobiology")
var/obj/structure/sign/sign_type
switch(input(user, "Select a sign type.", "Sign Customization") as null|anything in sign_types)
if("Blank")
sign_type = /obj/structure/sign/basic
if("Secure Area")
sign_type = /obj/structure/sign/warning/securearea
if("Biohazard")
sign_type = /obj/structure/sign/warning/biohazard
if("High Voltage")
sign_type = /obj/structure/sign/warning/electricshock
if("Radiation")
sign_type = /obj/structure/sign/warning/radiation
if("Hard Vacuum Ahead")
sign_type = /obj/structure/sign/warning/vacuum
if("Disposal: Leads To Space")
sign_type = /obj/structure/sign/warning/deathsposal
if("Danger: Fire")
sign_type = /obj/structure/sign/warning/fire
if("No Smoking")
sign_type = /obj/structure/sign/warning/nosmoking/circle
if("Medbay")
sign_type = /obj/structure/sign/departments/medbay/alt
if("Science")
sign_type = /obj/structure/sign/departments/science
if("Chemistry")
sign_type = /obj/structure/sign/departments/chemistry
if("Hydroponics")
sign_type = /obj/structure/sign/departments/botany
if("Xenobiology")
sign_type = /obj/structure/sign/departments/xenobio
//Make sure user is adjacent still
if(!Adjacent(user))
return
if(!sign_type)
return
//It's import to clone the pixel layout information
//Otherwise signs revert to being on the turf and
//move jarringly
var/obj/structure/sign/newsign = new sign_type(get_turf(src))
newsign.pixel_x = pixel_x
newsign.pixel_y = pixel_y
qdel(src)
else
return ..()
/obj/item/sign_backing
name = "sign backing"
desc = "A sign with adhesive backing."
icon = 'icons/obj/decals.dmi'
icon_state = "backing"
w_class = WEIGHT_CLASS_NORMAL
resistance_flags = FLAMMABLE
var/sign_path = /obj/structure/sign/basic //the type of sign that will be created when placed on a turf
/obj/item/sign_backing/afterattack(atom/target, mob/user, proximity)
if(isturf(target) && proximity)
var/turf/T = target
user.visible_message("<span class='notice'>[user] fastens [src] to [T].</span>", \
"<span class='notice'>You attach the sign to [T].</span>")
playsound(T, 'sound/items/deconstruct.ogg', 50, 1)
new sign_path(T)
qdel(src)
else
return ..()
/obj/structure/sign/nanotrasen
name = "\improper Nanotrasen Logo"
desc = "A sign with the Nanotrasen Logo on it. Glory to Nanotrasen!"
icon_state = "nanotrasen"
/obj/structure/sign/logo
name = "nanotrasen logo"
desc = "The Nanotrasen corporate logo."
icon_state = "nanotrasen_sign1"
@@ -0,0 +1,69 @@
//departmental signs
/obj/structure/sign/departments/examroom
name = "\improper EXAM ROOM"
desc = "A guidance sign which reads 'EXAM ROOM'."
icon_state = "examroom"
/obj/structure/sign/departments/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map
name = "\improper SCIENCE"
desc = "A sign labelling an area where research and science is performed."
icon_state = "science1"
/obj/structure/sign/departments/chemistry
name = "\improper CHEMISTRY"
desc = "A sign labelling an area containing chemical equipment."
icon_state = "chemistry1"
/obj/structure/sign/departments/botany
name = "\improper HYDROPONICS"
desc = "A sign labelling an area as a place where plants are grown."
icon_state = "hydro1"
/obj/structure/sign/departments/xenobio
name = "\improper XENOBIOLOGY"
desc = "A sign labelling an area as a place where xenobiological entities are researched."
icon_state = "xenobio"
/obj/structure/sign/departments/evac
name = "\improper EVACUATION"
desc = "A sign labelling an area where evacuation procedures take place."
icon_state = "evac"
/obj/structure/sign/departments/custodian
name = "\improper CUSTODIAN"
desc = "A sign labelling an area where the custodian works."
icon_state = "custodian"
/obj/structure/sign/departments/engineering
name = "\improper ENGINEERING"
desc = "A sign labelling an area where engineers work."
icon_state = "engine"
/obj/structure/sign/departments/cargo
name = "\improper CARGO"
desc = "A sign labelling an area where cargo ships dock."
icon_state = "cargo"
/obj/structure/sign/departments/security
name = "\improper SECURITY"
desc = "A sign labelling an area where the law is law."
icon_state = "security"
/obj/structure/sign/departments/holy
name = "\improper HOLY"
desc = "A sign labelling a religious area."
icon_state = "holy"
/obj/structure/sign/departments/restroom
name = "\improper RESTROOM"
desc = "A sign labelling a restroom."
icon_state = "restroom"
/obj/structure/sign/departments/medbay
name = "\improper MEDBAY"
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here."
icon_state = "bluecross"
/obj/structure/sign/departments/medbay/alt
icon_state = "bluecross2"
@@ -0,0 +1,47 @@
//map and direction signs
/obj/structure/sign/map
name = "station map"
desc = "A framed picture of the station."
max_integrity = 500
/obj/structure/sign/map/left
icon_state = "map-left"
/obj/structure/sign/map/right
icon_state = "map-right"
/obj/structure/sign/directions/science
name = "science department"
desc = "A direction sign, pointing out which way the Science department is."
icon_state = "direction_sci"
/obj/structure/sign/directions/engineering
name = "engineering department"
desc = "A direction sign, pointing out which way the Engineering department is."
icon_state = "direction_eng"
/obj/structure/sign/directions/security
name = "security department"
desc = "A direction sign, pointing out which way the Security department is."
icon_state = "direction_sec"
/obj/structure/sign/directions/medical
name = "medical bay"
desc = "A direction sign, pointing out which way the Medical Bay is."
icon_state = "direction_med"
/obj/structure/sign/directions/evac
name = "escape arm"
desc = "A direction sign, pointing out which way the escape shuttle dock is."
icon_state = "direction_evac"
/obj/structure/sign/directions/supply
name = "cargo bay"
desc = "A direction sign, pointing out which way the Cargo Bay is."
icon_state = "direction_supply"
/obj/structure/sign/directions/command
name = "command department"
desc = "A direction sign, pointing out which way the Command department is."
icon_state = "direction_bridge"
@@ -0,0 +1,43 @@
//plaques and memorials
/obj/structure/sign/plaques
name = "plaque"
desc = "A plaque commemorating an event."
icon_state = "atmosplaque"
/obj/structure/sign/plaques/atmos
name = "\improper FEA Atmospherics Division plaque"
desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands."
/obj/structure/sign/plaques/thunderdome
name = "Thunderdome Plaque"
desc = "This plaque commemorates those who have fallen in glorious combat. For all the charred, dizzy, and beaten men who have died in its hands."
/obj/structure/sign/plaques/golden
name = "The Most Robust Men Award for Robustness"
desc = "To be Robust is not an action or a way of life, but a mental state. Only those with the force of Will strong enough to act during a crisis, saving friend from foe, are truly Robust. Stay Robust my friends."
icon_state = "goldenplaque"
/obj/structure/sign/plaques/golden/captain
name = "The Most Robust Captain Award for Robustness"
/obj/structure/sign/plaques/kiddie
name = "\improper AI developers plaque"
desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\"."
icon_state = "kiddieplaque"
/obj/structure/sign/plaques/kiddie/badger
name = "\improper Remembrance Plaque"
desc = "A plaque commemorating the fallen, may they rest in peace, forever asleep amongst the stars. Someone has drawn a picture of a crying badger at the bottom."
/obj/structure/sign/plaques/kiddie/library
name = "Library Rules Sign"
desc = "A long list of rules to be followed when in the library, extolling the virtues of being quiet at all times and threatening those who would dare eat hot food inside."
/obj/structure/sign/plaques/kiddie/perfect_man
name = "\improper 'Perfect Man' sign"
desc = "A guide to the exhibit, explaining how recent developments in mindshield implant and cloning technologies by Nanotrasen Corporation have led to the development and the effective immortality of the 'perfect man', the loyal Nanotrasen Employee."
/obj/structure/sign/plaques/kiddie/perfect_drone
name = "\improper 'Perfect Drone' sign"
desc = "A guide to the drone shell dispenser, detailing the constructive and destructive applications of modern repair drones, as well as the development of the incorruptible cyborg servants of tomorrow, available today."
@@ -0,0 +1,75 @@
/obj/structure/sign/warning
name = "\improper WARNING"
desc = "A warning sign."
icon_state = "securearea"
/obj/structure/sign/warning/securearea
name = "\improper SECURE AREA"
desc = "A warning sign which reads 'SECURE AREA'."
/obj/structure/sign/warning/docking
name = "\improper KEEP CLEAR: DOCKING AREA"
desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."
/obj/structure/sign/warning/biohazard
name = "\improper BIOHAZARD"
desc = "A warning sign which reads 'BIOHAZARD'."
icon_state = "bio"
/obj/structure/sign/warning/electricshock
name = "\improper HIGH VOLTAGE"
desc = "A warning sign which reads 'HIGH VOLTAGE'."
icon_state = "shock"
/obj/structure/sign/warning/vacuum
name = "\improper HARD VACUUM AHEAD"
desc = "A warning sign which reads 'HARD VACUUM AHEAD'."
icon_state = "space"
/obj/structure/sign/warning/vacuum/external
name = "\improper EXTERNAL AIRLOCK"
desc = "A warning sign which reads 'EXTERNAL AIRLOCK'."
layer = MOB_LAYER
/obj/structure/sign/warning/deathsposal
name = "\improper DISPOSAL: LEADS TO SPACE"
desc = "A warning sign which reads 'DISPOSAL: LEADS TO SPACE'."
icon_state = "deathsposal"
/obj/structure/sign/warning/pods
name = "\improper ESCAPE PODS"
desc = "A warning sign which reads 'ESCAPE PODS'."
icon_state = "pods"
/obj/structure/sign/warning/fire
name = "\improper DANGER: FIRE"
desc = "A warning sign which reads 'DANGER: FIRE'."
icon_state = "fire"
/obj/structure/sign/warning/nosmoking
name = "\improper NO SMOKING"
desc = "A warning sign which reads 'NO SMOKING'."
icon_state = "nosmoking2"
/obj/structure/sign/warning/nosmoking/circle
icon_state = "nosmoking"
/obj/structure/sign/warning/radiation
name = "\improper HAZARDOUS RADIATION"
desc = "A warning sign alerting the user of potential radiation hazards."
icon_state = "radiation"
/obj/structure/sign/warning/radiation/rad_area
name = "\improper RADIOACTIVE AREA"
desc = "A warning sign which reads 'RADIOACTIVE AREA'."
/obj/structure/sign/warning/xeno_mining
name = "\improper DANGEROUS ALIEN LIFE"
desc = "A sign that warns would-be travellers of hostile alien life in the vicinity."
icon = 'icons/obj/mining.dmi'
icon_state = "xeno_warning"
/obj/structure/sign/warning/enginesafety
name = "\improper ENGINEERING SAFETY"
desc = "A sign detailing the various safety protocols when working on-site to ensure a safe shift."
icon_state = "safety"