Merge branch 'master' into var/const-to-define

This commit is contained in:
AffectedArc07
2020-03-03 22:44:07 +00:00
101 changed files with 614 additions and 436 deletions
-1
View File
@@ -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
+14 -1
View File
@@ -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/*
+1 -1
View File
@@ -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{
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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_&#40;Security&#41\">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
+1 -1
View File
@@ -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
+1
View File
@@ -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)
+2
View File
@@ -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)
+11 -11
View File
@@ -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)
+5 -3
View File
@@ -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)
. = ..()
+1
View File
@@ -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>")
+2 -2
View File
@@ -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)
+8 -4
View File
@@ -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)
+3 -4
View File
@@ -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.
+1 -1
View File
@@ -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))
+1 -1
View File
@@ -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)
+2
View File
@@ -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]."
+1 -1
View File
@@ -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]"
+1 -1
View File
@@ -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))
+5 -4
View File
@@ -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."
+2 -1
View File
@@ -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)
+3 -49
View File
@@ -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")
+1 -1
View File
@@ -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>")
+1 -1
View File
@@ -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)
+4 -1
View File
@@ -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
+3 -3
View File
@@ -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)
+5
View File
@@ -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"
+14 -9
View File
@@ -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"
+19 -22
View File
@@ -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"
+53 -24
View File
@@ -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
+101 -99
View File
@@ -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
+3 -2
View File
@@ -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
-3
View File
@@ -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>")
+3
View File
@@ -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)
-4
View File
@@ -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)
+1
View File
@@ -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
+4 -3
View File
@@ -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)
+1
View File
@@ -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
+1
View File
@@ -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)
+12 -12
View File
@@ -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")
+1
View File
@@ -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"
+25 -11
View File
@@ -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)
+39 -15
View File
@@ -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)
+20 -16
View File
@@ -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)
+24 -15
View File
@@ -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"
+1
View File
@@ -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)
+1
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 339 KiB

After

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 KiB

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 KiB

After

Width:  |  Height:  |  Size: 311 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 KiB

After

Width:  |  Height:  |  Size: 370 KiB

Some files were not shown because too many files have changed in this diff Show More