Merge branch 'master' into var/const-to-define
@@ -15,7 +15,6 @@
|
||||
add: Added new things
|
||||
del: Removed old things
|
||||
tweak: tweaked a few things
|
||||
balance: rebalanced something
|
||||
fix: fixed a few things
|
||||
wip: added a few works in progress
|
||||
soundadd: added a new sound thingy
|
||||
|
||||
@@ -22,4 +22,17 @@ data/
|
||||
stddef.dm
|
||||
.atom-build.json
|
||||
*.vscode/*
|
||||
!/.vscode/extensions.json
|
||||
!/.vscode/extensions.json
|
||||
|
||||
# ignore DMI tool build cache
|
||||
/tools/dmitool/bin/
|
||||
/tools/dmitool/.gradle/
|
||||
/tools/dmitool/.settings/
|
||||
/tools/dmitool/.classpath
|
||||
/tools/dmitool/.project
|
||||
|
||||
# ignore midi2piano build cache
|
||||
/tools/midi2piano/obj/*
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -72015,7 +72015,7 @@
|
||||
dir = 8;
|
||||
layer = 2.9
|
||||
},
|
||||
/obj/item/circuitboard/rdconsole/public{
|
||||
/obj/item/circuitboard/rdconsole{
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/item/circuitboard/rdserver{
|
||||
|
||||
@@ -32,7 +32,7 @@ var/Debug = 0 // global debug switch
|
||||
var/Debug2 = 1 // enables detailed job debug file in secrets
|
||||
|
||||
//This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage
|
||||
var/MAX_EX_DEVESTATION_RANGE = 3
|
||||
var/MAX_EX_DEVASTATION_RANGE = 3
|
||||
var/MAX_EX_HEAVY_RANGE = 7
|
||||
var/MAX_EX_LIGHT_RANGE = 14
|
||||
var/MAX_EX_FLASH_RANGE = 14
|
||||
|
||||
@@ -785,7 +785,7 @@
|
||||
if(BombCap > 128)
|
||||
BombCap = 128
|
||||
|
||||
MAX_EX_DEVESTATION_RANGE = round(BombCap/4)
|
||||
MAX_EX_DEVASTATION_RANGE = round(BombCap/4)
|
||||
MAX_EX_HEAVY_RANGE = round(BombCap/2)
|
||||
MAX_EX_LIGHT_RANGE = BombCap
|
||||
MAX_EX_FLASH_RANGE = BombCap
|
||||
|
||||
@@ -439,7 +439,7 @@ SUBSYSTEM_DEF(jobs)
|
||||
if(job.is_security)
|
||||
to_chat(H, "<b>As a member of Security, you are to know <a href=\"https://www.paradisestation.org/wiki/index.php/Space_law\">Space Law</a>, <a href=\"https://www.paradisestation.org/wiki/index.php/Legal_Standard_Operating_Procedure\">Legal Standard Operating Procedure</a>, as well as your <a href=\"https://www.paradisestation.org/wiki/index.php/Standard_Operating_Procedure_(Security)\">Department SOP</a></b>")
|
||||
if(job.req_admin_notify)
|
||||
to_chat(H, "<b>You are playing a job that is important for the game progression. If you have to disconnect, please notify the admins via adminhelp.</b>")
|
||||
to_chat(H, "<b>You are playing a job that is important for the game progression. If you have to disconnect, please go to cryo and inform command. If you are unable to do so, please notify the admins via adminhelp.</b>")
|
||||
|
||||
return H
|
||||
/datum/controller/subsystem/jobs/proc/EquipRank(mob/living/carbon/human/H, rank, joined_late = 0) // Equip and put them in an area
|
||||
@@ -690,4 +690,4 @@ SUBSYSTEM_DEF(jobs)
|
||||
.++
|
||||
new_id_change_records["[id_change_counter]"] = thisrecord
|
||||
id_change_counter++
|
||||
id_change_records = new_id_change_records
|
||||
id_change_records = new_id_change_records
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
/datum/outfit/job/ntspecops
|
||||
name = "Special Operations Officer"
|
||||
jobtype = /datum/job/ntspecops
|
||||
uniform = /obj/item/clothing/under/rank/centcom_commander
|
||||
uniform = /obj/item/clothing/under/rank/centcom/captain
|
||||
suit = /obj/item/clothing/suit/space/deathsquad/officer
|
||||
back = /obj/item/storage/backpack/security
|
||||
belt = /obj/item/storage/belt/military/assault
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
use_power = IDLE_POWER_USE
|
||||
current_heat_capacity = 1000
|
||||
layer = 3
|
||||
plane = GAME_PLANE
|
||||
max_integrity = 300
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30)
|
||||
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
read_only = 1
|
||||
|
||||
/obj/item/disk/data/demo/New()
|
||||
..()
|
||||
initialize()
|
||||
buf.types=DNA2_BUF_UE|DNA2_BUF_UI
|
||||
//data = "066000033000000000AF00330660FF4DB002690"
|
||||
@@ -145,6 +146,7 @@
|
||||
read_only = 1
|
||||
|
||||
/obj/item/disk/data/monkey/New()
|
||||
..()
|
||||
initialize()
|
||||
buf.types=DNA2_BUF_SE
|
||||
var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4)
|
||||
|
||||
@@ -415,9 +415,11 @@
|
||||
var/active = 0
|
||||
|
||||
/obj/item/holo/esword/green/New()
|
||||
..()
|
||||
item_color = "green"
|
||||
|
||||
/obj/item/holo/esword/red/New()
|
||||
..()
|
||||
item_color = "red"
|
||||
|
||||
/obj/item/holo/esword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
@@ -426,6 +428,7 @@
|
||||
return 0
|
||||
|
||||
/obj/item/holo/esword/New()
|
||||
..()
|
||||
item_color = pick("red","blue","green","purple")
|
||||
|
||||
/obj/item/holo/esword/attack_self(mob/living/user as mob)
|
||||
|
||||
@@ -1034,6 +1034,17 @@ About the new airlock wires panel:
|
||||
/obj/machinery/door/airlock/try_to_crowbar(mob/living/user, obj/item/I) //*scream
|
||||
if(operating)
|
||||
return
|
||||
if(istype(I, /obj/item/twohanded/fireaxe)) //let's make this more specific //FUCK YOU
|
||||
var/obj/item/twohanded/fireaxe/F = I
|
||||
if(F.wielded)
|
||||
spawn(0)
|
||||
if(density)
|
||||
open(1)
|
||||
else
|
||||
close(1)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need to be wielding the fire axe to do that!</span>")
|
||||
return
|
||||
var/beingcrowbarred = FALSE
|
||||
if(I.tool_behaviour == TOOL_CROWBAR && I.tool_use_check(user, 0))
|
||||
beingcrowbarred = TRUE
|
||||
@@ -1049,17 +1060,6 @@ About the new airlock wires panel:
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>The airlock's bolts prevent it from being forced!</span>")
|
||||
return
|
||||
if(istype(I, /obj/item/twohanded/fireaxe)) //let's make this more specific //FUCK YOU
|
||||
var/obj/item/twohanded/fireaxe/F = I
|
||||
if(F.wielded)
|
||||
spawn(0)
|
||||
if(density)
|
||||
open(1)
|
||||
else
|
||||
close(1)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need to be wielding the fire axe to do that!</span>")
|
||||
return
|
||||
else if(!arePowerSystemsOn())
|
||||
spawn(0)
|
||||
if(density)
|
||||
|
||||
@@ -185,12 +185,12 @@
|
||||
/obj/machinery/door/proc/unrestricted_side(mob/M) //Allows for specific side of airlocks to be unrestrected (IE, can exit maint freely, but need access to enter)
|
||||
return get_dir(src, M) & unres_sides
|
||||
|
||||
/obj/machinery/door/proc/try_to_crowbar(obj/item/I, mob/user)
|
||||
/obj/machinery/door/proc/try_to_crowbar(mob/user, obj/item/I)
|
||||
return
|
||||
|
||||
/obj/machinery/door/attackby(obj/item/I, mob/user, params)
|
||||
if(user.a_intent != INTENT_HARM && istype(I, /obj/item/twohanded/fireaxe))
|
||||
try_to_crowbar(I, user)
|
||||
try_to_crowbar(user, I)
|
||||
return 1
|
||||
else if(!(I.flags & NOBLUDGEON) && user.a_intent != INTENT_HARM)
|
||||
try_to_activate_door(user)
|
||||
@@ -202,9 +202,11 @@
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
return
|
||||
. = TRUE
|
||||
if(operating)
|
||||
return
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
return
|
||||
try_to_crowbar(I, user)
|
||||
try_to_crowbar(user, I)
|
||||
|
||||
/obj/machinery/door/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
|
||||
. = ..()
|
||||
|
||||
@@ -357,6 +357,7 @@
|
||||
constructionStep = CONSTRUCTION_WIRES_EXPOSED
|
||||
update_icon()
|
||||
return
|
||||
if(CONSTRUCTION_NOCIRCUIT)
|
||||
if(istype(C, /obj/item/firelock_electronics))
|
||||
user.visible_message("<span class='notice'>[user] starts adding [C] to [src]...</span>", \
|
||||
"<span class='notice'>You begin adding a circuit board to [src]...</span>")
|
||||
|
||||
@@ -302,9 +302,9 @@
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
try_to_crowbar(I, user)
|
||||
try_to_crowbar(user, I)
|
||||
|
||||
/obj/machinery/door/window/try_to_crowbar(obj/item/I, mob/user)
|
||||
/obj/machinery/door/window/try_to_crowbar(mob/user, obj/item/I)
|
||||
if(!hasPower())
|
||||
if(density)
|
||||
open(2)
|
||||
|
||||
@@ -402,18 +402,19 @@ Class Procs:
|
||||
/obj/machinery/proc/default_deconstruction_crowbar(user, obj/item/I, ignore_panel = 0)
|
||||
if(I.tool_behaviour != TOOL_CROWBAR)
|
||||
return FALSE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
if(!I.use_tool(src, user, 0, volume = 0))
|
||||
return FALSE
|
||||
if((panel_open || ignore_panel) && !(flags & NODECONSTRUCT))
|
||||
deconstruct(TRUE)
|
||||
to_chat(user, "<span class='notice'>You disassemble [src].</span>")
|
||||
I.play_tool_sound(user, I.tool_volume)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/proc/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I)
|
||||
if(I.tool_behaviour != TOOL_SCREWDRIVER)
|
||||
return FALSE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
if(!I.use_tool(src, user, 0, volume = 0))
|
||||
return FALSE
|
||||
if(!(flags & NODECONSTRUCT))
|
||||
if(!panel_open)
|
||||
@@ -424,22 +425,25 @@ Class Procs:
|
||||
panel_open = 0
|
||||
icon_state = icon_state_closed
|
||||
to_chat(user, "<span class='notice'>You close the maintenance hatch of [src].</span>")
|
||||
I.play_tool_sound(user, I.tool_volume)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/proc/default_change_direction_wrench(mob/user, obj/item/I)
|
||||
if(I.tool_behaviour != TOOL_WRENCH)
|
||||
return FALSE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
if(!I.use_tool(src, user, 0, volume = 0))
|
||||
return FALSE
|
||||
if(panel_open)
|
||||
dir = turn(dir,-90)
|
||||
to_chat(user, "<span class='notice'>You rotate [src].</span>")
|
||||
I.play_tool_sound(user, I.tool_volume)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/default_unfasten_wrench(mob/user, obj/item/I, time)
|
||||
if(..())
|
||||
. = ..()
|
||||
if(.)
|
||||
power_change()
|
||||
|
||||
/obj/machinery/proc/exchange_parts(mob/user, obj/item/storage/part_replacer/W)
|
||||
|
||||
@@ -307,13 +307,12 @@
|
||||
|
||||
/obj/machinery/vending/wirecutter_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
return
|
||||
wires.Interact(user)
|
||||
if(I.use_tool(src, user, 0, volume = 0))
|
||||
wires.Interact(user)
|
||||
|
||||
/obj/machinery/vending/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
if(!I.use_tool(src, user, 0, volume = 0))
|
||||
return
|
||||
default_unfasten_wrench(user, I, time = 60)
|
||||
|
||||
|
||||
@@ -535,7 +535,7 @@
|
||||
if(!istype(target, /obj/machinery/door))//early return if we're not trying to open a door
|
||||
return
|
||||
var/obj/machinery/door/D = target //the door we want to open
|
||||
D.try_to_crowbar(src, chassis.occupant)//use the door's crowbar function
|
||||
D.try_to_crowbar(chassis.occupant, src)//use the door's crowbar function
|
||||
if(isliving(target)) //interact with living beings
|
||||
var/mob/living/M = target
|
||||
if(chassis.occupant.a_intent == INTENT_HARM)//the patented, medical rescue claw is incapable of doing harm. Worry not.
|
||||
|
||||
@@ -1181,7 +1181,7 @@ steam.start() -- spawns the effect
|
||||
|
||||
// Clamp all values to MAX_EXPLOSION_RANGE
|
||||
if(round(amount/12) > 0)
|
||||
devastation = min (MAX_EX_DEVESTATION_RANGE, devastation + round(amount/12))
|
||||
devastation = min (MAX_EX_DEVASTATION_RANGE, devastation + round(amount/12))
|
||||
|
||||
if(round(amount/6) > 0)
|
||||
heavy = min (MAX_EX_HEAVY_RANGE, heavy + round(amount/6))
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
// Clamp all values to MAX_EXPLOSION_RANGE
|
||||
if(round(amount/12) > 0)
|
||||
devastation = min (MAX_EX_DEVESTATION_RANGE, devastation + round(amount/12))
|
||||
devastation = min (MAX_EX_DEVASTATION_RANGE, devastation + round(amount/12))
|
||||
|
||||
if(round(amount/6) > 0)
|
||||
heavy = min (MAX_EX_HEAVY_RANGE, heavy + round(amount/6))
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
if(!ignorecap)
|
||||
// Clamp all values to MAX_EXPLOSION_RANGE
|
||||
devastation_range = min (MAX_EX_DEVESTATION_RANGE, devastation_range)
|
||||
devastation_range = min (MAX_EX_DEVASTATION_RANGE, devastation_range)
|
||||
heavy_impact_range = min (MAX_EX_HEAVY_RANGE, heavy_impact_range)
|
||||
light_impact_range = min (MAX_EX_LIGHT_RANGE, light_impact_range)
|
||||
flash_range = min (MAX_EX_FLASH_RANGE, flash_range)
|
||||
|
||||
@@ -326,6 +326,7 @@
|
||||
on = TRUE //Bio-luminesence has one setting, on.
|
||||
|
||||
/obj/item/flashlight/slime/New()
|
||||
..()
|
||||
set_light(brightness_on)
|
||||
spawn(1) //Might be sloppy, but seems to be necessary to prevent further runtimes and make these work as intended... don't judge me!
|
||||
update_brightness()
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
var/datum/nano_module/crew_monitor/crew_monitor
|
||||
|
||||
/obj/item/sensor_device/New()
|
||||
..()
|
||||
crew_monitor = new(src)
|
||||
|
||||
/obj/item/sensor_device/Destroy()
|
||||
|
||||
@@ -15,11 +15,14 @@
|
||||
var/obj/item/tape/mytape
|
||||
var/open_panel = 0
|
||||
var/canprint = 1
|
||||
var/starts_with_tape = TRUE
|
||||
|
||||
|
||||
/obj/item/taperecorder/New()
|
||||
mytape = new /obj/item/tape/random(src)
|
||||
update_icon()
|
||||
..()
|
||||
if(starts_with_tape)
|
||||
mytape = new /obj/item/tape/random(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/taperecorder/Destroy()
|
||||
QDEL_NULL(mytape)
|
||||
@@ -243,8 +246,8 @@
|
||||
canprint = 1
|
||||
|
||||
//empty tape recorders
|
||||
/obj/item/taperecorder/empty/New()
|
||||
return
|
||||
/obj/item/taperecorder/empty
|
||||
starts_with_tape = FALSE
|
||||
|
||||
|
||||
/obj/item/tape
|
||||
@@ -317,4 +320,5 @@
|
||||
|
||||
//Random colour tapes
|
||||
/obj/item/tape/random/New()
|
||||
..()
|
||||
icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
var/datum/effect_system/spark_spread/spark_system
|
||||
|
||||
/obj/item/thermal_drill/New()
|
||||
..()
|
||||
soundloop = new(list(src), FALSE)
|
||||
spark_system = new /datum/effect_system/spark_spread()
|
||||
spark_system.set_up(1, 0, src)
|
||||
|
||||
@@ -316,6 +316,7 @@ var/list/world_uplinks = list()
|
||||
// implant uplink (not the implant tool) and a preset headset uplink.
|
||||
|
||||
/obj/item/radio/uplink/New()
|
||||
..()
|
||||
hidden_uplink = new(src)
|
||||
icon_state = "radio"
|
||||
|
||||
@@ -339,6 +340,7 @@ var/list/world_uplinks = list()
|
||||
hidden_uplink.uplink_type = "sst"
|
||||
|
||||
/obj/item/multitool/uplink/New()
|
||||
..()
|
||||
hidden_uplink = new(src)
|
||||
|
||||
/obj/item/multitool/uplink/attack_self(mob/user as mob)
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
item_state = "balloon-empty"
|
||||
|
||||
/obj/item/toy/balloon/New()
|
||||
..()
|
||||
create_reagents(10)
|
||||
|
||||
/obj/item/toy/balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
@@ -799,6 +800,7 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/toy/therapy/New()
|
||||
..()
|
||||
if(item_color)
|
||||
name = "[item_color] therapy doll"
|
||||
desc += " This one is [item_color]."
|
||||
|
||||
@@ -18,6 +18,7 @@ RSF
|
||||
var/list/configured_items = list()
|
||||
|
||||
/obj/item/rsf/New()
|
||||
..()
|
||||
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
|
||||
// configured_items[ID_NUMBER] = list("Human-readable name", price in energy, /type/path)
|
||||
configured_items[++configured_items.len] = list("Dosh", 50, /obj/item/stack/spacecash/c10)
|
||||
@@ -30,7 +31,6 @@ RSF
|
||||
configured_items[++configured_items.len] = list("Snack - Donut", 4000, /obj/item/reagent_containers/food/snacks/donut)
|
||||
configured_items[++configured_items.len] = list("Snack - Chicken Soup", 4000, /obj/item/reagent_containers/food/drinks/chicken_soup)
|
||||
configured_items[++configured_items.len] = list("Snack - Turkey Burger", 4000, /obj/item/reagent_containers/food/snacks/tofuburger)
|
||||
return
|
||||
|
||||
/obj/item/rsf/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
..()
|
||||
|
||||
@@ -681,6 +681,7 @@
|
||||
|
||||
/obj/item/card/id/prisoner/random
|
||||
/obj/item/card/id/prisoner/random/New()
|
||||
..()
|
||||
var/random_number = "#[rand(0, 99)]-[rand(0, 999)]"
|
||||
name = "Prisoner [random_number]"
|
||||
registered_name = name
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
name = "lipstick"
|
||||
|
||||
/obj/item/lipstick/random/New()
|
||||
..()
|
||||
var/lscolor = pick(lipstick_colors)//A random color is picked from the var defined initially in a new var.
|
||||
colour = lipstick_colors[lscolor]//The color of the lipstick is pulled from the new variable (right hand side, HTML & Hex RGB)
|
||||
name = "[lscolor] lipstick"//The new variable is also used to match the name to the color of the lipstick. Kudos to Desolate & Lemon
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
|
||||
|
||||
/obj/item/extinguisher/New()
|
||||
..()
|
||||
create_reagents(max_water)
|
||||
reagents.add_reagent("water", max_water)
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
var/cores = "" // Also for logging
|
||||
|
||||
/obj/item/grenade/chem_grenade/New()
|
||||
..()
|
||||
create_reagents(1000)
|
||||
if(payload_name)
|
||||
payload_name += " " // formatting, ignore me
|
||||
|
||||
@@ -47,4 +47,5 @@
|
||||
hitsound = 'sound/weapons/pierce.ogg'
|
||||
|
||||
/obj/item/embedded/shrapnel/New()
|
||||
..()
|
||||
icon_state = pick("shrapnel1", "shrapnel2", "shrapnel3")
|
||||
|
||||
@@ -556,6 +556,7 @@
|
||||
var/faith = 99 //a conversion requires 100 faith to attempt. faith recharges over time while you are wearing missionary robes that have been linked to the staff.
|
||||
|
||||
/obj/item/nullrod/missionary_staff/New()
|
||||
..()
|
||||
team_color = pick("red", "blue")
|
||||
icon_state = "godstaff-[team_color]"
|
||||
item_state = "godstaff-[team_color]"
|
||||
|
||||
@@ -36,11 +36,11 @@
|
||||
var/max_contents = 1
|
||||
|
||||
/obj/item/kitchen/utensil/New()
|
||||
..()
|
||||
if(prob(60))
|
||||
src.pixel_y = rand(0, 4)
|
||||
|
||||
create_reagents(5)
|
||||
return
|
||||
|
||||
/obj/item/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
|
||||
@@ -26,10 +26,11 @@
|
||||
icon_off = "zippo"
|
||||
|
||||
/obj/item/lighter/random/New()
|
||||
var/color = pick("r","c","y","g")
|
||||
icon_on = "lighter-[color]-on"
|
||||
icon_off = "lighter-[color]"
|
||||
icon_state = icon_off
|
||||
..()
|
||||
var/color = pick("r","c","y","g")
|
||||
icon_on = "lighter-[color]-on"
|
||||
icon_off = "lighter-[color]"
|
||||
icon_state = icon_off
|
||||
|
||||
/obj/item/lighter/attack_self(mob/living/user)
|
||||
if(user.r_hand == src || user.l_hand == src || isrobot(user))
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
var/hacked = 0
|
||||
|
||||
/obj/item/melee/energy/sword/New()
|
||||
..()
|
||||
if(item_color == null)
|
||||
item_color = pick("red", "blue", "green", "purple")
|
||||
|
||||
@@ -219,9 +220,6 @@
|
||||
icon_state_on = "cutlass1"
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/melee/energy/sword/pirate/New()
|
||||
return
|
||||
|
||||
/obj/item/melee/energy/blade
|
||||
name = "energy blade"
|
||||
desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal."
|
||||
|
||||
@@ -90,7 +90,8 @@
|
||||
desc = "test lightning"
|
||||
|
||||
/obj/item/lightning/New()
|
||||
icon_state = "1"
|
||||
..()
|
||||
icon_state = "1"
|
||||
|
||||
/obj/item/lightning/afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)
|
||||
var/angle = get_angle(A, user)
|
||||
|
||||
@@ -27,57 +27,11 @@
|
||||
return
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
//see code/modules/mob/new_player/preferences.dm at approx line 545 for comments!
|
||||
//this is largely copypasted from there.
|
||||
//handle facial hair (if necessary)
|
||||
var/list/species_facial_hair = list()
|
||||
var/obj/item/organ/external/head/C = H.get_organ("head")
|
||||
var/datum/robolimb/robohead = all_robolimbs[C.model]
|
||||
if(H.gender == MALE || isvulpkanin(H))
|
||||
if(C.dna.species)
|
||||
for(var/i in GLOB.facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/facial_hair/tmp_facial = GLOB.facial_hair_styles_list[i]
|
||||
if(C.dna.species.name in tmp_facial.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles.
|
||||
if(C.dna.species.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list.
|
||||
if(robohead.is_monitor)
|
||||
to_chat(user, "<span class='warning'>You are unable to find anything on [H]'s face worth cutting. How disappointing.</span>")
|
||||
return
|
||||
continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles.
|
||||
species_facial_hair += i
|
||||
else
|
||||
if(C.dna.species.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list.
|
||||
if(!robohead.is_monitor)
|
||||
if("Human" in tmp_facial.species_allowed)
|
||||
species_facial_hair += i
|
||||
else //Otherwise, they won't be getting any hairstyles.
|
||||
to_chat(user, "<span class='warning'>You are unable to find anything on [H]'s face worth cutting. How disappointing.</span>")
|
||||
return
|
||||
else
|
||||
species_facial_hair = GLOB.facial_hair_styles_list
|
||||
var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair
|
||||
//facial hair
|
||||
var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in H.generate_valid_facial_hairstyles()
|
||||
//handle normal hair
|
||||
var/list/species_hair = list()
|
||||
if(C.dna.species)
|
||||
for(var/i in GLOB.hair_styles_public_list)
|
||||
var/datum/sprite_accessory/hair/tmp_hair = GLOB.hair_styles_public_list[i]
|
||||
if(C.dna.species.name in tmp_hair.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles.
|
||||
if(C.dna.species.bodyflags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list.
|
||||
if(robohead.is_monitor)
|
||||
to_chat(user, "<span class='warning'>You are unable to find anything on [H]'s head worth cutting. How disappointing.</span>")
|
||||
return
|
||||
continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles.
|
||||
species_hair += i
|
||||
else
|
||||
if(C.dna.species.bodyflags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list.
|
||||
if(!robohead.is_monitor)
|
||||
if("Human" in tmp_hair.species_allowed)
|
||||
species_hair += i
|
||||
else //Otherwise, they won't be getting any hairstyles.
|
||||
to_chat(user, "<span class='warning'>You are unable to find anything on [H]'s head worth cutting. How disappointing.</span>")
|
||||
return
|
||||
else
|
||||
species_hair = GLOB.hair_styles_public_list
|
||||
var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair
|
||||
var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in H.generate_valid_hairstyles()
|
||||
user.visible_message("<span class='notice'>[user] starts cutting [M]'s hair!</span>", "<span class='notice'>You start cutting [M]'s hair!</span>") //arguments for this are: 1. what others see 2. what the user sees. --Fixed grammar, (TGameCo)
|
||||
playsound(loc, 'sound/goonstation/misc/scissor.ogg', 100, 1)
|
||||
if(do_after(user, 50 * toolspeed, target = H)) //this is the part that adds a delay. delay is in deciseconds. --Made it 5 seconds, because hair isn't cut in one second in real life, and I want at least a little bit longer time, (TGameCo)
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
usesound = 'sound/items/deconstruct.ogg'
|
||||
|
||||
/obj/item/stock_parts/New()
|
||||
..()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
|
||||
@@ -61,10 +61,6 @@
|
||||
cant_hold = list(/obj/item/storage/backpack/holding)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
|
||||
|
||||
/obj/item/storage/backpack/holding/New()
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/storage/backpack/holding/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/storage/backpack/holding))
|
||||
var/response = alert(user, "This creates a singularity, destroying you and much of the station. Are you SURE?","IMMINENT DEATH!", "No", "Yes")
|
||||
@@ -373,6 +369,10 @@
|
||||
new /obj/item/clothing/under/rank/miner/lavaland(src)
|
||||
new /obj/item/encryptionkey/headset_cargo(src)
|
||||
new /obj/item/clothing/mask/gas/explorer(src)
|
||||
new /obj/item/gun/energy/kinetic_accelerator(src)
|
||||
new /obj/item/kitchen/knife/combat/survival(src)
|
||||
new /obj/item/flashlight/seclite(src)
|
||||
new /obj/item/clothing/suit/hooded/explorer(src)
|
||||
|
||||
|
||||
/obj/item/storage/backpack/duffel/syndie/ammo/smg
|
||||
|
||||
@@ -1099,6 +1099,7 @@
|
||||
desc = "Contains a variety of deluxe stock parts."
|
||||
|
||||
/obj/item/storage/box/stockparts/deluxe/New()
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/stock_parts/capacitor/quadratic(src)
|
||||
new /obj/item/stock_parts/scanning_module/triphasic(src)
|
||||
|
||||
@@ -240,6 +240,7 @@
|
||||
var/colormap = list(red=LIGHT_COLOR_RED, blue=LIGHT_COLOR_LIGHTBLUE, green=LIGHT_COLOR_GREEN, purple=LIGHT_COLOR_PURPLE, rainbow=LIGHT_COLOR_WHITE)
|
||||
|
||||
/obj/item/twohanded/dualsaber/New()
|
||||
..()
|
||||
if(!blade_color)
|
||||
blade_color = pick("red", "blue", "green", "purple")
|
||||
|
||||
|
||||
@@ -293,7 +293,7 @@ a {
|
||||
return FALSE
|
||||
if(I.tool_behaviour != TOOL_WRENCH)
|
||||
return FALSE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return FALSE
|
||||
if(!(flags & NODECONSTRUCT))
|
||||
to_chat(user, "<span class='notice'>Now [anchored ? "un" : ""]securing [name].</span>")
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
return
|
||||
TOOL_ATTEMPT_DISMANTLE_MESSAGE
|
||||
if(I.use_tool(src, user, 20, volume = I.tool_volume) && deconstruction_ready)
|
||||
deconstruct(TRUE, 1)
|
||||
deconstruct(TRUE)
|
||||
TOOL_DISMANTLE_SUCCESS_MESSAGE
|
||||
|
||||
/obj/structure/table/wrench_act(mob/user, obj/item/I)
|
||||
|
||||
@@ -250,7 +250,7 @@
|
||||
|
||||
var/turf/simulated/floor/F = src
|
||||
F.burn_tile()
|
||||
F.icon_state = "wall_thermite"
|
||||
F.icon_state = "plating"
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>The thermite starts melting through the wall.</span>")
|
||||
|
||||
@@ -329,6 +329,9 @@
|
||||
|
||||
/turf/simulated/wall/welder_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(thermite && I.use_tool(src, user, volume = I.tool_volume))
|
||||
thermitemelt(user)
|
||||
return
|
||||
if(rotting)
|
||||
if(I.use_tool(src, user, volume = I.tool_volume))
|
||||
for(var/obj/effect/overlay/wall_rot/WR in src)
|
||||
|
||||
@@ -93,6 +93,9 @@
|
||||
return ..()
|
||||
|
||||
/turf/simulated/wall/r_wall/welder_act(mob/user, obj/item/I)
|
||||
if(thermite && I.use_tool(src, user, volume = I.tool_volume))
|
||||
thermitemelt(user)
|
||||
return TRUE
|
||||
if(!(d_state in list(RWALL_COVER, RWALL_SUPPORT_RODS, RWALL_CUT_COVER)))
|
||||
return ..()
|
||||
. = TRUE
|
||||
|
||||
@@ -2723,15 +2723,15 @@
|
||||
if(newBombCap > 128)
|
||||
newBombCap = 128
|
||||
|
||||
MAX_EX_DEVESTATION_RANGE = round(newBombCap/4)
|
||||
MAX_EX_DEVASTATION_RANGE = round(newBombCap/4)
|
||||
MAX_EX_HEAVY_RANGE = round(newBombCap/2)
|
||||
MAX_EX_LIGHT_RANGE = newBombCap
|
||||
//I don't know why these are their own variables, but fuck it, they are.
|
||||
MAX_EX_FLASH_RANGE = newBombCap
|
||||
MAX_EX_FLAME_RANGE = newBombCap
|
||||
|
||||
message_admins("<span class='boldannounce'>[key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]</span>")
|
||||
log_admin("[key_name(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
|
||||
message_admins("<span class='boldannounce'>[key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVASTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]</span>")
|
||||
log_admin("[key_name(usr)] changed the bomb cap to [MAX_EX_DEVASTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
|
||||
|
||||
if("flicklights")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
desc = "A random Nano-Mob Trading Card from a Booster Pack. Wonder what it is?"
|
||||
|
||||
/obj/item/nanomob_card/booster/New()
|
||||
..()
|
||||
var/datum/mob_hunt/mob_info = pick(subtypesof(/datum/mob_hunt))
|
||||
mob_data = new mob_info(0,null,1)
|
||||
update_info()
|
||||
|
||||
@@ -105,11 +105,13 @@ var/sc_safecode5 = "[rand(0,9)]"
|
||||
name = "smudged paper"
|
||||
|
||||
/obj/item/paper/sc_safehint_paper_prison/New()
|
||||
..()
|
||||
info = "<i>The ink is smudged, you can only make out a couple numbers:</i> '[sc_safecode1]**[sc_safecode4]*'"
|
||||
|
||||
/obj/item/paper/sc_safehint_paper_hydro
|
||||
name = "shredded paper"
|
||||
/obj/item/paper/sc_safehint_paper_hydro/New()
|
||||
..()
|
||||
info = "<i>Although the paper is shredded, you can clearly see the number:</i> '[sc_safecode2]'"
|
||||
|
||||
/obj/item/paper/sc_safehint_paper_caf
|
||||
@@ -120,6 +122,7 @@ var/sc_safecode5 = "[rand(0,9)]"
|
||||
/obj/item/paper/sc_safehint_paper_bible
|
||||
name = "hidden paper"
|
||||
/obj/item/paper/sc_safehint_paper_bible/New()
|
||||
..()
|
||||
info = {"<i>It would appear that the pen hidden with the paper had leaked ink over the paper.
|
||||
However you can make out the last three digits:</i>'[sc_safecode3][sc_safecode4][sc_safecode5]'
|
||||
"}
|
||||
|
||||
@@ -1,46 +1,47 @@
|
||||
/datum/gear/racial
|
||||
sort_category = "Racial"
|
||||
subtype_path = /datum/gear/racial
|
||||
cost = 1
|
||||
|
||||
/datum/gear/racial/taj
|
||||
slot = slot_glasses
|
||||
cost = 2
|
||||
|
||||
/datum/gear/racial/taj/civ
|
||||
display_name = "embroidered veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races."
|
||||
path = /obj/item/clothing/glasses/tajblind
|
||||
cost = 1
|
||||
slot = slot_glasses
|
||||
|
||||
/datum/gear/racial/taj/sec
|
||||
display_name = "sleek veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. This one has an in-built security HUD."
|
||||
path = /obj/item/clothing/glasses/hud/security/tajblind
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent", "Magistrate")
|
||||
cost = 2
|
||||
|
||||
/datum/gear/racial/taj/med
|
||||
display_name = "lightweight veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. This one has an in-built medical HUD."
|
||||
path = /obj/item/clothing/glasses/hud/health/tajblind
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Brig Physician" , "Coroner")
|
||||
cost = 2
|
||||
|
||||
/datum/gear/racial/taj/sci
|
||||
display_name = "hi-tech veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races."
|
||||
path = /obj/item/clothing/glasses/tajblind/sci
|
||||
cost = 2
|
||||
|
||||
/datum/gear/racial/taj/eng
|
||||
display_name = "industrial veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races."
|
||||
path = /obj/item/clothing/glasses/tajblind/eng
|
||||
|
||||
cost = 2
|
||||
|
||||
/datum/gear/racial/taj/cargo
|
||||
display_name = "khaki veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. It is light and comfy!"
|
||||
path = /obj/item/clothing/glasses/tajblind/cargo
|
||||
|
||||
cost = 2
|
||||
|
||||
/datum/gear/racial/footwraps
|
||||
display_name = "cloth footwraps"
|
||||
path = /obj/item/clothing/shoes/footwraps
|
||||
slot = slot_shoes
|
||||
cost = 1
|
||||
|
||||
@@ -1308,7 +1308,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
else //Not using the whitelist? Aliens for everyone!
|
||||
new_species += GLOB.whitelisted_species
|
||||
|
||||
species = input("Please select a species", "Character Generation", null) in new_species
|
||||
species = input("Please select a species", "Character Generation", null) in sortTim(new_species, /proc/cmp_text_asc)
|
||||
var/datum/species/NS = GLOB.all_species[species]
|
||||
if(!istype(NS)) //The species was invalid. Notify the user and fail out.
|
||||
species = prev_species
|
||||
@@ -1406,7 +1406,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
if(!(lang.flags & RESTRICTED))
|
||||
new_languages += lang.name
|
||||
|
||||
language = input("Please select a secondary language", "Character Generation", null) in new_languages
|
||||
language = input("Please select a secondary language", "Character Generation", null) in sortTim(new_languages, /proc/cmp_text_asc)
|
||||
|
||||
if("autohiss_mode")
|
||||
if(S.autohiss_basic_map)
|
||||
|
||||
@@ -274,6 +274,11 @@
|
||||
see_in_dark = 0
|
||||
flash_protect = 0
|
||||
tint = 0
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/noir
|
||||
name = "noir sunglasses"
|
||||
|
||||
@@ -9,16 +9,14 @@
|
||||
var/fluff_material = FALSE //If true, will ignore the material when examining
|
||||
var/material = "iron"
|
||||
var/stud = 0
|
||||
var/ring_color = "iron"
|
||||
|
||||
/obj/item/clothing/gloves/ring/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/gloves/ring/update_icon()
|
||||
if(stud)
|
||||
icon_state = "d_[initial(icon_state)]"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
icon_state = "[stud ? "d_" : ""][ring_color]ring"
|
||||
|
||||
/obj/item/clothing/gloves/ring/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -44,6 +42,7 @@
|
||||
name = "silver ring"
|
||||
icon_state = "silverring"
|
||||
material = "silver"
|
||||
ring_color = "silver"
|
||||
|
||||
/obj/item/clothing/gloves/ring/silver/blessed // todo
|
||||
name = "blessed silver ring"
|
||||
@@ -52,6 +51,7 @@
|
||||
name = "gold ring"
|
||||
icon_state = "goldring"
|
||||
material = "gold"
|
||||
ring_color = "gold"
|
||||
|
||||
/obj/item/clothing/gloves/ring/gold/blessed
|
||||
name = "wedding band"
|
||||
@@ -61,40 +61,45 @@
|
||||
name = "white plastic ring"
|
||||
icon_state = "whitering"
|
||||
material = "plastic"
|
||||
ring_color = "white"
|
||||
|
||||
/obj/item/clothing/gloves/ring/plastic/blue
|
||||
name = "blue plastic ring"
|
||||
icon_state = "bluering"
|
||||
ring_color = "blue"
|
||||
|
||||
/obj/item/clothing/gloves/ring/plastic/red
|
||||
name = "red plastic ring"
|
||||
icon_state = "redring"
|
||||
|
||||
/obj/item/clothing/gloves/ring/plastic/random
|
||||
ring_color = "red"
|
||||
|
||||
/obj/item/clothing/gloves/ring/plastic/random/New()
|
||||
var/c = pick("white","blue","red")
|
||||
name = "[c] plastic ring"
|
||||
icon_state = "[c]ring"
|
||||
ring_color = pick("white","blue","red")
|
||||
name = "[ring_color] plastic ring"
|
||||
..()
|
||||
|
||||
// weird
|
||||
/obj/item/clothing/gloves/ring/glass
|
||||
name = "glass ring"
|
||||
icon_state = "whitering"
|
||||
material = "glass"
|
||||
ring_color = "white"
|
||||
|
||||
/obj/item/clothing/gloves/ring/plasma
|
||||
name = "plasma ring"
|
||||
icon_state = "plasmaring"
|
||||
material = "plasma"
|
||||
ring_color = "plasma"
|
||||
|
||||
/obj/item/clothing/gloves/ring/uranium
|
||||
name = "uranium ring"
|
||||
icon_state = "uraniumring"
|
||||
material = "uranium"
|
||||
ring_color = "uranium"
|
||||
|
||||
// cultish
|
||||
/obj/item/clothing/gloves/ring/shadow
|
||||
name = "shadow ring"
|
||||
icon_state = "shadowring"
|
||||
material = "shadows"
|
||||
ring_color = "shadow"
|
||||
|
||||
@@ -96,38 +96,35 @@
|
||||
item_color = "centcom"
|
||||
|
||||
/obj/item/clothing/under/rank/centcom/officer
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant-Commander\" and bears \"N.C.V. Fearless CV-286\" on the left shoulder."
|
||||
name = "\improper Nanotrasen Officers Uniform"
|
||||
icon_state = "officer"
|
||||
item_state = "g_suit"
|
||||
item_color = "officer"
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant-Commander\" and bears \"N.A.S. Trurl \" on the left shoulder. Worn exclusively by officers of the Nanotrasen Navy. It's got exotic materials for protection."
|
||||
name = "\improper Nanotrasen Naval Officer Uniform"
|
||||
icon_state = "navy_gold"
|
||||
item_state = "navy_gold"
|
||||
item_color = "navy_gold"
|
||||
displays_id = 0
|
||||
flags_size = ONESIZEFITSALL
|
||||
|
||||
/obj/item/clothing/under/rank/centcom/captain
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain\" and bears \"N.C.V. Fearless CV-286\" on the left shoulder."
|
||||
name = "\improper Nanotrasen Captains Uniform"
|
||||
icon_state = "centcom"
|
||||
item_state = "dg_suit"
|
||||
item_color = "centcom"
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain\" and bears \"N.A.S. Trurl \" on the left shoulder. Worn exclusively by officers of the Nanotrasen Navy. It's got exotic materials for protection."
|
||||
name = "\improper Nanotrasen Naval Captain Uniform"
|
||||
icon_state = "navy_gold"
|
||||
item_state = "navy_gold"
|
||||
item_color = "navy_gold"
|
||||
displays_id = 0
|
||||
flags_size = ONESIZEFITSALL
|
||||
|
||||
/obj/item/clothing/under/rank/centcom/blueshield
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant\" and bears \"N.S.S. Cyberiad\" on the left shoulder."
|
||||
name = "\improper Nanotrasen Navy Uniform"
|
||||
desc = "Gold trim on space-black cloth, this uniform bears \"Close Protection\" on the left shoulder."
|
||||
name = "\improper Formal Nanotrasen Uniform"
|
||||
icon_state = "officer"
|
||||
item_state = "g_suit"
|
||||
item_color = "officer"
|
||||
displays_id = 0
|
||||
flags_size = ONESIZEFITSALL
|
||||
|
||||
/obj/item/clothing/under/rank/centcom/blueshield/New()
|
||||
..()
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant\" and bears [station_name()] on the left shoulder."
|
||||
|
||||
/obj/item/clothing/under/rank/centcom/representative
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign\" and bears \"N.S.S. Cyberiad\" on the left shoulder."
|
||||
name = "\improper Nanotrasen Navy Uniform"
|
||||
desc = "Gold trim on space-black cloth, this uniform bears \"N.S.S. Cyberiad\" on the left shoulder."
|
||||
name = "\improper Formal Nanotrasen Uniform"
|
||||
icon_state = "officer"
|
||||
item_state = "g_suit"
|
||||
item_color = "officer"
|
||||
@@ -136,11 +133,11 @@
|
||||
|
||||
/obj/item/clothing/under/rank/centcom/representative/New()
|
||||
..()
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign\" and bears [station_name()] on the left shoulder."
|
||||
desc = "Gold trim on space-black cloth, this uniform bears [station_name()] on the left shoulder."
|
||||
|
||||
/obj/item/clothing/under/rank/centcom/magistrate
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Magistrate\" and bears \"N.S.S. Cyberiad\" on the left shoulder."
|
||||
name = "\improper Nanotrasen Navy Uniform"
|
||||
name = "\improper Formal Nanotrasen Uniform"
|
||||
icon_state = "officer"
|
||||
item_state = "g_suit"
|
||||
item_color = "officer"
|
||||
@@ -161,7 +158,7 @@
|
||||
|
||||
/obj/item/clothing/under/rank/blueshield
|
||||
name = "blueshield uniform"
|
||||
desc = "A short-sleeved black uniform, paired with grey digital-camo cargo pants. Standard issue to Blueshield officers."
|
||||
desc = "A short-sleeved black uniform, paired with grey digital-camo cargo pants. Standard issue to Blueshields."
|
||||
icon_state = "ert_uniform"
|
||||
item_state = "bl_suit"
|
||||
item_color = "ert_uniform"
|
||||
@@ -169,7 +166,7 @@
|
||||
|
||||
/obj/item/clothing/under/rank/blueshield/skirt
|
||||
name = "blueshield skirt"
|
||||
desc = "A short, black and grey with blue markings skirted uniform. For the feminine Blueshield officers."
|
||||
desc = "A short, black and grey with blue markings skirted uniform. For the feminine Blueshield."
|
||||
icon_state = "blueshieldf"
|
||||
item_state = "blueshieldf"
|
||||
item_color = "blueshieldf"
|
||||
|
||||
@@ -89,7 +89,8 @@
|
||||
|
||||
/datum/personal_crafting/proc/get_surroundings(mob/user)
|
||||
. = list()
|
||||
.["other"] = list()
|
||||
.["other"] = list() //paths go in here
|
||||
.["toolsother"] = list() // items go in here
|
||||
for(var/obj/item/I in get_environment(user))
|
||||
if(I.flags_2 & HOLOGRAM_2)
|
||||
continue
|
||||
@@ -102,22 +103,24 @@
|
||||
if(RC.is_drainable())
|
||||
for(var/datum/reagent/A in RC.reagents.reagent_list)
|
||||
.["other"][A.type] += A.volume
|
||||
.["other"][I.type] += 1
|
||||
.["other"][I.type] += 1
|
||||
.["toolsother"][I] += 1
|
||||
|
||||
/datum/personal_crafting/proc/check_tools(mob/user, datum/crafting_recipe/R, list/contents)
|
||||
if(!R.tools.len)
|
||||
if(!R.tools.len) //does not run if no tools are needed
|
||||
return TRUE
|
||||
var/list/possible_tools = list()
|
||||
var/list/tools_used = list()
|
||||
for(var/obj/item/I in user.contents)
|
||||
for(var/obj/item/I in user.contents) //searchs the inventory of the mob
|
||||
if(istype(I, /obj/item/storage))
|
||||
for(var/obj/item/SI in I.contents)
|
||||
if(SI.tool_behaviour) //Only add things that we could actually use as a tool
|
||||
if(SI.tool_behaviour) //filters for tool behaviours
|
||||
possible_tools += SI
|
||||
if(I.tool_behaviour)
|
||||
possible_tools += I
|
||||
possible_tools |= contents["other"]
|
||||
main_loop:
|
||||
|
||||
possible_tools |= contents["toolsother"] // this add contents to possible_tools
|
||||
main_loop: // checks if all tools found are usable with the recipe
|
||||
for(var/A in R.tools)
|
||||
for(var/obj/item/I in possible_tools)
|
||||
if(A == I.tool_behaviour)
|
||||
@@ -129,26 +132,49 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R)
|
||||
/datum/personal_crafting/proc/check_pathtools(mob/user, datum/crafting_recipe/R, list/contents)
|
||||
if(!R.pathtools.len) //does not run if no tools are needed
|
||||
return TRUE
|
||||
var/list/other_possible_tools = list()
|
||||
for(var/obj/item/I in user.contents) // searchs the inventory of the mob
|
||||
if(istype(I, /obj/item/storage))
|
||||
for(var/obj/item/SI in I.contents)
|
||||
other_possible_tools += SI.type // filters type paths
|
||||
other_possible_tools += I.type
|
||||
|
||||
other_possible_tools |= contents["other"] // this adds contents to the other_possible_tools
|
||||
main_loop: // checks if all tools found are usable with the recipe
|
||||
for(var/A in R.pathtools)
|
||||
for(var/I in other_possible_tools)
|
||||
if(ispath(I,A))
|
||||
continue main_loop
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R)
|
||||
var/list/contents = get_surroundings(user)
|
||||
var/send_feedback = 1
|
||||
if(check_contents(R, contents))
|
||||
if(check_tools(user, R, contents))
|
||||
if(do_after(user, R.time, target = user))
|
||||
contents = get_surroundings(user)
|
||||
if(!check_contents(R, contents))
|
||||
return ", missing component."
|
||||
if(!check_tools(user, R, contents))
|
||||
return ", missing tool."
|
||||
var/list/parts = del_reqs(R, user)
|
||||
var/atom/movable/I = new R.result (get_turf(user.loc))
|
||||
I.CheckParts(parts, R)
|
||||
if(isitem(I))
|
||||
user.put_in_hands(I)
|
||||
if(send_feedback)
|
||||
feedback_add_details("object_crafted","[I.type]")
|
||||
return 0
|
||||
return "."
|
||||
if(check_pathtools(user, R, contents))
|
||||
if(do_after(user, R.time, target = user))
|
||||
contents = get_surroundings(user)
|
||||
if(!check_contents(R, contents))
|
||||
return ", missing component."
|
||||
if(!check_tools(user, R, contents))
|
||||
return ", missing tool."
|
||||
if(!check_pathtools(user, R, contents))
|
||||
return ", missing tool."
|
||||
var/list/parts = del_reqs(R, user)
|
||||
var/atom/movable/I = new R.result (get_turf(user.loc))
|
||||
I.CheckParts(parts, R)
|
||||
if(isitem(I))
|
||||
user.put_in_hands(I)
|
||||
if(send_feedback)
|
||||
feedback_add_details("object_crafted","[I.type]")
|
||||
return 0
|
||||
return "."
|
||||
return ", missing tool."
|
||||
return ", missing tool."
|
||||
return ", missing component."
|
||||
|
||||
@@ -413,12 +439,15 @@
|
||||
catalyst_text = replacetext(catalyst_text, ",", "", -1)
|
||||
data["catalyst_text"] = catalyst_text
|
||||
|
||||
for(var/a in R.tools)
|
||||
for(var/a in R.pathtools)
|
||||
if(ispath(a, /obj/item))
|
||||
var/obj/item/b = a
|
||||
tool_text += " [initial(b.name)],"
|
||||
else
|
||||
tool_text += " [a],"
|
||||
for(var/a in R.tools)
|
||||
var/b = a
|
||||
tool_text += " [b],"
|
||||
tool_text = replacetext(tool_text, ",", "", -1)
|
||||
data["tool_text"] = tool_text
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
var/reqs[] = list() //type paths of items consumed associated with how many are needed
|
||||
var/blacklist[] = list() //type paths of items explicitly not allowed as an ingredient
|
||||
var/result //type path of item resulting from this craft
|
||||
var/tools[] = list() //type paths of items needed but not consumed
|
||||
var/tools[] = list() //tool behaviours of items needed but not consumed
|
||||
var/pathtools[] = list() //type paths of items needed but not consumed
|
||||
var/time = 30 //time in deciseconds
|
||||
var/parts[] = list() //type paths of items that will be placed in the result
|
||||
var/chem_catalysts[] = list() //like tools but for reagents
|
||||
@@ -307,7 +308,7 @@
|
||||
time = 15
|
||||
reqs = list(/obj/item/stack/sheet/wood = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
tools = list(/obj/item/kitchen/knife) // Gotta carve the wood into handles
|
||||
pathtools = list(/obj/item/kitchen/knife) // Gotta carve the wood into handles
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
@@ -328,8 +329,7 @@
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/sheet/plastic = 3,
|
||||
/obj/item/stack/sheet/wood = 5)
|
||||
tools = list(TOOL_WELDER,
|
||||
TOOL_SCREWDRIVER)
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER)
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
@@ -354,7 +354,7 @@
|
||||
result = /obj/item/stack/tile/carpet/black
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/tile/carpet = 1)
|
||||
tools = list(/obj/item/toy/crayon)
|
||||
pathtools = list(/obj/item/toy/crayon)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/showercurtain
|
||||
@@ -559,7 +559,7 @@
|
||||
reqs = list(/datum/reagent/paint/red = 10,
|
||||
/datum/reagent/paint/black = 30,
|
||||
/obj/item/storage/toolbox = 1) //Paint in reagents so it doesnt take the container up, yet still take it from the beaker
|
||||
tools = list(/obj/item/reagent_containers/glass/rag = 1) //need something to paint with it
|
||||
pathtools = list(/obj/item/reagent_containers/glass/rag = 1) //need something to paint with it
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/snowman
|
||||
@@ -578,152 +578,153 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/heart
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 1)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red)//cutters act as makeshift scissors. I doubt the barber wants to have their scissors stolen when somone wants to decorate
|
||||
tools = list(TOOL_WIRECUTTER) //cutters act as makeshift scissors. I doubt the barber wants to have their scissors stolen when somone wants to decorate
|
||||
pathtools = list(/obj/item/toy/crayon/red)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_DECORATION
|
||||
|
||||
/datum/crafting_recipe/paper_craft/single_eye
|
||||
name = "Paper Eye"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/singleeye
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen,
|
||||
/obj/item/toy/crayon/blue)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen, /obj/item/toy/crayon/blue)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_DECORATION
|
||||
|
||||
/datum/crafting_recipe/paper_craft/googlyeyes
|
||||
name = "Paper Googly Eye"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/googlyeyes
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_DECORATION
|
||||
|
||||
/datum/crafting_recipe/paper_craft/clock
|
||||
name = "Paper Clock"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/paperclock
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_DECORATION
|
||||
|
||||
/datum/crafting_recipe/paper_craft/jack_o_lantern
|
||||
name = "Paper Jack o'Lantern"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/jack_o_lantern
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen,
|
||||
/obj/item/toy/crayon/orange,
|
||||
/obj/item/toy/crayon/green)//pen ink is black
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen,
|
||||
/obj/item/toy/crayon/orange,
|
||||
/obj/item/toy/crayon/green)//pen ink is black
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/ghost
|
||||
name = "Paper Ghost"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/ghost
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen)//it's white paper why need a white crayon?
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen)//it's white paper why need a white crayon?
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/spider
|
||||
name = "Paper Spider"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/spider
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen,
|
||||
/obj/item/toy/crayon/red)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen,
|
||||
/obj/item/toy/crayon/red)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/spiderweb
|
||||
name = "Paper Spiderweb"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/spiderweb
|
||||
tools = list(/obj/item/wirecutters)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list()
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/skull
|
||||
name = "Paper Skull"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/skull
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/skeleton
|
||||
name = "Paper Skeleton"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/skeleton
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/cauldron
|
||||
name = "Paper Cauldron"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/cauldron
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/snowman
|
||||
name = "Paper Snowman"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/snowman
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen,
|
||||
/obj/item/toy/crayon/orange)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen,
|
||||
/obj/item/toy/crayon/orange)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/christmas_stocking
|
||||
name = "Paper Christmas Stocking"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/christmas_stocking
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/red)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/christmas_tree
|
||||
name = "Paper Christmas Tree"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/christmas_tree
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red,
|
||||
/obj/item/toy/crayon/yellow,
|
||||
/obj/item/toy/crayon/blue,
|
||||
/obj/item/toy/crayon/green)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/red,
|
||||
/obj/item/toy/crayon/yellow,
|
||||
/obj/item/toy/crayon/blue,
|
||||
/obj/item/toy/crayon/green)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/snowflake
|
||||
name = "Paper Snowflake"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/snowflake
|
||||
tools = list(/obj/item/wirecutters)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list()
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/candy_cane
|
||||
name = "Paper Candy Cane"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/candy_cane
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/red)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/mistletoe
|
||||
name = "Paper Mistletoe"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/mistletoe
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red,
|
||||
/obj/item/toy/crayon/green)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/red,
|
||||
/obj/item/toy/crayon/green)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/holly
|
||||
name = "Paper Holly"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/holly
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red,
|
||||
/obj/item/toy/crayon/green)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/red,
|
||||
/obj/item/toy/crayon/green)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -733,7 +734,8 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/tinsel
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2)
|
||||
tools = list(/obj/item/wirecutters)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list()
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -743,8 +745,8 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/tinsel/red
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/red)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -754,8 +756,8 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/tinsel/blue
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/blue)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/blue)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -765,8 +767,8 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/tinsel/yellow
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/yellow)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/yellow)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -776,8 +778,8 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/tinsel/purple
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/purple)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/purple)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -787,8 +789,8 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/tinsel/green
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/green)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/green)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -798,8 +800,8 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/tinsel/orange
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/orange)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/orange)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -809,8 +811,8 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/tinsel/black
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -820,17 +822,17 @@
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/tinsel/halloween
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen,
|
||||
/obj/item/toy/crayon/orange)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen,
|
||||
/obj/item/toy/crayon/orange)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/arrowed_heart
|
||||
name = "Paper Arrowed Heart"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/arrowed_heart
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/red)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -840,24 +842,24 @@
|
||||
reqs = list(/obj/item/paper = 1,
|
||||
/obj/item/stack/tape_roll = 2,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/red)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/four_leaf_clover
|
||||
name = "Paper Four Leaf Clover"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/four_leaf_clover
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/green)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/green)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/pot_of_gold
|
||||
name = "Paper Pot of Gold"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/pot_of_gold
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen,
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen,
|
||||
/obj/item/toy/crayon/red,
|
||||
/obj/item/toy/crayon/yellow,
|
||||
/obj/item/toy/crayon/orange,
|
||||
@@ -871,8 +873,8 @@
|
||||
name = "Paper Leprechaun Hat"
|
||||
time = 10
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/leprechaun_hat
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen,
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen,
|
||||
/obj/item/toy/crayon/yellow,
|
||||
/obj/item/toy/crayon/green)
|
||||
category = CAT_DECORATIONS
|
||||
@@ -881,8 +883,8 @@
|
||||
/datum/crafting_recipe/paper_craft/easter_bunny
|
||||
name = "Paper Easter Bunny"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/easter_bunny
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen,
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/pen,
|
||||
/obj/item/toy/crayon/blue,
|
||||
/obj/item/toy/crayon/purple)
|
||||
category = CAT_DECORATIONS
|
||||
@@ -891,40 +893,40 @@
|
||||
/datum/crafting_recipe/paper_craft/easter_egg_blue
|
||||
name = "Blue Paper Easter Egg"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/easter_egg
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/blue)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/blue)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/easter_egg_yellow
|
||||
name = "Yellow Paper Easter Egg"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/easter_egg/yellow
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/yellow)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/yellow)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/easter_egg_red
|
||||
name = "Red Paper Easter Egg"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/easter_egg/red
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/red)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/red)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/easter_egg_purple
|
||||
name = "Purple Paper Easter Egg"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/easter_egg/purple
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/purple)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/purple)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
/datum/crafting_recipe/paper_craft/easter_egg_orange
|
||||
name = "Orange Paper Easter Egg"
|
||||
result = /obj/item/decorations/sticky_decorations/flammable/easter_egg/orange
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/toy/crayon/orange)
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
pathtools = list(/obj/item/toy/crayon/orange)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_HOLIDAY
|
||||
|
||||
@@ -934,7 +936,7 @@
|
||||
result = /obj/structure/decorative_structures/metal/statue/metal_angel
|
||||
reqs = list(/obj/item/stack/sheet/metal = 10,
|
||||
/obj/item/stack/sheet/mineral/gold = 6)
|
||||
tools = list(/obj/item/weldingtool)
|
||||
tools = list(TOOL_WELDER)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_LARGE_DECORATIONS
|
||||
|
||||
@@ -945,7 +947,7 @@
|
||||
reqs = list(/obj/item/stack/sheet/metal = 10,
|
||||
/obj/item/stack/sheet/mineral/plasma = 3,
|
||||
/obj/item/stack/sheet/mineral/gold = 8)
|
||||
tools = list(/obj/item/weldingtool)
|
||||
tools = list(TOOL_WELDER)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_LARGE_DECORATIONS
|
||||
|
||||
@@ -955,7 +957,7 @@
|
||||
result = /obj/structure/decorative_structures/metal/statue/sun
|
||||
reqs = list(/obj/item/stack/sheet/metal = 6,
|
||||
/obj/item/stack/sheet/mineral/gold = 4)
|
||||
tools = list(/obj/item/weldingtool)
|
||||
tools = list(TOOL_WELDER)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_LARGE_DECORATIONS
|
||||
|
||||
@@ -966,7 +968,7 @@
|
||||
reqs = list(/obj/item/stack/sheet/metal = 6,
|
||||
/obj/item/stack/sheet/mineral/silver = 6,
|
||||
/obj/item/stack/sheet/mineral/gold = 4)
|
||||
tools = list(/obj/item/weldingtool)
|
||||
tools = list(TOOL_WELDER)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_LARGE_DECORATIONS
|
||||
|
||||
@@ -976,7 +978,7 @@
|
||||
result = /obj/structure/decorative_structures/metal/statue/tesla
|
||||
reqs = list(/obj/item/stack/sheet/metal = 4,
|
||||
/obj/item/stack/sheet/glass = 8)
|
||||
tools = list(/obj/item/weldingtool)
|
||||
tools = list(TOOL_WELDER)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_LARGE_DECORATIONS
|
||||
|
||||
@@ -987,7 +989,7 @@
|
||||
reqs = list(/obj/item/stack/sheet/metal = 8,
|
||||
/obj/item/stock_parts/cell = 3,
|
||||
/obj/item/stack/cable_coil = 4)
|
||||
tools = list(/obj/item/weldingtool)
|
||||
tools = list(TOOL_WELDER)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_LARGE_DECORATIONS
|
||||
|
||||
@@ -1010,9 +1012,9 @@
|
||||
/obj/item/stack/rods = 4,
|
||||
/obj/item/stock_parts/cell = 1,
|
||||
/obj/item/stack/cable_coil = 4)//thing is a wireframe construct with an electro magnetic hover field
|
||||
tools = list(/obj/item/wirecutters,
|
||||
/obj/item/pen,
|
||||
/obj/item/weldingtool,
|
||||
tools = list(TOOL_WIRECUTTER,
|
||||
TOOL_WELDER)
|
||||
pathtools = list(/obj/item/pen,
|
||||
/obj/item/toy/crayon/red)
|
||||
category = CAT_DECORATIONS
|
||||
subcategory = CAT_LARGE_DECORATIONS
|
||||
|
||||
@@ -103,8 +103,8 @@
|
||||
icon_state = "glofish"
|
||||
|
||||
/obj/item/fish/glofish/New()
|
||||
..()
|
||||
set_light(2,1,"#99FF66")
|
||||
..()
|
||||
set_light(2,1,"#99FF66")
|
||||
|
||||
/obj/item/fish/electric_eel
|
||||
name = "electric eel"
|
||||
@@ -143,6 +143,7 @@
|
||||
materials = list()
|
||||
|
||||
/obj/item/shard/shark_teeth/New()
|
||||
..()
|
||||
src.pixel_x = rand(-5,5)
|
||||
src.pixel_y = rand(-5,5)
|
||||
|
||||
|
||||
@@ -248,21 +248,26 @@
|
||||
..()
|
||||
|
||||
/obj/item/pizzabox/margherita/New()
|
||||
..()
|
||||
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita(src)
|
||||
boxtag = "margherita deluxe"
|
||||
|
||||
/obj/item/pizzabox/vegetable/New()
|
||||
..()
|
||||
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src)
|
||||
boxtag = "gourmet vegatable"
|
||||
|
||||
/obj/item/pizzabox/mushroom/New()
|
||||
..()
|
||||
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src)
|
||||
boxtag = "mushroom special"
|
||||
|
||||
/obj/item/pizzabox/meat/New()
|
||||
..()
|
||||
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src)
|
||||
boxtag = "meatlover's supreme"
|
||||
|
||||
/obj/item/pizzabox/hawaiian/New()
|
||||
..()
|
||||
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza(src)
|
||||
boxtag = "Hawaiian feast"
|
||||
@@ -232,6 +232,7 @@ var/list/ingredients_source = list(
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/icecream/New()
|
||||
..()
|
||||
create_reagents(20)
|
||||
reagents.add_reagent("nutriment", 5)
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/boiledrice = 1,
|
||||
/obj/item/reagent_containers/food/snacks/boiled_shrimp = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/Ebi_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
@@ -116,7 +116,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/boiledrice = 1,
|
||||
/obj/item/fish_eggs/salmon = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/Ikura_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
@@ -137,7 +137,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/boiledrice = 1,
|
||||
/obj/item/reagent_containers/food/snacks/fried_tofu = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/Inari_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
@@ -158,7 +158,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/boiledrice = 1,
|
||||
/obj/item/reagent_containers/food/snacks/salmonmeat = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/Sake_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
@@ -179,7 +179,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/boiledrice = 1,
|
||||
/obj/item/reagent_containers/food/snacks/salmonsteak = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/SmokedSalmon_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
@@ -200,7 +200,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/boiledrice = 1,
|
||||
/obj/item/fish_eggs/goldfish = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/Masago_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
@@ -221,7 +221,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/boiledrice = 1,
|
||||
/obj/item/fish_eggs/shark = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/Tobiko_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
@@ -242,7 +242,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/sushi_Tobiko = 4,
|
||||
/obj/item/reagent_containers/food/snacks/egg = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/TobikoEgg_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
@@ -253,7 +253,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/sushi_Tobiko = 4,
|
||||
/obj/item/reagent_containers/food/snacks/egg = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/TobikoEgg_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
@@ -274,7 +274,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/boiledrice = 1,
|
||||
/obj/item/reagent_containers/food/snacks/catfishmeat = 4,
|
||||
)
|
||||
tools = list(/obj/item/kitchen/sushimat)
|
||||
pathtools = list(/obj/item/kitchen/sushimat)
|
||||
result = /obj/item/reagent_containers/food/snacks/sliceable/Tai_maki
|
||||
category = CAT_FOOD
|
||||
subcategory = CAT_SUSHI
|
||||
|
||||
@@ -33,9 +33,6 @@
|
||||
desc = "Directions for use: Requires two people, one to pull each end."
|
||||
var/cracked = 0
|
||||
|
||||
/obj/item/toy/xmas_cracker/New()
|
||||
..()
|
||||
|
||||
/obj/item/toy/xmas_cracker/attack(mob/target, mob/user)
|
||||
if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() )
|
||||
target.visible_message("<span class='notice'>[user] and [target] pop \an [src]! *pop*</span>", "<span class='notice'>You pull \an [src] with [target]! *pop*</span>", "<span class='notice'>You hear a *pop*.</span>")
|
||||
|
||||
@@ -145,6 +145,9 @@
|
||||
message_admins("[user] ([user.key ? user.key : "no key"]) primed a cherry bomb for detonation at [A] ([user.x], [user.y], [user.z]) <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>(JMP)</a>")
|
||||
log_game("[user] ([user.key ? user.key : "no key"]) primed a cherry bomb for detonation at [A] ([user.x],[user.y],[user.z]).")
|
||||
prime()
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/deconstruct(disassembled = TRUE)
|
||||
if(!disassembled)
|
||||
|
||||
@@ -299,8 +299,4 @@
|
||||
|
||||
/obj/item/storage/backpack/duffel/mining_conscript/full/New()
|
||||
..()
|
||||
new /obj/item/clothing/suit/hooded/explorer(src)
|
||||
new /obj/item/card/id/mining_access_card(src)
|
||||
new /obj/item/gun/energy/kinetic_accelerator(src)
|
||||
new /obj/item/kitchen/knife/combat/survival(src)
|
||||
new /obj/item/flashlight/seclite(src)
|
||||
|
||||
@@ -325,6 +325,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
var/credits = 10
|
||||
|
||||
/obj/item/coin/New()
|
||||
..()
|
||||
pixel_x = rand(0,16)-8
|
||||
pixel_y = rand(0,8)-8
|
||||
|
||||
|
||||
@@ -30,12 +30,10 @@
|
||||
|
||||
// All mobs should have custom emote, really..
|
||||
/mob/proc/custom_emote(var/m_type=EMOTE_VISUAL,var/message = null)
|
||||
|
||||
if(stat || !use_me && usr == src)
|
||||
if(usr)
|
||||
to_chat(usr, "You are unable to emote.")
|
||||
return
|
||||
|
||||
var/muzzled = is_muzzled()
|
||||
if(muzzled)
|
||||
var/obj/item/clothing/mask/muzzle/M = wear_mask
|
||||
@@ -57,7 +55,10 @@
|
||||
|
||||
if(message)
|
||||
log_emote(message, src)
|
||||
|
||||
if(isliving(src)) //isliving because these are defined on the mob/living level not mob
|
||||
var/mob/living/L = src
|
||||
L.say_log += "EMOTE: [input]" //say log too so it is easier on admins instead of having to merge the two with timestamps etc
|
||||
L.emote_log += input //emote only log if an admin wants to search just for emotes they don't have to sift through the say
|
||||
// Hearing gasp and such every five seconds is not good emotes were not global for a reason.
|
||||
// Maybe some people are okay with that.
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
|
||||
@@ -323,7 +323,7 @@
|
||||
|
||||
valid_species += current_species_name
|
||||
|
||||
return valid_species
|
||||
return sortTim(valid_species, /proc/cmp_text_asc)
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_hairstyles()
|
||||
var/list/valid_hairstyles = new()
|
||||
@@ -351,7 +351,7 @@
|
||||
if(H.dna.species.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list.
|
||||
valid_hairstyles += hairstyle
|
||||
|
||||
return valid_hairstyles
|
||||
return sortTim(valid_hairstyles, /proc/cmp_text_asc)
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_facial_hairstyles()
|
||||
var/list/valid_facial_hairstyles = new()
|
||||
@@ -380,7 +380,7 @@
|
||||
if(H.dna.species.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list.
|
||||
valid_facial_hairstyles += facialhairstyle
|
||||
|
||||
return valid_facial_hairstyles
|
||||
return sortTim(valid_facial_hairstyles, /proc/cmp_text_asc)
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_head_accessories()
|
||||
var/list/valid_head_accessories = new()
|
||||
@@ -395,7 +395,7 @@
|
||||
continue
|
||||
valid_head_accessories += head_accessory
|
||||
|
||||
return valid_head_accessories
|
||||
return sortTim(valid_head_accessories, /proc/cmp_text_asc)
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_markings(var/location = "body")
|
||||
var/list/valid_markings = new()
|
||||
@@ -433,7 +433,7 @@
|
||||
continue
|
||||
valid_markings += marking
|
||||
|
||||
return valid_markings
|
||||
return sortTim(valid_markings, /proc/cmp_text_asc)
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_body_accessories()
|
||||
var/list/valid_body_accessories = new()
|
||||
@@ -448,7 +448,7 @@
|
||||
if(dna.species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
|
||||
valid_body_accessories += B
|
||||
|
||||
return valid_body_accessories
|
||||
return sortTim(valid_body_accessories, /proc/cmp_text_asc)
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_alt_heads()
|
||||
var/list/valid_alt_heads = list()
|
||||
@@ -463,7 +463,7 @@
|
||||
|
||||
valid_alt_heads += alternate_head
|
||||
|
||||
return valid_alt_heads
|
||||
return sortTim(valid_alt_heads, /proc/cmp_text_asc)
|
||||
|
||||
/mob/living/carbon/human/proc/scramble_appearance()
|
||||
scramble(1, src, 100)
|
||||
|
||||
@@ -404,6 +404,7 @@
|
||||
if(C.reagents)
|
||||
C.reagents.clear_reagents()
|
||||
QDEL_LIST(C.reagents.addiction_list)
|
||||
C.reagents.addiction_threshold_accumulated.Cut()
|
||||
|
||||
// rejuvenate: Called by `revive` to get the mob into a revivable state
|
||||
// the admin "rejuvenate" command calls `revive`, not this proc.
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
var/tesla_ignore = FALSE
|
||||
|
||||
var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message"
|
||||
var/list/emote_log = list() //like say_log but for emotes
|
||||
|
||||
var/list/recent_tastes = list()
|
||||
var/blood_volume = 0 //how much blood the mob has
|
||||
|
||||
@@ -10,15 +10,11 @@
|
||||
var/max_damage = 30
|
||||
var/component_disabled = 0
|
||||
var/mob/living/silicon/robot/owner
|
||||
|
||||
// The actual device object that has to be installed for this.
|
||||
/datum/robot_component/var/external_type = null
|
||||
|
||||
// The wrapped device(e.g. radio), only set if external_type isn't null
|
||||
/datum/robot_component/var/obj/item/wrapped = null
|
||||
var/external_type = null // The actual device object that has to be installed for this.
|
||||
var/obj/item/wrapped = null // The wrapped device(e.g. radio), only set if external_type isn't null
|
||||
|
||||
/datum/robot_component/New(mob/living/silicon/robot/R)
|
||||
src.owner = R
|
||||
owner = R
|
||||
|
||||
/datum/robot_component/proc/install()
|
||||
go_online()
|
||||
@@ -109,6 +105,13 @@
|
||||
name = "power cell"
|
||||
max_damage = 50
|
||||
|
||||
/datum/robot_component/cell/New(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
// sets `external_type` to the borg's currently installed cell type
|
||||
if(owner.cell)
|
||||
var/obj/item/stock_parts/cell/C = owner.cell
|
||||
external_type = C.type
|
||||
|
||||
/datum/robot_component/cell/is_powered()
|
||||
return ..() && owner.cell
|
||||
|
||||
|
||||
@@ -142,6 +142,9 @@ var/list/robot_verbs_default = list(
|
||||
mmi = new /obj/item/mmi/robotic_brain(src) //Give the borg an MMI if he spawns without for some reason. (probably not the correct way to spawn a robotic brain, but it works)
|
||||
mmi.icon_state = "boris"
|
||||
|
||||
if(!cell) // Make sure a new cell gets created *before* executing initialize_components(). The cell component needs an existing cell for it to get set up properly
|
||||
cell = new /obj/item/stock_parts/cell/high(src)
|
||||
|
||||
initialize_components()
|
||||
//if(!unfinished)
|
||||
// Create all the robot parts.
|
||||
@@ -150,9 +153,6 @@ var/list/robot_verbs_default = list(
|
||||
C.installed = 1
|
||||
C.wrapped = new C.external_type
|
||||
|
||||
if(!cell)
|
||||
cell = new /obj/item/stock_parts/cell/high(src)
|
||||
|
||||
..()
|
||||
|
||||
add_robot_verbs()
|
||||
@@ -602,7 +602,8 @@ var/list/robot_verbs_default = list(
|
||||
|
||||
|
||||
/mob/living/silicon/robot/attackby(obj/item/W, mob/user, params)
|
||||
if(opened) // Are they trying to insert something?
|
||||
// Check if the user is trying to insert another component like a radio, actuator, armor etc.
|
||||
if(istype(W, /obj/item/robot_parts/robot_component) && opened)
|
||||
for(var/V in components)
|
||||
var/datum/robot_component/C = components[V]
|
||||
if(!C.installed && istype(W, C.external_type))
|
||||
@@ -637,7 +638,7 @@ var/list/robot_verbs_default = list(
|
||||
user.visible_message("<span class='alert'>\The [user] fixes some of the burnt wires on \the [src] with \the [coil].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/stock_parts/cell) && opened) // trying to put a cell inside
|
||||
var/datum/robot_component/C = components["power cell"]
|
||||
var/datum/robot_component/cell/C = components["power cell"]
|
||||
if(wiresexposed)
|
||||
to_chat(user, "Close the panel first.")
|
||||
else if(cell)
|
||||
@@ -651,6 +652,7 @@ var/list/robot_verbs_default = list(
|
||||
C.installed = 1
|
||||
C.wrapped = W
|
||||
C.install()
|
||||
C.external_type = W.type // Update the cell component's `external_type` to the path of new cell
|
||||
//This will mean that removing and replacing a power cell will repair the mount, but I don't care at this point. ~Z
|
||||
C.brute_damage = 0
|
||||
C.electronics_damage = 0
|
||||
@@ -1419,6 +1421,8 @@ var/list/robot_verbs_default = list(
|
||||
burn = borked_part.electronics_damage
|
||||
borked_part.installed = 1
|
||||
borked_part.wrapped = new borked_part.external_type
|
||||
if(ispath(borked_part.external_type, /obj/item/stock_parts/cell)) // is the broken part a cell?
|
||||
cell = new borked_part.external_type // borgs that have their cell destroyed have their `cell` var set to null. we need create a new cell for them based on their old cell type.
|
||||
borked_part.heal_damage(brute,burn)
|
||||
borked_part.install()
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
|
||||
/obj/item/robot_module/New()
|
||||
..()
|
||||
modules += new /obj/item/flash/cyborg(src)
|
||||
emag = new /obj/item/toy/sword(src)
|
||||
emag.name = "Placeholder Emag Item"
|
||||
@@ -505,6 +506,7 @@
|
||||
)
|
||||
|
||||
/obj/item/robot_module/alien/hunter/New()
|
||||
..()
|
||||
modules += new /obj/item/melee/energy/alien/claws(src)
|
||||
modules += new /obj/item/flash/cyborg/alien(src)
|
||||
var/obj/item/reagent_containers/spray/alien/stun/S = new /obj/item/reagent_containers/spray/alien/stun(src)
|
||||
@@ -538,6 +540,7 @@
|
||||
)
|
||||
|
||||
/obj/item/robot_module/drone/New()
|
||||
..()
|
||||
modules += new /obj/item/weldingtool/largetank/cyborg(src)
|
||||
modules += new /obj/item/screwdriver/cyborg(src)
|
||||
modules += new /obj/item/wrench/cyborg(src)
|
||||
|
||||
@@ -148,8 +148,10 @@
|
||||
// This prevents someone from aggroing a depot mob, then hiding in a locker, perfectly safe, while the mob stands there getting killed by their friends.
|
||||
LoseTarget()
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/handle_automated_movement()
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/handle_automated_action()
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if(!istype(depotarea))
|
||||
return
|
||||
if(seen_enemy)
|
||||
@@ -184,6 +186,10 @@
|
||||
else
|
||||
scan_cycles++
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/AIShouldSleep(var/list/possible_targets)
|
||||
FindTarget(possible_targets, 1)
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/proc/raise_alert(var/reason)
|
||||
if(istype(depotarea) && (!raised_alert || seen_revived_enemy) && !depotarea.used_self_destruct)
|
||||
raised_alert = TRUE
|
||||
|
||||
@@ -720,6 +720,7 @@
|
||||
origin_tech = "combat=4;materials=4;engineering=4;biotech=4"
|
||||
|
||||
/obj/item/paper/researchnotes/New()
|
||||
..()
|
||||
var/list/possible_techs = list("materials", "engineering", "plasmatech", "powerstorage", "bluespace", "biotech", "combat", "magnets", "programming", "syndicate")
|
||||
var/mytech = pick(possible_techs)
|
||||
var/mylevel = rand(7, 9)
|
||||
|
||||
@@ -200,16 +200,16 @@
|
||||
icon_state = "pdabox"
|
||||
|
||||
/obj/item/storage/box/PDAs/New()
|
||||
..()
|
||||
new /obj/item/pda(src)
|
||||
new /obj/item/pda(src)
|
||||
new /obj/item/pda(src)
|
||||
new /obj/item/pda(src)
|
||||
new /obj/item/cartridge/head(src)
|
||||
..()
|
||||
new /obj/item/pda(src)
|
||||
new /obj/item/pda(src)
|
||||
new /obj/item/pda(src)
|
||||
new /obj/item/pda(src)
|
||||
new /obj/item/cartridge/head(src)
|
||||
|
||||
var/newcart = pick( /obj/item/cartridge/engineering,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/cartridge/medical,
|
||||
/obj/item/cartridge/signal/toxins,
|
||||
/obj/item/cartridge/quartermaster)
|
||||
new newcart(src)
|
||||
var/newcart = pick( /obj/item/cartridge/engineering,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/cartridge/medical,
|
||||
/obj/item/cartridge/signal/toxins,
|
||||
/obj/item/cartridge/quartermaster)
|
||||
new newcart(src)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/brightness = 2
|
||||
|
||||
/obj/item/shard/supermatter/New()
|
||||
..()
|
||||
src.icon_state = "supermatter" + pick("large", "medium", "small")
|
||||
switch(src.icon_state)
|
||||
if("supermattersmall")
|
||||
|
||||
@@ -102,6 +102,7 @@
|
||||
var/list/initial_mats //For calculating refund values.
|
||||
|
||||
/obj/item/ammo_box/New()
|
||||
..()
|
||||
for(var/i in 1 to max_ammo)
|
||||
stored_ammo += new ammo_type(src)
|
||||
update_icon()
|
||||
|
||||
@@ -157,6 +157,8 @@
|
||||
multiload = 0
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/rus357/New()
|
||||
..()
|
||||
stored_ammo.Cut() // We only want 1 bullet in there
|
||||
stored_ammo += new ammo_type(src)
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/boltaction
|
||||
|
||||
@@ -114,36 +114,38 @@
|
||||
return 0
|
||||
..()
|
||||
|
||||
/obj/item/gun/projectile/revolver/detective/attackby(obj/item/A, mob/user, params)
|
||||
if(istype(A, /obj/item/screwdriver))
|
||||
if(magazine.caliber == "38")
|
||||
to_chat(user, "<span class='notice'>You begin to reinforce the barrel of [src]...</span>")
|
||||
if(magazine.ammo_count())
|
||||
afterattack(user, user) //you know the drill
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>", "<span class='userdanger'>[src] goes off in your face!</span>")
|
||||
return
|
||||
if(do_after(user, 30 * A.toolspeed, target = src))
|
||||
if(magazine.ammo_count())
|
||||
to_chat(user, "<span class='warning'>You can't modify it!</span>")
|
||||
return
|
||||
magazine.caliber = "357"
|
||||
desc = "The barrel and chamber assembly seems to have been modified."
|
||||
to_chat(user, "<span class='notice'>You reinforce the barrel of [src]. Now it will fire .357 rounds.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You begin to revert the modifications to [src]...</span>")
|
||||
if(magazine.ammo_count())
|
||||
afterattack(user, user) //and again
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>", "<span class='userdanger'>[src] goes off in your face!</span>")
|
||||
return
|
||||
if(do_after(user, 30 * A.toolspeed, target = src))
|
||||
if(magazine.ammo_count())
|
||||
to_chat(user, "<span class='warning'>You can't modify it!</span>")
|
||||
return
|
||||
magazine.caliber = "38"
|
||||
desc = initial(desc)
|
||||
to_chat(user, "<span class='notice'>You remove the modifications on [src]. Now it will fire .38 rounds.</span>")
|
||||
/obj/item/gun/projectile/revolver/detective/screwdriver_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
if(magazine.caliber == "38")
|
||||
to_chat(user, "<span class='notice'>You begin to reinforce the barrel of [src]...</span>")
|
||||
if(magazine.ammo_count())
|
||||
afterattack(user, user) //you know the drill
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>", "<span class='userdanger'>[src] goes off in your face!</span>")
|
||||
return
|
||||
if(!I.use_tool(src, user, 30, volume = I.tool_volume))
|
||||
return
|
||||
if(magazine.ammo_count())
|
||||
to_chat(user, "<span class='warning'>You can't modify it!</span>")
|
||||
return
|
||||
magazine.caliber = "357"
|
||||
desc = "The barrel and chamber assembly seems to have been modified."
|
||||
to_chat(user, "<span class='notice'>You reinforce the barrel of [src]. Now it will fire .357 rounds.</span>")
|
||||
else
|
||||
return ..()
|
||||
to_chat(user, "<span class='notice'>You begin to revert the modifications to [src]...</span>")
|
||||
if(magazine.ammo_count())
|
||||
afterattack(user, user) //and again
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>", "<span class='userdanger'>[src] goes off in your face!</span>")
|
||||
return
|
||||
if(!I.use_tool(src, user, 30, volume = I.tool_volume))
|
||||
return
|
||||
if(magazine.ammo_count())
|
||||
to_chat(user, "<span class='warning'>You can't modify it!</span>")
|
||||
return
|
||||
magazine.caliber = "38"
|
||||
desc = initial(desc)
|
||||
to_chat(user, "<span class='notice'>You remove the modifications on [src]. Now it will fire .38 rounds.</span>")
|
||||
|
||||
/obj/item/gun/projectile/revolver/fingergun //Summoned by the Finger Gun spell, from advanced mimery traitor item
|
||||
name = "\improper finger gun"
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
var/atom/my_atom = null
|
||||
var/chem_temp = T20C
|
||||
var/list/datum/reagent/addiction_list = new/list()
|
||||
var/list/addiction_threshold_accumulated = new/list()
|
||||
var/flags
|
||||
var/list/reagents_generated_per_cycle = new/list()
|
||||
|
||||
@@ -231,6 +232,15 @@
|
||||
if(M)
|
||||
temperature_reagents(M.bodytemperature - 30)
|
||||
|
||||
|
||||
if(LAZYLEN(addiction_threshold_accumulated))
|
||||
for(var/thing in addiction_threshold_accumulated)
|
||||
if(has_reagent(thing))
|
||||
continue // if we have the reagent in our system, then don't deplete the addiction threshold
|
||||
addiction_threshold_accumulated[thing] -= 0.01 // Otherwise very slowly deplete the buildup
|
||||
if(addiction_threshold_accumulated[thing] <= 0)
|
||||
addiction_threshold_accumulated -= thing
|
||||
|
||||
// a bitfield filled in by each reagent's `on_mob_life` to find out which states to update
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
for(var/A in reagent_list)
|
||||
@@ -289,17 +299,21 @@
|
||||
if(R.addiction_stage < 5)
|
||||
if(prob(5))
|
||||
R.addiction_stage++
|
||||
switch(R.addiction_stage)
|
||||
if(1)
|
||||
update_flags |= R.addiction_act_stage1(M)
|
||||
if(2)
|
||||
update_flags |= R.addiction_act_stage2(M)
|
||||
if(3)
|
||||
update_flags |= R.addiction_act_stage3(M)
|
||||
if(4)
|
||||
update_flags |= R.addiction_act_stage4(M)
|
||||
if(5)
|
||||
update_flags |= R.addiction_act_stage5(M)
|
||||
if(M.reagents.has_reagent(R.id))
|
||||
R.last_addiction_dose = world.timeofday
|
||||
R.addiction_stage = 1
|
||||
else
|
||||
switch(R.addiction_stage)
|
||||
if(1)
|
||||
update_flags |= R.addiction_act_stage1(M)
|
||||
if(2)
|
||||
update_flags |= R.addiction_act_stage2(M)
|
||||
if(3)
|
||||
update_flags |= R.addiction_act_stage3(M)
|
||||
if(4)
|
||||
update_flags |= R.addiction_act_stage4(M)
|
||||
if(5)
|
||||
update_flags |= R.addiction_act_stage5(M)
|
||||
if(prob(20) && (world.timeofday > (R.last_addiction_dose + ADDICTION_TIME))) //Each addiction lasts 8 minutes before it can end
|
||||
to_chat(M, "<span class='notice'>You no longer feel reliant on [R.name]!</span>")
|
||||
addiction_list.Remove(R)
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
var/can_synth = TRUE //whether or not a mech syringe gun and synthesize this reagent
|
||||
var/overdose_threshold = 0
|
||||
var/addiction_chance = 0
|
||||
var/addiction_chance_additional = 100 // If we want to lower the chance of addiction even more, set this
|
||||
var/addiction_threshold = 0 // How much of a chem do we have to absorb before we can start rolling for its ill effects?
|
||||
var/minor_addiction = FALSE
|
||||
var/addiction_stage = 1
|
||||
var/last_addiction_dose = 0
|
||||
var/overdosed = FALSE // You fucked up and this is now triggering it's overdose effects, purge that shit quick.
|
||||
@@ -53,12 +56,7 @@
|
||||
var/can_become_addicted = M.reagents.reaction_check(M, src)
|
||||
|
||||
if(can_become_addicted)
|
||||
if(prob(addiction_chance) && !is_type_in_list(src, M.reagents.addiction_list))
|
||||
to_chat(M, "<span class='danger'>You suddenly feel invigorated and guilty...</span>")
|
||||
var/datum/reagent/new_reagent = new type()
|
||||
new_reagent.last_addiction_dose = world.timeofday
|
||||
M.reagents.addiction_list.Add(new_reagent)
|
||||
else if(is_type_in_list(src, M.reagents.addiction_list))
|
||||
if(is_type_in_list(src, M.reagents.addiction_list))
|
||||
to_chat(M, "<span class='notice'>You feel slightly better, but for how long?</span>")
|
||||
for(var/A in M.reagents.addiction_list)
|
||||
var/datum/reagent/AD = A
|
||||
@@ -75,9 +73,24 @@
|
||||
|
||||
/datum/reagent/proc/on_mob_life(mob/living/M)
|
||||
current_cycle++
|
||||
holder.remove_reagent(id, metabolization_rate * M.metabolism_efficiency * M.digestion_ratio) //By default it slowly disappears.
|
||||
var/total_depletion_rate = metabolization_rate * M.metabolism_efficiency * M.digestion_ratio // Cache it
|
||||
|
||||
handle_addiction(M, total_depletion_rate)
|
||||
|
||||
holder.remove_reagent(id, total_depletion_rate) //By default it slowly disappears.
|
||||
return STATUS_UPDATE_NONE
|
||||
|
||||
/datum/reagent/proc/handle_addiction(mob/living/M, consumption_rate)
|
||||
if(addiction_chance && !is_type_in_list(src, M.reagents.addiction_list))
|
||||
M.reagents.addiction_threshold_accumulated[id] += consumption_rate
|
||||
var/current_threshold_accumulated = M.reagents.addiction_threshold_accumulated[id]
|
||||
|
||||
if(addiction_threshold < current_threshold_accumulated && prob(addiction_chance) && prob(addiction_chance_additional))
|
||||
to_chat(M, "<span class='danger'>You suddenly feel invigorated and guilty...</span>")
|
||||
var/datum/reagent/new_reagent = new type()
|
||||
new_reagent.last_addiction_dose = world.timeofday
|
||||
M.reagents.addiction_list.Add(new_reagent)
|
||||
|
||||
/datum/reagent/proc/on_mob_death(mob/living/M) //use this to have chems have a "death-triggered" effect
|
||||
return
|
||||
|
||||
@@ -139,6 +152,8 @@
|
||||
M.emote("twitch_s")
|
||||
if(prob(8))
|
||||
M.emote("shiver")
|
||||
if(prob(4))
|
||||
to_chat(M, "<span class='warning'>Your head hurts.</span>")
|
||||
if(prob(4))
|
||||
to_chat(M, "<span class='warning'>You begin craving [name]!</span>")
|
||||
return STATUS_UPDATE_NONE
|
||||
@@ -147,23 +162,32 @@
|
||||
if(prob(8))
|
||||
M.emote("twitch")
|
||||
if(prob(4))
|
||||
to_chat(M, "<span class='warning'>You have the strong urge for some [name]!</span>")
|
||||
to_chat(M, "<span class='warning'>You have a pounding headache.</span>")
|
||||
if(prob(4))
|
||||
to_chat(M, "<span class='warning'>You have the strong urge for some [name]!</span>")
|
||||
else if(prob(4))
|
||||
to_chat(M, "<span class='warning'>You REALLY crave some [name]!</span>")
|
||||
return STATUS_UPDATE_NONE
|
||||
|
||||
/datum/reagent/proc/addiction_act_stage5(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
if(minor_addiction)
|
||||
if(prob(6))
|
||||
M.AdjustSlowed(3)
|
||||
to_chat(M, "<span class='warning'>You feel [pick("tired", "exhausted", "sluggish")].</span>")
|
||||
else
|
||||
if(prob(6))
|
||||
to_chat(M, "<span class='warning'>Your stomach lurches painfully!</span>")
|
||||
M.visible_message("<span class='warning'>[M] gags and retches!</span>")
|
||||
update_flags |= M.Stun(rand(2,4), FALSE)
|
||||
update_flags |= M.Weaken(rand(2,4), FALSE)
|
||||
if(prob(8))
|
||||
M.emote("twitch")
|
||||
if(prob(6))
|
||||
to_chat(M, "<span class='warning'>Your stomach lurches painfully!</span>")
|
||||
M.visible_message("<span class='warning'>[M] gags and retches!</span>")
|
||||
update_flags |= M.Stun(rand(2,4), FALSE)
|
||||
update_flags |= M.Weaken(rand(2,4), FALSE)
|
||||
M.emote(pick("twitch", "twitch_s", "shiver"))
|
||||
if(prob(4))
|
||||
to_chat(M, "<span class='warning'>Your head is killing you!</span>")
|
||||
if(prob(5))
|
||||
to_chat(M, "<span class='warning'>You feel like you can't live without [name]!</span>")
|
||||
if(prob(5))
|
||||
else if(prob(5))
|
||||
to_chat(M, "<span class='warning'>You would DIE for some [name] right now!</span>")
|
||||
return update_flags
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
reagent_state = LIQUID
|
||||
nutriment_factor = 0 //So alcohol can fill you up! If they want to.
|
||||
color = "#404030" // rgb: 64, 64, 48
|
||||
addiction_chance = 1
|
||||
addiction_threshold = 10
|
||||
var/dizzy_adj = 3
|
||||
var/alcohol_perc = 1 //percentage of ethanol in a beverage 0.0 - 1.0
|
||||
taste_description = "liquid fire"
|
||||
|
||||
@@ -276,7 +276,10 @@
|
||||
adj_sleepy = -2
|
||||
adj_temp_hot = 25
|
||||
overdose_threshold = 45
|
||||
addiction_chance = 1 // It's true.
|
||||
addiction_chance = 2 // It's true.
|
||||
addiction_chance_additional = 20
|
||||
addiction_threshold = 10
|
||||
minor_addiction = TRUE
|
||||
heart_rate_increase = 1
|
||||
drink_icon = "glass_brown"
|
||||
drink_name = "Glass of coffee"
|
||||
@@ -367,6 +370,10 @@
|
||||
adj_drowsy = -1
|
||||
adj_sleepy = -3
|
||||
adj_temp_hot = 20
|
||||
addiction_chance = 1
|
||||
addiction_chance_additional = 1
|
||||
addiction_threshold = 10
|
||||
minor_addiction = TRUE
|
||||
drink_icon = "glass_brown"
|
||||
drink_name = "Glass of Tea"
|
||||
drink_desc = "A glass of hot tea. Perhaps a cup with a handle would have been smarter?"
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#9087A2"
|
||||
metabolization_rate = 0.2
|
||||
addiction_chance = 65
|
||||
addiction_chance = 15
|
||||
addiction_threshold = 10
|
||||
heart_rate_decrease = 1
|
||||
taste_description = "a synthetic high"
|
||||
|
||||
@@ -88,7 +89,9 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#60A584" // rgb: 96, 165, 132
|
||||
overdose_threshold = 35
|
||||
addiction_chance = 70
|
||||
addiction_chance = 15
|
||||
addiction_threshold = 10
|
||||
minor_addiction = TRUE
|
||||
heart_rate_increase = 1
|
||||
taste_description = "calm"
|
||||
|
||||
@@ -154,7 +157,8 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#60A584" // rgb: 96, 165, 132
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 50
|
||||
addiction_chance = 10
|
||||
addiction_threshold = 5
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/crank/on_mob_life(mob/living/M)
|
||||
@@ -227,7 +231,8 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#0264B4"
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 50
|
||||
addiction_chance = 10
|
||||
addiction_threshold = 10
|
||||
taste_description = "very poor life choices"
|
||||
|
||||
|
||||
@@ -299,7 +304,8 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#60A584" // rgb: 96, 165, 132
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 60
|
||||
addiction_chance = 10
|
||||
addiction_threshold = 5
|
||||
metabolization_rate = 0.6
|
||||
heart_rate_increase = 1
|
||||
taste_description = "speed"
|
||||
@@ -360,7 +366,8 @@
|
||||
reagent_state = SOLID
|
||||
color = "#FAFAFA"
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 80
|
||||
addiction_chance = 15
|
||||
addiction_threshold = 5
|
||||
metabolization_rate = 0.6
|
||||
taste_description = "WAAAAGH"
|
||||
|
||||
@@ -460,7 +467,8 @@
|
||||
description = "Jenkem is a prison drug made from fermenting feces in a solution of urine. Extremely disgusting."
|
||||
reagent_state = LIQUID
|
||||
color = "#644600"
|
||||
addiction_chance = 30
|
||||
addiction_chance = 5
|
||||
addiction_threshold = 5
|
||||
taste_description = "the inside of a toilet... or worse"
|
||||
|
||||
/datum/reagent/jenkem/on_mob_life(mob/living/M)
|
||||
@@ -526,7 +534,9 @@
|
||||
metabolization_rate = 0.2
|
||||
overdose_threshold = 15
|
||||
process_flags = ORGANIC | SYNTHETIC //Flipping for everyone!
|
||||
addiction_chance = 10
|
||||
addiction_chance = 1
|
||||
addiction_chance_additional = 20
|
||||
addiction_threshold = 10
|
||||
taste_description = "flips"
|
||||
|
||||
/datum/reagent/fliptonium/on_mob_life(mob/living/M)
|
||||
@@ -631,7 +641,8 @@
|
||||
color = "#1BB1FF"
|
||||
process_flags = SYNTHETIC
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 60
|
||||
addiction_chance = 10
|
||||
addiction_threshold = 5
|
||||
metabolization_rate = 0.6
|
||||
taste_description = "wiper fluid"
|
||||
|
||||
@@ -684,7 +695,8 @@
|
||||
|
||||
process_flags = SYNTHETIC
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 50
|
||||
addiction_chance = 10
|
||||
addiction_threshold = 5
|
||||
taste_description = "silicon"
|
||||
|
||||
|
||||
|
||||
@@ -149,6 +149,10 @@
|
||||
description = "This is what makes chilis hot."
|
||||
reagent_state = LIQUID
|
||||
color = "#B31008" // rgb: 179, 16, 8
|
||||
addiction_chance = 1
|
||||
addiction_chance_additional = 10
|
||||
addiction_threshold = 2
|
||||
minor_addiction = TRUE
|
||||
taste_description = "<span class='warning'>HOTNESS</span>"
|
||||
taste_mult = 1.5
|
||||
|
||||
@@ -651,6 +655,10 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#B2B139"
|
||||
overdose_threshold = 50
|
||||
addiction_chance = 2
|
||||
addiction_chance_additional = 10
|
||||
addiction_threshold = 5
|
||||
minor_addiction = TRUE
|
||||
harmless = FALSE
|
||||
taste_description = "cheese?"
|
||||
|
||||
@@ -667,7 +675,10 @@
|
||||
description = "Hell, I don't even know if this IS cheese. Whatever it is, it ain't normal. If you want to, pour it out to make it solid."
|
||||
reagent_state = SOLID
|
||||
color = "#50FF00"
|
||||
addiction_chance = 5
|
||||
addiction_chance = 1
|
||||
addiction_chance_additional = 10
|
||||
addiction_threshold = 5
|
||||
minor_addiction = TRUE
|
||||
taste_description = "cheeeeeese...?"
|
||||
|
||||
/datum/reagent/consumable/weird_cheese/on_mob_life(mob/living/M)
|
||||
|
||||
@@ -6,7 +6,11 @@
|
||||
|
||||
/datum/reagent/medicine/on_mob_life(mob/living/M)
|
||||
current_cycle++
|
||||
holder.remove_reagent(id, (metabolization_rate / M.metabolism_efficiency) * M.digestion_ratio) //medicine reagents stay longer if you have a better metabolism
|
||||
var/total_depletion_rate = (metabolization_rate / M.metabolism_efficiency) * M.digestion_ratio // Cache it
|
||||
|
||||
handle_addiction(M, total_depletion_rate)
|
||||
|
||||
holder.remove_reagent(id, total_depletion_rate) //medicine reagents stay longer if you have a better metabolism
|
||||
return STATUS_UPDATE_NONE
|
||||
|
||||
/datum/reagent/medicine/hydrocodone
|
||||
@@ -293,7 +297,9 @@
|
||||
color = "#C8A5DC"
|
||||
metabolization_rate = 0.2
|
||||
overdose_threshold = 30
|
||||
addiction_chance = 5
|
||||
addiction_chance = 1
|
||||
addiction_chance_additional = 20
|
||||
addiction_threshold = 5
|
||||
harmless = FALSE
|
||||
taste_description = "health"
|
||||
|
||||
@@ -440,7 +446,9 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
metabolization_rate = 0.2
|
||||
addiction_chance = 20
|
||||
addiction_chance = 1
|
||||
addiction_chance_additional = 20
|
||||
addiction_threshold = 10
|
||||
harmless = FALSE
|
||||
taste_description = "oxygenation"
|
||||
|
||||
@@ -462,7 +470,9 @@
|
||||
color = "#C8A5DC"
|
||||
metabolization_rate = 0.3
|
||||
overdose_threshold = 35
|
||||
addiction_chance = 25
|
||||
addiction_chance = 1
|
||||
addiction_chance = 10
|
||||
addiction_threshold = 10
|
||||
harmless = FALSE
|
||||
taste_description = "stimulation"
|
||||
|
||||
@@ -512,7 +522,8 @@
|
||||
description = "Anti-allergy medication. May cause drowsiness, do not operate heavy machinery while using this."
|
||||
reagent_state = LIQUID
|
||||
color = "#5BCBE1"
|
||||
addiction_chance = 10
|
||||
addiction_chance = 1
|
||||
addiction_threshold = 10
|
||||
harmless = FALSE
|
||||
taste_description = "antihistamine"
|
||||
|
||||
@@ -535,7 +546,8 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 50
|
||||
addiction_chance = 10
|
||||
addiction_threshold = 15
|
||||
shock_reduction = 50
|
||||
harmless = FALSE
|
||||
taste_description = "a delightful numbing"
|
||||
@@ -883,7 +895,9 @@
|
||||
description = "This experimental plasma-based compound seems to regulate body temperature."
|
||||
reagent_state = LIQUID
|
||||
color = "#D782E6"
|
||||
addiction_chance = 20
|
||||
addiction_chance = 1
|
||||
addiction_chance_additional = 10
|
||||
addiction_threshold = 10
|
||||
overdose_threshold = 50
|
||||
taste_description = "warmth and stability"
|
||||
|
||||
|
||||
@@ -198,6 +198,7 @@
|
||||
if(!S.reagents)
|
||||
S.create_reagents(volume)
|
||||
S.reagents.add_reagent("thermite", volume)
|
||||
S.thermite = TRUE
|
||||
S.overlays.Cut()
|
||||
S.overlays = image('icons/effects/effects.dmi', icon_state = "thermite")
|
||||
if(S.active_hotspot)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush.
|
||||
var/last_sound = 0
|
||||
var/required_mode_to_deconstruct = -1
|
||||
var/deconstructs_to = PIPE_DISPOSALS_CHUTE
|
||||
var/deconstructs_to = PIPE_DISPOSALS_BIN
|
||||
active_power_usage = 600
|
||||
idle_power_usage = 100
|
||||
|
||||
@@ -98,21 +98,7 @@
|
||||
return
|
||||
|
||||
src.add_fingerprint(user)
|
||||
if(mode<=0) // It's off
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(contents.len > 0)
|
||||
to_chat(user, "Eject the items first!")
|
||||
return
|
||||
if(mode==0) // It's off but still not unscrewed
|
||||
mode=-1 // Set it to doubleoff l0l
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
to_chat(user, "You remove the screws around the power connection.")
|
||||
return
|
||||
else if(mode==-1)
|
||||
mode=0
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
to_chat(user, "You attach the screws around the power connection.")
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/melee/energy/blade))
|
||||
to_chat(user, "You can't place that item inside the disposal unit.")
|
||||
return
|
||||
@@ -158,6 +144,24 @@
|
||||
|
||||
update()
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/machinery/disposal/screwdriver_act(mob/user, obj/item/I)
|
||||
if(mode>0) // It's on
|
||||
return
|
||||
. = TRUE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
return
|
||||
if(contents.len > 0)
|
||||
to_chat(user, "Eject the items first!")
|
||||
return
|
||||
if(mode==0) // It's off but still not unscrewed
|
||||
mode=-1 // Set it to doubleoff l0l
|
||||
else if(mode==-1)
|
||||
mode=0
|
||||
to_chat(user, "You [mode ? "unfasten": "fasten"] the screws around the power connection.")
|
||||
|
||||
/obj/machinery/disposal/welder_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(mode != required_mode_to_deconstruct)
|
||||
|
||||
@@ -273,8 +273,7 @@
|
||||
icon_state = "intake"
|
||||
required_mode_to_deconstruct = 1
|
||||
deconstructs_to = PIPE_DISPOSALS_CHUTE
|
||||
|
||||
var/c_mode = 0
|
||||
var/can_deconstruct = FALSE
|
||||
|
||||
/obj/machinery/disposal/deliveryChute/New()
|
||||
..()
|
||||
@@ -345,21 +344,31 @@
|
||||
update()
|
||||
return
|
||||
|
||||
/obj/machinery/disposal/deliveryChute/attackby(obj/item/I, mob/user, params)
|
||||
if(!I || !user)
|
||||
/obj/machinery/disposal/deliveryChute/screwdriver_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
return
|
||||
can_deconstruct = !can_deconstruct
|
||||
to_chat(user, "You [can_deconstruct ? "unfasten": "fasten"] the screws around the power connection.")
|
||||
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(c_mode==0)
|
||||
c_mode=1
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
to_chat(user, "You remove the screws around the power connection.")
|
||||
return
|
||||
else if(c_mode==1)
|
||||
c_mode=0
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
to_chat(user, "You attach the screws around the power connection.")
|
||||
return
|
||||
/obj/machinery/disposal/deliveryChute/welder_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!can_deconstruct)
|
||||
return
|
||||
if(contents.len > 0)
|
||||
to_chat(user, "Eject the items first!")
|
||||
return
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
WELDER_ATTEMPT_FLOOR_SLICE_MESSAGE
|
||||
if(I.use_tool(src, user, 20, volume = I.tool_volume))
|
||||
WELDER_FLOOR_SLICE_SUCCESS_MESSAGE
|
||||
var/obj/structure/disposalconstruct/C = new (loc)
|
||||
C.ptype = deconstructs_to
|
||||
C.update()
|
||||
C.anchored = TRUE
|
||||
C.density = TRUE
|
||||
qdel(src)
|
||||
|
||||
/obj/item/shippingPackage
|
||||
name = "Shipping package"
|
||||
|
||||
@@ -618,6 +618,7 @@
|
||||
var/floof
|
||||
|
||||
/obj/item/relic/New()
|
||||
..()
|
||||
icon_state = pick("shock_kit","armor-igniter-analyzer","infra-igniter0","infra-igniter1","radio-multitool","prox-radio1","radio-radio","timer-multitool0","radio-igniter-tank")
|
||||
realName = "[pick("broken","twisted","spun","improved","silly","regular","badly made")] [pick("device","object","toy","suspicious tech","gear")]"
|
||||
floof = pick(/mob/living/simple_animal/pet/dog/corgi, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/dog/fox, /mob/living/simple_animal/mouse, /mob/living/simple_animal/pet/dog/pug, /mob/living/simple_animal/lizard, /mob/living/simple_animal/diona, /mob/living/simple_animal/butterfly, /mob/living/carbon/human/monkey)
|
||||
|
||||
@@ -345,6 +345,7 @@ datum/tech/robotics
|
||||
var/default_desc = "A disk for storing technology data for further research."
|
||||
|
||||
/obj/item/disk/tech_disk/New()
|
||||
..()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
if(href_list["reset"])
|
||||
reset()
|
||||
if(href_list["ert"])
|
||||
ert_reason = input(usr, "Reason for ERT Call:", "", "")
|
||||
ert_reason = stripped_input(usr, "Reason for ERT Call:", "", "")
|
||||
|
||||
SSnanoui.update_uis(src)
|
||||
add_fingerprint(usr)
|
||||
@@ -165,9 +165,10 @@
|
||||
feedback_inc("alert_keycard_auth_stationRevoke",1)
|
||||
if("Emergency Response Team")
|
||||
if(is_ert_blocked())
|
||||
to_chat(usr, "<span class='warning'>All Emergency Response Teams are dispatched and can not be called at this time.</span>")
|
||||
atom_say("All Emergency Response Teams are dispatched and can not be called at this time.")
|
||||
return
|
||||
to_chat(usr, "<span class = 'notice'>ERT request transmitted.</span>")
|
||||
atom_say("ERT request transmitted!")
|
||||
command_announcer.autosay("ERT request transmitted. Reason: [ert_reason]", name)
|
||||
print_centcom_report(ert_reason, station_time_timestamp() + " ERT Request")
|
||||
|
||||
var/fullmin_count = 0
|
||||
@@ -221,4 +222,4 @@ var/global/station_all_access = 0
|
||||
D.emergency = 0
|
||||
D.update_icon(0)
|
||||
minor_announcement.Announce("Access restrictions on all station airlocks have been re-added. Seek station AI or a colleague's assistance if you are stuck.")
|
||||
station_all_access = 0
|
||||
station_all_access = 0
|
||||
|
||||
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 339 KiB After Width: | Height: | Size: 337 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 290 KiB After Width: | Height: | Size: 292 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 310 KiB After Width: | Height: | Size: 311 KiB |
|
Before Width: | Height: | Size: 368 KiB After Width: | Height: | Size: 370 KiB |