mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-29 08:11:11 +01:00
Merge branch 'master' into upstream-merge-14220
This commit is contained in:
@@ -13,6 +13,8 @@
|
||||
#define WEATHER_ASH_STORM "ash storm" // Ripped from TG, like the above. Less harmless.
|
||||
#define WEATHER_ASH_STORM_SAFE "light ash storm" //Safe version of the ash storm. Dimmer.
|
||||
#define WEATHER_FALLOUT "fallout" // Modified emberfall, actually harmful. Admin only.
|
||||
#define WEATHER_FALLOUT_TEMP "short-term fallout" // Nuclear fallout that actually ends. Firework-only
|
||||
#define WEATHER_CONFETTI "confetti" // Firework-only
|
||||
|
||||
#define MOON_PHASE_NEW_MOON "new moon"
|
||||
#define MOON_PHASE_WAXING_CRESCENT "waxing crescent"
|
||||
|
||||
@@ -852,6 +852,100 @@ var/global/list/xenobio_rainbow_extracts = list(
|
||||
/obj/item/slime_extract/rainbow = 1)
|
||||
|
||||
|
||||
//// Wildlife lists
|
||||
//Listed by-type. Under each type are lists of lists that contain 'groupings' of wildlife. Sorted from 1 to 5 by threat level.
|
||||
|
||||
var/global/list/event_wildlife_aquatic = list(
|
||||
list(
|
||||
list(/mob/living/simple_mob/animal/passive/fish/koi = 1,
|
||||
/mob/living/simple_mob/animal/passive/fish/pike = 2,
|
||||
/mob/living/simple_mob/animal/passive/fish/perch = 2,
|
||||
/mob/living/simple_mob/animal/passive/fish/salmon = 2,
|
||||
/mob/living/simple_mob/animal/passive/fish/trout = 2,
|
||||
/mob/living/simple_mob/animal/passive/fish/bass = 3),
|
||||
list(/mob/living/simple_mob/animal/passive/fish/salmon = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/fish/perch = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/fish/trout = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/fish/bass = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/fish/pike = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/crab = 1)
|
||||
),
|
||||
list(
|
||||
list(/mob/living/simple_mob/animal/sif/duck = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/fish/measelshark = 1),
|
||||
list(/mob/living/simple_mob/vore/pakkun = 5,
|
||||
/mob/living/simple_mob/vore/pakkun/snapdragon = 1)
|
||||
),
|
||||
list(
|
||||
list(/mob/living/simple_mob/animal/space/goose = 10,
|
||||
/mob/living/simple_mob/animal/space/goose/white = 1),
|
||||
list(/mob/living/simple_mob/vore/alienanimals/space_jellyfish = 1)
|
||||
),
|
||||
list(
|
||||
list(/mob/living/simple_mob/animal/sif/hooligan_crab = 1)
|
||||
)
|
||||
)
|
||||
|
||||
var/global/list/event_wildlife_roaming = list(
|
||||
list(
|
||||
list(/mob/living/simple_mob/animal/passive/mouse/jerboa = 1,
|
||||
/mob/living/simple_mob/animal/passive/mouse/black = 2,
|
||||
/mob/living/simple_mob/animal/passive/mouse/brown = 2,
|
||||
/mob/living/simple_mob/animal/passive/mouse/gray = 2,
|
||||
/mob/living/simple_mob/animal/passive/mouse/white = 2,
|
||||
/mob/living/simple_mob/animal/passive/mouse/rat = 3),
|
||||
list(/mob/living/simple_mob/animal/passive/bird/black_bird = 1,
|
||||
/mob/living/simple_mob/animal/passive/bird/azure_tit = 1,
|
||||
/mob/living/simple_mob/animal/passive/bird/european_robin = 1,
|
||||
/mob/living/simple_mob/animal/passive/bird/goldcrest = 1,
|
||||
/mob/living/simple_mob/animal/passive/bird/ringneck_dove = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/dog/corgi = 4,
|
||||
/mob/living/simple_mob/animal/passive/dog/corgi/puppy = 1),
|
||||
list(/mob/living/simple_mob/vore/rabbit = 1),
|
||||
list(/mob/living/simple_mob/vore/redpanda = 14,
|
||||
/mob/living/simple_mob/vore/redpanda/fae = 7,
|
||||
/mob/living/simple_mob/vore/redpanda/blue = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/cow = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/chicken = 4,
|
||||
/mob/living/simple_mob/animal/passive/chick = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/snake = 2,
|
||||
/mob/living/simple_mob/animal/passive/snake/red = 1,
|
||||
/mob/living/simple_mob/animal/passive/snake/python = 1)
|
||||
),
|
||||
list(
|
||||
list(/mob/living/simple_mob/vore/horse/big = 7,
|
||||
/mob/living/simple_mob/vore/horse = 2),
|
||||
list(/mob/living/simple_mob/vore/fennix = 1,
|
||||
/mob/living/simple_mob/vore/fennec = 4),
|
||||
list(/mob/living/simple_mob/vore/bee = 1),
|
||||
list(/mob/living/simple_mob/animal/passive/fox = 1),
|
||||
list(/mob/living/simple_mob/vore/sheep = 3,
|
||||
/mob/living/simple_mob/animal/goat = 1),
|
||||
list(/mob/living/simple_mob/vore/hippo = 1),
|
||||
list(/mob/living/simple_mob/vore/alienanimals/dustjumper = 1),
|
||||
list(/mob/living/simple_mob/vore/alienanimals/teppi = 1)
|
||||
),
|
||||
list(
|
||||
list(/mob/living/simple_mob/vore/aggressive/frog = 1),
|
||||
list(/mob/living/simple_mob/tomato = 1),
|
||||
list(/mob/living/simple_mob/animal/wolf = 1),
|
||||
list(/mob/living/simple_mob/vore/aggressive/dino = 1),
|
||||
list(/mob/living/simple_mob/animal/space/bats = 1)
|
||||
),
|
||||
list(
|
||||
list(/mob/living/simple_mob/animal/space/bear = 1),
|
||||
list(/mob/living/simple_mob/vore/aggressive/deathclaw = 1),
|
||||
list(/mob/living/simple_mob/otie = 1),
|
||||
list(/mob/living/simple_mob/vore/aggressive/panther = 1),
|
||||
list(/mob/living/simple_mob/vore/aggressive/rat = 1),
|
||||
list(/mob/living/simple_mob/vore/aggressive/giant_snake = 1),
|
||||
list(/mob/living/simple_mob/vore/aggressive/corrupthound = 1)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
// AREA GENERATION AND BLUEPRINT STUFF BELOW HERE
|
||||
// typecacheof(list) and list() are two completely separate things, don't break!
|
||||
|
||||
|
||||
@@ -140,12 +140,7 @@
|
||||
return
|
||||
|
||||
// Cache this since S may go away after use()
|
||||
var/list/sheet_matter
|
||||
if(istype(S, /obj/item/stack/material))
|
||||
var/obj/item/stack/material/MS = S
|
||||
sheet_matter = list(MS.material.name = 2000)
|
||||
else
|
||||
sheet_matter = S.matter
|
||||
var/list/sheet_matter = S.matter
|
||||
|
||||
// Calculate total amount of material for one sheet
|
||||
var/matter_per_sheet = 0
|
||||
|
||||
@@ -41,7 +41,7 @@ var/list/outfits_decls_by_type_
|
||||
var/l_hand = null
|
||||
// In the list(path=count,otherpath=count) format
|
||||
var/list/uniform_accessories = list() // webbing, armbands etc - fits in slot_tie
|
||||
var/list/backpack_contents = list()
|
||||
var/list/backpack_contents = list()
|
||||
|
||||
var/id_type
|
||||
var/id_desc
|
||||
|
||||
@@ -74,7 +74,7 @@ var/global/list/security_printer_tickets = list() //VOREStation Edit
|
||||
|
||||
//VOREStation Add Start - Vore stats lets gooooo
|
||||
if(GLOB.prey_eaten_roundstat > 0)
|
||||
valid_stats_list.Add("A total of [GLOB.prey_eaten_roundstat] individuals were eaten today!")
|
||||
valid_stats_list.Add("Individuals were eaten a total of [GLOB.prey_eaten_roundstat] times today!") //CHOMPEdit
|
||||
if(GLOB.prey_digested_roundstat > 0)
|
||||
valid_stats_list.Add("A total of [GLOB.prey_digested_roundstat] individuals were digested today!")
|
||||
if(GLOB.prey_absorbed_roundstat > 0)
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
containertype = /obj/structure/closet/crate/thinktronic
|
||||
containername = "Holoplant crate"
|
||||
|
||||
/* CHOMPedit, moved to medical.dm in modular folder
|
||||
/datum/supply_pack/misc/glucose_hypos
|
||||
name = "Glucose Hypoinjectors"
|
||||
contains = list(
|
||||
@@ -161,7 +162,7 @@
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/zenghu
|
||||
containername = "Glucose Hypo Crate"
|
||||
|
||||
*/
|
||||
/datum/supply_pack/misc/mre_rations
|
||||
num_contained = 6
|
||||
name = "Emergency - MREs"
|
||||
|
||||
@@ -176,3 +176,10 @@
|
||||
access_pilot
|
||||
)
|
||||
one_access = TRUE
|
||||
|
||||
/datum/supply_pack/misc/swoopie //CHOMPAdd
|
||||
name = "SWOOPIE XL CleanBot Kit"
|
||||
contains = list()
|
||||
cost = 100
|
||||
containertype = /obj/structure/largecrate/animal/swoopie
|
||||
containername = "SWOOPIE XL CleanBot Starter Kit"
|
||||
@@ -1,23 +1,25 @@
|
||||
/datum/supply_pack/munitions/expeditionguns
|
||||
name = "Frontier phaser (station-locked) crate"
|
||||
/datum/supply_pack/munitions/expeditionguns //CHOMP Edit begin: Re-appropriating this whole block. Changing frontier phasers to phaseguns.
|
||||
name = "Exploration phasegun (station-locked) crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/energy/locked/frontier = 2,
|
||||
/obj/item/weapon/gun/energy/locked/frontier/holdout = 2,
|
||||
/obj/item/weapon/gun/energy/locked/phasegun/pistol = 2,
|
||||
/obj/item/weapon/gun/energy/locked/phasegun/rifle = 2,
|
||||
/obj/item/weapon/gun/energy/locked/phasegun = 2
|
||||
)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "frontier phaser crate"
|
||||
access = access_explorer //CHOMP explo keep
|
||||
containername = "phasegun crate"
|
||||
access = access_explorer
|
||||
|
||||
/datum/supply_pack/munitions/expeditionbows
|
||||
name = "Frontier bows (station-locked) crate"
|
||||
/datum/supply_pack/munitions/expeditioncannon
|
||||
name = "Exploration phasecannon (station-locked) crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/energy/locked/frontier/handbow=2
|
||||
/obj/item/weapon/gun/energy/locked/phasegun/cannon = 1
|
||||
)
|
||||
cost = 20
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "phaser handbow crate"
|
||||
access = access_explorer //CHOMP explo keep
|
||||
containername = "phasegun cannon crate"
|
||||
access = access_explorer
|
||||
//CHOMP Edit end
|
||||
|
||||
/datum/supply_pack/munitions/ofd_charge_emp
|
||||
name = "OFD Charge - EMP"
|
||||
|
||||
@@ -114,3 +114,7 @@
|
||||
/area/medical/cryo/autoresleeve
|
||||
name = "\improper Medical Autoresleeving"
|
||||
forbid_events = TRUE
|
||||
|
||||
/area/rnd/research/particleaccelerator
|
||||
name = "\improper Particle Accelerator Lab"
|
||||
icon_state = "toxlab"
|
||||
@@ -427,9 +427,10 @@ var/global/datum/controller/occupations/job_master
|
||||
// Try desperately (and sorta poorly) to equip the item. Now with increased desperation!
|
||||
if(G.slot && !(G.slot in custom_equip_slots))
|
||||
var/metadata = H.client.prefs.gear[G.display_name]
|
||||
if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head)
|
||||
custom_equip_leftovers += thing
|
||||
else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
|
||||
//if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head)
|
||||
// custom_equip_leftovers += thing
|
||||
//else
|
||||
if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
|
||||
to_chat(H, "<span class='notice'>Equipping you with \the [thing]!</span>")
|
||||
if(G.slot != slot_tie)
|
||||
custom_equip_slots.Add(G.slot)
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
|
||||
if(shocked)
|
||||
shock(user, 50)
|
||||
|
||||
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/autolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
@@ -135,7 +135,7 @@
|
||||
if(istype(O,/obj/item/ammo_magazine/clip) || istype(O,/obj/item/ammo_magazine/s357) || istype(O,/obj/item/ammo_magazine/s38) || istype (O,/obj/item/ammo_magazine/s44)/* VOREstation Edit*/) // Prevents ammo recycling exploit with speedloaders.
|
||||
to_chat(user, "\The [O] is too hazardous to recycle with the autolathe!")
|
||||
return
|
||||
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/autolathe/attack_hand(mob/user as mob)
|
||||
@@ -177,12 +177,12 @@
|
||||
max_sheets = 0
|
||||
//Build list of multipliers for sheets.
|
||||
multiplier = tgui_input_number(usr, "How many do you want to print? (0-[max_sheets])", null, null, max_sheets, 0)
|
||||
if(!multiplier || multiplier <= 0 || multiplier > max_sheets || tgui_status(usr, state) != STATUS_INTERACTIVE)
|
||||
if(!multiplier || multiplier <= 0 || (multiplier != round(multiplier)) || multiplier > max_sheets || tgui_status(usr, state) != STATUS_INTERACTIVE)
|
||||
return FALSE
|
||||
|
||||
//Check if we still have the materials.
|
||||
var/coeff = (making.no_scale ? 1 : mat_efficiency) //stacks are unaffected by production coefficient
|
||||
|
||||
|
||||
for(var/datum/material/used_material as anything in making.resources)
|
||||
var/amount_needed = making.resources[used_material] * coeff * multiplier
|
||||
materials_used[used_material] = amount_needed
|
||||
@@ -190,7 +190,7 @@
|
||||
if(LAZYLEN(materials_used))
|
||||
if(!materials.has_materials(materials_used))
|
||||
return
|
||||
|
||||
|
||||
materials.use_materials(materials_used)
|
||||
|
||||
busy = making.name
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
/obj/machinery/telecomms/relay/preset/station
|
||||
id = "Station Relay"
|
||||
listening_level = 1
|
||||
autolinkers = list("s_relay")
|
||||
|
||||
/obj/machinery/telecomms/relay/preset/telecomms
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
icon_state = "dirt"
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age)
|
||||
/obj/effect/decal/cleanable/dirt/Initialize(var/mapload, var/_age) //CHOMPEdit
|
||||
.=..()
|
||||
var/turf/simulated/our_turf = src.loc
|
||||
if(our_turf && istype(our_turf) && our_turf.can_dirty && _age)
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
/obj/effect/landmark/vermin
|
||||
name = "verminstart"
|
||||
|
||||
/obj/effect/landmark/wildlife
|
||||
name = "wildlife"
|
||||
var/wildlife_type = 2 //1 for water, 2 for land; thats all for now
|
||||
|
||||
/obj/effect/landmark/late_antag
|
||||
name = "Antag Latespawn"
|
||||
var/antag_id
|
||||
|
||||
@@ -394,7 +394,7 @@ var/list/global/slot_flags_enumeration = list(
|
||||
//If you are making custom procs but would like to retain partial or complete functionality of this one, include a 'return ..()' to where you want this to happen.
|
||||
//Set disable_warning to 1 if you wish it to not give you outputs.
|
||||
//Should probably move the bulk of this into mob code some time, as most of it is related to the definition of slots and not item-specific
|
||||
/obj/item/proc/mob_can_equip(M as mob, slot, disable_warning = FALSE)
|
||||
/obj/item/proc/mob_can_equip(M as mob, slot, disable_warning = FALSE, var/ignore_obstruction = FALSE)
|
||||
if(!slot) return 0
|
||||
if(!M) return 0
|
||||
|
||||
@@ -420,7 +420,7 @@ var/list/global/slot_flags_enumeration = list(
|
||||
|
||||
//Next check if the slot is accessible.
|
||||
var/mob/_user = disable_warning? null : H
|
||||
if(!H.slot_is_accessible(slot, src, _user))
|
||||
if(!ignore_obstruction && !H.slot_is_accessible(slot, src, _user))
|
||||
return 0
|
||||
|
||||
//Lastly, check special rules for the desired slot.
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "It prints security citations!"
|
||||
icon = 'icons/obj/device_vr.dmi'
|
||||
icon_state = "sec_ticket_printer"
|
||||
slot_flags = SLOT_BELT | SLOT_HOLSTER
|
||||
var/print_cooldown = 1 MINUTE
|
||||
var/last_print
|
||||
|
||||
|
||||
@@ -240,7 +240,7 @@
|
||||
//Return 1 if an immediate subsequent call to use() would succeed.
|
||||
//Ensures that code dealing with stacks uses the same logic
|
||||
/obj/item/stack/proc/can_use(var/used)
|
||||
if(used < 0 || used % 1)
|
||||
if(used < 0 || (used != round(used)))
|
||||
stack_trace("Tried to use a bad stack amount: [used]")
|
||||
return 0
|
||||
if(get_amount() < used)
|
||||
@@ -265,7 +265,7 @@
|
||||
return 1
|
||||
|
||||
/obj/item/stack/proc/add(var/extra)
|
||||
if(extra < 0 || extra % 1)
|
||||
if(extra < 0 || (extra != round(extra)))
|
||||
stack_trace("Tried to add a bad stack amount: [extra]")
|
||||
return 0
|
||||
if(!uses_charge)
|
||||
@@ -283,7 +283,7 @@
|
||||
S.add_charge(charge_costs[i] * extra)
|
||||
|
||||
/obj/item/stack/proc/set_amount(var/new_amount, var/no_limits = FALSE)
|
||||
if(new_amount < 0 || new_amount % 1)
|
||||
if(new_amount < 0 || (new_amount != round(new_amount)))
|
||||
stack_trace("Tried to set a bad stack amount: [new_amount]")
|
||||
return 0
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
if (isnull(tamount))
|
||||
tamount = src.get_amount()
|
||||
|
||||
if(tamount < 0 || tamount % 1)
|
||||
if(tamount < 0 || (tamount != round(tamount)))
|
||||
stack_trace("Tried to transfer a bad stack amount: [tamount]")
|
||||
return 0
|
||||
|
||||
@@ -347,7 +347,7 @@
|
||||
if(uses_charge)
|
||||
return null
|
||||
|
||||
if(tamount < 0 || tamount % 1)
|
||||
if(tamount < 0 || (tamount != round(tamount)))
|
||||
stack_trace("Tried to split a bad stack amount: [tamount]")
|
||||
return null
|
||||
|
||||
@@ -403,6 +403,9 @@
|
||||
/obj/item/stack/attack_hand(mob/user as mob)
|
||||
if (user.get_inactive_hand() == src)
|
||||
var/N = tgui_input_number(usr, "How many stacks of [src] would you like to split off? There are currently [amount].", "Split stacks", 1, amount, 1)
|
||||
if(N != round(N))
|
||||
to_chat(user, "<span class='warning'>You cannot separate a non-whole number of stacks!</span>")
|
||||
return
|
||||
if(N)
|
||||
var/obj/item/stack/F = src.split(N)
|
||||
if (F)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
if(isrobot(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(R.module.type == /obj/item/weapon/robot_module/robot/scrubpup) // You can now feed the trash borg yay.
|
||||
if(R.module.type == /obj/item/weapon/robot_module/robot/janitor/scrubpup) // You can now feed the trash borg yay.
|
||||
playsound(src,'sound/items/eatfood.ogg', rand(10,50), 1)
|
||||
user.drop_item()
|
||||
forceMove(R.vore_selected)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
throwforce = 0
|
||||
force = 0
|
||||
action_button_name = "Command"
|
||||
w_class = ITEMSIZE_SMALL //CHOMPEdit
|
||||
|
||||
var/active = FALSE //Is it set up?
|
||||
var/mob/living/owner //Reference to the owner
|
||||
@@ -854,4 +855,4 @@
|
||||
|
||||
/mob/living
|
||||
var/capture_crystal = TRUE //If TRUE, the mob is capturable. Otherwise it isn't.
|
||||
var/capture_caught = FALSE //If TRUE, the mob has already been caught, and so cannot be caught again.
|
||||
var/capture_caught = FALSE //If TRUE, the mob has already been caught, and so cannot be caught again.
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins to do [H]'s lips with \the [src].</span>", \
|
||||
"<span class='notice'>You begin to apply \the [src].</span>")
|
||||
if(do_after(user, 20) && do_after(H, 20, 5, 0)) //user needs to keep their active hand, H does not.
|
||||
if(do_after(user, 20, H)) //user needs to keep their active hand, H does not.
|
||||
user.visible_message("<span class='notice'>[user] does [H]'s lips with \the [src].</span>", \
|
||||
"<span class='notice'>You apply \the [src].</span>")
|
||||
H.lip_style = colour
|
||||
|
||||
@@ -56,10 +56,7 @@
|
||||
to_chat(user, "<span class='notice'>You cut open the present.</span>")
|
||||
|
||||
for(var/mob/M in src) //Should only be one but whatever.
|
||||
M.loc = src.loc
|
||||
if (M.client)
|
||||
M.client.eye = M.client.mob
|
||||
M.client.perspective = MOB_PERSPECTIVE
|
||||
M.forceMove(src.loc)
|
||||
|
||||
qdel(src)
|
||||
|
||||
@@ -180,11 +177,7 @@
|
||||
var/obj/effect/spresent/present = new /obj/effect/spresent (H.loc)
|
||||
src.amount -= 2
|
||||
|
||||
if (H.client)
|
||||
H.client.perspective = EYE_PERSPECTIVE
|
||||
H.client.eye = present
|
||||
|
||||
H.loc = present
|
||||
H.forceMove(present)
|
||||
|
||||
add_attack_logs(user,H,"Wrapped with [src]")
|
||||
else
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
show_messages = 0
|
||||
allow_quick_empty = TRUE
|
||||
use_sound = 'sound/items/drop/flesh.ogg'
|
||||
var/egg_name = null //CHOMPAdd
|
||||
|
||||
/obj/item/weapon/storage/vore_egg/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
/obj/item/weapon/storage/pill_bottle/corophizine,
|
||||
/obj/item/weapon/storage/pill_bottle/combat,
|
||||
/obj/item/stack/medical/splint,
|
||||
/obj/item/device/healthanalyzer/advanced
|
||||
/obj/item/device/healthanalyzer/phasic
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/firstaid/surgery
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
for (var/obj/item/weapon/grab/G in H.grabbed_by)
|
||||
if (G.loc == user && G.state >= GRAB_AGGRESSIVE)
|
||||
return TRUE
|
||||
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/tape_roll/attack(var/mob/living/carbon/human/H, var/mob/user)
|
||||
@@ -53,7 +53,7 @@
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s eyes!</span>")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/blindfold/tape(H), slot_glasses)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/blindfold/tape(H), slot_glasses, ignore_obstructions = FALSE)
|
||||
H.update_inv_glasses()
|
||||
playsound(src, 'sound/effects/tape.ogg',25)
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s mouth!</span>")
|
||||
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask, ignore_obstructions = FALSE)
|
||||
H.update_inv_wear_mask()
|
||||
playsound(src, 'sound/effects/tape.ogg',25)
|
||||
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
playsound(src, 'sound/items/change_jaws.ogg', 50, 1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
counterpart.persist_storable = persist_storable
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the cutting jaws to [src].</span>")
|
||||
|
||||
@@ -141,6 +141,7 @@
|
||||
playsound(src,'sound/items/change_drill.ogg',50,1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
counterpart.persist_storable = persist_storable
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the bolt driver bit to [src].</span>")
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
playsound(src, 'sound/items/change_jaws.ogg', 50, 1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
counterpart.persist_storable = persist_storable
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the pry jaws to [src].</span>")
|
||||
|
||||
@@ -104,6 +104,7 @@
|
||||
playsound(src,'sound/items/change_drill.ogg',50,1)
|
||||
user.drop_item(src)
|
||||
counterpart.forceMove(get_turf(src))
|
||||
counterpart.persist_storable = persist_storable
|
||||
src.forceMove(counterpart)
|
||||
user.put_in_active_hand(counterpart)
|
||||
to_chat(user, "<span class='notice'>You attach the screw driver bit to [src].</span>")
|
||||
|
||||
@@ -41,11 +41,21 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (src.opened)
|
||||
if (istype(W, /obj/item/weapon/grab))
|
||||
if(istype(W, /obj/item/weapon/storage/laundry_basket))
|
||||
return ..(W,user)
|
||||
if(istype(W, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = W
|
||||
src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
|
||||
if(large)
|
||||
MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The locker is too small to stuff [G.affecting] into!</span>")
|
||||
if(isrobot(user))
|
||||
return
|
||||
if(W.loc != user) // This should stop mounted modules ending up outside the module.
|
||||
return
|
||||
user.drop_item()
|
||||
if (W) W.forceMove(src.loc)
|
||||
if(W)
|
||||
W.forceMove(loc)
|
||||
else if(W.GetID())
|
||||
var/obj/item/weapon/card/id/I = W.GetID()
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@
|
||||
update_state()
|
||||
|
||||
/obj/structure/door_assembly/attack_robot(mob/living/silicon/robot/user)
|
||||
if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering/general)) \
|
||||
if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \
|
||||
|| istype(user.module,/obj/item/weapon/robot_module/drone))) //Only dron (and engiborg) needs this.
|
||||
rename_door(user)
|
||||
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/obj/structure/ghost_pod/proc/reset_ghostpod() //Makes the ghost pod usable again and re-adds it to the active ghost pod list if it is not on it.
|
||||
active_ghost_pods |= src
|
||||
used = FALSE
|
||||
busy = FALSE
|
||||
|
||||
/obj/structure/ghost_pod/ghost_activated/maintpred
|
||||
name = "maintenance hole"
|
||||
desc = "Looks like some creature dug its way into station's maintenance..."
|
||||
@@ -61,25 +66,26 @@
|
||||
/obj/structure/ghost_pod/ghost_activated/maintpred/create_occupant(var/mob/M)
|
||||
..()
|
||||
var/choice
|
||||
var/randomize
|
||||
var/finalized = "No"
|
||||
|
||||
if(jobban_isbanned(M, "GhostRoles"))
|
||||
to_chat(M, "<span class='warning'>You cannot inhabit this creature because you are banned from playing ghost roles.</span>")
|
||||
reset_ghostpod()
|
||||
return
|
||||
|
||||
while(finalized == "No" && M.client)
|
||||
if(jobban_isbanned(M, "GhostRoles"))
|
||||
to_chat(M, "<span class='warning'>You cannot inhabit this creature because you are banned from playing ghost roles.</span>")
|
||||
return
|
||||
choice = tgui_input_list(M, "What type of predator do you want to play as?", "Maintpred Choice", possible_mobs)
|
||||
if(!choice)
|
||||
// randomize = TRUE //CHOMP remove FUCK OFF. When I press cancel I expect to cancel.
|
||||
used = FALSE //CHOMP add 200 IQ
|
||||
busy = FALSE //CHOMP add 201 IQ
|
||||
break
|
||||
if(!choice) //We probably pushed the cancel button on the mob selection. Let's just put the ghost pod back in the list.
|
||||
to_chat(M, "<span class='notice'>No mob selected, cancelling.</span>")
|
||||
reset_ghostpod()
|
||||
return
|
||||
|
||||
if(choice)
|
||||
finalized = tgui_alert(M, "Are you sure you want to play as [choice]?","Confirmation",list("No","Yes"))
|
||||
|
||||
if(randomize)
|
||||
choice = pick(possible_mobs)
|
||||
if(!choice) //If somehow we ended up here and we don't have a choice, let's just reset things!
|
||||
reset_ghostpod()
|
||||
return
|
||||
|
||||
var/mobtype = possible_mobs[choice]
|
||||
var/mob/living/simple_mob/newPred = new mobtype(get_turf(src))
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
return
|
||||
|
||||
// Making windows, different per subtype
|
||||
else if(istype(W, /obj/item/stack/material/glass))
|
||||
else if(istype(W, /obj/item/stack/material/glass) || istype(W, /obj/item/stack/material/cyborg/glass))
|
||||
handle_glass_use(user, W)
|
||||
return
|
||||
|
||||
|
||||
@@ -970,12 +970,15 @@
|
||||
desc = "Flashy and pretty."
|
||||
icon = 'icons/obj/christmas.dmi'
|
||||
icon_state = "xmaslights"
|
||||
layer = 4.9
|
||||
plane = PLANE_LIGHTING_ABOVE
|
||||
|
||||
/obj/structure/sign/christmas/wreath
|
||||
name = "wreath"
|
||||
desc = "Prickly and festive."
|
||||
icon = 'icons/obj/christmas.dmi'
|
||||
icon_state = "doorwreath"
|
||||
layer = 5
|
||||
|
||||
/obj/structure/sign/hostilefauna
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
buckle_lying = 0 //force people to sit up in chairs when buckled
|
||||
var/propelled = 0 // Check for fire-extinguisher-driven chairs
|
||||
|
||||
/obj/structure/bed/chair/Initialize()
|
||||
. = ..()
|
||||
/obj/structure/bed/chair/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..()
|
||||
update_layer()
|
||||
|
||||
/obj/structure/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
@@ -113,44 +113,38 @@
|
||||
I.color = padding_material.icon_colour
|
||||
add_overlay(I)
|
||||
|
||||
/obj/structure/bed/chair/comfy/brown/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, MAT_LEATHER)
|
||||
/obj/structure/bed/chair/comfy/brown/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, MAT_LEATHER)
|
||||
|
||||
/obj/structure/bed/chair/comfy/red/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "carpet")
|
||||
/obj/structure/bed/chair/comfy/red/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "carpet")
|
||||
|
||||
/obj/structure/bed/chair/comfy/teal/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "teal")
|
||||
/obj/structure/bed/chair/comfy/teal/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "teal")
|
||||
|
||||
/obj/structure/bed/chair/comfy/black/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "black")
|
||||
/obj/structure/bed/chair/comfy/black/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "black")
|
||||
|
||||
/obj/structure/bed/chair/comfy/green/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "green")
|
||||
/obj/structure/bed/chair/comfy/green/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "green")
|
||||
|
||||
/obj/structure/bed/chair/comfy/purp/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "purple")
|
||||
/obj/structure/bed/chair/comfy/purp/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "purple")
|
||||
|
||||
/obj/structure/bed/chair/comfy/blue/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "blue")
|
||||
/obj/structure/bed/chair/comfy/blue/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "blue")
|
||||
|
||||
/obj/structure/bed/chair/comfy/beige/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "beige")
|
||||
/obj/structure/bed/chair/comfy/beige/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "beige")
|
||||
|
||||
/obj/structure/bed/chair/comfy/lime/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "lime")
|
||||
/obj/structure/bed/chair/comfy/lime/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "lime")
|
||||
|
||||
/obj/structure/bed/chair/comfy/red/New(var/newloc,var/newmaterial)
|
||||
..(newloc,"steel","carpet")
|
||||
/obj/structure/bed/chair/comfy/yellow/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "yellow")
|
||||
|
||||
/obj/structure/bed/chair/comfy/teal/New(var/newloc,var/newmaterial)
|
||||
..(newloc,"steel","teal")
|
||||
|
||||
/obj/structure/bed/chair/comfy/yellow/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "yellow")
|
||||
|
||||
/obj/structure/bed/chair/comfy/orange/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "orange")
|
||||
/obj/structure/bed/chair/comfy/orange/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "orange")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded
|
||||
name = "rounded chair"
|
||||
@@ -158,38 +152,38 @@
|
||||
icon_state = "roundedchair"
|
||||
base_icon = "roundedchair"
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/brown/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, MAT_LEATHER)
|
||||
/obj/structure/bed/chair/comfy/rounded/brown/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, MAT_LEATHER)
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/red/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "carpet")
|
||||
/obj/structure/bed/chair/comfy/rounded/red/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "carpet")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/teal/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "teal")
|
||||
/obj/structure/bed/chair/comfy/rounded/teal/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "teal")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/black/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "black")
|
||||
/obj/structure/bed/chair/comfy/rounded/black/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "black")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/green/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "green")
|
||||
/obj/structure/bed/chair/comfy/rounded/green/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "green")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/purple/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "purple")
|
||||
/obj/structure/bed/chair/comfy/rounded/purple/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "purple")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/blue/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "blue")
|
||||
/obj/structure/bed/chair/comfy/rounded/blue/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "blue")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/beige/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "beige")
|
||||
/obj/structure/bed/chair/comfy/rounded/beige/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "beige")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/lime/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "lime")
|
||||
/obj/structure/bed/chair/comfy/rounded/lime/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "lime")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/yellow/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "yellow")
|
||||
/obj/structure/bed/chair/comfy/rounded/yellow/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "yellow")
|
||||
|
||||
/obj/structure/bed/chair/comfy/rounded/orange/Initialize(var/ml,var/newmaterial)
|
||||
. = ..(ml, MAT_STEEL, "orange")
|
||||
/obj/structure/bed/chair/comfy/rounded/orange/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc, MAT_STEEL, "orange")
|
||||
|
||||
/obj/structure/bed/chair/office
|
||||
anchored = FALSE
|
||||
@@ -356,8 +350,8 @@
|
||||
color = null
|
||||
var/padding_color = "#CC0000"
|
||||
|
||||
/obj/structure/bed/chair/sofa/bench/Initialize()
|
||||
. = ..()
|
||||
/obj/structure/bed/chair/sofa/bench/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..()
|
||||
var/mutable_appearance/MA
|
||||
// If we're north-facing, metal goes above mob, padding overlay goes below mob.
|
||||
if((dir & NORTH) && !corner_piece)
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
base_icon = "modern_chair"
|
||||
applies_material_colour = 0
|
||||
|
||||
/obj/structure/bed/chair/modern_chair/Initialize()
|
||||
. = ..()
|
||||
/obj/structure/bed/chair/modern_chair/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..()
|
||||
var/image/I = image(icon, "[base_icon]_over")
|
||||
I.layer = ABOVE_MOB_LAYER
|
||||
I.plane = MOB_PLANE
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
var/min_mob_buckle_size = MOB_SMALL
|
||||
var/max_mob_buckle_size = MOB_LARGE
|
||||
|
||||
/obj/structure/bed/chair/wheelchair/Initialize()
|
||||
. = ..()
|
||||
/obj/structure/bed/chair/wheelchair/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/structure/bed/chair/wheelchair/motor
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
update_state()
|
||||
|
||||
/obj/structure/windoor_assembly/attack_robot(mob/living/silicon/robot/user)
|
||||
if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering/general)) \
|
||||
if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \
|
||||
|| istype(user.module,/obj/item/weapon/robot_module/drone))) //Only dron (and engiborg) needs this.
|
||||
rename_door(user)
|
||||
|
||||
|
||||
@@ -185,9 +185,9 @@
|
||||
user.do_attack_animation(src)
|
||||
shatter()
|
||||
|
||||
else if (usr.a_intent == I_HURT)
|
||||
else if(usr && usr.a_intent == I_HURT) //CHOMPEdit
|
||||
|
||||
if (istype(usr,/mob/living/carbon/human))
|
||||
if(istype(usr,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(H.species.can_shred(H))
|
||||
attack_generic(H,25)
|
||||
|
||||
@@ -115,6 +115,8 @@ var/list/flooring_types
|
||||
var/list/movable_atom_whitelist = list()
|
||||
var/list/movable_atom_blacklist = list()
|
||||
|
||||
var/check_season = FALSE //VOREStation Addition
|
||||
|
||||
/decl/flooring/proc/get_plating_type(var/turf/T)
|
||||
return plating_type
|
||||
|
||||
@@ -252,6 +254,12 @@ var/list/flooring_types
|
||||
'sound/effects/footstep/snow4.ogg',
|
||||
'sound/effects/footstep/snow5.ogg'))
|
||||
|
||||
/decl/flooring/snow/fake
|
||||
desc = "A coating of fake snow, looks surprisingly realistic, though not as cold as the real thing."
|
||||
icon = 'icons/turf/flooring/fakesnow.dmi'
|
||||
icon_base = "snow"
|
||||
flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_SHOVEL
|
||||
|
||||
/decl/flooring/snow/snow2
|
||||
name = "snow"
|
||||
desc = "A layer of many tiny bits of frozen water. It's hard to tell how deep it is."
|
||||
@@ -627,4 +635,14 @@ var/list/flooring_types
|
||||
can_paint = 1 //VOREStation edit. Let's allow for some fun.
|
||||
can_engrave = 1 //VOREStation edit. Fun.
|
||||
flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK | TURF_REMOVE_CROWBAR
|
||||
|
||||
|
||||
///// Season Time! ///// VOREStation Addition Start
|
||||
/decl/flooring/grass/seasonal_grass
|
||||
desc = "It's grass!"
|
||||
icon = 'icons/seasonal/turf.dmi'
|
||||
check_season = TRUE
|
||||
has_base_range = 11
|
||||
|
||||
/decl/flooring/grass/seasonal_grass/dark
|
||||
name = "grass"
|
||||
icon_base = "darkgrass"
|
||||
|
||||
@@ -489,6 +489,12 @@
|
||||
initial_flooring = /decl/flooring/snow
|
||||
var/list/crossed_dirs = list()
|
||||
|
||||
/turf/simulated/floor/fakesnow
|
||||
name = "fake snow"
|
||||
icon = 'icons/turf/outdoors.dmi'
|
||||
icon_state = "snow"
|
||||
initial_flooring = /decl/flooring/snow/fake
|
||||
|
||||
/turf/simulated/floor/snow/snow2
|
||||
name = "snow"
|
||||
icon = 'icons/turf/snow.dmi'
|
||||
|
||||
@@ -0,0 +1,257 @@
|
||||
var/world_time_season
|
||||
|
||||
/proc/setup_season()
|
||||
var/month = text2num(time2text(world.timeofday, "MM")) // get the current month
|
||||
switch(month)
|
||||
if(1 to 2)
|
||||
world_time_season = "winter"
|
||||
if(3 to 5)
|
||||
world_time_season = "spring"
|
||||
if(6 to 8)
|
||||
world_time_season = "summer"
|
||||
if(9 to 11)
|
||||
world_time_season = "autumn"
|
||||
if(12)
|
||||
world_time_season = "winter"
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/seasonal
|
||||
name = "grass"
|
||||
icon = 'icons/seasonal/turf.dmi'
|
||||
icon_state = "s-grass"
|
||||
|
||||
icon_edge = 'icons/seasonal/turf_edge.dmi'
|
||||
|
||||
initial_flooring = /decl/flooring/grass/seasonal_grass
|
||||
|
||||
grass_types = list()
|
||||
var/static/list/overlays_cache = list()
|
||||
animal_chance = 0.5 // CHOMPedit: upstream redeclared these as new vars for some reason
|
||||
animal_types = list() // CHOMPedit end
|
||||
var/tree_chance = 1
|
||||
var/tree_types = list()
|
||||
var/snow_chance = 10
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/Initialize()
|
||||
|
||||
switch(world_time_season)
|
||||
if("spring")
|
||||
tree_types = list(
|
||||
/obj/structure/flora/tree/bigtree,
|
||||
/obj/structure/flora/tree/jungle_small,
|
||||
/obj/structure/flora/tree/jungle
|
||||
)
|
||||
animal_types = list(
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi = 10,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1,
|
||||
/mob/living/simple_mob/vore/redpanda = 40,
|
||||
/mob/living/simple_mob/vore/redpanda/fae = 2,
|
||||
/mob/living/simple_mob/vore/sheep = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/black = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/white = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/brown = 20,
|
||||
/mob/living/simple_mob/vore/leopardmander = 2,
|
||||
/mob/living/simple_mob/vore/horse/big = 10,
|
||||
/mob/living/simple_mob/vore/bigdragon/friendly = 1,
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 20
|
||||
)
|
||||
grass_types = list(
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
/obj/structure/flora/ausbushes/fullgrass,
|
||||
/obj/structure/flora/ausbushes/brflowers,
|
||||
/obj/structure/flora/ausbushes/genericbush,
|
||||
/obj/structure/flora/ausbushes/lavendergrass,
|
||||
/obj/structure/flora/ausbushes/leafybush,
|
||||
/obj/structure/flora/ausbushes/ppflowers,
|
||||
/obj/structure/flora/ausbushes/sunnybush,
|
||||
/obj/structure/flora/ausbushes/ywflowers,
|
||||
/obj/structure/flora/mushroom
|
||||
)
|
||||
|
||||
grass_chance = 30
|
||||
if("summer")
|
||||
tree_types = list(
|
||||
/obj/structure/flora/tree/bigtree,
|
||||
/obj/structure/flora/tree/jungle_small,
|
||||
/obj/structure/flora/tree/jungle
|
||||
)
|
||||
animal_types = list(
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi = 10,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1,
|
||||
/mob/living/simple_mob/vore/redpanda = 40,
|
||||
/mob/living/simple_mob/vore/redpanda/fae = 2,
|
||||
/mob/living/simple_mob/vore/sheep = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/black = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/white = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/brown = 20,
|
||||
/mob/living/simple_mob/vore/leopardmander = 2,
|
||||
/mob/living/simple_mob/vore/horse/big = 10,
|
||||
/mob/living/simple_mob/vore/bigdragon/friendly = 1,
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 20
|
||||
)
|
||||
grass_types = list(
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
/obj/structure/flora/ausbushes/fullgrass
|
||||
)
|
||||
|
||||
if("autumn")
|
||||
tree_types = list(
|
||||
/obj/structure/flora/tree/bigtree
|
||||
)
|
||||
|
||||
animal_types = list(
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi = 10,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1,
|
||||
/mob/living/simple_mob/vore/redpanda = 40,
|
||||
/mob/living/simple_mob/vore/redpanda/fae = 2,
|
||||
/mob/living/simple_mob/vore/sheep = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/black = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/white = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/brown = 20,
|
||||
/mob/living/simple_mob/vore/horse/big = 10,
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 20
|
||||
)
|
||||
grass_types = list(
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
/obj/structure/flora/pumpkin,
|
||||
/obj/structure/flora/ausbushes
|
||||
)
|
||||
|
||||
grass_chance = 10
|
||||
animal_chance = 0.25
|
||||
if("winter")
|
||||
grass_chance = 0
|
||||
tree_types = list(
|
||||
/obj/structure/flora/tree/dead,
|
||||
/obj/structure/flora/tree/pine
|
||||
)
|
||||
|
||||
animal_types = list(
|
||||
/mob/living/simple_mob/vore/rabbit/white = 40,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi = 10,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1,
|
||||
/mob/living/simple_mob/vore/redpanda = 10
|
||||
)
|
||||
if(prob(snow_chance))
|
||||
chill()
|
||||
return
|
||||
|
||||
grass_types = list(
|
||||
/obj/structure/flora/grass/both,
|
||||
/obj/structure/flora/grass/brown,
|
||||
/obj/structure/flora/grass/green,
|
||||
/obj/structure/flora/bush
|
||||
)
|
||||
|
||||
grass_chance = 1
|
||||
animal_chance = 0.1
|
||||
|
||||
|
||||
if(tree_chance && prob(tree_chance) && !check_density())
|
||||
var/tree_type = pickweight(tree_types)
|
||||
new tree_type(src)
|
||||
|
||||
|
||||
if(animal_chance && prob(animal_chance) && !check_density())
|
||||
var/animal_type = pickweight(animal_types)
|
||||
new animal_type(src)
|
||||
|
||||
|
||||
. = ..()
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/proc/update_desc()
|
||||
|
||||
switch(world_time_season)
|
||||
if("spring")
|
||||
desc = "Lush green grass, flourishing! Little flowers peek out from between the blades here and there!"
|
||||
if("summer")
|
||||
desc = "Bright green grass, a little dry in the summer heat!"
|
||||
if("autumn")
|
||||
desc = "Golden grass, it's a little crunchy as it prepares for winter!"
|
||||
if("winter")
|
||||
desc = "Dry, seemingly dead grass! It's too cold for the grass..."
|
||||
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/update_icon(update_neighbors)
|
||||
. = ..()
|
||||
update_desc()
|
||||
switch(world_time_season)
|
||||
if("spring")
|
||||
if(prob(50))
|
||||
var/cache_key = "[world_time_season]-overlay[rand(1,19)]"
|
||||
if(!overlays_cache[cache_key])
|
||||
var/image/I = image(icon = src.icon, icon_state = cache_key, layer = ABOVE_TURF_LAYER) // Icon should be abstracted out
|
||||
I.plane = TURF_PLANE
|
||||
I.color = null
|
||||
I.appearance_flags = RESET_COLOR|KEEP_APART|PIXEL_SCALE
|
||||
overlays_cache[cache_key] = I
|
||||
add_overlay(overlays_cache[cache_key])
|
||||
if("summer")
|
||||
return
|
||||
if("autumn")
|
||||
if(prob(33))
|
||||
var/cache_key = "[world_time_season]-overlay[rand(1,6)]"
|
||||
if(!overlays_cache[cache_key])
|
||||
var/image/I = image(icon = src.icon, icon_state = cache_key, layer = ABOVE_TURF_LAYER) // Icon should be abstracted out
|
||||
I.plane = TURF_PLANE
|
||||
I.color = null
|
||||
I.appearance_flags = RESET_COLOR|KEEP_APART|PIXEL_SCALE
|
||||
overlays_cache[cache_key] = I
|
||||
add_overlay(overlays_cache[cache_key])
|
||||
|
||||
if("winter")
|
||||
return
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/notrees
|
||||
tree_chance = 0
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/nomobs
|
||||
animal_chance = 0
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs
|
||||
tree_chance = 0
|
||||
animal_chance = 0
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_nosnow
|
||||
tree_chance = 0
|
||||
animal_chance = 0
|
||||
snow_chance = 0
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/notrees_nomobs_lowsnow
|
||||
tree_chance = 0
|
||||
animal_chance = 0
|
||||
snow_chance = 1
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/lowsnow
|
||||
snow_chance = 1
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/dark
|
||||
icon_state = "ds-grass"
|
||||
edge_blending_priority = 4.01
|
||||
initial_flooring = /decl/flooring/grass/seasonal_grass/dark
|
||||
tree_chance = 5
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/dark/notrees
|
||||
tree_chance = 0
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/dark/nomobs
|
||||
animal_chance = 0
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/dark/notrees_nomobs
|
||||
tree_chance = 0
|
||||
animal_chance = 0
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/dark/notrees_nomobs_nosnow
|
||||
tree_chance = 0
|
||||
animal_chance = 0
|
||||
snow_chance = 0
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/dark/notrees_nomobs_lowsnow
|
||||
tree_chance = 0
|
||||
animal_chance = 0
|
||||
snow_chance = 1
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/dark/lowsnow
|
||||
snow_chance = 1
|
||||
|
||||
/turf/simulated/floor/water/seasonal/Initialize()
|
||||
. = ..()
|
||||
switch(world_time_season)
|
||||
if("winter")
|
||||
if(prob(99))
|
||||
ChangeTurf(/turf/simulated/floor/outdoors/ice)
|
||||
|
||||
/turf/simulated/floor/water/deep/seasonal/Initialize()
|
||||
. = ..()
|
||||
switch(world_time_season)
|
||||
if("winter")
|
||||
if(prob(75))
|
||||
ChangeTurf(/turf/simulated/floor/outdoors/ice)
|
||||
@@ -18,6 +18,8 @@
|
||||
var/dirt = 0
|
||||
var/special_temperature //Used for turf HE-Pipe interaction
|
||||
|
||||
var/icon_edge = 'icons/turf/outdoors_edge.dmi' //VOREStation Addition - Allows for alternative edge icon files
|
||||
|
||||
// This is not great.
|
||||
/turf/simulated/proc/wet_floor(var/wet_val = 1)
|
||||
if(wet > 2) //Can't mop up ice
|
||||
|
||||
@@ -23,6 +23,9 @@ var/image/no_ceiling_image = null
|
||||
icon_state = flooring_override
|
||||
else
|
||||
icon_state = flooring.icon_base
|
||||
//VOREStation Addition Start
|
||||
if(flooring.check_season)
|
||||
icon_state = "[icon_state]-[world_time_season]" //VOREStation Addition End
|
||||
if(flooring.has_base_range)
|
||||
icon_state = "[icon_state][rand(0,flooring.has_base_range)]"
|
||||
flooring_override = icon_state
|
||||
@@ -107,11 +110,11 @@ var/image/no_ceiling_image = null
|
||||
// Has to have it's own edge_blending_priority
|
||||
// Has to have a higher priority than us
|
||||
// Their icon_state is not our icon_state
|
||||
// They don't forbid_turf_edge
|
||||
// They don't forbid_turf_edge
|
||||
if(istype(T) && T.edge_blending_priority && edge_blending_priority < T.edge_blending_priority && icon_state != T.icon_state && !T.forbid_turf_edge())
|
||||
var/cache_key = "[T.get_edge_icon_state()]-[checkdir]" // Usually [icon_state]-[dirnum]
|
||||
if(!turf_edge_cache[cache_key])
|
||||
var/image/I = image(icon = 'icons/turf/outdoors_edge.dmi', icon_state = "[T.get_edge_icon_state()]-edge", dir = checkdir, layer = ABOVE_TURF_LAYER) // Icon should be abstracted out
|
||||
var/image/I = image(icon = T.icon_edge, icon_state = "[T.get_edge_icon_state()]-edge", dir = checkdir, layer = ABOVE_TURF_LAYER) // VOREStation Edit - icon_edge
|
||||
I.plane = TURF_PLANE
|
||||
turf_edge_cache[cache_key] = I
|
||||
add_overlay(turf_edge_cache[cache_key])
|
||||
@@ -282,4 +285,3 @@ var/image/no_ceiling_image = null
|
||||
I.layer = layer
|
||||
flooring_cache[cache_key] = I
|
||||
return flooring_cache[cache_key]
|
||||
|
||||
|
||||
@@ -79,3 +79,4 @@
|
||||
icon_state = "ice"
|
||||
desc = "Looks slippery."
|
||||
movement_cost = 4
|
||||
edge_blending_priority = 0
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
//end-emergency fix
|
||||
|
||||
src.update_status()
|
||||
setup_season() //VOREStation Addition
|
||||
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -741,7 +741,7 @@ var/datum/announcement/minor/admin_min_announcer = new
|
||||
/datum/admins/proc/toggleooc()
|
||||
set category = "Server"
|
||||
set desc="Globally Toggles OOC"
|
||||
set name="Toggle OOC"
|
||||
set name="Toggle Player OOC"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -757,7 +757,7 @@ var/datum/announcement/minor/admin_min_announcer = new
|
||||
/datum/admins/proc/togglelooc()
|
||||
set category = "Server"
|
||||
set desc="Globally Toggles LOOC"
|
||||
set name="Toggle LOOC"
|
||||
set name="Toggle Player LOOC"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
@@ -652,6 +652,21 @@
|
||||
message_admins(log)
|
||||
log_admin(log)
|
||||
|
||||
/datum/admins/proc/toggle_firework_override()
|
||||
set category = "Fun"
|
||||
set name = "Toggle Weather Firework Override"
|
||||
set desc = "Toggles ability for weather fireworks to affect weather on planet of choice."
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
var/datum/planet/planet = tgui_input_list(usr, "Which planet do you want to toggle firework effects on?", "Change Weather", SSplanets.planets)
|
||||
if(istype(planet) && planet.weather_holder)
|
||||
planet.weather_holder.firework_override = !(planet.weather_holder.firework_override)
|
||||
var/log = "[key_name(src)] toggled [planet.name]'s firework override to [planet.weather_holder.firework_override ? "on" : "off"]."
|
||||
message_admins(log)
|
||||
log_admin(log)
|
||||
|
||||
/datum/admins/proc/change_time()
|
||||
set category = "Debug"
|
||||
set name = "Change Planet Time"
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
|
||||
if(SMITE_AD_SPAM)
|
||||
if(target.client)
|
||||
create_fake_ad_popup_multiple(/obj/screen/popup/default, 15)
|
||||
target.client.create_fake_ad_popup_multiple(/obj/screen/popup/default, 15)
|
||||
|
||||
else
|
||||
return //Injection? Don't print any messages.
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
var/airlock_wire = null
|
||||
var/datum/wires/connected = null
|
||||
var/datum/radio_frequency/radio_connection
|
||||
var/deadman = FALSE
|
||||
|
||||
/obj/item/device/assembly/signaler/Initialize()
|
||||
. = ..()
|
||||
@@ -131,27 +130,6 @@
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
/obj/item/device/assembly/signaler/process()
|
||||
if(!deadman)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
var/mob/M = src.loc
|
||||
if(!M || !ismob(M))
|
||||
if(prob(5))
|
||||
signal()
|
||||
deadman = FALSE
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
else if(prob(5))
|
||||
M.visible_message("[M]'s finger twitches a bit over [src]'s signal button!")
|
||||
|
||||
/obj/item/device/assembly/signaler/verb/deadman_it()
|
||||
set src in usr
|
||||
set name = "Threaten to push the button!"
|
||||
set desc = "BOOOOM!"
|
||||
deadman = TRUE
|
||||
START_PROCESSING(SSobj, src)
|
||||
log_and_message_admins("is threatening to trigger a signaler deadman's switch")
|
||||
usr.visible_message("<font color='red'>[usr] moves their finger over [src]'s signal button...</font>")
|
||||
|
||||
/obj/item/device/assembly/signaler/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src,frequency)
|
||||
|
||||
@@ -405,14 +405,17 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/obj/item/organ/external/O = character.organs_by_name[N]
|
||||
O.markings.Cut()
|
||||
|
||||
var/priority = 0
|
||||
for(var/M in pref.body_markings)
|
||||
priority += 1
|
||||
var/datum/sprite_accessory/marking/mark_datum = body_marking_styles_list[M]
|
||||
var/mark_color = "[pref.body_markings[M]]"
|
||||
|
||||
for(var/BP in mark_datum.body_parts)
|
||||
var/obj/item/organ/external/O = character.organs_by_name[BP]
|
||||
if(O)
|
||||
O.markings[M] = list("color" = mark_color, "datum" = mark_datum)
|
||||
O.markings[M] = list("color" = mark_color, "datum" = mark_datum, "priority" = priority)
|
||||
character.markings_len = priority
|
||||
|
||||
var/list/last_descriptors = list()
|
||||
if(islist(pref.body_descriptors))
|
||||
|
||||
@@ -126,6 +126,14 @@
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/head/halo
|
||||
display_name = "halo (colorable)"
|
||||
path = /obj/item/clothing/head/halo
|
||||
|
||||
/datum/gear/head/halo/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/head/cap/mbill
|
||||
display_name = "cap, major bill's"
|
||||
path = /obj/item/clothing/head/soft/mbill
|
||||
@@ -436,4 +444,4 @@
|
||||
|
||||
/datum/gear/head/wheat
|
||||
display_name = "straw hat"
|
||||
path = /obj/item/clothing/head/wheat
|
||||
path = /obj/item/clothing/head/wheat
|
||||
|
||||
@@ -137,6 +137,7 @@ Talon winter coat
|
||||
path = /obj/item/clothing/suit/storage/hooded/hoodie
|
||||
|
||||
/datum/gear/suit/hoodie_vr/New()
|
||||
..()
|
||||
var/list/hoodies = list()
|
||||
for(var/hoodie_style in typesof(/obj/item/clothing/suit/storage/hooded/hoodie))
|
||||
var/obj/item/clothing/suit/storage/toggle/hoodie/hoodie = hoodie_style
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
desc = "A formal hat for SolGov Customs Officers."
|
||||
icon_state = "customshat"
|
||||
|
||||
/obj/item/clothing/head/halo
|
||||
name = "halo"
|
||||
desc = "a small metal ring, floating above it's wearer."
|
||||
icon_state = "halo"
|
||||
|
||||
/obj/item/clothing/head/pin
|
||||
icon_state = "pin"
|
||||
addblends = "pin_a"
|
||||
@@ -552,4 +557,4 @@
|
||||
desc = "Reputed to go faster."
|
||||
icon_state = "redtag"
|
||||
flags_inv = HIDEEARS|BLOCKHEADHAIR
|
||||
body_parts_covered = HEAD|EYES
|
||||
body_parts_covered = HEAD|EYES
|
||||
|
||||
@@ -92,13 +92,13 @@
|
||||
|
||||
//Orange emergency space suit
|
||||
/obj/item/clothing/head/helmet/space/emergency
|
||||
name = "Emergency Space Helmet"
|
||||
name = "emergency soft helmet"
|
||||
icon_state = "syndicate-helm-orange"
|
||||
desc = "A simple helmet with a built in light, smells like mothballs."
|
||||
flash_protection = FLASH_PROTECTION_NONE
|
||||
|
||||
/obj/item/clothing/suit/space/emergency
|
||||
name = "Emergency Softsuit"
|
||||
name = "emergency softsuit"
|
||||
icon_state = "syndicate-orange"
|
||||
desc = "A thin, ungainly softsuit colored in blaze orange for rescuers to easily locate, looks pretty fragile."
|
||||
slowdown = 2
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
..()
|
||||
return
|
||||
|
||||
var/obj/item/stack/cable_coil/CC = new (user.loc)
|
||||
var/obj/item/stack/cable_coil/CC = new (user.loc, 1)
|
||||
CC.update_icon()
|
||||
cut_overlays()
|
||||
string_attached = null
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fruitbar = 16,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 8,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 8,
|
||||
///obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5, //VOREStation Removal,
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5, //VOREStation Removal, //CHOMPedit nah
|
||||
/obj/item/weapon/towel/random = 8,
|
||||
/obj/item/toy/tennis = 4)
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fruitbar = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 5,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 25,
|
||||
///obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5,
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5, //CHOMPedit nah
|
||||
/obj/item/weapon/towel/random = 20,
|
||||
/obj/item/toy/tennis = 15)
|
||||
//VOREStation Edit End
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
emote_sound = 'sound/voice/biamthelaw.ogg'
|
||||
|
||||
/decl/emote/audible/synth/security/mob_can_use(var/mob/living/silicon/robot/user)
|
||||
return ..() && (istype(user) && (istype(user.module, /obj/item/weapon/robot_module/robot/security) || istype(user.module, /obj/item/weapon/robot_module/robot/knine))) //VOREStation Add - knine module
|
||||
return ..() && (istype(user) && (istype(user.module, /obj/item/weapon/robot_module/robot/security)))
|
||||
|
||||
/decl/emote/audible/synth/security/halt
|
||||
key = "halt"
|
||||
|
||||
@@ -140,8 +140,8 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Spiders", /datum/event/spider_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
|
||||
//YW Change new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
|
||||
//new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
|
||||
//new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Shipping Error", /datum/event/shipping_error , 30, list(ASSIGNMENT_ANY = 2), 0),
|
||||
//YW Change new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 60, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400),
|
||||
|
||||
@@ -208,6 +208,10 @@ var/list/event_last_fired = list()
|
||||
active_with_role["Medical"]++
|
||||
else if(istype(R.module, /obj/item/weapon/robot_module/robot/research))
|
||||
active_with_role["Scientist"]++
|
||||
else if(istype(R.module, /obj/item/weapon/robot_module/robot/janitor))
|
||||
active_with_role["Janitor"]++
|
||||
else if(istype(R.module, /obj/item/weapon/robot_module/robot/clerical/butler))
|
||||
active_with_role["Botanist"]++
|
||||
|
||||
if(M.mind.assigned_role in SSjob.get_job_titles_in_department(DEPARTMENT_ENGINEERING))
|
||||
active_with_role["Engineer"]++
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/datum/event/roaming_wildlife
|
||||
announceWhen = 10
|
||||
|
||||
/datum/event/roaming_wildlife/start()
|
||||
var/list/possible_spawns = list()
|
||||
for(var/obj/effect/landmark/C in landmarks_list)
|
||||
if(istype(C, /obj/effect/landmark/wildlife))
|
||||
var/obj/effect/landmark/wildlife/WLLM = C
|
||||
if(world_time_season == "winter" && WLLM.wildlife_type == 1) //fish forbidden in winter because ice now aparently
|
||||
continue
|
||||
possible_spawns.Add(C)
|
||||
|
||||
if(!(possible_spawns.len))
|
||||
return
|
||||
|
||||
var/threat_level
|
||||
var/spawn_count
|
||||
var/location_amount
|
||||
|
||||
var/points_to_spend
|
||||
|
||||
switch(severity)
|
||||
if(EVENT_LEVEL_MUNDANE)
|
||||
points_to_spend = 6
|
||||
if(EVENT_LEVEL_MODERATE)
|
||||
points_to_spend = 10
|
||||
if(EVENT_LEVEL_MAJOR)
|
||||
points_to_spend = 14
|
||||
|
||||
if(!points_to_spend)
|
||||
return
|
||||
|
||||
threat_level = rand(1,4)
|
||||
points_to_spend -= threat_level
|
||||
spawn_count = rand(1, min(points_to_spend-1, 9))
|
||||
points_to_spend -= spawn_count
|
||||
location_amount = points_to_spend
|
||||
|
||||
for(var/i = 1, i <= location_amount, i++)
|
||||
if(!(possible_spawns.len))
|
||||
break
|
||||
var/obj/effect/landmark/wildlife/WL = pick(possible_spawns)
|
||||
possible_spawns -= WL
|
||||
var/list/spawn_list
|
||||
switch(WL.wildlife_type)
|
||||
if(1)
|
||||
spawn_list = event_wildlife_aquatic
|
||||
if(2)
|
||||
spawn_list = event_wildlife_roaming
|
||||
if(!spawn_list)
|
||||
continue
|
||||
|
||||
spawn_list = pick(spawn_list[threat_level])
|
||||
var/spawn_type
|
||||
var/spawn_pos = get_turf(WL)
|
||||
|
||||
for(var/j = 1, j <= spawn_count, j++)
|
||||
spawn_type = pickweight(spawn_list)
|
||||
var/mob/living/L = new spawn_type(spawn_pos)
|
||||
step_away(L, WL)
|
||||
|
||||
/datum/event/roaming_wildlife/announce()
|
||||
var/message
|
||||
switch(severity)
|
||||
if(EVENT_LEVEL_MUNDANE)
|
||||
message = "Minor movements of local wildlife have been detected within proximity of the facility."
|
||||
if(EVENT_LEVEL_MODERATE)
|
||||
message = "Notable amount of local wildlife has been detected entering area surrounding the facility. Take caution."
|
||||
if(EVENT_LEVEL_MAJOR)
|
||||
message = "A particularly large shift within wildlife movement has been detected. Take caution."
|
||||
command_announcement.Announce(message, "Wildlife Monitoring")
|
||||
@@ -0,0 +1,124 @@
|
||||
/obj/machinery/firework_launcher
|
||||
name = "firework launcher"
|
||||
desc = "A machine for launching fireworks of varying practicality."
|
||||
icon = 'icons/obj/machines/firework_launcher.dmi'
|
||||
icon_state = "launcher01"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
circuit = /obj/item/weapon/circuitboard/firework_launcher
|
||||
var/obj/item/weapon/firework_star/loaded_star
|
||||
var/last_launch
|
||||
var/launch_cooldown = 5 MINUTES
|
||||
|
||||
/obj/machinery/firework_launcher/Initialize()
|
||||
. = ..()
|
||||
|
||||
default_apply_parts()
|
||||
last_launch = world.time // Prevents cheesing cooldown by deconstructing and reconstructing
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/firework_launcher/RefreshParts()
|
||||
launch_cooldown = 5 MINUTES
|
||||
var/rating = 0
|
||||
for(var/obj/item/weapon/stock_parts/micro_laser/laser in component_parts)
|
||||
rating += laser.rating - 1
|
||||
launch_cooldown = max(0, (launch_cooldown - ((rating*30) SECONDS))) // For every part tier above 1 on the two lasers, reduce cooldown by 30 seconds. 1 minute cooldown on the tier 5 parts, 3 minutes on tier 3.
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/firework_launcher/update_icon()
|
||||
icon_state = "launcher[loaded_star ? "1" : "0"][anchored ? "1" : "0"][panel_open ? "_open" : ""]"
|
||||
|
||||
/obj/machinery/firework_launcher/attackby(var/obj/item/O, var/mob/user)
|
||||
if(default_deconstruction_screwdriver(user, O))
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(default_deconstruction_crowbar(user, O))
|
||||
return
|
||||
|
||||
if(default_part_replacement(user, O))
|
||||
return
|
||||
|
||||
if(default_unfasten_wrench(user, O, 20))
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/weapon/firework_star))
|
||||
loaded_star = O
|
||||
user.drop_item()
|
||||
O.forceMove(src)
|
||||
to_chat(user, "<span class='notice'>You insert the firework star into the launcher.</span>")
|
||||
add_fingerprint(user)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/firework_launcher/verb/eject()
|
||||
set category = "Object"
|
||||
set name = "Eject Firework Star"
|
||||
set src in oview(1)
|
||||
|
||||
var/mob/living/user = usr
|
||||
if(!user || user.stat != 0)
|
||||
return
|
||||
if(!loaded_star)
|
||||
to_chat(user, "<span class='notice'>There is no firework star loaded in the launcher.</span>")
|
||||
return
|
||||
else
|
||||
loaded_star.forceMove(get_turf(src))
|
||||
loaded_star = null
|
||||
add_fingerprint(user)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/firework_launcher/attack_hand(mob/user) // Maybe this proc could be better as entirely its own proc, called from attack_hand, but also I don't really see the point
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='warning'>Close the panel first!</span>")
|
||||
return
|
||||
|
||||
if(!loaded_star)
|
||||
to_chat(user, "<span class='notice'>There is no firework star loaded in the launcher.</span>")
|
||||
return
|
||||
|
||||
if((world.time - last_launch) <= launch_cooldown)
|
||||
to_chat(user, "<span class='notice'>The launcher is still re-priming for launch.</span>")
|
||||
return
|
||||
|
||||
if(!anchored)
|
||||
to_chat(user, "<span class='warning'>Launcher must be firmly secured to the ground before firework can be launched!</span>")
|
||||
return
|
||||
|
||||
var/datum/planet/P = get_planet()
|
||||
if(!P || !(P.weather_holder)) // There are potential cases of being outside but not on planet. And checking whether planet has weather at all is more sanity thing than anything.
|
||||
to_chat(user, "<span class='warning'>Launcher beeps as its safeties seem to prevent launch in the current location.</span>")
|
||||
return
|
||||
|
||||
var/datum/weather_holder/WH = P.weather_holder
|
||||
if(WH.firework_override && istype(loaded_star, /obj/item/weapon/firework_star/weather)) // Enable weather-based events to not be ruined
|
||||
to_chat(user, "<span class='warning'>Launcher beeps as it seems some interference is preventing launch of this type of firework.</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You launch the firework!</span>")
|
||||
playsound(get_turf(src), 'sound/weapons/rpg.ogg', 75, 1)
|
||||
loaded_star.trigger_firework(WH)
|
||||
qdel(loaded_star)
|
||||
loaded_star = null
|
||||
last_launch = world.time
|
||||
add_fingerprint(user)
|
||||
update_icon()
|
||||
flick("launcher_launch", src)
|
||||
|
||||
/obj/machinery/firework_launcher/proc/get_planet()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
return
|
||||
|
||||
if(!T.is_outdoors())
|
||||
return
|
||||
|
||||
var/datum/planet/P = SSplanets.z_to_planet[T.z]
|
||||
if(!P)
|
||||
return
|
||||
return P
|
||||
@@ -0,0 +1,142 @@
|
||||
#define T_FIREWORK_WEATHER_STAR(name) "weather firework star (" + (name) + ")"
|
||||
|
||||
/obj/item/weapon/firework_star
|
||||
icon = 'icons/obj/firework_stars.dmi'
|
||||
name = "firework star"
|
||||
desc = "A very tightly compacted ball of chemicals for use with firework launcher."
|
||||
icon_state = "star"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 1)
|
||||
|
||||
/obj/item/weapon/firework_star/proc/trigger_firework(var/datum/weather_holder/w_holder)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/firework_star/weather
|
||||
name = "weather firework star"
|
||||
desc = "A firework star designed to alter a weather, rather than put on a show."
|
||||
var/weather_type
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 2)
|
||||
|
||||
/obj/item/weapon/firework_star/weather/trigger_firework(var/datum/weather_holder/w_holder)
|
||||
if(!w_holder) // Sanity
|
||||
return
|
||||
if(w_holder.firework_override) // Make sure weather-based events can't be interfered with
|
||||
return
|
||||
if(weather_type && (weather_type in w_holder.allowed_weather_types))
|
||||
w_holder.message_all_outdoor_players("Something seems to flash in the sky, as weather suddenly shifts!")
|
||||
w_holder.change_weather(weather_type)
|
||||
w_holder.rebuild_forecast()
|
||||
|
||||
/obj/item/weapon/firework_star/weather/clear
|
||||
name = T_FIREWORK_WEATHER_STAR("CLEAR SKY")
|
||||
weather_type = WEATHER_CLEAR
|
||||
icon_state = "clear"
|
||||
|
||||
/obj/item/weapon/firework_star/weather/overcast
|
||||
name = T_FIREWORK_WEATHER_STAR("CLOUDY")
|
||||
weather_type = WEATHER_OVERCAST
|
||||
icon_state = "cloudy"
|
||||
|
||||
/obj/item/weapon/firework_star/weather/rain
|
||||
name = T_FIREWORK_WEATHER_STAR("RAIN")
|
||||
weather_type = WEATHER_RAIN
|
||||
icon_state = "rain"
|
||||
|
||||
/obj/item/weapon/firework_star/weather/storm
|
||||
name = T_FIREWORK_WEATHER_STAR("STORM")
|
||||
weather_type = WEATHER_STORM
|
||||
icon_state = "rain"
|
||||
|
||||
/obj/item/weapon/firework_star/weather/light_snow
|
||||
name = T_FIREWORK_WEATHER_STAR("SNOW - LIGHT")
|
||||
weather_type = WEATHER_LIGHT_SNOW
|
||||
icon_state = "snow"
|
||||
|
||||
/obj/item/weapon/firework_star/weather/snow
|
||||
name = T_FIREWORK_WEATHER_STAR("SNOW - MEDIUM")
|
||||
weather_type = WEATHER_SNOW
|
||||
icon_state = "snow"
|
||||
|
||||
/obj/item/weapon/firework_star/weather/blizzard
|
||||
name = T_FIREWORK_WEATHER_STAR("SNOW - HEAVY")
|
||||
weather_type = WEATHER_BLIZZARD
|
||||
icon_state = "snow"
|
||||
|
||||
/obj/item/weapon/firework_star/weather/hail
|
||||
name = T_FIREWORK_WEATHER_STAR("HAIL")
|
||||
weather_type = WEATHER_HAIL
|
||||
icon_state = "snow"
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 2, TECH_ILLEGAL = 1)
|
||||
|
||||
/obj/item/weapon/firework_star/weather/fallout
|
||||
name = T_FIREWORK_WEATHER_STAR("NUCLEAR")
|
||||
desc = "This is the worst idea ever."
|
||||
weather_type = WEATHER_FALLOUT_TEMP
|
||||
icon_state = "nuclear"
|
||||
origin_tech = list(TECH_MATERIAL = 7, TECH_ENGINEERING = 3, TECH_ILLEGAL = 5)
|
||||
|
||||
/obj/item/weapon/firework_star/weather/confetti
|
||||
name = T_FIREWORK_WEATHER_STAR("CONFETTI")
|
||||
desc = "A firework star designed to alter a weather, rather than put on a show. This one makes colorful confetti rain from the sky."
|
||||
weather_type = WEATHER_CONFETTI
|
||||
icon_state = "confetti"
|
||||
|
||||
|
||||
/obj/item/weapon/firework_star/aesthetic
|
||||
name = "aesthetic firework star"
|
||||
desc = "A firework star designed to paint the sky with pretty lights."
|
||||
var/list/firework_adjectives = list("beautiful", "pretty", "fancy", "colorful", "bright", "shimmering")
|
||||
var/list/firework_colors = list("red", "orange", "yellow", "green", "cyan", "blue", "purple", "pink", "beige", "white")
|
||||
|
||||
/obj/item/weapon/firework_star/aesthetic/trigger_firework(var/datum/weather_holder/w_holder)
|
||||
if(!w_holder)
|
||||
return
|
||||
w_holder.message_all_outdoor_players(get_firework_message())
|
||||
|
||||
/obj/item/weapon/firework_star/aesthetic/proc/get_firework_message()
|
||||
return "You see a [pick(firework_adjectives)] explosion of [pick(firework_colors)] sparks in the sky!"
|
||||
|
||||
/obj/item/weapon/firework_star/aesthetic/configurable
|
||||
name = "configurable aesthetic firework star"
|
||||
desc = "A firework star designed to paint the sky with pretty lights. This one's advanced and can be configured to specific shapes or colors."
|
||||
icon_state = "config"
|
||||
var/current_color = "white"
|
||||
var/current_shape = "Random"
|
||||
var/list/firework_shapes = list("none", "Random",
|
||||
"a circle", "an oval", "a triangle", "a square", "a pentagon", "a hexagon", "an octagon", "a plus sign", "an x", "a star", "a spiral", "a heart", "a teardrop",
|
||||
"a smiling face", "a winking face", "a mouse", "a cat", "a dog", "a fox", "a bird", "a fish", "a lizard", "a bug", "a butterfly", "a robot", "a dragon", "a teppi", "a catslug",
|
||||
"a tree", "a leaf", "a flower", "a lightning bolt", "a cloud", "a sun", "a gemstone", "a flame", "a wrench", "a beaker", "a syringe", "a pickaxe", "a pair of handcuffs", "a crown",
|
||||
"a bottle", "a boat", "a spaceship",
|
||||
"Nanotrasen logo", "a geometric-looking letter S", "a dodecahedron")
|
||||
|
||||
/obj/item/weapon/firework_star/aesthetic/configurable/attack_self(var/mob/user)
|
||||
var/choice = tgui_alert(usr, "What setting do you want to adjust?", "Firework Star", list("Color", "Shape", "Nothing"))
|
||||
if(src.loc != user)
|
||||
return
|
||||
|
||||
if(choice == "Color")
|
||||
var/color_choice = tgui_input_list(user, "What color would you like firework to be?", "Firework Star", firework_colors)
|
||||
if(src.loc != user)
|
||||
return
|
||||
if(color_choice)
|
||||
current_color = color_choice
|
||||
|
||||
if(choice == "Shape")
|
||||
var/shape_choice = tgui_input_list(user, "What shape would you like firework to be?", "Firework Star", firework_shapes)
|
||||
if(src.loc != user)
|
||||
return
|
||||
if(shape_choice)
|
||||
current_shape = shape_choice
|
||||
|
||||
/obj/item/weapon/firework_star/aesthetic/configurable/get_firework_message()
|
||||
var/temp_shape = current_shape
|
||||
if(temp_shape == "Random")
|
||||
var/list/shapes_copy = firework_shapes.Copy()
|
||||
shapes_copy -= "Random"
|
||||
temp_shape = pick(shapes_copy)
|
||||
|
||||
if(temp_shape == "none" || !temp_shape)
|
||||
return "You see a [pick(firework_adjectives)] explosion of [current_color] sparks in the sky!"
|
||||
else
|
||||
return "You see a [pick(firework_adjectives)] explosion of [current_color] sparks in the sky, forming into shape of [current_shape]!"
|
||||
@@ -0,0 +1,8 @@
|
||||
/obj/item/weapon/circuitboard/firework_launcher
|
||||
name = T_BOARD("firework launcher")
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
build_path = /obj/machinery/firework_launcher
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 2)
|
||||
req_components = list (
|
||||
/obj/item/weapon/stock_parts/micro_laser = 2
|
||||
)
|
||||
@@ -90,7 +90,7 @@
|
||||
if(re.id == "nutriment" || re.id == "protein" || re.id == "glucose" || re.id == "fishbait")
|
||||
foodvolume += re.volume
|
||||
|
||||
toolspeed = initial(toolspeed) * min(0.75, (0.5 / max(0.5, (foodvolume / Bait.reagents.maximum_volume))))
|
||||
toolspeed = initial(toolspeed) * 10*(0.01/(0.2*(foodvolume/Bait.reagents.maximum_volume + 0.5))) //VOREStation edit: gives fishing a universal formula because Polaris' doesn't work here. Min value of 1, max value of 1/3, 0.5 at 1/2 filled with bait reagents.
|
||||
|
||||
else
|
||||
toolspeed = initial(toolspeed)
|
||||
|
||||
@@ -234,3 +234,8 @@
|
||||
|
||||
/datum/reagent/ethanol/angelskiss
|
||||
glass_icon_file = 'icons/obj/drinks_vr.dmi'
|
||||
|
||||
/datum/reagent/ethanol/burnout
|
||||
glass_icon_state = "burnout"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
glass_icon_file = 'icons/obj/drinks_vr.dmi'
|
||||
|
||||
@@ -217,14 +217,14 @@
|
||||
amount = params["amount"]
|
||||
else
|
||||
amount = tgui_input_number(usr, "How many items?", "How many items would you like to take out?", 1)
|
||||
|
||||
|
||||
if(QDELETED(src) || QDELETED(usr) || !usr.Adjacent(src))
|
||||
return FALSE
|
||||
|
||||
|
||||
var/index = text2num(params["index"])
|
||||
if(index < 1 || index > LAZYLEN(item_records))
|
||||
return TRUE
|
||||
|
||||
|
||||
vend(item_records[index], amount)
|
||||
return TRUE
|
||||
return FALSE
|
||||
@@ -257,7 +257,7 @@
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return TRUE
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf)))
|
||||
if(!allowed(usr) && !emagged && locked != -1 && action == "Release")
|
||||
if((!allowed(usr) && scan_id) && !emagged && locked != -1 && action == "Release")
|
||||
to_chat(usr, "<span class='warning'>Access denied.</span>")
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
var/bee_count = 0 // Percent
|
||||
var/smoked = 0 // Timer
|
||||
var/honeycombs = 0 // Percent
|
||||
var/frames = 0
|
||||
var/list/frames = list() // List of frames inside.
|
||||
var/maxFrames = 5
|
||||
|
||||
/obj/machinery/beehive/update_icon()
|
||||
@@ -17,8 +17,8 @@
|
||||
icon_state = "beehive"
|
||||
if(closed)
|
||||
add_overlay("lid")
|
||||
if(frames)
|
||||
add_overlay("empty[frames]")
|
||||
if(length(frames))
|
||||
add_overlay("empty[length(frames)]")
|
||||
if(honeycombs >= 100)
|
||||
add_overlay("full[round(honeycombs / 100)]")
|
||||
if(!smoked)
|
||||
@@ -38,59 +38,59 @@
|
||||
/obj/machinery/beehive/attackby(var/obj/item/I, var/mob/user)
|
||||
if(I.is_crowbar())
|
||||
closed = !closed
|
||||
user.visible_message("<span class='notice'>[user] [closed ? "closes" : "opens"] \the [src].</span>", "<span class='notice'>You [closed ? "close" : "open"] \the [src].</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] [closed ? "closes" : "opens"] \the [src]."), SPAN_NOTICE("You [closed ? "close" : "open"] \the [src]."))
|
||||
update_icon()
|
||||
return
|
||||
else if(I.is_wrench())
|
||||
anchored = !anchored
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] [anchored ? "wrenches" : "unwrenches"] \the [src].</span>", "<span class='notice'>You [anchored ? "wrench" : "unwrench"] \the [src].</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] [anchored ? "wrenches" : "unwrenches"] \the [src]."), SPAN_NOTICE("You [anchored ? "wrench" : "unwrench"] \the [src]."))
|
||||
return
|
||||
else if(istype(I, /obj/item/bee_smoker))
|
||||
if(closed)
|
||||
to_chat(user, "<span class='notice'>You need to open \the [src] with a crowbar before smoking the bees.</span>")
|
||||
to_chat(user, SPAN_NOTICE("You need to open \the [src] with a crowbar before smoking the bees."))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] smokes the bees in \the [src].</span>", "<span class='notice'>You smoke the bees in \the [src].</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] smokes the bees in \the [src]."), SPAN_NOTICE("You smoke the bees in \the [src]."))
|
||||
smoked = 30
|
||||
update_icon()
|
||||
return
|
||||
else if(istype(I, /obj/item/honey_frame))
|
||||
if(closed)
|
||||
to_chat(user, "<span class='notice'>You need to open \the [src] with a crowbar before inserting \the [I].</span>")
|
||||
to_chat(user, SPAN_NOTICE("You need to open \the [src] with a crowbar before inserting \the [I]."))
|
||||
return
|
||||
if(frames >= maxFrames)
|
||||
to_chat(user, "<span class='notice'>There is no place for an another frame.</span>")
|
||||
if(length(frames) >= maxFrames)
|
||||
to_chat(user, SPAN_NOTICE("There is no place for an another frame."))
|
||||
return
|
||||
var/obj/item/honey_frame/H = I
|
||||
if(H.honey)
|
||||
to_chat(user, "<span class='notice'>\The [I] is full with beeswax and honey, empty it in the extractor first.</span>")
|
||||
to_chat(user, SPAN_NOTICE("\The [I] is full with beeswax and honey, empty it in the extractor first."))
|
||||
return
|
||||
++frames
|
||||
user.visible_message("<span class='notice'>[user] loads \the [I] into \the [src].</span>", "<span class='notice'>You load \the [I] into \the [src].</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] loads \the [I] into \the [src]."), SPAN_NOTICE("You load \the [I] into \the [src]."))
|
||||
update_icon()
|
||||
user.drop_from_inventory(I)
|
||||
qdel(I)
|
||||
user.drop_from_inventory(H)
|
||||
H.forceMove(src)
|
||||
frames.Add(H)
|
||||
return
|
||||
else if(istype(I, /obj/item/bee_pack))
|
||||
var/obj/item/bee_pack/B = I
|
||||
if(B.full && bee_count)
|
||||
to_chat(user, "<span class='notice'>\The [src] already has bees inside.</span>")
|
||||
to_chat(user, SPAN_NOTICE("\The [src] already has bees inside."))
|
||||
return
|
||||
if(!B.full && bee_count < 90)
|
||||
to_chat(user, "<span class='notice'>\The [src] is not ready to split.</span>")
|
||||
to_chat(user, SPAN_NOTICE("\The [src] is not ready to split."))
|
||||
return
|
||||
if(!B.full && !smoked)
|
||||
to_chat(user, "<span class='notice'>Smoke \the [src] first!</span>")
|
||||
to_chat(user, SPAN_NOTICE("Smoke \the [src] first!"))
|
||||
return
|
||||
if(closed)
|
||||
to_chat(user, "<span class='notice'>You need to open \the [src] with a crowbar before moving the bees.</span>")
|
||||
to_chat(user, SPAN_NOTICE("You need to open \the [src] with a crowbar before moving the bees."))
|
||||
return
|
||||
if(B.full)
|
||||
user.visible_message("<span class='notice'>[user] puts the queen and the bees from \the [I] into \the [src].</span>", "<span class='notice'>You put the queen and the bees from \the [I] into \the [src].</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] puts the queen and the bees from \the [I] into \the [src]."), SPAN_NOTICE("You put the queen and the bees from \the [I] into \the [src]."))
|
||||
bee_count = 20
|
||||
B.empty()
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] puts bees and larvae from \the [src] into \the [I].</span>", "<span class='notice'>You put bees and larvae from \the [src] into \the [I].</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] puts bees and larvae from \the [src] into \the [I]."), SPAN_NOTICE("You put bees and larvae from \the [src] into \the [I]."))
|
||||
bee_count /= 2
|
||||
B.fill()
|
||||
update_icon()
|
||||
@@ -98,9 +98,9 @@
|
||||
else if(istype(I, /obj/item/device/analyzer/plant_analyzer))
|
||||
to_chat(user, "<span class='notice'>Scan result of \the [src]...</span>")
|
||||
to_chat(user, "Beehive is [bee_count ? "[round(bee_count)]% full" : "empty"].[bee_count > 90 ? " Colony is ready to split." : ""]")
|
||||
if(frames)
|
||||
to_chat(user, "[frames] frames installed, [round(honeycombs / 100)] filled.")
|
||||
if(honeycombs < frames * 100)
|
||||
if(length(frames))
|
||||
to_chat(user, "[length(frames)] frames installed, [round(honeycombs / 100)] filled.")
|
||||
if(honeycombs < length(frames) * 100)
|
||||
to_chat(user, "Next frame is [round(honeycombs % 100)]% full.")
|
||||
else
|
||||
to_chat(user, "No frames installed.")
|
||||
@@ -109,12 +109,15 @@
|
||||
return 1
|
||||
else if(I.is_screwdriver())
|
||||
if(bee_count)
|
||||
to_chat(user, "<span class='notice'>You can't dismantle \the [src] with these bees inside.</span>")
|
||||
to_chat(user, SPAN_NOTICE("You can't dismantle \the [src] with these bees inside."))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start dismantling \the [src]...</span>")
|
||||
if(length(frames))
|
||||
to_chat(user, SPAN_NOTICE("You can't dismantle \the [src] with [length(frames)] frames still inside!"))
|
||||
return
|
||||
to_chat(user, SPAN_NOTICE("You start dismantling \the [src]..."))
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
if(do_after(user, 30))
|
||||
user.visible_message("<span class='notice'>[user] dismantles \the [src].</span>", "<span class='notice'>You dismantle \the [src].</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] dismantles \the [src]."), SPAN_NOTICE("You dismantle \the [src]."))
|
||||
new /obj/item/beehive_assembly(loc)
|
||||
qdel(src)
|
||||
return
|
||||
@@ -122,19 +125,21 @@
|
||||
/obj/machinery/beehive/attack_hand(var/mob/user)
|
||||
if(!closed)
|
||||
if(honeycombs < 100)
|
||||
to_chat(user, "<span class='notice'>There are no filled honeycombs.</span>")
|
||||
to_chat(user, SPAN_NOTICE("There are no filled honeycombs."))
|
||||
return
|
||||
if(!smoked && bee_count)
|
||||
to_chat(user, "<span class='notice'>The bees won't let you take the honeycombs out like this, smoke them first.</span>")
|
||||
to_chat(user, SPAN_NOTICE("The bees won't let you take the honeycombs out like this, smoke them first."))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] starts taking the honeycombs out of \the [src].</span>", "<span class='notice'>You start taking the honeycombs out of \the [src]...</span>")
|
||||
while(honeycombs >= 100 && do_after(user, 30))
|
||||
new /obj/item/honey_frame/filled(loc)
|
||||
user.visible_message(SPAN_NOTICE("[user] starts taking the honeycombs out of \the [src]."), SPAN_NOTICE("You start taking the honeycombs out of \the [src]..."))
|
||||
while(honeycombs >= 100 && length(frames) && do_after(user, 30))
|
||||
var/obj/item/honey_frame/H = pop(frames)
|
||||
H.honey = 20
|
||||
honeycombs -= 100
|
||||
--frames
|
||||
H.update_icon()
|
||||
H.forceMove(get_turf(src))
|
||||
update_icon()
|
||||
if(honeycombs < 100)
|
||||
to_chat(user, "<span class='notice'>You take all filled honeycombs out.</span>")
|
||||
to_chat(user, SPAN_NOTICE("You take all filled honeycombs out."))
|
||||
return
|
||||
|
||||
/obj/machinery/beehive/process()
|
||||
@@ -153,45 +158,47 @@
|
||||
if(H.seed && !H.dead)
|
||||
H.health += 0.05 * coef
|
||||
++trays
|
||||
honeycombs = min(honeycombs + 0.1 * coef * min(trays, 5), frames * 100)
|
||||
honeycombs = min(honeycombs + 0.1 * coef * min(trays, 5), length(frames) * 100)
|
||||
|
||||
/obj/machinery/honey_extractor
|
||||
name = "honey extractor"
|
||||
desc = "A machine used to turn honeycombs on the frame into honey and wax."
|
||||
icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit
|
||||
icon = 'icons/obj/beekeeping.dmi'
|
||||
icon_state = "centrifuge"
|
||||
|
||||
density = TRUE
|
||||
|
||||
var/processing = 0
|
||||
var/honey = 0
|
||||
|
||||
/obj/machinery/honey_extractor/attackby(var/obj/item/I, var/mob/user)
|
||||
if(processing)
|
||||
to_chat(user, "<span class='notice'>\The [src] is currently spinning, wait until it's finished.</span>")
|
||||
to_chat(user, SPAN_NOTICE("\The [src] is currently spinning, wait until it's finished."))
|
||||
return
|
||||
else if(istype(I, /obj/item/honey_frame))
|
||||
var/obj/item/honey_frame/H = I
|
||||
if(!H.honey)
|
||||
to_chat(user, "<span class='notice'>\The [H] is empty, put it into a beehive.</span>")
|
||||
to_chat(user, SPAN_NOTICE("\The [H] is empty, put it into a beehive."))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] loads \the [H] into \the [src] and turns it on.</span>", "<span class='notice'>You load \the [H] into \the [src] and turn it on.</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] loads \the [H]'s comb into \the [src] and turns it on."), SPAN_NOTICE("You load \the [H] into \the [src] and turn it on."))
|
||||
processing = H.honey
|
||||
icon_state = "centrifuge_moving"
|
||||
qdel(H)
|
||||
icon_state = "[initial(icon_state)]_moving"
|
||||
H.honey = 0
|
||||
H.update_icon()
|
||||
spawn(50)
|
||||
new /obj/item/honey_frame(loc)
|
||||
new /obj/item/stack/material/wax(loc)
|
||||
honey += processing
|
||||
processing = 0
|
||||
icon_state = "centrifuge"
|
||||
icon_state = "[initial(icon_state)]"
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/glass))
|
||||
if(!honey)
|
||||
to_chat(user, "<span class='notice'>There is no honey in \the [src].</span>")
|
||||
to_chat(user, SPAN_NOTICE("There is no honey in \the [src]."))
|
||||
return
|
||||
var/obj/item/weapon/reagent_containers/glass/G = I
|
||||
var/transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, honey)
|
||||
G.reagents.add_reagent("honey", transferred)
|
||||
honey -= transferred
|
||||
user.visible_message("<span class='notice'>[user] collects honey from \the [src] into \the [G].</span>", "<span class='notice'>You collect [transferred] units of honey from \the [src] into \the [G].</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] collects honey from \the [src] into \the [G]."), SPAN_NOTICE("You collect [transferred] units of honey from \the [src] into \the [G]."))
|
||||
return 1
|
||||
|
||||
/obj/item/bee_smoker
|
||||
@@ -210,15 +217,22 @@
|
||||
|
||||
var/honey = 0
|
||||
|
||||
/obj/item/honey_frame/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/honey_frame/update_icon()
|
||||
..()
|
||||
|
||||
overlays.Cut()
|
||||
if(honey > 0)
|
||||
add_overlay("honeycomb")
|
||||
|
||||
/obj/item/honey_frame/filled
|
||||
name = "filled beehive frame"
|
||||
desc = "A frame for the beehive that the bees have filled with honeycombs."
|
||||
honey = 20
|
||||
|
||||
/obj/item/honey_frame/filled/New()
|
||||
..()
|
||||
add_overlay("honeycomb")
|
||||
|
||||
/obj/item/beehive_assembly
|
||||
name = "beehive assembly"
|
||||
desc = "Contains everything you need to build a beehive."
|
||||
@@ -226,9 +240,9 @@
|
||||
icon_state = "apiary"
|
||||
|
||||
/obj/item/beehive_assembly/attack_self(var/mob/user)
|
||||
to_chat(user, "<span class='notice'>You start assembling \the [src]...</span>")
|
||||
to_chat(user, SPAN_NOTICE("You start assembling \the [src]..."))
|
||||
if(do_after(user, 30))
|
||||
user.visible_message("<span class='notice'>[user] constructs a beehive.</span>", "<span class='notice'>You construct a beehive.</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user] constructs a beehive."), SPAN_NOTICE("You construct a beehive."))
|
||||
new /obj/machinery/beehive(get_turf(user))
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
@@ -283,4 +297,4 @@ var/global/list/datum/stack_recipe/wax_recipes = list( \
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
cut_overlays()
|
||||
add_overlay("beepack-full")
|
||||
add_overlay("beepack-full")
|
||||
|
||||
@@ -414,7 +414,7 @@
|
||||
|
||||
roundstart = 0
|
||||
mysterious = 1
|
||||
seed_noun = pick("spores","nodes","cuttings","seeds")
|
||||
seed_noun = pick("spores","nodes","cuttings","seeds","pits")
|
||||
|
||||
set_trait(TRAIT_POTENCY,rand(5,30),200,0)
|
||||
set_trait(TRAIT_PRODUCT_ICON,pick(SSplants.accessible_product_sprites))
|
||||
|
||||
@@ -94,15 +94,23 @@
|
||||
if(prob(50))
|
||||
S.set_trait(TRAIT_BIOLUM, !S.get_trait(TRAIT_BIOLUM))
|
||||
if(S.get_trait(TRAIT_BIOLUM))
|
||||
T.visible_message("<b>\The [S.display_name]</b> begins to glow!")
|
||||
T.visible_message(SPAN_NOTICE("\The [S.display_name] begins to glow!"))
|
||||
if(prob(50))
|
||||
S.set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190))
|
||||
T.visible_message("<span class='notice'>\The [S.display_name]'s glow </span><font color='[S.get_trait(TRAIT_BIOLUM_COLOUR)]'>changes colour</font>!")
|
||||
else
|
||||
T.visible_message("<span class='notice'>\The [S.display_name]'s glow dims...</span>")
|
||||
else
|
||||
T.visible_message(SPAN_NOTICE("\The [S.display_name]'s glow dims..."))
|
||||
if(prob(60))
|
||||
S.set_trait(TRAIT_PRODUCES_POWER, !S.get_trait(TRAIT_PRODUCES_POWER))
|
||||
|
||||
if(prob(30))
|
||||
S.set_trait(TRAIT_SPORING, !S.get_trait(TRAIT_SPORING))
|
||||
if(S.get_trait(TRAIT_SPORING))
|
||||
T.visible_message(SPAN_NOTICE("\The [S.display_name] releases a cloud of spores!"))
|
||||
S.create_spores(T)
|
||||
else
|
||||
T.visible_message(SPAN_NOTICE("\The [S.display_name]'s spores no longer fall."))
|
||||
|
||||
/decl/plantgene/atmosphere/mutate(var/datum/seed/S)
|
||||
if(prob(60))
|
||||
S.set_trait(TRAIT_HEAT_TOLERANCE, S.get_trait(TRAIT_HEAT_TOLERANCE)+rand(-2,2),40,0)
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
if(seed.get_trait(TRAIT_CARNIVOROUS) >= 2)
|
||||
growth_type = 1 // WOOOORMS.
|
||||
else if(!(seed.seed_noun in list("seeds","pits")))
|
||||
if(seed.seed_noun == "nodes")
|
||||
if(seed.seed_noun in list("nodes", "cuttings"))
|
||||
growth_type = 3 // Biomass
|
||||
else
|
||||
growth_type = 4 // Mold
|
||||
|
||||
@@ -91,22 +91,27 @@
|
||||
if(prob(chance))
|
||||
sampled = 0
|
||||
|
||||
if(is_mature() && !has_buckled_mobs())
|
||||
for(var/turf/neighbor in neighbors)
|
||||
for(var/mob/living/M in neighbor)
|
||||
if(seed.get_trait(TRAIT_SPREAD) >= 2 && (M.lying || prob(round(seed.get_trait(TRAIT_POTENCY)))))
|
||||
entangle(M)
|
||||
if(is_mature())
|
||||
if(!has_buckled_mobs())
|
||||
for(var/turf/neighbor in neighbors)
|
||||
for(var/mob/living/M in neighbor)
|
||||
if(seed.get_trait(TRAIT_SPREAD) >= 2 && (M.lying || prob(round(seed.get_trait(TRAIT_POTENCY)))))
|
||||
entangle(M)
|
||||
|
||||
if(is_mature() && neighbors.len && prob(spread_chance))
|
||||
//spread to 1-3 adjacent turfs depending on yield trait.
|
||||
var/max_spread = between(1, round(seed.get_trait(TRAIT_YIELD)*3/14), 3)
|
||||
if(seed.get_trait(TRAIT_SPORING) && prob(1))
|
||||
visible_message(SPAN_WARNING("\The [src] hisses, releasing a cloud of spores!"), SPAN_WARNING("Something nearby hisses loudly!"))
|
||||
seed.create_spores(get_turf(src))
|
||||
|
||||
for(var/i in 1 to max_spread)
|
||||
if(prob(spread_chance))
|
||||
sleep(rand(3,5))
|
||||
if(!neighbors.len)
|
||||
break
|
||||
spread_to(pick(neighbors))
|
||||
if(length(neighbors) && prob(spread_chance))
|
||||
//spread to 1-3 adjacent turfs depending on yield trait.
|
||||
var/max_spread = between(1, round(seed.get_trait(TRAIT_YIELD)*3/14), 3)
|
||||
|
||||
for(var/i in 1 to max_spread)
|
||||
if(prob(spread_chance))
|
||||
sleep(rand(3,5))
|
||||
if(!length(neighbors))
|
||||
break
|
||||
spread_to(pick(neighbors))
|
||||
|
||||
// We shouldn't have spawned if the controller doesn't exist.
|
||||
check_health()
|
||||
@@ -128,7 +133,7 @@
|
||||
|
||||
//move out to the destination
|
||||
child.anchored = FALSE
|
||||
step_to(child, target_turf)
|
||||
child.Move(target_turf) // Do a normal move, so we can cross and uncross things we need to. Stairs, Open space "falling", etc.
|
||||
child.anchored = TRUE
|
||||
child.update_icon()
|
||||
|
||||
@@ -177,4 +182,4 @@
|
||||
SSplants.add_plant(neighbor)
|
||||
spawn(1) if(src) qdel(src)
|
||||
|
||||
#undef NEIGHBOR_REFRESH_TIME
|
||||
#undef NEIGHBOR_REFRESH_TIME
|
||||
|
||||
@@ -132,13 +132,12 @@
|
||||
display_name = "reinforced borosilicate glass"
|
||||
stack_type = /obj/item/stack/material/glass/phoronrglass
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
composite_material = list() //todo
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/phoronreinforced
|
||||
created_fulltile_window = /obj/structure/window/phoronreinforced/full
|
||||
hardness = 40
|
||||
weight = 30
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
composite_material = list(MAT_STEEL = SHEET_MATERIAL_AMOUNT / 2, "borosilicate glass" = SHEET_MATERIAL_AMOUNT)
|
||||
composite_material = list(MAT_STEEL = SHEET_MATERIAL_AMOUNT / 2, MAT_PGLASS = SHEET_MATERIAL_AMOUNT)
|
||||
rod_product = null
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
created_fulltile_window = /obj/structure/window/titanium/full
|
||||
wire_product = null
|
||||
rod_product = /obj/item/stack/material/glass/titanium
|
||||
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, MAT_GLASS = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/glass/plastaniumglass
|
||||
name = MAT_PLASTITANIUMGLASS
|
||||
@@ -30,4 +29,3 @@
|
||||
created_fulltile_window = /obj/structure/window/plastitanium/full
|
||||
wire_product = null
|
||||
rod_product = /obj/item/stack/material/glass/plastitanium
|
||||
composite_material = list(MAT_PLASTITANIUM = SHEET_MATERIAL_AMOUNT, MAT_GLASS = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "#666677"
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
composite_material = list(MAT_STEEL = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/steel/hull/place_sheet(var/turf/target) //Deconstructed into normal steel sheets.
|
||||
new /obj/item/stack/material/steel(target)
|
||||
@@ -20,6 +21,7 @@
|
||||
icon_colour = "#777788"
|
||||
explosion_resistance = 40
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
composite_material = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/plasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
|
||||
new /obj/item/stack/material/plasteel(target)
|
||||
@@ -33,6 +35,7 @@
|
||||
explosion_resistance = 90
|
||||
reflectivity = 0.9
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
composite_material = list(MAT_DURASTEEL = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/durasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal durasteel sheets.
|
||||
new /obj/item/stack/material/durasteel(target)
|
||||
@@ -43,6 +46,7 @@
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/titanium/hull/place_sheet(var/turf/target) //Deconstructed into normal titanium sheets.
|
||||
new /obj/item/stack/material/titanium(target)
|
||||
@@ -53,6 +57,7 @@
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
composite_material = list(MAT_MORPHIUM = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/morphium/hull/place_sheet(var/turf/target)
|
||||
new /obj/item/stack/material/morphium(target)
|
||||
@@ -5,6 +5,7 @@
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "#585658"
|
||||
explosion_resistance = 50
|
||||
composite_material = list(MAT_PLASTITANIUM = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/plastitanium/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
|
||||
new /obj/item/stack/material/plastitanium(target)
|
||||
@@ -15,6 +16,7 @@
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
explosion_resistance = 50
|
||||
composite_material = list(MAT_GOLD = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/gold/hull/place_sheet(var/turf/target) //Deconstructed into normal gold sheets.
|
||||
new /obj/item/stack/material/gold(target)
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
protectiveness = 60 // 75%
|
||||
reflectivity = 0.7 // Not a perfect mirror, but close.
|
||||
stack_origin_tech = list(TECH_MATERIAL = 8)
|
||||
composite_material = list("plasteel" = SHEET_MATERIAL_AMOUNT, "diamond" = SHEET_MATERIAL_AMOUNT) //shrug
|
||||
supply_conversion_value = 9
|
||||
|
||||
/datum/material/titanium
|
||||
@@ -28,7 +27,6 @@
|
||||
door_icon_base = "metal"
|
||||
icon_colour = "#D1E6E3"
|
||||
icon_reinf = "reinf_metal"
|
||||
composite_material = null
|
||||
|
||||
/datum/material/iron
|
||||
name = "iron"
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
protectiveness = 20 // 50%
|
||||
conductivity = 13 // For the purposes of balance.
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
composite_material = list(MAT_STEEL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo
|
||||
supply_conversion_value = 6
|
||||
|
||||
/datum/material/plasteel/generate_recipes()
|
||||
@@ -38,3 +37,4 @@
|
||||
stack_type = /obj/item/stack/material/plasteel/rebar
|
||||
sheet_singular_name = "rod"
|
||||
sheet_plural_name = "rods"
|
||||
composite_material = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
protectiveness = 30
|
||||
conductivity = 7
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT)
|
||||
supply_conversion_value = 8
|
||||
|
||||
/datum/material/plastitanium/generate_recipes()
|
||||
|
||||
@@ -54,13 +54,10 @@
|
||||
EQUIPMENT("Defense Equipment - Plasteel Machete", /obj/item/weapon/material/knife/machete, 50),
|
||||
EQUIPMENT("Defense Equipment - Razor Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/manhacks/station/locked, 100),
|
||||
EQUIPMENT("Defense Equipment - Sentry Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/ward, 150),
|
||||
<<<<<<< HEAD
|
||||
EQUIPMENT("Defense Equipment - Frontier Carbine", /obj/item/weapon/gun/energy/locked/frontier/carbine, 400), //CHOMPEDIT
|
||||
EQUIPMENT("Defense Equipment - Frontier Phaser", /obj/item/weapon/gun/energy/locked/frontier, 150), //CHOMPADD
|
||||
EQUIPMENT("Defense Equipment - Holdout Phaser", /obj/item/weapon/gun/energy/locked/frontier/holdout, 100), //CHOMPADD
|
||||
=======
|
||||
// EQUIPMENT("Defense Equipment - Frontier Carbine", /obj/item/weapon/gun/energy/locked/frontier/carbine, 750), //VOREStation removal
|
||||
>>>>>>> 244095be9e... Merge pull request #14220 from Very-Soft/removeexplo
|
||||
EQUIPMENT("Defense Equipment - Marksman Frontier Phaser", /obj/item/weapon/gun/energy/locked/frontier/rifle, 1500), //CHOMPADD
|
||||
EQUIPMENT("Defense Equipment - Frontier Carbine", /obj/item/weapon/gun/energy/locked/frontier/carbine, 1500), //CHOMPEDIT
|
||||
EQUIPMENT("Defense Equipment - Frontier Phaser", /obj/item/weapon/gun/energy/locked/frontier, 1200), //CHOMPADD
|
||||
EQUIPMENT("Defense Equipment - Holdout Frontier Phaser", /obj/item/weapon/gun/energy/locked/frontier/holdout, 700), //CHOMPADD
|
||||
EQUIPMENT("Hybrid Equipment - Proto-Kinetic Dagger", /obj/item/weapon/kinetic_crusher/machete/dagger, 75),
|
||||
EQUIPMENT("Hybrid Equipment - Proto-Kinetic Machete", /obj/item/weapon/kinetic_crusher/machete, 250),
|
||||
EQUIPMENT("Fishing Net", /obj/item/weapon/material/fishing_net, 50),
|
||||
|
||||
@@ -47,10 +47,10 @@ var/list/slot_equipment_priority = list( \
|
||||
//set del_on_fail to have it delete W if it fails to equip
|
||||
//set disable_warning to disable the 'you are unable to equip that' warning.
|
||||
//unset redraw_mob to prevent the mob from being redrawn at the end.
|
||||
/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1)
|
||||
/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1, ignore_obstructions = 1)
|
||||
if(!W)
|
||||
return 0
|
||||
if(!W.mob_can_equip(src, slot, disable_warning))
|
||||
if(!W.mob_can_equip(src, slot, disable_warning, ignore_obstructions))
|
||||
if(del_on_fail)
|
||||
qdel(W)
|
||||
|
||||
@@ -68,8 +68,8 @@ var/list/slot_equipment_priority = list( \
|
||||
return
|
||||
|
||||
//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such.
|
||||
/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot)
|
||||
return equip_to_slot_if_possible(W, slot, 1, 1, 0)
|
||||
/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot, ignore_obstructions = 1)
|
||||
return equip_to_slot_if_possible(W, slot, 1, 1, 0, ignore_obstructions)
|
||||
|
||||
//hurgh. these feel hacky, but they're the only way I could get the damn thing to work. I guess they could be handy for antag spawners too?
|
||||
/mob/proc/equip_voidsuit_to_slot_or_del_with_refit(obj/item/clothing/suit/space/void/W as obj, slot, species = SPECIES_HUMAN)
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
/mob/living/carbon/human/ai_controlled
|
||||
sensorpref = 1
|
||||
@@ -9,6 +9,7 @@
|
||||
var/sensorpref = 5 //Suit sensor loadout pref
|
||||
var/wings_hidden = FALSE
|
||||
var/tail_hidden = FALSE
|
||||
var/markings_len = 0 //mostly an arbitrary number
|
||||
|
||||
/mob/living/carbon/human/proc/shadekin_get_energy()
|
||||
var/datum/species/shadekin/SK = species
|
||||
|
||||
@@ -7,3 +7,116 @@ var/static/icon/ingame_hud_med_vr = icon('icons/mob/hud_med_vr.dmi')
|
||||
hud_list[STATUS_R_HUD] = gen_hud_image(ingame_hud_vr, src, plane = PLANE_CH_STATUS_R)
|
||||
hud_list[BACKUP_HUD] = gen_hud_image(ingame_hud_vr, src, plane = PLANE_CH_BACKUP)
|
||||
hud_list[VANTAG_HUD] = gen_hud_image(ingame_hud_vr, src, plane = PLANE_CH_VANTAG)
|
||||
|
||||
/mob/living/carbon/human/proc/remove_marking(var/datum/sprite_accessory/marking/mark_datum)
|
||||
if (!mark_datum)
|
||||
return FALSE
|
||||
var/successful = FALSE
|
||||
for(var/BP in mark_datum.body_parts)
|
||||
var/obj/item/organ/external/O = organs_by_name[BP]
|
||||
if(O)
|
||||
successful = O.markings.Remove(mark_datum.name) || successful
|
||||
if (successful)
|
||||
markings_len -= 1
|
||||
update_dna()
|
||||
update_icons_body()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/add_marking(var/datum/sprite_accessory/marking/mark_datum, var/mark_color = "#000000")
|
||||
if (!mark_datum)
|
||||
return FALSE
|
||||
var/success = FALSE
|
||||
for(var/BP in mark_datum.body_parts)
|
||||
var/obj/item/organ/external/O = organs_by_name[BP]
|
||||
if(O)
|
||||
success = TRUE
|
||||
O.markings[mark_datum.name] = list("color" = mark_color, "datum" = mark_datum, "priority" = markings_len + 1)
|
||||
if (success)
|
||||
markings_len += 1
|
||||
update_dna()
|
||||
update_icons_body()
|
||||
return success
|
||||
|
||||
/mob/living/carbon/human/proc/change_priority_of_marking(var/datum/sprite_accessory/marking/mark_datum, var/move_down, var/swap = TRUE) //move_down should be true/false
|
||||
if (!mark_datum)
|
||||
return FALSE
|
||||
var/change = move_down ? 1 : -1
|
||||
var/success = FALSE
|
||||
for(var/BP in mark_datum.body_parts)
|
||||
var/obj/item/organ/external/O = organs_by_name[BP]
|
||||
if(O)
|
||||
var/index = O.markings.Find(mark_datum.name)
|
||||
if (!index)
|
||||
continue
|
||||
var/change_from = O.markings[mark_datum.name]["priority"]
|
||||
if (change_from == clamp(change_from + change, 1, markings_len))
|
||||
continue
|
||||
if (!success)
|
||||
success = TRUE
|
||||
change_priority_marking_to_priority(change_from + change, change_from)
|
||||
O.markings[mark_datum.name]["priority"] = clamp(change_from + change, 1, markings_len)
|
||||
if ((move_down && index == O.markings.len) || (!move_down && index == 1))
|
||||
continue
|
||||
if (O.markings[O.markings[index + change]]["priority"] == change_from)
|
||||
moveElement(O.markings, index, index+(move_down ? 2 : -1))
|
||||
if (success)
|
||||
update_dna()
|
||||
update_icons_body()
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/change_priority_marking_to_priority(var/priority, var/to_priority)
|
||||
for (var/obj/item/organ/external/O in organs)
|
||||
for (var/marking in O.markings)
|
||||
if (O.markings[marking]["priority"] == priority)
|
||||
O.markings[marking]["priority"] = to_priority
|
||||
|
||||
/mob/living/carbon/human/proc/change_marking_color(var/datum/sprite_accessory/marking/mark_datum, var/mark_color = "#000000")
|
||||
if (!mark_datum)
|
||||
return FALSE
|
||||
var/success = FALSE
|
||||
for(var/BP in mark_datum.body_parts)
|
||||
var/obj/item/organ/external/O = organs_by_name[BP]
|
||||
if(O && O.markings[mark_datum.name] && O.markings[mark_datum.name]["color"] != mark_color)
|
||||
success = TRUE
|
||||
O.markings[mark_datum.name]["color"] = mark_color
|
||||
if (success)
|
||||
update_dna()
|
||||
update_icons_body()
|
||||
return success
|
||||
|
||||
/mob/living/carbon/human/proc/get_prioritised_markings()
|
||||
var/list/markings = list()
|
||||
var/list/priorities = list()
|
||||
for(var/obj/item/organ/external/O in organs)
|
||||
if(O.markings?.len)
|
||||
for (var/marking in O.markings)
|
||||
var/priority = num2text(O.markings[marking]["priority"])
|
||||
if (markings[priority])
|
||||
markings[priority] |= list("[marking]" = O.markings[marking]["color"]) //yes I know technically you could have a limb that was attached that has the same marking as another limb with a different color but I'm too tired
|
||||
else
|
||||
priorities |= O.markings[marking]["priority"]
|
||||
markings[priority] = list("[marking]" = O.markings[marking]["color"])
|
||||
var/list/sorted = list()
|
||||
while (priorities.len > 0)
|
||||
var/priority = min(priorities)
|
||||
priorities.Remove(priority)
|
||||
priority = num2text(priority)
|
||||
for (var/marking in markings[priority])
|
||||
if (!(marking in sorted))
|
||||
sorted[marking] = markings[priority][marking]
|
||||
del(markings)
|
||||
del(priorities)
|
||||
markings_len = sorted.len
|
||||
//todo - add an autofixing thing for having markings with the same priorities as another, and for having markings that should have the same priorities across bodyparts, but don't
|
||||
//does not really need to happen, that kinda thing will only happen when putting another person's limb onto your own body
|
||||
return sorted
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -1137,7 +1137,7 @@
|
||||
for(var/mob/living/L in T)
|
||||
if(L == src) //no eating yourself. 1984.
|
||||
continue
|
||||
if(L.devourable)
|
||||
if(L.devourable && L.can_be_drop_prey)
|
||||
targets += L
|
||||
|
||||
if(!(targets.len))
|
||||
|
||||
@@ -1125,6 +1125,7 @@
|
||||
if(!item)
|
||||
return FALSE //Grab processing has a chance of returning null
|
||||
|
||||
/* CHOMPEdit. If I want to do a nice little give I use the actual verb for it.
|
||||
if(a_intent == I_HELP && Adjacent(target) && isitem(item) && ishuman(target))
|
||||
var/obj/item/I = item
|
||||
var/mob/living/carbon/human/H = target
|
||||
@@ -1135,6 +1136,7 @@
|
||||
to_chat(src, SPAN_NOTICE("You offer \the [I] to \the [target]."))
|
||||
do_give(H)
|
||||
return TRUE
|
||||
*/
|
||||
|
||||
drop_from_inventory(item)
|
||||
|
||||
|
||||
@@ -101,14 +101,6 @@
|
||||
|
||||
/mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
||||
|
||||
//Being hit while using a deadman switch
|
||||
if(istype(get_active_hand(),/obj/item/device/assembly/signaler))
|
||||
var/obj/item/device/assembly/signaler/signaler = get_active_hand()
|
||||
if(signaler.deadman && prob(80))
|
||||
log_and_message_admins("has triggered a signaler deadman's switch")
|
||||
src.visible_message("<font color='red'>[src] triggers their deadman's switch!</font>")
|
||||
signaler.signal()
|
||||
|
||||
if(ai_holder && P.firer)
|
||||
ai_holder.react_to_attack(P.firer)
|
||||
|
||||
|
||||
@@ -33,4 +33,6 @@ var/list/_robot_default_emotes = list(
|
||||
)
|
||||
|
||||
/mob/living/silicon/robot/get_available_emotes()
|
||||
return global._robot_default_emotes.Copy()
|
||||
var/list/fulllist = global._robot_default_emotes.Copy()
|
||||
fulllist |= _human_default_emotes
|
||||
return fulllist
|
||||
@@ -1,15 +1,15 @@
|
||||
var/global/list/robot_modules = list(
|
||||
"Standard" = /obj/item/weapon/robot_module/robot/standard,
|
||||
"Service" = /obj/item/weapon/robot_module/robot/clerical/butler,
|
||||
"Service" = /obj/item/weapon/robot_module/robot/clerical/butler/general,
|
||||
"Clerical" = /obj/item/weapon/robot_module/robot/clerical/general,
|
||||
"Research" = /obj/item/weapon/robot_module/robot/research,
|
||||
"Miner" = /obj/item/weapon/robot_module/robot/miner,
|
||||
"Research" = /obj/item/weapon/robot_module/robot/research/general,
|
||||
"Miner" = /obj/item/weapon/robot_module/robot/miner/general,
|
||||
"Crisis" = /obj/item/weapon/robot_module/robot/medical/crisis,
|
||||
"Surgeon" = /obj/item/weapon/robot_module/robot/medical/surgeon,
|
||||
"Security" = /obj/item/weapon/robot_module/robot/security/general,
|
||||
"Combat" = /obj/item/weapon/robot_module/robot/security/combat,
|
||||
"Engineering" = /obj/item/weapon/robot_module/robot/engineering/general,
|
||||
"Janitor" = /obj/item/weapon/robot_module/robot/janitor,
|
||||
"Janitor" = /obj/item/weapon/robot_module/robot/janitor/general,
|
||||
"Gravekeeper" = /obj/item/weapon/robot_module/robot/gravekeeper,
|
||||
"Lost" = /obj/item/weapon/robot_module/robot/lost,
|
||||
"Protector" = /obj/item/weapon/robot_module/robot/syndicate/protector,
|
||||
@@ -586,17 +586,18 @@ var/global/list/robot_modules = list(
|
||||
"Tower" = "drider-Janitor"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/janitor/New()
|
||||
/obj/item/weapon/robot_module/robot/janitor/general/New()
|
||||
..()
|
||||
src.modules += new /obj/item/weapon/soap/nanotrasen(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/trash(src)
|
||||
src.modules += new /obj/item/weapon/mop(src)
|
||||
src.modules += new /obj/item/pupscrubber(src)
|
||||
src.modules += new /obj/item/device/lightreplacer(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
|
||||
src.emag.reagents.add_reagent("lube", 250)
|
||||
src.emag.name = "Lube spray"
|
||||
|
||||
/obj/item/weapon/robot_module/robot/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
/obj/item/weapon/robot_module/robot/janitor/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
var/obj/item/device/lightreplacer/LR = locate() in src.modules
|
||||
LR.Charge(R, amount)
|
||||
if(src.emag)
|
||||
@@ -626,6 +627,9 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler
|
||||
channels = list("Service" = 1)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler/general
|
||||
sprites = list(
|
||||
"M-USE NanoTrasen" = "robotServ",
|
||||
"Cabeiri" = "eyebot-standard",
|
||||
@@ -651,7 +655,7 @@ var/global/list/robot_modules = list(
|
||||
"Tower" = "drider-Service"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler/New()
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler/general/New()
|
||||
..()
|
||||
src.modules += new /obj/item/weapon/gripper/service(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
|
||||
@@ -752,7 +756,7 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/miner/New()
|
||||
/obj/item/weapon/robot_module/robot/miner/general/New()
|
||||
..()
|
||||
src.modules += new /obj/item/borg/sight/material(src)
|
||||
src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
|
||||
@@ -790,7 +794,7 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/advrped)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/research/New()
|
||||
/obj/item/weapon/robot_module/robot/research/general/New()
|
||||
..()
|
||||
src.modules += new /obj/item/weapon/portable_destructive_analyzer(src)
|
||||
src.modules += new /obj/item/weapon/gripper/research(src)
|
||||
@@ -834,7 +838,7 @@ var/global/list/robot_modules = list(
|
||||
C.synths = list(wire)
|
||||
src.modules += C
|
||||
|
||||
/obj/item/weapon/robot_module/robot/research/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
/obj/item/weapon/robot_module/robot/research/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules
|
||||
if(S.mode == 2)
|
||||
|
||||
@@ -63,19 +63,19 @@
|
||||
)
|
||||
|
||||
/hook/startup/proc/robot_modules_vr()
|
||||
robot_modules["Medihound"] = /obj/item/weapon/robot_module/robot/medihound
|
||||
robot_modules["K9"] = /obj/item/weapon/robot_module/robot/knine
|
||||
robot_modules["ERT"] = /obj/item/weapon/robot_module/robot/ert
|
||||
robot_modules["Janihound"] = /obj/item/weapon/robot_module/robot/scrubpup
|
||||
robot_modules["Sci-borg"] = /obj/item/weapon/robot_module/robot/science
|
||||
robot_modules["Pupdozer"] = /obj/item/weapon/robot_module/robot/engiedog
|
||||
robot_modules["Service-Hound"] = /obj/item/weapon/robot_module/robot/clerical/brodog
|
||||
robot_modules["BoozeHound"] = /obj/item/weapon/robot_module/robot/booze
|
||||
robot_modules["KMine"] = /obj/item/weapon/robot_module/robot/kmine
|
||||
robot_modules["Medihound"] = /obj/item/weapon/robot_module/robot/medical/medihound
|
||||
robot_modules["K9"] = /obj/item/weapon/robot_module/robot/security/knine
|
||||
robot_modules["ERT"] = /obj/item/weapon/robot_module/robot/security/ert
|
||||
robot_modules["Janihound"] = /obj/item/weapon/robot_module/robot/janitor/scrubpup
|
||||
robot_modules["Sci-borg"] = /obj/item/weapon/robot_module/robot/research/sciencehound
|
||||
robot_modules["Pupdozer"] = /obj/item/weapon/robot_module/robot/engineering/engiedog
|
||||
robot_modules["Service-Hound"] = /obj/item/weapon/robot_module/robot/clerical/butler/brodog
|
||||
robot_modules["BoozeHound"] = /obj/item/weapon/robot_module/robot/clerical/butler/booze
|
||||
robot_modules["KMine"] = /obj/item/weapon/robot_module/robot/miner/kmine
|
||||
robot_modules["UnityHound"] = /obj/item/weapon/robot_module/robot/chound //CHOMP Addition Unity
|
||||
robot_modules["Honk-Hound"] = /obj/item/weapon/robot_module/robot/clerical/honkborg //CHOMP Addition Honk
|
||||
robot_modules["Stray"] = /obj/item/weapon/robot_module/robot/stray
|
||||
robot_modules["TraumaHound"] = /obj/item/weapon/robot_module/robot/medical/trauma
|
||||
robot_modules["TraumaHound"] = /obj/item/weapon/robot_module/robot/medical/traumahound
|
||||
return 1
|
||||
|
||||
//Just add a new proc with the robot_module type if you wish to run some other vore code
|
||||
@@ -94,8 +94,10 @@
|
||||
src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people.
|
||||
. = ..() //Any Global vore modules will come from here
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medical/surgeon
|
||||
/obj/item/weapon/robot_module/robot/medical
|
||||
pto_type = PTO_MEDICAL
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medical/surgeon
|
||||
vr_sprites = list(
|
||||
"Acheron" = "mechoid-Medical",
|
||||
"Shellguard Noble" = "Noble-MED",
|
||||
@@ -105,7 +107,6 @@
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medical/crisis
|
||||
pto_type = PTO_MEDICAL
|
||||
vr_sprites = list(
|
||||
"Handy" = "handy-med",
|
||||
"Acheron" = "mechoid-Medical",
|
||||
@@ -115,8 +116,10 @@
|
||||
"Feminine Humanoid" = "uptall-crisis"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler
|
||||
/obj/item/weapon/robot_module/robot/clerical
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler/general
|
||||
vr_sprites = list(
|
||||
"Handy - Service" = "handy-service",
|
||||
"Handy - Hydro" = "handy-hydro",
|
||||
@@ -128,7 +131,6 @@
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/clerical/general
|
||||
pto_type = PTO_CIVILIAN
|
||||
vr_sprites = list(
|
||||
"Handy" = "handy-clerk",
|
||||
"Acheron" = "mechoid-Service",
|
||||
@@ -140,6 +142,8 @@
|
||||
|
||||
/obj/item/weapon/robot_module/robot/janitor
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
/obj/item/weapon/robot_module/robot/janitor/general
|
||||
vr_sprites = list(
|
||||
"Handy" = "handy-janitor",
|
||||
"Acheron" = "mechoid-Janitor",
|
||||
@@ -149,8 +153,10 @@
|
||||
"Feminine Humanoid" = "uptall-janitor"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/security/general
|
||||
/obj/item/weapon/robot_module/robot/security
|
||||
pto_type = PTO_SECURITY
|
||||
|
||||
/obj/item/weapon/robot_module/robot/security/general
|
||||
vr_sprites = list(
|
||||
"Handy" = "handy-sec",
|
||||
"Acheron" = "mechoid-Security",
|
||||
@@ -160,8 +166,18 @@
|
||||
"Feminine Humanoid" = "uptall-security"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/security/combat
|
||||
vr_sprites = list(
|
||||
"Acheron" = "mechoid-Combat",
|
||||
"ZOOM-BA" = "zoomba-combat",
|
||||
"W02M" = "worm-combat",
|
||||
"Feminine Humanoid" = "uptall-security"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/miner
|
||||
pto_type = PTO_CARGO
|
||||
|
||||
/obj/item/weapon/robot_module/robot/miner/general
|
||||
vr_sprites = list(
|
||||
"Handy" = "handy-miner",
|
||||
"Acheron" = "mechoid-Miner",
|
||||
@@ -182,8 +198,11 @@
|
||||
"Feminine Humanoid" = "uptall-standard",
|
||||
"Feminine Humanoid, Variant 2" = "uptall-standard2"
|
||||
)
|
||||
/obj/item/weapon/robot_module/robot/engineering/general
|
||||
|
||||
/obj/item/weapon/robot_module/robot/engineering
|
||||
pto_type = PTO_ENGINEERING
|
||||
|
||||
/obj/item/weapon/robot_module/robot/engineering/general
|
||||
vr_sprites = list(
|
||||
"Acheron" = "mechoid-Engineering",
|
||||
"Shellguard Noble" = "Noble-ENG",
|
||||
@@ -194,6 +213,8 @@
|
||||
|
||||
/obj/item/weapon/robot_module/robot/research
|
||||
pto_type = PTO_SCIENCE
|
||||
|
||||
/obj/item/weapon/robot_module/robot/research/general
|
||||
vr_sprites = list(
|
||||
"Acheron" = "mechoid-Science",
|
||||
"ZOOM-BA" = "zoomba-research",
|
||||
@@ -202,16 +223,7 @@
|
||||
"Feminine Humanoid" = "uptall-science"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/security/combat
|
||||
pto_type = PTO_SECURITY
|
||||
vr_sprites = list(
|
||||
"Acheron" = "mechoid-Combat",
|
||||
"ZOOM-BA" = "zoomba-combat",
|
||||
"W02M" = "worm-combat",
|
||||
"Feminine Humanoid" = "uptall-security"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/knine
|
||||
/obj/item/weapon/robot_module/robot/security/knine
|
||||
name = "k9 robot module"
|
||||
sprites = list(
|
||||
"K9 hound" = "k9",
|
||||
@@ -224,13 +236,8 @@
|
||||
"Drake" = "drakesec",
|
||||
"Secborg model V-4" = "secraptor"//CHOMPEdit
|
||||
)
|
||||
channels = list("Security" = 1)
|
||||
networks = list(NETWORK_SECURITY)
|
||||
pto_type = PTO_SECURITY
|
||||
can_be_pushed = 0
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/tasercooler)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/knine/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/security/knine/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/handcuffs/cyborg(src) //You need cuffs to be a proper sec borg!
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/big(src) //In case there's some kind of hostile mob.
|
||||
src.modules += new /obj/item/weapon/melee/baton/robot(src) //Since the pounce module refused to work, they get a stunbaton instead.
|
||||
@@ -275,7 +282,7 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/rest_style
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/knine/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
/obj/item/weapon/robot_module/robot/security/knine/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
var/obj/item/device/flash/F = locate() in src.modules
|
||||
if(F.broken)
|
||||
F.broken = 0
|
||||
@@ -294,13 +301,8 @@
|
||||
B.bcell.give(amount)*/
|
||||
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medihound
|
||||
/obj/item/weapon/robot_module/robot/medical/medihound
|
||||
name = "MediHound module"
|
||||
channels = list("Medical" = 1)
|
||||
networks = list(NETWORK_MEDICAL)
|
||||
subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
|
||||
pto_type = PTO_MEDICAL
|
||||
can_be_pushed = 0
|
||||
sprites = list(
|
||||
"Medical Hound" = "medihound",
|
||||
"Dark Medical Hound (Static)" = "medihounddark",
|
||||
@@ -312,7 +314,7 @@
|
||||
"Mediborg model V-4" = "medraptor" //CHOMPEdit
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medihound/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/medical/medihound/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src) //In case a patient is being attacked by carp.
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop the crew.
|
||||
src.modules += new /obj/item/device/healthanalyzer(src) // See who's hurt specificially.
|
||||
@@ -396,20 +398,15 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/rest_style
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medical/trauma
|
||||
/obj/item/weapon/robot_module/robot/medical/traumahound
|
||||
name = "traumahound robot module"
|
||||
channels = list("Medical" = 1)
|
||||
networks = list(NETWORK_MEDICAL)
|
||||
subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
|
||||
pto_type = PTO_MEDICAL
|
||||
can_be_pushed = 0
|
||||
sprites = list(
|
||||
"Traumahound" = "traumavale",
|
||||
"Drake" = "draketrauma",
|
||||
"Borgi" = "borgi-trauma"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medical/trauma/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/medical/traumahound/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/device/healthanalyzer(src)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src)
|
||||
@@ -484,19 +481,15 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/rest_style
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/ert
|
||||
/obj/item/weapon/robot_module/robot/security/ert
|
||||
name = "Emergency Responce module"
|
||||
channels = list("Security" = 1)
|
||||
networks = list(NETWORK_SECURITY)
|
||||
pto_type = PTO_SECURITY
|
||||
can_be_pushed = 0
|
||||
sprites = list(
|
||||
"Standard" = "ert",
|
||||
"Classic" = "ertold",
|
||||
"Borgi" = "borgi"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/ert/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/security/ert/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/ert(src)
|
||||
src.modules += new /obj/item/taperoll/police(src)
|
||||
@@ -540,7 +533,7 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/rest_style
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/scrubpup
|
||||
/obj/item/weapon/robot_module/robot/janitor/scrubpup
|
||||
name = "Custodial Hound module"
|
||||
sprites = list(
|
||||
"Custodial Hound" = "scrubpup",
|
||||
@@ -550,11 +543,9 @@
|
||||
"Cat" = "vixjani", //CHOMPEdit
|
||||
"Drake" = "drakejanit"
|
||||
)
|
||||
channels = list("Service" = 1)
|
||||
pto_type = PTO_CIVILIAN
|
||||
can_be_pushed = 0
|
||||
|
||||
/obj/item/weapon/robot_module/robot/scrubpup/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/janitor/scrubpup/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src)
|
||||
src.modules += new /obj/item/pupscrubber(src)
|
||||
@@ -632,7 +623,7 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/rest_style
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/science
|
||||
/obj/item/weapon/robot_module/robot/research/sciencehound
|
||||
name = "Research Hound Module"
|
||||
sprites = list(
|
||||
"Research Hound" = "science",
|
||||
@@ -643,12 +634,9 @@
|
||||
"Drake" = "drakesci",
|
||||
"Sciborg model V-4" = "sciraptor"//CHOMPEdit
|
||||
)
|
||||
channels = list("Science" = 1)
|
||||
pto_type = PTO_SCIENCE
|
||||
can_be_pushed = 0
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/advrped)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/science/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/research/sciencehound/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src)
|
||||
src.modules += new /obj/item/weapon/gripper/research(src)
|
||||
@@ -725,7 +713,7 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/rest_style
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/engiedog
|
||||
/obj/item/weapon/robot_module/robot/engineering/engiedog
|
||||
name = "Construction Hound module"
|
||||
sprites = list(
|
||||
"Pupdozer" = "pupdozer",
|
||||
@@ -736,13 +724,9 @@
|
||||
"Cat" = "vixengi", //CHOMPEdit
|
||||
"Drake" = "drakeeng"
|
||||
)
|
||||
channels = list("Engineering" = 1)
|
||||
networks = list(NETWORK_ENGINEERING)
|
||||
pto_type = PTO_ENGINEERING
|
||||
subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor)
|
||||
can_be_pushed = 0
|
||||
|
||||
/obj/item/weapon/robot_module/robot/engiedog/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/engineering/engiedog/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/borg/sight/meson(src)
|
||||
src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src)
|
||||
@@ -888,7 +872,7 @@
|
||||
..()
|
||||
|
||||
// Uses modified K9 sprites.
|
||||
/obj/item/weapon/robot_module/robot/clerical/brodog
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler/brodog
|
||||
name = "service-hound module"
|
||||
sprites = list(
|
||||
"Blackhound" = "k50",
|
||||
@@ -898,13 +882,11 @@
|
||||
"Cat" = "vixserv", //CHOMPEdit
|
||||
"Drake" = "drakemine"
|
||||
)
|
||||
channels = list("Service" = 1)
|
||||
pto_type = PTO_CIVILIAN
|
||||
can_be_pushed = 0
|
||||
|
||||
|
||||
// In a nutshell, basicly service/butler robot but in dog form. - Port from CitadelRP
|
||||
/obj/item/weapon/robot_module/robot/clerical/brodog/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler/brodog/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/gripper/service(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
|
||||
src.modules += new /obj/item/weapon/material/minihoe(src)
|
||||
@@ -970,7 +952,7 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/rest_style
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/kmine
|
||||
/obj/item/weapon/robot_module/robot/miner/kmine
|
||||
name = "Supply Hound Module"
|
||||
sprites = list(
|
||||
"KMine" = "kmine",
|
||||
@@ -980,12 +962,9 @@
|
||||
"Cat Cargo" = "vixcargo", //CHOMPEdit
|
||||
"Drake" = "drakemine"
|
||||
)
|
||||
channels = list("Supply" = 1)
|
||||
pto_type = PTO_CARGO
|
||||
can_be_pushed = 0
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/kmine/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/miner/kmine/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/borg/sight/material(src)
|
||||
src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src)
|
||||
@@ -1054,10 +1033,8 @@
|
||||
R.verbs -= /mob/living/silicon/robot/proc/rest_style
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/booze
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler/booze
|
||||
name = "BoozeHound robot module"
|
||||
channels = list("Service" = 1)
|
||||
pto_type = PTO_CIVILIAN
|
||||
can_be_pushed = 0
|
||||
sprites = list(
|
||||
"Beer Buddy" = "boozeborg",
|
||||
@@ -1070,7 +1047,7 @@
|
||||
"Vodka Komrade" = "boozeborg(vodka)"
|
||||
) //CHOMP Edit Added Vodka Komrade
|
||||
|
||||
/obj/item/weapon/robot_module/robot/booze/New(var/mob/living/silicon/robot/R)
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler/booze/New(var/mob/living/silicon/robot/R)
|
||||
..()
|
||||
src.modules += new /obj/item/weapon/gripper/service(src)
|
||||
//src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
|
||||
@@ -1117,7 +1094,7 @@
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/booze/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
/obj/item/weapon/robot_module/robot/clerical/butler/booze/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules
|
||||
E.reagents.add_reagent("enzyme", 2 * amount)
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
/obj/item/weapon/robot_module/robot/syndicate/combat_medic/New(var/mob/living/silicon/robot/R)
|
||||
..()
|
||||
src.modules += new /obj/item/borg/sight/hud/med(src)
|
||||
src.modules += new /obj/item/device/healthanalyzer/advanced(src)
|
||||
src.modules += new /obj/item/device/healthanalyzer/phasic(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/borghypo/merc(src)
|
||||
|
||||
// Surgery things.
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
if(isturf(tile))
|
||||
B.gather_all(tile, src, 1) //Shhh, unless the bag fills, don't spam the borg's chat with stuff that's going on every time they move!
|
||||
|
||||
if(istype(module, /obj/item/weapon/robot_module/robot/janitor) && isturf(loc))
|
||||
if(scrubbing && isturf(loc))
|
||||
var/turf/tile = loc
|
||||
tile.clean_blood()
|
||||
if (istype(tile, /turf/simulated))
|
||||
|
||||
@@ -156,36 +156,6 @@
|
||||
icon_state = "[module_sprites[icontype]]-wreck"
|
||||
add_overlay("wreck-overlay")
|
||||
|
||||
/mob/living/silicon/robot/Moved(atom/old_loc, direction, forced = FALSE)
|
||||
. = ..()
|
||||
if(scrubbing && isturf(loc) && water_res?.energy >= 1)
|
||||
var/turf/tile = loc
|
||||
water_res.use_charge(1)
|
||||
tile.clean_blood()
|
||||
if(istype(tile, /turf/simulated))
|
||||
var/turf/simulated/T = tile
|
||||
T.dirt = 0
|
||||
for(var/A in tile)
|
||||
if(istype(A,/obj/effect/rune) || istype(A,/obj/effect/decal/cleanable) || istype(A,/obj/effect/overlay))
|
||||
qdel(A)
|
||||
else if(istype(A, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/cleaned_human = A
|
||||
if(cleaned_human.lying)
|
||||
if(cleaned_human.head)
|
||||
cleaned_human.head.clean_blood()
|
||||
cleaned_human.update_inv_head(0)
|
||||
if(cleaned_human.wear_suit)
|
||||
cleaned_human.wear_suit.clean_blood()
|
||||
cleaned_human.update_inv_wear_suit(0)
|
||||
else if(cleaned_human.w_uniform)
|
||||
cleaned_human.w_uniform.clean_blood()
|
||||
cleaned_human.update_inv_w_uniform(0)
|
||||
if(cleaned_human.shoes)
|
||||
cleaned_human.shoes.clean_blood()
|
||||
cleaned_human.update_inv_shoes(0)
|
||||
cleaned_human.clean_blood(1)
|
||||
to_chat(cleaned_human, "<span class='warning'>[src] cleans your face!</span>")
|
||||
|
||||
/mob/living/silicon/robot/proc/vr_sprite_check()
|
||||
if(custom_sprite == TRUE)
|
||||
return
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
if(has_eye_glow)
|
||||
add_eyes()
|
||||
|
||||
if(!IsAdvancedToolUser()) //CHOMPSTATION edit: Moved here so the verb is useable before initialising vorgans.
|
||||
if(vore_active) //CHOMPSTATION edit: Moved here so the verb is useable before initialising vorgans.
|
||||
verbs |= /mob/living/simple_mob/proc/animal_nom
|
||||
verbs |= /mob/living/proc/shred_limb
|
||||
verbs |= /mob/living/simple_mob/proc/nutrition_heal //CHOMPSTATION edit
|
||||
|
||||
@@ -325,4 +325,4 @@
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
|
||||
|
||||
/decl/mob_organ_names/fish
|
||||
hit_zones = list("head", "body", "dorsal fin", "left pectoral fin", "right pectoral fin", "tail fin")
|
||||
hit_zones = list("head", "body", "dorsal fin", "left pectoral fin", "right pectoral fin", "tail fin")
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
name = "crystal-feather duck"
|
||||
desc = "A glittering flightless bird."
|
||||
tt_desc = "S Anatidae vitriae"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/crystalduck)
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/crystalduck)
|
||||
|
||||
faction = "duck"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/mob/living/victim = null // the person the slime is currently feeding on
|
||||
var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
|
||||
var/mutation_chance = 30 // CHOMPedit Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
|
||||
var/split_amount = 4 // Amount of children we will normally have. Half of that for dead adult slimes. Is NOT carried across generations.
|
||||
var/split_amount = 5 //Chompedit: increased from 4 to 5 to make xenobio faster and deadlier. Amount of children we will normally have. Half of that for dead adult slimes. Is NOT carried across generations.
|
||||
var/untamable = FALSE //Makes slime untamable via discipline.
|
||||
var/untamable_inheirit = FALSE //Makes slime inheirit its untamability.
|
||||
var/list/slime_mutation = list(
|
||||
|
||||
@@ -508,6 +508,8 @@ I think I covered everything.
|
||||
/// My thanks to Raeschen for these descriptions
|
||||
|
||||
/mob/living/simple_mob/vore/bigdragon/init_vore()
|
||||
if(!voremob_loaded) //CHOMPEdit
|
||||
return
|
||||
var/obj/belly/B = new /obj/belly/dragon/maw(src)
|
||||
B.affects_vore_sprites = FALSE //CHOMPEdit - Added so that the new system handles these not affecting the sprite.
|
||||
B.emote_lists[DM_HOLD] = list(
|
||||
|
||||
@@ -47,6 +47,15 @@
|
||||
icon_dead = "wah_fae_dead"
|
||||
icon_rest = "wah_fae_rest"
|
||||
|
||||
vore_ignores_undigestable = 0 // wah don't care you're edible or not, you still go in
|
||||
vore_digest_chance = 0 // instead of digesting if you struggle...
|
||||
vore_absorb_chance = 20 // you get to become adorable purple wahpudge.
|
||||
vore_bump_chance = 75
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 20
|
||||
|
||||
/mob/living/simple_mob/vore/redpanda/blue
|
||||
name = "blue wah"
|
||||
desc = "Blue, but still cute!"
|
||||
|
||||
@@ -647,7 +647,8 @@
|
||||
stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)")
|
||||
if(ticker && ticker.current_state != GAME_STATE_PREGAME)
|
||||
stat("Station Time", stationtime2text())
|
||||
stat("Station Date", stationdate2text())
|
||||
var/date = "[stationdate2text()], [capitalize(world_time_season)]"
|
||||
stat("Station Date", date)
|
||||
stat("Round Duration", roundduration2text())
|
||||
|
||||
if(client.holder)
|
||||
@@ -1274,4 +1275,4 @@ GLOBAL_LIST_EMPTY_TYPED(living_players_by_zlevel, /list)
|
||||
|
||||
/mob/proc/grab_ghost(force)
|
||||
if(mind)
|
||||
return mind.grab_ghost(force = force)
|
||||
return mind.grab_ghost(force = force)
|
||||
|
||||
@@ -587,7 +587,7 @@ shadekin_snoot
|
||||
name = "Wrist Fluff"
|
||||
icon_state = "fluffy_cuffs"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_L_ARM,BP_R_ARM)
|
||||
body_parts = list(BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
|
||||
|
||||
/datum/sprite_accessory/marking/vr/chubby_belly
|
||||
name = "Chubby Belly"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user