Unshit the code(Mobspawners) (#7706)

This commit is contained in:
Cadyn
2024-02-08 22:55:57 -08:00
committed by GitHub
parent b9295e90c5
commit 9cb6ee14a6
7 changed files with 330 additions and 568 deletions

View File

@@ -15,6 +15,22 @@
* Misc
*/
//CHOMPEdit Begin
///compare two lists, returns TRUE if they are the same
/proc/compare_list(list/l,list/d)
if(!islist(l) || !islist(d))
return FALSE
if(l.len != d.len)
return FALSE
for(var/i in 1 to l.len)
if(l[i] != d[i])
return FALSE
return TRUE
//CHOMPEdit End
//Returns a list in plain english as a string
/proc/english_list(var/list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = ",")
// this proc cannot be merged with counting_english_list to maintain compatibility
@@ -898,4 +914,4 @@ var/global/list/json_cache = list()
return item
return null
//CHOMPAdd end
//CHOMPAdd end

View File

@@ -0,0 +1,68 @@
/// This component behaves similar to connect_loc_behalf, but it's nested and hooks a signal onto all MOVABLES containing this atom.
/datum/component/connect_containers
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
/// An assoc list of signal -> procpath to register to the loc this object is on.
var/list/connections
/**
* The atom the component is tracking. The component will delete itself if the tracked is deleted.
* Signals will also be updated whenever it moves.
*/
var/atom/movable/tracked
/datum/component/connect_containers/Initialize(atom/movable/tracked, list/connections)
. = ..()
if (!ismovable(tracked))
return COMPONENT_INCOMPATIBLE
src.connections = connections
set_tracked(tracked)
/datum/component/connect_containers/Destroy()
set_tracked(null)
return ..()
/datum/component/connect_containers/InheritComponent(datum/component/component, original, atom/movable/tracked, list/connections)
// Not equivalent. Checks if they are not the same list via shallow comparison.
if(!compare_list(src.connections, connections))
stack_trace("connect_containers component attached to [parent] tried to inherit another connect_containers component with different connections")
return
if(src.tracked != tracked)
set_tracked(tracked)
/datum/component/connect_containers/proc/set_tracked(atom/movable/new_tracked)
if(tracked)
UnregisterSignal(tracked, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING))
unregister_signals(tracked.loc)
tracked = new_tracked
if(!tracked)
return
RegisterSignal(tracked, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
RegisterSignal(tracked, COMSIG_PARENT_QDELETING, PROC_REF(handle_tracked_qdel))
update_signals(tracked)
/datum/component/connect_containers/proc/handle_tracked_qdel()
SIGNAL_HANDLER
qdel(src)
/datum/component/connect_containers/proc/update_signals(atom/movable/listener)
if(!ismovable(listener.loc))
return
for(var/atom/movable/container as anything in get_nested_locs(listener))
RegisterSignal(container, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
for(var/signal in connections)
parent.RegisterSignal(container, signal, connections[signal])
/datum/component/connect_containers/proc/unregister_signals(atom/movable/location)
if(!ismovable(location))
return
for(var/atom/movable/target as anything in (get_nested_locs(location) + location))
UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
parent.UnregisterSignal(target, connections)
/datum/component/connect_containers/proc/on_moved(atom/movable/listener, atom/old_loc)
SIGNAL_HANDLER
unregister_signals(old_loc)
update_signals(listener)

View File

@@ -0,0 +1,107 @@
/**
* This component behaves similar to connect_loc_behalf but for all turfs in range, hooking into a signal on each of them.
* Just like connect_loc_behalf, It can react to that signal on behalf of a seperate listener.
* Good for components, though it carries some overhead. Can't be an element as that may lead to bugs.
*/
/datum/component/connect_range
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
/// An assoc list of signal -> procpath to register to the loc this object is on.
var/list/connections
/**
* The atom the component is tracking. The component will delete itself if the tracked is deleted.
* Signals will also be updated whenever it moves (if it's a movable).
*/
var/atom/tracked
/// The component will hook into signals only on turfs not farther from tracked than this.
var/range
/// Whether the component works when the movable isn't directly located on a turf.
var/works_in_containers
/datum/component/connect_range/Initialize(atom/tracked, list/connections, range, works_in_containers = TRUE)
if(!isatom(tracked) || isarea(tracked) || range < 0)
return COMPONENT_INCOMPATIBLE
src.connections = connections
src.range = range
set_tracked(tracked)
src.works_in_containers = works_in_containers
/datum/component/connect_range/Destroy()
set_tracked(null)
return ..()
/datum/component/connect_range/InheritComponent(datum/component/component, original, atom/tracked, list/connections, range, works_in_containers)
// Not equivalent. Checks if they are not the same list via shallow comparison.
if(!compare_list(src.connections, connections))
stack_trace("connect_range component attached to [parent] tried to inherit another connect_range component with different connections")
return
if(src.tracked != tracked)
set_tracked(tracked)
if(src.range == range && src.works_in_containers == works_in_containers)
return
//Unregister the signals with the old settings.
unregister_signals(isturf(tracked) ? tracked : tracked.loc)
src.range = range
src.works_in_containers = works_in_containers
//Re-register the signals with the new settings.
update_signals(src.tracked)
/datum/component/connect_range/proc/set_tracked(atom/new_tracked)
if(tracked) //Unregister the signals from the old tracked and its surroundings
unregister_signals(isturf(tracked) ? tracked : tracked.loc)
UnregisterSignal(tracked, list(
COMSIG_MOVABLE_MOVED,
COMSIG_PARENT_QDELETING,
))
tracked = new_tracked
if(!tracked)
return
//Register signals on the new tracked atom and its surroundings.
RegisterSignal(tracked, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
RegisterSignal(tracked, COMSIG_PARENT_QDELETING, PROC_REF(handle_tracked_qdel))
update_signals(tracked)
/datum/component/connect_range/proc/handle_tracked_qdel()
SIGNAL_HANDLER
qdel(src)
/datum/component/connect_range/proc/update_signals(atom/target, atom/old_loc, forced = FALSE)
var/turf/current_turf = get_turf(target)
var/on_same_turf = current_turf == get_turf(old_loc) //Only register/unregister turf signals if it's moved to a new turf.
unregister_signals(old_loc, on_same_turf)
if(isnull(current_turf))
return
if(ismovable(target.loc))
if(!works_in_containers)
return
//Keep track of possible movement of all movables the target is in.
for(var/atom/movable/container as anything in get_nested_locs(target))
RegisterSignal(container, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
if(on_same_turf && !forced)
return
for(var/turf/target_turf in RANGE_TURFS(range, current_turf))
for(var/signal in connections)
parent.RegisterSignal(target_turf, signal, connections[signal])
/datum/component/connect_range/proc/unregister_signals(atom/location, on_same_turf = FALSE)
//The location is null or is a container and the component shouldn't have register signals on it
if(isnull(location) || (!works_in_containers && !isturf(location)))
return
if(ismovable(location))
for(var/atom/movable/target as anything in (get_nested_locs(location) + location))
UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
if(on_same_turf)
return
var/turf/previous_turf = get_turf(location)
for(var/turf/target_turf in RANGE_TURFS(range, previous_turf))
parent.UnregisterSignal(target_turf, connections)
/datum/component/connect_range/proc/on_moved(atom/movable/movable, atom/old_loc)
SIGNAL_HANDLER
update_signals(movable, old_loc)

View File

@@ -0,0 +1,97 @@
/datum/proximity_monitor
///The atom we are tracking
var/atom/host
///The atom that will receive HasProximity calls.
var/atom/hasprox_receiver
///The range of the proximity monitor. Things moving wihin it will trigger HasProximity calls.
var/current_range
///If we don't check turfs in range if the host's loc isn't a turf
var/ignore_if_not_on_turf
///The signals of the connect range component, needed to monitor the turfs in range.
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
COMSIG_ATOM_EXITED = PROC_REF(on_uncrossed),
COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON = PROC_REF(on_entered),
)
/datum/proximity_monitor/New(atom/_host, range, _ignore_if_not_on_turf = TRUE)
ignore_if_not_on_turf = _ignore_if_not_on_turf
current_range = range
set_host(_host)
/datum/proximity_monitor/proc/set_host(atom/new_host, atom/new_receiver)
if(new_host == host)
return
if(host) //No need to delete the connect range and containers comps. They'll be updated with the new tracked host.
UnregisterSignal(host, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING))
if(hasprox_receiver)
UnregisterSignal(hasprox_receiver, COMSIG_PARENT_QDELETING)
if(new_receiver)
hasprox_receiver = new_receiver
if(new_receiver != new_host)
RegisterSignal(new_receiver, COMSIG_PARENT_QDELETING, PROC_REF(on_host_or_receiver_del))
else if(hasprox_receiver == host) //Default case
hasprox_receiver = new_host
host = new_host
RegisterSignal(new_host, COMSIG_PARENT_QDELETING, PROC_REF(on_host_or_receiver_del))
var/static/list/containers_connections = list(COMSIG_MOVABLE_MOVED = PROC_REF(on_moved), COMSIG_MOVABLE_Z_CHANGED = PROC_REF(on_z_change))
AddComponent(/datum/component/connect_containers, host, containers_connections)
RegisterSignal(host, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
RegisterSignal(host, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_z_change))
set_range(current_range, TRUE)
/datum/proximity_monitor/proc/on_host_or_receiver_del(datum/source)
SIGNAL_HANDLER
qdel(src)
/datum/proximity_monitor/Destroy()
host = null
hasprox_receiver = null
return ..()
/datum/proximity_monitor/proc/set_range(range, force_rebuild = FALSE)
if(!force_rebuild && range == current_range)
return FALSE
. = TRUE
current_range = range
//If the connect_range component exists already, this will just update its range. No errors or duplicates.
AddComponent(/datum/component/connect_range, host, loc_connections, range, !ignore_if_not_on_turf)
/datum/proximity_monitor/proc/on_moved(atom/movable/source, atom/old_loc)
SIGNAL_HANDLER
if(source == host)
hasprox_receiver?.HasProximity(host)
/datum/proximity_monitor/proc/on_z_change()
SIGNAL_HANDLER
return
/datum/proximity_monitor/proc/set_ignore_if_not_on_turf(does_ignore = TRUE)
if(ignore_if_not_on_turf == does_ignore)
return
ignore_if_not_on_turf = does_ignore
//Update the ignore_if_not_on_turf
AddComponent(/datum/component/connect_range, host, loc_connections, current_range, ignore_if_not_on_turf)
/datum/proximity_monitor/proc/on_uncrossed()
SIGNAL_HANDLER
return //Used by the advanced subtype for effect fields.
/datum/proximity_monitor/proc/on_entered(atom/source, atom/movable/arrived)
SIGNAL_HANDLER
if(source != host)
hasprox_receiver?.HasProximity(arrived)
/datum/proximity_monitor/mobspawner
/datum/proximity_monitor/mobspawner/on_uncrossed(atom/source, atom/movable/AM, atom/new_loc)
SIGNAL_HANDLER
var/obj/structure/mob_spawner/scanner/scanner = host
scanner.CheckProximity(AM,new_loc)
/datum/proximity_monitor/mobspawner/on_entered(atom/source, atom/movable/arrived)
SIGNAL_HANDLER
var/obj/structure/mob_spawner/scanner/scanner = host
if(source != host)
scanner.NewProximity(arrived)

View File

@@ -69,17 +69,28 @@
last_spawn = world.time
if(total_spawns > 0)
total_spawns--
//how about we find a suitable location first
var/attempts = 0
var/turf/spawn_turf = null
while((!spawn_turf || spawn_turf.density) && attempts < 15)
var/xcoord = rand(-5,5)
var/ycoord = rand(-5,5)
spawn_turf = locate(x + xcoord, y + ycoord, z)
attempts++
//and then we spawn them
if(ispath(mob_path, /mob/living))
var/mob/living/L = new mob_path(get_turf(src))
L.nest = src
var/mob/living/L = new mob_path(get_turf(spawn_turf))
L.nest = spawn_turf
spawned_mobs.Add(L)
if(mob_faction)
L.faction = mob_faction
return L
if(ispath(mob_path, /obj/structure/closet/crate/mimic))
var/obj/structure/closet/crate/mimic/O = new mob_path(get_turf(src))
var/obj/structure/closet/crate/mimic/O = new mob_path(get_turf(spawn_turf))
spawned_mobs.Add(O)
O.nest = src
O.nest = spawn_turf
return O
return 0
//CHOMPEdit End
@@ -132,17 +143,37 @@ It also makes it so a ghost wont know where all the goodies/mobs are.
/obj/structure/mob_spawner/scanner
name ="Lazy Mob Spawner"
var/range = 10 //range in tiles from the spawner to detect moving stuff
//CHOMPEdit Begin
var/datum/proximity_monitor/mobspawner/prox
var/list/mobs_in_range = list()
/obj/structure/mob_spawner/scanner/New()
..()
prox = new(src, range)
/obj/structure/mob_spawner/scanner/proc/NewProximity(atom/movable/AM)
if(istype(AM,/mob/living) && !(AM in mobs_in_range))
mobs_in_range += AM
/obj/structure/mob_spawner/scanner/proc/CheckProximity(atom/movable/AM,turf/new_loc)
if(AM in mobs_in_range && (!AM || get_dist(src,new_loc) > range))
mobs_in_range -= AM
//CHOMPEdit End
/obj/structure/mob_spawner/scanner/process()
if(!can_spawn())
return
//CHOMPEdit Begin
if(world.time > last_spawn + spawn_delay)
var/turf/mainloc = get_turf(src)
for(var/mob/living/A in range(range,mainloc))
if ((A.faction != mob_faction) && (A.move_speed < 12))
for(var/mob/living/A in mobs_in_range) //No more calling fucking range(10) every goddamn processing tick, christ.
if ((A.faction != mob_faction) && A.ckey)
var/chosen_mob = choose_spawn()
if(chosen_mob)
do_spawn(chosen_mob)
break //ALSO NO SPAWNING MULTIPLE MOBS
//CHOMPEdit End
//////////////
// Spawners //

View File

@@ -1,560 +0,0 @@
##
# --------------
# Legacy/Defunct
# --------------
#
# Custom items go here. They are modifications of existing paths; look at the example for details.
# Item will spawn if the target has one of the req_titles and if their on-spawn ID has the required access level.
# req_access is going to be a shit to maintain since the config file can't grab constants and has to use integers, use it minimally.
# Separate titles with a single comma and a space (', ') or they'll bork.
#
# EX:
# {
# ckey: zuhayr
# character_name: Jane Doe
# item_path: /obj/item/toy/plushie
# item_name: ugly plush toy
# item_icon: flagmask
# item_defsc: It's truly hideous.
# req_titles: Assistant, Security Officer
# req_access: 1
# }
#
# {
# ckey: zuhayr
# character_name: Jane Doe
# item_path: /obj/item/device/kit/paint
# item_name: APLU customisation kit
# item_desc: A customisation kit with all the parts needed to turn an APLU into a "Titan's Fist" model.
# kit_name: APLU "Titan's Fist"
# kit_desc: Looks like an overworked, under-maintained Ripley with some horrific damage.
# kit_icon: titan
# additional_data: ripley, firefighter
# }
#
# {
# ckey: zuhayr
# character_name: Jane Doe
# item_path: /obj/item/device/kit/suit
# item_name: salvage suit customisation kit
# item_desc: A customisation kit with all the parts needed to convert a suit.
# kit_name: salvage
# kit_desc: An orange voidsuit. Reinforced!
# kit_icon: salvage
# }
##
# ######## 0-9 CKEYS
# ######## A CKEYS
{
ckey: admiraldragon
character_name: Tikorak Korgask
item_path: /obj/item/weapon/storage/box/fluff/tikorak
}
# ######## B CKEYS
{
ckey: blackangelsace
character_name: Madoka Koto
item_path: /obj/item/weapon/storage/box/fluff/madoka
}
{
ckey: blackangelsace
character_name: Wolfgang Jaeger
item_path: /obj/item/weapon/storage/box/fluff/mauser
}
{
ckey: blackangelsace
character_name: Aurora Goldtail
item_path: /obj/item/clothing/glasses/omnihud/prescription/aurora
}
{
ckey: blackangelsace
character_name: Strix Hades
item_path: /obj/item/clothing/suit/storage/seromi/cloak/fluff/strix
}
{
ckey: blackangelsace
character_name: Strix Hades
item_path: /obj/item/clothing/under/seromi/undercoat/fluff/strix
}
{
ckey: blackangelsace
character_name: Strix Hades
item_path: /obj/item/toy/bosunwhistle/fluff/strix
}
{
ckey: blackangelsace
character_name: Strix Hades
item_path: /obj/item/device/radio/headset/fluff/strix
}
{
ckey: benl8561
character_name: M.I.S.S.Y
item_path: /obj/item/weapon/storage/box/fluff/missy
}
{
ckey: benl8561
character_name: Quanah Hastings
item_path: /obj/item/weapon/storage/box/fluff/quanah
}
# ######## C CKEYS
{
ckey: captmatt4
character_name: Payton Joghs
item_path: /obj/item/weapon/material/hatchet/unathiknife/fluff/payton_joghs_1
}
{
ckey: captmatt4
character_name: Eliana Noya
item_path: /obj/item/clothing/under/fluff/eliana_noya_1
}
{
ckey: captmatt4
character_name: Korei Laskor
item_path: /obj/item/clothing/head/helmet/fluff/korei_laskor_1
}
{
ckey: cynicaltester
character_name: Zeta Blackwell
item_path: /obj/item/clothing/accessory/fluff/zeta_blackwell_1
}
{
ckey: championfire
character_name: Anoki Windroar
item_path: /obj/item/weapon/storage/box/fluff/anoki
}
{
ckey: championfire
character_name: Ivy Kaeire
item_path: /obj/item/weapon/storage/box/fluff/ivy
}
{
ckey: championfire
character_name: Kita
item_path: /obj/item/clothing/suit/storage/seromi/cloak/fluff/kita
}
# ######## D CKEYS
{
ckey: dameonowen
character_name: Dameon Owen
item_path: /obj/item/weapon/reagent_containers/food/snacks/cookie/mysterious
}
{
ckey: dameonowen
character_name: Amber Owen
item_path: /obj/item/weapon/reagent_containers/food/snacks/cookie/mysterious
}
{
ckey: dawidoe
character_name: Melissa Krutz
item_path: /obj/item/weapon/storage/box/fluff/melissa
}
{
ckey: dwaggy90
character_name: Saur Darastrix
item_path: /obj/item/weapon/storage/box/fluff/saur
}
{
ckey: dushka
character_name: Saroth
item_path: /obj/item/weapon/storage/box/fluff/saroth
}
{
ckey: dushka
character_name: Jaree-Kur
item_path: /obj/item/clothing/accessory/poncho/cloak/fluff/Jaree
}
{
ckey: dushka
character_name: Jaree-Kur
item_path: /obj/item/clothing/head/ushanka/alt/fluff/Jaree
}
{
ckey: deepindigo
character_name: Amina Dae-Kouri
item_path: /obj/item/weapon/storage/bible/fluff/amina
}
# ######## E CKEYS
{
ckey: esperkin
character_name: Sheri Calen
item_path: /obj/item/device/modkit_conversion/fluff/sheri_rig_kit
}
# ######## F CKEYS
{
ckey: frenziedvorcha
character_name: Philip Smirnov
item_path: /obj/item/weapon/storage/box/fluff/philipsmirnov
}
# ######## G CKEYS
{
ckey: generalpantsu
character_name: Amara Faell
item_path: /obj/item/weapon/storage/box/fluff/amara
}
{
ckey: generalpantsu
character_name: Zara Venlee
item_path: /obj/item/weapon/storage/box/fluff/zara
}
{
ckey: generalpantsu
character_name: Samantha Quzix
item_path: /obj/item/weapon/storage/box/fluff/samantha
}
{
ckey: generalpantsu
character_name: Nika Domashev
item_path: /obj/item/weapon/storage/box/fluff/nika
}
# ######## H CKEYS
{
ckey: harpsong
character_name: Harpsong
item_path: /obj/item/clothing/suit/armor/vest/harpsong
}
# ######## I CKEYS
{
ckey: izac112
character_name: Ally Faell
item_path: /obj/item/weapon/storage/box/fluff/ally
}
{
ckey: izac112
character_name: Raja Bastet
item_path: /obj/item/weapon/storage/box/fluff/raja
}
{
ckey: izac112
character_name: Shel Nargol
item_path: /obj/item/weapon/storage/box/fluff/shel
}
{
ckey: izac112
character_name: Alva Karlholm
item_path: /obj/item/weapon/storage/box/fluff/alva
}
{
ckey: interrolouis
character_name: Kai Highlands
/obj/item/borg/upgrade/modkit/chassis_mod/kai
}
{
ckey: ivymoomoo
character_name: Ivy Baladeva
item_path: /obj/item/weapon/storage/backpack/messenger/sec/fluff/ivymoomoo
}
{
ckey: VanesaFancyFin
character_name: Ire
item_path: /obj/item/weapon/bikehorn/fluff/chew_ire
}
# ######## J CKEYS
{
ckey: johnwolf135
character_name: Rosetta Neton
item_path: /obj/item/clothing/under/fluff/rosetta
}
{
ckey: johnwolf135
character_name: John Wolf
item_path: /obj/item/weapon/storage/box/fluff/John
}
{
ckey: jwguy
character_name: Koyo Akimomi
item_path: /obj/item/weapon/storage/box/fluff/koyoakimomi
}
# ######## K CKEYS
# ######## L CKEYS
{
ckey: lukevale
character_name: Mira Rezus
item_path: /obj/item/weapon/storage/box/fluff/mira
}
{
ckey: lukevale
character_name: Natalya Vospit
item_path: /obj/item/weapon/storage/box/fluff/natalya
}
{
ckey: lukevale
character_name: Lena Hastings
item_path: /obj/item/weapon/storage/box/fluff/lena
}
{
ckey: lukevale
character_name: Eryn Wolfe
item_path: /obj/item/weapon/storage/box/fluff/eryn
}
{
ckey: lukevale
character_name: Mitsuko Jiao
item_path: /obj/item/weapon/storage/box/fluff/jiao
}
# ######## M CKEYS
{
ckey: masmc
character_name: Kettek Ollarch
item_path: /obj/item/weapon/storage/box/fluff/kettek
}
{
ckey: maxiefoxie
character_name: Maxie Drake
item_path: /obj/item/weapon.storage/box/fluff/maxie
}
{
ckey: mr_signmeup
character_name: Reshskakskakss Seekiseekis
item_path: /obj/item/clothing/suit/security/navyhos
req_access: 58
}
{
ckey: mr_signmeup
character_name: Daniel Fisher
item_path: /obj/item/clothing/accessory/medal/conduct
}
# ######## N CKEYS
# ######## O CKEYS
# ######## P CKEYS
{
ckey: paintitred
character_name: Noel Walsh
item_path: /obj/item/weapon/storage/box/fluff/noel
}
# ######## Q CKEYS
# ######## R CKEYS
{
ckey: radiantflash
character_name: Vasharr Zahirn
item_path: /obj/item/weapon/storage/box/fluff/vasharr
}
{
ckey: randysavage205
character_name: Alex Wolf
item_path: /obj/item/clothing/accessory/fluff/alex_wolf_1
}
{
ckey: roguenoob
character_name: Basir Fahim
item_path: /obj/item/clothing/gloves/ring/fluff/basir
}
# ######## S CKEYS
{
ckey: shaper
character_name: Natene
item_path: /obj/item/clothing/accessory/medal/silver/valor
}
{
ckey: sempt
character_name: Kayla Endsley
item_path: /obj/item/clothing/under/rank/roboticist/skirt
}
{
ckey: SASoperative
character_name: Joseph Skinner
item_path: /obj/item/weapon/storage/box/fluff/skinner
}
# ######## T CKEYS
# ######## U CKEYS
{
ckey: unleashedmana
character_name: Eviriik Vin'cir
item_path: /obj/item/clothing/suit/storage/hoodie/fluff/eviriik_4
}
{
ckey: unleashedmana
character_name: Ike Eio'ni
item_path: /obj/item/clothing/suit/storage/labcoat/fluff/eioni_1
}
{
ckey: unleashedmana
character_name: Ike Eio'ni
item_path: /obj/item/clothing/under/fluff/eioni_2
}
{
ckey: unleashedmana
character_name: R.E.D.A.X.
item_path: /obj/item/clothing/suit/storage/hoodie/fluff/redax_1
}
{
ckey: unleashedmana
character_name: R.E.D.A.X.
item_path: /obj/item/clothing/under/fluff/redax_2
}
{
ckey: unleashedmana
character_name: Eviriik Vin'cir
item_path: /obj/item/clothing/accessory/fluff/eviriik_1
}
{
ckey: unleashedmana
character_name: Eviriik Vin'cir
item_path: /obj/item/clothing/under/fluff/eviriik_2
}
{
ckey: unleashedmana
character_name: Eviriik Vin'cir
item_path: /obj/item/clothing/suit/storage/fluff/eviriik_3
}
{
ckey: unleashedmana
character_name: Eravik Vessi
item_path: /obj/item/weapon/kitchenknife/tacknife/unathiknife/fluff/eravik_vessi_1
}
{
ckey: unleashedmana
character_name: Eravik Vessi
item_path: /obj/item/clothing/suit/storage/fluff/eravik_vessi_2
}
{
ckey: unleashedmana
character_name: Eravik Vessi
item_path: /obj/item/clothing/under/fluff/eravik_vessi_3
}
{
ckey: unleashedmana
character_name: David
item_path: /obj/item/clothing/under/fluff/david_1
}
{
ckey: unleashedmana
character_name: David
item_path: /obj/item/clothing/suit/storage/fluff/david_2
}
{
ckey: unleashedmana
character_name: David
item_path: /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/david_3
}
{
ckey: unleashedmana
character_name: Zeke Vin'cir
item_path: /obj/item/weapon/fluff/zekewatch
}
{
ckey: unleashedmana
character_name: Zeke Vin'cir
item_path: /obj/item/clothing/accessory/fluff/zeke_vincir_1
}
{
ckey: unleashedmana
character_name: Zeke Vin'cir
item_path: /obj/item/clothing/under/fluff/zeke_vincir_2
}
{
ckey: unleashedmana
character_name: Zeke Vin'cir
item_path: /obj/item/clothing/under/fluff/zeke_vincir_3
}
{
ckey: unleashedmana
character_name: Lucerna
item_path: /obj/item/clothing/mask/fluff/lucerna_1
}
{
ckey: unleashedmana
character_name: Ragna Carvel
item_path: /obj/item/weapon/material/kitchen/utensil/fork/fluff/ragna_1
}
# ######## V CKEYS
{
ckey: valhallaviking01
character_name: Wolf Erikson
item_path: /obj/item/clothing/accessory/fluff/wolf_erikson_1
}
{
ckey: valhallaviking01
character_name: Hans Jaeger
item_path: /obj/item/weapon/storage/box/fluff/mauser
}
{
ckey: vanesafancyfin
character_name: Vanesa FancyFin
item_path: /obj/item/weapon/storage/box/fluff/vanesaf
}
{
ckey: vitorhks
character_name: Jessica Mayer
item_path: /obj/item/weapon/storage/box/fluff/jessica
}
# ######## W CKEYS
# ######## X CKEYS
# ######## Y CKEYS
# ######## Z CKEYS

View File

@@ -390,6 +390,8 @@
#include "code\datums\autolathe\tools.dm"
#include "code\datums\autolathe\tools_vr.dm"
#include "code\datums\components\_component.dm"
#include "code\datums\components\connect_containers_ch.dm"
#include "code\datums\components\connect_range_ch.dm"
#include "code\datums\components\material_container.dm"
#include "code\datums\components\overlay_lighting.dm"
#include "code\datums\components\resize_guard.dm"
@@ -479,6 +481,7 @@
#include "code\datums\outfits\military\marines.dm"
#include "code\datums\outfits\military\military.dm"
#include "code\datums\outfits\military\sifguard.dm"
#include "code\datums\proximity_monitor\proximity_monitor_ch.dm"
#include "code\datums\repositories\ammomaterial.dm"
#include "code\datums\repositories\cameras.dm"
#include "code\datums\repositories\crew.dm"