Adds an option to generate typecaches as zebras. (#63710)

About The Pull Request

Adds an argument to typecache generation that allows specifying the whether to include/exclude types in the input list.
Also adds another argument to specify whether to remove falsey values after the typecache is generated.
Why It's Good For The Game

Might make zaps slightly faster???
Honestly I just thought it would be a good way to condense some whitelist/blacklist typecache sets.
This commit is contained in:
TemporalOroboros
2022-02-06 17:23:38 -08:00
committed by GitHub
parent 45607b1a21
commit 6be8e0feee
43 changed files with 536 additions and 356 deletions
+130 -31
View File
@@ -192,16 +192,49 @@
return "[output][and_text][input[index]]"
///Checks for specific types in a list
/proc/is_type_in_list(atom/type_to_check, list/list_to_check)
/**
* Checks for specific types in a list.
*
* If using zebra mode the list should be an assoc list with truthy/falsey values.
* The check short circuits so earlier entries in the input list will take priority.
* Ergo, subtypes should come before parent types.
* Notice that this is the opposite priority of [/proc/typecacheof].
*
* Arguments:
* - [type_to_check][/datum]: An instance to check.
* - [list_to_check][/list]: A list of typepaths to check the type_to_check against.
* - zebra: Whether to use the value of the mathing type in the list instead of just returning true when a match is found.
*/
/proc/is_type_in_list(datum/type_to_check, list/list_to_check, zebra = FALSE)
if(!LAZYLEN(list_to_check) || !type_to_check)
return FALSE
for(var/type in list_to_check)
if(istype(type_to_check, type))
return TRUE
return !zebra || list_to_check[type] // Subtypes must come first in zebra lists.
return FALSE
///Checks for specific types in specifically structured (Assoc "type" = TRUE) lists ('typecaches')
/**
* Checks for specific paths in a list.
*
* If using zebra mode the list should be an assoc list with truthy/falsey values.
* The check short circuits so earlier entries in the input list will take priority.
* Ergo, subpaths should come before parent paths.
* Notice that this is the opposite priority of [/proc/typecacheof].
*
* Arguments:
* - path_to_check: A typepath to check.
* - [list_to_check][/list]: A list of typepaths to check the path_to_check against.
* - zebra: Whether to use the value of the mathing path in the list instead of just returning true when a match is found.
*/
/proc/is_path_in_list(path_to_check, list/list_to_check, zebra = FALSE)
if(!LAZYLEN(list_to_check) || !path_to_check)
return FALSE
for(var/path in list_to_check)
if(ispath(path_to_check, path))
return !zebra || list_to_check[path]
return FALSE
///Checks for specific types in specifically structured (Assoc "type" = TRUE|FALSE) lists ('typecaches')
#define is_type_in_typecache(A, L) (A && length(L) && L[(ispath(A) ? A : A:type)])
///returns a new list with only atoms that are in the typecache list
@@ -227,35 +260,101 @@
if(typecache_include[atom_checked.type] && !typecache_exclude[atom_checked.type])
. += atom_checked
///Like typesof() or subtypesof(), but returns a typecache instead of a list
/proc/typecacheof(path, ignore_root_path, only_root_path = FALSE)
if(ispath(path))
var/list/types
var/list/output = list()
if(only_root_path)
output[path] = TRUE
else
types = ignore_root_path ? subtypesof(path) : typesof(path)
for(var/T in types)
output[T] = TRUE
return output
else if(islist(path))
var/list/pathlist = path
var/list/output = list()
if(ignore_root_path)
for(var/current_path in pathlist)
for(var/subtype in subtypesof(current_path))
output[subtype] = TRUE
return output
/**
* Like typesof() or subtypesof(), but returns a typecache instead of a list.
*
* Arguments:
* - path: A typepath or list of typepaths.
* - only_root_path: Whether the typecache should be specifically of the passed types.
* - ignore_root_path: Whether to ignore the root path when caching subtypes.
*/
/proc/typecacheof(path, only_root_path = FALSE, ignore_root_path = FALSE)
if(isnull(path))
return
if(ispath(path))
. = list()
if(only_root_path)
for(var/current_path in pathlist)
output[current_path] = TRUE
else
for(var/current_path in pathlist)
for(var/subpath in typesof(current_path))
output[subpath] = TRUE
return output
.[path] = TRUE
return
for(var/subtype in (ignore_root_path ? subtypesof(path) : typesof(path)))
.[subtype] = TRUE
return
if(!islist(path))
CRASH("Tried to create a typecache of [path] which is neither a typepath nor a list.")
. = list()
var/list/pathlist = path
if(only_root_path)
for(var/current_path in pathlist)
.[current_path] = TRUE
else if(ignore_root_path)
for(var/current_path in pathlist)
for(var/subtype in subtypesof(current_path))
.[subtype] = TRUE
else
for(var/current_path in pathlist)
for(var/subpath in typesof(current_path))
.[subpath] = TRUE
/**
* Like typesof() or subtypesof(), but returns a typecache instead of a list.
* This time it also uses the associated values given by the input list for the values of the subtypes.
*
* Latter values from the input list override earlier values.
* Thus subtypes should come _after_ parent types in the input list.
* Notice that this is the opposite priority of [/proc/is_type_in_list] and [/proc/is_path_in_list].
*
* Arguments:
* - path: A typepath or list of typepaths with associated values.
* - single_value: The assoc value used if only a single path is passed as the first variable.
* - only_root_path: Whether the typecache should be specifically of the passed types.
* - ignore_root_path: Whether to ignore the root path when caching subtypes.
* - clear_nulls: Whether to remove keys with null assoc values from the typecache after generating it.
*/
/proc/zebra_typecacheof(path, single_value = TRUE, only_root_path = FALSE, ignore_root_path = FALSE, clear_nulls = FALSE)
if(isnull(path))
return
if(ispath(path))
if (isnull(single_value))
return
. = list()
if(only_root_path)
.[path] = single_value
return
for(var/subtype in (ignore_root_path ? subtypesof(path) : typesof(path)))
.[subtype] = single_value
return
if(!islist(path))
CRASH("Tried to create a typecache of [path] which is neither a typepath nor a list.")
. = list()
var/list/pathlist = path
if(only_root_path)
for(var/current_path in pathlist)
.[current_path] = pathlist[current_path]
else if(ignore_root_path)
for(var/current_path in pathlist)
for(var/subtype in subtypesof(current_path))
.[subtype] = pathlist[current_path]
else
for(var/current_path in pathlist)
for(var/subpath in typesof(current_path))
.[subpath] = pathlist[current_path]
if(!clear_nulls)
return
for(var/cached_path in .)
if (isnull(.[cached_path]))
. -= cached_path
/**
* Removes any null entries from the list
+1 -1
View File
@@ -26,7 +26,7 @@
/obj/effect/dummy/phased_mob,
/obj/effect/mapping_helpers,
/obj/effect/wisp,
))
))
/datum/component/chasm/Initialize(turf/target)
RegisterSignal(parent, COMSIG_ATOM_ENTERED, .proc/Entered)
+21 -23
View File
@@ -59,19 +59,18 @@
var/static/list/possible_mobtypes
if(!possible_mobtypes)
// The base list of allowed mob/species types
possible_mobtypes = typecacheof(list(
/mob/living/simple_animal,
/mob/living/carbon,
/datum/species,
))
possible_mobtypes = zebra_typecacheof(list(
/mob/living/simple_animal = TRUE,
/mob/living/carbon = TRUE,
/datum/species = TRUE,
// Some types to remove them and their subtypes
/mob/living/carbon/human/species = FALSE,
))
// Some particular types to disallow if they're too broad/abstract
// Not in the above typecache generator because it includes subtypes and this doesn't.
possible_mobtypes -= list(
/mob/living/simple_animal/hostile,
)
// Some types to remove them and their subtypes
possible_mobtypes -= typecacheof(list(
/mob/living/carbon/human/species,
))
)
var/mob/picked_mobtype = pick(possible_mobtypes)
// This works even with the species picks since we're only accessing the name
@@ -99,22 +98,21 @@
var/static/list/possible_mobtypes
if(!possible_mobtypes)
// The base list of allowed mob/species types
possible_mobtypes = typecacheof(list(
/mob/living/simple_animal,
/mob/living/carbon,
/datum/species,
))
possible_mobtypes = zebra_typecacheof(list(
/mob/living/simple_animal = TRUE,
/mob/living/carbon = TRUE,
/datum/species = TRUE,
// Some types to remove them and their subtypes
/mob/living/carbon/human/species = FALSE,
/mob/living/simple_animal/hostile/syndicate/mecha_pilot = FALSE,
/mob/living/simple_animal/hostile/asteroid/elite = FALSE,
/mob/living/simple_animal/hostile/megafauna = FALSE,
))
// Some particular types to disallow if they're too broad/abstract
// Not in the above typecache generator because it includes subtypes and this doesn't.
possible_mobtypes -= list(
/mob/living/simple_animal/hostile,
)
// Some types to remove them and their subtypes
possible_mobtypes -= typecacheof(list(
/mob/living/carbon/human/species,
/mob/living/simple_animal/hostile/syndicate/mecha_pilot,
/mob/living/simple_animal/hostile/asteroid/elite,
/mob/living/simple_animal/hostile/megafauna,
))
)
var/mob/picked_mobtype = pick(possible_mobtypes)
// This works even with the species picks since we're only accessing the name
@@ -25,9 +25,12 @@
/datum/component/storage/concrete/pockets/small/fedora/Initialize()
. = ..()
var/static/list/exception_cache = typecacheof(list(
/obj/item/katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana,
/obj/item/energy_katana, /obj/item/gun/ballistic/automatic/tommygun
))
/obj/item/katana,
/obj/item/toy/katana,
/obj/item/nullrod/claymore/katana,
/obj/item/energy_katana,
/obj/item/gun/ballistic/automatic/tommygun,
))
exception_hold = exception_cache
/datum/component/storage/concrete/pockets/small/fedora/detective
+7 -7
View File
@@ -16,18 +16,18 @@
/turf/open/lava,
/turf/open/space,
/turf/open/water,
/turf/open/chasm)
)
/turf/open/chasm,
))
///List of turfs that are immune to thermite
var/static/list/immunelist = typecacheof(list(
/turf/closed/wall/mineral/diamond,
/turf/closed/indestructible,
/turf/open/indestructible)
)
/turf/open/indestructible,
))
///List of turfs that take extra thermite to burn through
var/static/list/resistlist = typecacheof(
/turf/closed/wall/r_wall
)
var/static/list/resistlist = typecacheof(list(
/turf/closed/wall/r_wall,
))
/datum/component/thermite/Initialize(_amount)
if(!istype(parent, /turf) || blacklist[parent.type])
+8 -10
View File
@@ -63,16 +63,14 @@
var/audio_cooldown = 2 SECONDS
/datum/emote/New()
if (ispath(mob_type_allowed_typecache))
switch (mob_type_allowed_typecache)
if (/mob)
mob_type_allowed_typecache = GLOB.typecache_mob
if (/mob/living)
mob_type_allowed_typecache = GLOB.typecache_living
else
mob_type_allowed_typecache = typecacheof(mob_type_allowed_typecache)
else
mob_type_allowed_typecache = typecacheof(mob_type_allowed_typecache)
switch(mob_type_allowed_typecache)
if(/mob)
mob_type_allowed_typecache = GLOB.typecache_mob
if(/mob/living)
mob_type_allowed_typecache = GLOB.typecache_living
else
mob_type_allowed_typecache = typecacheof(mob_type_allowed_typecache)
mob_type_blacklist_typecache = typecacheof(mob_type_blacklist_typecache)
mob_type_ignore_stat_typecache = typecacheof(mob_type_ignore_stat_typecache)
+7 -8
View File
@@ -9,14 +9,13 @@
// forced: whether or not to ignore no_teleport
/proc/do_teleport(atom/movable/teleatom, atom/destination, precision=null, datum/effect_system/effectin=null, datum/effect_system/effectout=null, asoundin=null, asoundout=null, no_effects=FALSE, channel=TELEPORT_CHANNEL_BLUESPACE, forced = FALSE)
// teleporting most effects just deletes them
var/static/list/delete_atoms = typecacheof(list(
/obj/effect,
)) - typecacheof(list(
/obj/effect/dummy/chameleon,
/obj/effect/wisp,
/obj/effect/mob_spawn,
/obj/effect/immovablerod,
))
var/static/list/delete_atoms = zebra_typecacheof(list(
/obj/effect = TRUE,
/obj/effect/dummy/chameleon = FALSE,
/obj/effect/wisp = FALSE,
/obj/effect/mob_spawn = FALSE,
/obj/effect/immovablerod = FALSE,
))
if(delete_atoms[teleatom.type])
qdel(teleatom)
return FALSE
@@ -149,7 +149,7 @@
/obj/projectile/beam,
/obj/projectile/bullet,
/obj/projectile/magic,
))
))
if(!is_type_in_typecache(proj, guilty_projectiles))
return
if((proj.damage_type == STAMINA))
+2 -1
View File
@@ -35,7 +35,8 @@ The console is located at computer/gulag_teleporter.dm
/obj/item/clothing/gloves/color/plasmaman,
/obj/item/tank/internals,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/gas))
/obj/item/clothing/mask/gas,
))
/obj/machinery/gulag_teleporter/Initialize(mapload)
. = ..()
+6 -4
View File
@@ -24,10 +24,12 @@
///Set false to block beaker use and instead use an internal reagent holder
var/use_internal_storage = FALSE
///Typecache of containers we accept
var/static/list/drip_containers = typecacheof(list(/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/food,
/obj/item/reagent_containers/glass,
/obj/item/reagent_containers/chem_pack))
var/static/list/drip_containers = typecacheof(list(
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/food,
/obj/item/reagent_containers/glass,
/obj/item/reagent_containers/chem_pack,
))
// If the blood draining tab should be greyed out
var/inject_only = FALSE
+2 -1
View File
@@ -19,7 +19,8 @@
/obj/item/gun/energy,
/obj/item/melee/baton/security,
/obj/item/ammo_box/magazine/recharge,
/obj/item/modular_computer))
/obj/item/modular_computer,
))
/obj/machinery/recharger/RefreshParts()
for(var/obj/item/stock_parts/capacitor/C in component_parts)
@@ -20,9 +20,10 @@
var/lifetime = 40
var/reagent_divisor = 7
var/static/list/blacklisted_turfs = typecacheof(list(
/turf/open/space/transit,
/turf/open/chasm,
/turf/open/lava))
/turf/open/space/transit,
/turf/open/chasm,
/turf/open/lava,
))
var/slippery_foam = TRUE
/obj/effect/particle_effect/foam/firefighting
+3 -2
View File
@@ -34,8 +34,9 @@ GLOBAL_VAR_INIT(glowshrooms, 0)
/// Turfs where the glowshroom cannot spread to
var/static/list/blacklisted_glowshroom_turfs = typecacheof(list(
/turf/open/lava,
/turf/open/floor/plating/beach/water))
/turf/open/lava,
/turf/open/floor/plating/beach/water,
))
/obj/structure/glowshroom/glowcap
name = "glowcap"
+4 -1
View File
@@ -1422,7 +1422,10 @@
var/change_trim = tgui_alert(user, "Adjust the appearance of your card's trim?", "Modify Trim", list("Yes", "No"))
if(change_trim == "Yes")
var/list/blacklist = typecacheof(type) + typecacheof(/obj/item/card/id/advanced/simple_bot)
var/list/blacklist = typecacheof(list(
type,
/obj/item/card/id/advanced/simple_bot,
))
var/list/trim_list = list()
for(var/trim_path in typesof(/datum/id_trim))
if(blacklist[trim_path])
@@ -8,8 +8,12 @@
custom_materials = list(/datum/material/iron = 50, /datum/material/glass = 300)
var/recharging = FALSE
var/circuits = 5 //How many circuits the pseudocircuit has left
var/static/recycleable_circuits = typecacheof(list(/obj/item/electronics/firelock, /obj/item/electronics/airalarm, /obj/item/electronics/firealarm, \
/obj/item/electronics/apc))//A typecache of circuits consumable for material
var/static/recycleable_circuits = typecacheof(list(
/obj/item/electronics/firelock,
/obj/item/electronics/airalarm,
/obj/item/electronics/firealarm,
/obj/item/electronics/apc,
))//A typecache of circuits consumable for material
/obj/item/electroadaptive_pseudocircuit/Initialize(mapload)
. = ..()
+21 -17
View File
@@ -718,28 +718,32 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/obj/item/melee/flyswatter/Initialize(mapload)
. = ..()
strong_against = typecacheof(list(
/mob/living/simple_animal/hostile/bee/,
/mob/living/simple_animal/butterfly,
/mob/living/basic/cockroach,
/obj/item/queen_bee,
/obj/structure/spider/spiderling,
/mob/living/simple_animal/ant,
/obj/effect/decal/cleanable/ants
/mob/living/simple_animal/hostile/bee,
/mob/living/simple_animal/butterfly,
/mob/living/basic/cockroach,
/obj/item/queen_bee,
/obj/structure/spider/spiderling,
/mob/living/simple_animal/ant,
/obj/effect/decal/cleanable/ants,
))
/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(proximity_flag)
if(is_type_in_typecache(target, strong_against))
if(!HAS_TRAIT(user, TRAIT_PACIFISM))
new /obj/effect/decal/cleanable/insectguts(target.drop_location())
to_chat(user, span_warning("You easily splat [target]."))
if(isliving(target))
var/mob/living/bug = target
bug.gib()
else
qdel(target)
if(!proximity_flag)
return
if(!is_type_in_typecache(target, strong_against))
return
if (HAS_TRAIT(user, TRAIT_PACIFISM))
return
new /obj/effect/decal/cleanable/insectguts(target.drop_location())
to_chat(user, span_warning("You easily splat [target]."))
if(isliving(target))
var/mob/living/bug = target
bug.gib()
else
qdel(target)
/obj/item/proc/can_trigger_gun(mob/living/user)
if(!user.can_use_guns(src))
+2 -1
View File
@@ -33,7 +33,8 @@
if(!ignore_typecache)
ignore_typecache = typecacheof(list(
/obj/effect,
/mob/dead))
/mob/dead,
))
/obj/structure/trap/Destroy()
qdel(spark_system)
+37 -23
View File
@@ -24,11 +24,13 @@
//The code below here isn't exactly optimal, but because of the individual decals that each area uses it's still applicable.
//high dirt - 1/3 chance.
var/static/list/high_dirt_areas = typecacheof(list(/area/science/test_area,
/area/mine/production,
/area/mine/living_quarters,
/area/commons/vacant_room/office,
/area/ruin/space))
var/static/list/high_dirt_areas = typecacheof(list(
/area/science/test_area,
/area/mine/production,
/area/mine/living_quarters,
/area/commons/vacant_room/office,
/area/ruin/space,
))
if(is_type_in_typecache(A, high_dirt_areas))
new /obj/effect/decal/cleanable/dirt(src) //vanilla, but it works
return
@@ -38,13 +40,15 @@
return
//Construction zones. Blood, sweat, and oil. Oh, and dirt. A small colony of space-ants or two will pop up
var/static/list/engine_dirt_areas = typecacheof(list(/area/engineering,
/area/command/heads_quarters/ce,
/area/science/robotics,
/area/maintenance,
/area/construction,
/area/commons/vacant_room/commissary,
/area/survivalpod))
var/static/list/engine_dirt_areas = typecacheof(list(
/area/engineering,
/area/command/heads_quarters/ce,
/area/science/robotics,
/area/maintenance,
/area/construction,
/area/commons/vacant_room/commissary,
/area/survivalpod,
))
if(is_type_in_typecache(A, engine_dirt_areas))
if(prob(3))
new /obj/effect/decal/cleanable/blood/old(src)
@@ -62,8 +66,10 @@
return
//Bathrooms. Blood, vomit, and shavings in the sinks.
var/static/list/bathroom_dirt_areas = typecacheof(list( /area/commons/toilet,
/area/awaymission/research/interior/bathroom))
var/static/list/bathroom_dirt_areas = typecacheof(list(
/area/commons/toilet,
/area/awaymission/research/interior/bathroom,
))
if(is_type_in_typecache(A, bathroom_dirt_areas))
if(prob(40))
if(prob(90))
@@ -89,9 +95,11 @@
return
//Areas where gibs will be present. Robusting probably happened some time ago.
var/static/list/gib_covered_areas = typecacheof(list(/area/ai_monitored/turret_protected,
/area/security,
/area/command/heads_quarters/hos))
var/static/list/gib_covered_areas = typecacheof(list(
/area/ai_monitored/turret_protected,
/area/security,
/area/command/heads_quarters/hos,
))
if(is_type_in_typecache(A, gib_covered_areas))
if(prob(20))
if(prob(5))
@@ -101,8 +109,10 @@
return
//Kitchen areas. Broken eggs, flour, spilled milk (no crying allowed.), ants.
var/static/list/kitchen_dirt_areas = typecacheof(list(/area/service/kitchen,
/area/service/cafeteria))
var/static/list/kitchen_dirt_areas = typecacheof(list(
/area/service/kitchen,
/area/service/cafeteria,
))
if(is_type_in_typecache(A, kitchen_dirt_areas))
if(prob(60))
if(prob(50))
@@ -114,8 +124,10 @@
return
//Medical areas. Mostly clean by space-OSHA standards, but has some blood and oil spread about.
var/static/list/medical_dirt_areas = typecacheof(list(/area/medical,
/area/command/heads_quarters/cmo))
var/static/list/medical_dirt_areas = typecacheof(list(
/area/medical,
/area/command/heads_quarters/cmo,
))
if(is_type_in_typecache(A, medical_dirt_areas))
if(prob(66))
if(prob(5))
@@ -130,8 +142,10 @@
return
//Science messes. Mostly green glowy stuff -WHICH YOU SHOULD NOT INJEST-.
var/static/list/science_dirt_areas = typecacheof(list(/area/science,
/area/command/heads_quarters/rd))
var/static/list/science_dirt_areas = typecacheof(list(
/area/science,
/area/command/heads_quarters/rd,
))
if(is_type_in_typecache(A, science_dirt_areas))
if(prob(20))
new /obj/effect/decal/cleanable/greenglow/filled(src) //this cleans itself up but it might startle you when you see it.
@@ -71,7 +71,7 @@
var/hive_name
/// Static typecache of all changeling powers that are usable.
var/static/list/all_powers = typecacheof(/datum/action/changeling, TRUE)
var/static/list/all_powers = typecacheof(/datum/action/changeling, ignore_root_path = TRUE)
/// Satic list of what each slot associated with (in regard to changeling flesh items).
var/static/list/slot2type = list(
@@ -50,7 +50,8 @@
/turf/open/floor/engine/cult,
/turf/open/space,
/turf/open/lava,
/turf/open/chasm))
/turf/open/chasm,
))
if(is_type_in_typecache(nearby_turf, blacklisted_pylon_turfs))
continue
validturfs |= nearby_turf
@@ -10,7 +10,7 @@
///how many charges do we have?
var/charge = 1
///Where we cannot create the rune?
var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava))
var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed, /turf/open/space, /turf/open/lava))
/obj/item/forbidden_book/Destroy()
last_user = null
@@ -288,7 +288,7 @@
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend")
///turfs that you cannot draw carvings on
var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava))
var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed, /turf/open/space, /turf/open/lava))
///A check to see if you are in process of drawing a rune
var/drawing = FALSE
///A list of current runes
@@ -231,7 +231,7 @@
/turf/closed/indestructible,
/turf/open/space,
/turf/open/lava,
/turf/open/chasm
/turf/open/chasm,
))
/datum/rust_spread/New(loc)
+7 -6
View File
@@ -35,12 +35,13 @@
var/eat_while_disguised = FALSE
var/atom/movable/form = null
var/static/list/blacklist_typecache = typecacheof(list(
/atom/movable/screen,
/obj/singularity,
/obj/energy_ball,
/obj/narsie,
/mob/living/simple_animal/hostile/morph,
/obj/effect))
/atom/movable/screen,
/obj/singularity,
/obj/energy_ball,
/obj/narsie,
/mob/living/simple_animal/hostile/morph,
/obj/effect,
))
/mob/living/simple_animal/hostile/morph/Initialize(mapload)
. = ..()
+36 -30
View File
@@ -2,127 +2,133 @@
name = "Strange Object"
description = "Nanotrasen has taken an interest in strange objects. Find one in maint, and ship it off to CentCom right away."
reward = CARGO_CRATE_VALUE * 2.4
wanted_types = list(/obj/item/relic)
wanted_types = list(/obj/item/relic = TRUE)
/datum/bounty/item/assistant/scooter
name = "Scooter"
description = "Nanotrasen has determined walking to be wasteful. Ship a scooter to CentCom to speed operations up."
reward = CARGO_CRATE_VALUE * 2.16 // the mat hoffman
wanted_types = list(/obj/vehicle/ridden/scooter)
wanted_types = list(/obj/vehicle/ridden/scooter = TRUE)
include_subtypes = FALSE
/datum/bounty/item/assistant/skateboard
name = "Skateboard"
description = "Nanotrasen has determined walking to be wasteful. Ship a skateboard to CentCom to speed operations up."
reward = CARGO_CRATE_VALUE * 1.8 // the tony hawk
wanted_types = list(/obj/vehicle/ridden/scooter/skateboard, /obj/item/melee/skateboard)
wanted_types = list(
/obj/vehicle/ridden/scooter/skateboard = TRUE,
/obj/item/melee/skateboard = TRUE,
)
/datum/bounty/item/assistant/stunprod
name = "Stunprod"
description = "CentCom demands a stunprod to use against dissidents. Craft one, then ship it."
reward = CARGO_CRATE_VALUE * 2.6
wanted_types = list(/obj/item/melee/baton/security/cattleprod)
wanted_types = list(/obj/item/melee/baton/security/cattleprod = TRUE)
/datum/bounty/item/assistant/soap
name = "Soap"
description = "Soap has gone missing from CentCom's bathrooms and nobody knows who took it. Replace it and be the hero CentCom needs."
reward = CARGO_CRATE_VALUE * 4
required_count = 3
wanted_types = list(/obj/item/soap)
wanted_types = list(/obj/item/soap = TRUE)
/datum/bounty/item/assistant/spear
name = "Spears"
description = "CentCom's security forces are going through budget cuts. You will be paid if you ship a set of spears."
reward = CARGO_CRATE_VALUE * 4
required_count = 5
wanted_types = list(/obj/item/spear)
wanted_types = list(/obj/item/spear = TRUE)
/datum/bounty/item/assistant/toolbox
name = "Toolboxes"
description = "There's an absence of robustness at Central Command. Hurry up and ship some toolboxes as a solution."
reward = CARGO_CRATE_VALUE * 4
required_count = 6
wanted_types = list(/obj/item/storage/toolbox)
wanted_types = list(/obj/item/storage/toolbox = TRUE)
/datum/bounty/item/assistant/statue
name = "Statue"
description = "Central Command would like to commision an artsy statue for the lobby. Ship one out, when possible."
reward = CARGO_CRATE_VALUE * 4
wanted_types = list(/obj/structure/statue)
wanted_types = list(/obj/structure/statue = TRUE)
/datum/bounty/item/assistant/clown_box
name = "Clown Box"
description = "The universe needs laughter. Stamp cardboard with a clown stamp and ship it out."
reward = CARGO_CRATE_VALUE * 3
wanted_types = list(/obj/item/storage/box/clown)
wanted_types = list(/obj/item/storage/box/clown = TRUE)
/datum/bounty/item/assistant/cheesiehonkers
name = "Cheesie Honkers"
description = "Apparently the company that makes Cheesie Honkers is going out of business soon. CentCom wants to stock up before it happens!"
reward = CARGO_CRATE_VALUE * 2.4
required_count = 3
wanted_types = list(/obj/item/food/cheesiehonkers)
wanted_types = list(/obj/item/food/cheesiehonkers = TRUE)
/datum/bounty/item/assistant/baseball_bat
name = "Baseball Bat"
description = "Baseball fever is going on at CentCom! Be a dear and ship them some baseball bats, so that management can live out their childhood dream."
reward = CARGO_CRATE_VALUE * 4
required_count = 5
wanted_types = list(/obj/item/melee/baseball_bat)
wanted_types = list(/obj/item/melee/baseball_bat = TRUE)
/datum/bounty/item/assistant/extendohand
name = "Extendo-Hand"
description = "Commander Betsy is getting old, and can't bend over to get the telescreen remote anymore. Management has requested an extendo-hand to help her out."
reward = CARGO_CRATE_VALUE * 5
wanted_types = list(/obj/item/extendohand)
wanted_types = list(/obj/item/extendohand = TRUE)
/datum/bounty/item/assistant/donut
name = "Donuts"
description = "CentCom's security forces are facing heavy losses against the Syndicate. Ship donuts to raise morale."
reward = CARGO_CRATE_VALUE * 6
required_count = 10
wanted_types = list(/obj/item/food/donut)
wanted_types = list(/obj/item/food/donut = TRUE)
/datum/bounty/item/assistant/donkpocket
name = "Donk-Pockets"
description = "Consumer safety recall: Warning. Donk-Pockets manufactured in the past year contain hazardous lizard biomatter. Return units to CentCom immediately."
reward = CARGO_CRATE_VALUE * 6
required_count = 10
wanted_types = list(/obj/item/food/donkpocket)
wanted_types = list(/obj/item/food/donkpocket = TRUE)
/datum/bounty/item/assistant/briefcase
name = "Briefcase"
description = "Central Command will be holding a business convention this year. Ship a few briefcases in support."
reward = CARGO_CRATE_VALUE * 5
required_count = 5
wanted_types = list(/obj/item/storage/briefcase, /obj/item/storage/secure/briefcase)
wanted_types = list(
/obj/item/storage/briefcase = TRUE,
/obj/item/storage/secure/briefcase = TRUE,
)
/datum/bounty/item/assistant/sunglasses
name = "Sunglasses"
description = "A famous blues duo is passing through the sector, but they've lost their shades and they can't perform. Ship new sunglasses to CentCom to rectify this."
reward = CARGO_CRATE_VALUE * 6
required_count = 2
wanted_types = list(/obj/item/clothing/glasses/sunglasses)
wanted_types = list(/obj/item/clothing/glasses/sunglasses = TRUE)
/datum/bounty/item/assistant/monkey_hide
name = "Monkey Hide"
description = "One of the scientists at CentCom is interested in testing products on monkey skin. Your mission is to acquire monkey's hide and ship it."
reward = CARGO_CRATE_VALUE * 3
wanted_types = list(/obj/item/stack/sheet/animalhide/monkey)
wanted_types = list(/obj/item/stack/sheet/animalhide/monkey = TRUE)
/datum/bounty/item/assistant/comfy_chair
name = "Comfy Chairs"
description = "Commander Pat is unhappy with his chair. He claims it hurts his back. Ship some alternatives out to humor him."
reward = CARGO_CRATE_VALUE * 3
required_count = 5
wanted_types = list(/obj/structure/chair/comfy)
wanted_types = list(/obj/structure/chair/comfy = TRUE)
/datum/bounty/item/assistant/geranium
name = "Geraniums"
description = "Commander Zot has the hots for Commander Zena. Send a shipment of geraniums - her favorite flower - and he'll happily reward you."
reward = CARGO_CRATE_VALUE * 8
required_count = 3
wanted_types = list(/obj/item/food/grown/poppy/geranium)
wanted_types = list(/obj/item/food/grown/poppy/geranium = TRUE)
include_subtypes = FALSE
/datum/bounty/item/assistant/poppy
@@ -130,62 +136,62 @@
description = "Commander Zot really wants to sweep Security Officer Olivia off her feet. Send a shipment of Poppies - her favorite flower - and he'll happily reward you."
reward = CARGO_CRATE_VALUE * 2
required_count = 3
wanted_types = list(/obj/item/food/grown/poppy)
wanted_types = list(/obj/item/food/grown/poppy = TRUE)
include_subtypes = FALSE
/datum/bounty/item/assistant/shadyjims
name = "Shady Jim's"
description = "There's an irate officer at CentCom demanding that he receive a box of Shady Jim's cigarettes. Please ship one. He's starting to make threats."
reward = CARGO_CRATE_VALUE
wanted_types = list(/obj/item/storage/fancy/cigarettes/cigpack_shadyjims)
wanted_types = list(/obj/item/storage/fancy/cigarettes/cigpack_shadyjims = TRUE)
/datum/bounty/item/assistant/potted_plants
name = "Potted Plants"
description = "Central Command is looking to commission a new BirdBoat-class station. You've been ordered to supply the potted plants."
reward = CARGO_CRATE_VALUE * 4
required_count = 8
wanted_types = list(/obj/item/kirbyplants)
wanted_types = list(/obj/item/kirbyplants = TRUE)
/datum/bounty/item/assistant/monkey_cubes
name = "Monkey Cubes"
description = "Due to a recent genetics accident, Central Command is in serious need of monkeys. Your mission is to ship monkey cubes."
reward = CARGO_CRATE_VALUE * 4
required_count = 3
wanted_types = list(/obj/item/food/monkeycube)
wanted_types = list(/obj/item/food/monkeycube = TRUE)
/datum/bounty/item/assistant/ied
name = "IED"
description = "Nanotrasen's maximum security prison at CentCom is undergoing personnel training. Ship a handful of IEDs to serve as a training tools."
reward = CARGO_CRATE_VALUE * 4
required_count = 3
wanted_types = list(/obj/item/grenade/iedcasing)
wanted_types = list(/obj/item/grenade/iedcasing = TRUE)
/datum/bounty/item/assistant/corgimeat
name = "Raw Corgi Meat"
description = "The Syndicate recently stole all of CentCom's Corgi meat. Ship out a replacement immediately."
reward = CARGO_CRATE_VALUE * 6
wanted_types = list(/obj/item/food/meat/slab/corgi)
wanted_types = list(/obj/item/food/meat/slab/corgi = TRUE)
/datum/bounty/item/assistant/action_figures
name = "Action Figures"
description = "The vice president's son saw an ad for action figures on the telescreen and now he won't shut up about them. Ship some to ease his complaints."
reward = CARGO_CRATE_VALUE * 8
required_count = 5
wanted_types = list(/obj/item/toy/figure)
wanted_types = list(/obj/item/toy/figure = TRUE)
/datum/bounty/item/assistant/dead_mice
name = "Dead Mice"
description = "Station 14 ran out of freeze-dried mice. Ship some fresh ones so their janitor doesn't go on strike."
reward = CARGO_CRATE_VALUE * 10
required_count = 5
wanted_types = list(/obj/item/food/deadmouse)
wanted_types = list(/obj/item/food/deadmouse = TRUE)
/datum/bounty/item/assistant/paper_bin
name = "Paper Bins"
description = "Our accounting division is all out of paper. We need a new shipment immediately."
reward = CARGO_CRATE_VALUE * 5
required_count = 5
wanted_types = list(/obj/item/paper_bin)
wanted_types = list(/obj/item/paper_bin = TRUE)
/datum/bounty/item/assistant/crayons
@@ -193,7 +199,7 @@
description = "Dr Jones' kid ate all our crayons again. Please send us yours."
reward = CARGO_CRATE_VALUE * 4
required_count = 24
wanted_types = list(/obj/item/toy/crayon)
wanted_types = list(/obj/item/toy/crayon = TRUE)
/datum/bounty/item/assistant/pens
name = "Pens"
@@ -201,4 +207,4 @@
reward = CARGO_CRATE_VALUE * 4
required_count = 10
include_subtypes = FALSE
wanted_types = list(/obj/item/pen)
wanted_types = list(/obj/item/pen = TRUE)
+49 -38
View File
@@ -12,190 +12,201 @@
/datum/bounty/item/botany/ambrosia_vulgaris
name = "Ambrosia Vulgaris Leaves"
wanted_types = list(/obj/item/food/grown/ambrosia/vulgaris)
wanted_types = list(/obj/item/food/grown/ambrosia/vulgaris = TRUE)
foodtype = "stew"
/datum/bounty/item/botany/ambrosia_gaia
name = "Ambrosia Gaia Leaves"
wanted_types = list(/obj/item/food/grown/ambrosia/gaia)
wanted_types = list(/obj/item/food/grown/ambrosia/gaia = TRUE)
multiplier = 4
foodtype = "stew"
/datum/bounty/item/botany/apple_golden
name = "Golden Apples"
wanted_types = list(/obj/item/food/grown/apple/gold)
wanted_types = list(/obj/item/food/grown/apple/gold = TRUE)
multiplier = 4
foodtype = "dessert"
/datum/bounty/item/botany/banana
name = "Bananas"
wanted_types = list(/obj/item/food/grown/banana)
exclude_types = list(/obj/item/food/grown/banana/bluespace)
wanted_types = list(
/obj/item/food/grown/banana = TRUE,
/obj/item/food/grown/banana/bluespace = FALSE,
)
foodtype = "banana split"
/datum/bounty/item/botany/banana_bluespace
name = "Bluespace Bananas"
wanted_types = list(/obj/item/food/grown/banana/bluespace)
wanted_types = list(/obj/item/food/grown/banana/bluespace = TRUE)
multiplier = 2
foodtype = "banana split"
/datum/bounty/item/botany/beans_koi
name = "Koi Beans"
wanted_types = list(/obj/item/food/grown/koibeans)
wanted_types = list(/obj/item/food/grown/koibeans = TRUE)
multiplier = 2
/datum/bounty/item/botany/berries_death
name = "Death Berries"
wanted_types = list(/obj/item/food/grown/berries/death)
wanted_types = list(/obj/item/food/grown/berries/death = TRUE)
multiplier = 2
bonus_desc = "He insists that \"he knows what he's doing\"."
foodtype = "sorbet"
/datum/bounty/item/botany/berries_glow
name = "Glow-Berries"
wanted_types = list(/obj/item/food/grown/berries/glow)
wanted_types = list(/obj/item/food/grown/berries/glow = TRUE)
multiplier = 2
foodtype = "sorbet"
/datum/bounty/item/botany/cannabis
name = "Cannabis Leaves"
wanted_types = list(/obj/item/food/grown/cannabis)
exclude_types = list(/obj/item/food/grown/cannabis/white, /obj/item/food/grown/cannabis/death, /obj/item/food/grown/cannabis/ultimate)
wanted_types = list(
/obj/item/food/grown/cannabis = TRUE,
/obj/item/food/grown/cannabis/white = FALSE,
/obj/item/food/grown/cannabis/death = FALSE,
/obj/item/food/grown/cannabis/ultimate = FALSE,
)
multiplier = 4 //hush money
bonus_desc = "Do not mention this shipment to security."
foodtype = "batch of \"muffins\""
/datum/bounty/item/botany/cannabis_white
name = "Lifeweed Leaves"
wanted_types = list(/obj/item/food/grown/cannabis/white)
wanted_types = list(/obj/item/food/grown/cannabis/white = TRUE)
multiplier = 6
bonus_desc = "Do not mention this shipment to security."
foodtype = "\"meal\""
/datum/bounty/item/botany/cannabis_death
name = "Deathweed Leaves"
wanted_types = list(/obj/item/food/grown/cannabis/death)
wanted_types = list(/obj/item/food/grown/cannabis/death = TRUE)
multiplier = 6
bonus_desc = "Do not mention this shipment to security."
foodtype = "\"meal\""
/datum/bounty/item/botany/cannabis_ultimate
name = "Omega Weed Leaves"
wanted_types = list(/obj/item/food/grown/cannabis/ultimate)
wanted_types = list(/obj/item/food/grown/cannabis/ultimate = TRUE)
multiplier = 6
bonus_desc = "Under no circumstances mention this shipment to security."
foodtype = "batch of \"brownies\""
/datum/bounty/item/botany/wheat
name = "Wheat Grains"
wanted_types = list(/obj/item/food/grown/wheat)
wanted_types = list(/obj/item/food/grown/wheat = TRUE)
/datum/bounty/item/botany/rice
name = "Rice Grains"
wanted_types = list(/obj/item/food/grown/rice)
wanted_types = list(/obj/item/food/grown/rice = TRUE)
/datum/bounty/item/botany/chili
name = "Chili Peppers"
wanted_types = list(/obj/item/food/grown/chili)
wanted_types = list(/obj/item/food/grown/chili = TRUE)
/datum/bounty/item/botany/ice_chili
name = "Chilly Peppers"
wanted_types = list(/obj/item/food/grown/icepepper)
wanted_types = list(/obj/item/food/grown/icepepper = TRUE)
multiplier = 2
/datum/bounty/item/botany/ghost_chili
name = "Ghost Chili Peppers"
wanted_types = list(/obj/item/food/grown/ghost_chili)
wanted_types = list(/obj/item/food/grown/ghost_chili = TRUE)
multiplier = 2
/datum/bounty/item/botany/citrus_lime
name = "Limes"
wanted_types = list(/obj/item/food/grown/citrus/lime)
wanted_types = list(/obj/item/food/grown/citrus/lime = TRUE)
foodtype = "sorbet"
/datum/bounty/item/botany/citrus_lemon
name = "Lemons"
wanted_types = list(/obj/item/food/grown/citrus/lemon)
wanted_types = list(/obj/item/food/grown/citrus/lemon = TRUE)
foodtype = "sorbet"
/datum/bounty/item/botany/citrus_oranges
name = "Oranges"
wanted_types = list(/obj/item/food/grown/citrus/orange)
wanted_types = list(/obj/item/food/grown/citrus/orange = TRUE)
bonus_desc = "Do not ship lemons or limes." //I vanted orahnge!
foodtype = "sorbet"
/datum/bounty/item/botany/eggplant
name = "Eggplants"
wanted_types = list(/obj/item/food/grown/eggplant)
wanted_types = list(/obj/item/food/grown/eggplant = TRUE)
bonus_desc = "Not to be confused with egg-plants."
/datum/bounty/item/botany/eggplant_eggy
name = "Egg-plants"
wanted_types = list(/obj/item/food/grown/shell/eggy)
wanted_types = list(/obj/item/food/grown/shell/eggy = TRUE)
bonus_desc = "Not to be confused with eggplants."
multiplier = 2
/datum/bounty/item/botany/kudzu
name = "Kudzu Pods"
wanted_types = list(/obj/item/food/grown/kudzupod)
wanted_types = list(/obj/item/food/grown/kudzupod = TRUE)
bonus_desc = "Store in a dry, dark place."
multiplier = 4
/datum/bounty/item/botany/watermelon
name = "Watermelons"
wanted_types = list(/obj/item/food/grown/watermelon)
wanted_types = list(/obj/item/food/grown/watermelon = TRUE)
foodtype = "dessert"
/datum/bounty/item/botany/watermelon_holy
name = "Holy Melons"
wanted_types = list(/obj/item/food/grown/holymelon)
wanted_types = list(/obj/item/food/grown/holymelon = TRUE)
multiplier = 2
foodtype = "dessert"
/datum/bounty/item/botany/glowshroom
name = "Glowshrooms"
wanted_types = list(/obj/item/food/grown/mushroom/glowshroom)
exclude_types = list(/obj/item/food/grown/mushroom/glowshroom/glowcap, /obj/item/food/grown/mushroom/glowshroom/shadowshroom)
wanted_types = list(
/obj/item/food/grown/mushroom/glowshroom = TRUE,
/obj/item/food/grown/mushroom/glowshroom/glowcap = FALSE,
/obj/item/food/grown/mushroom/glowshroom/shadowshroom = FALSE,
)
foodtype = "omelet"
/datum/bounty/item/botany/glowshroom_cap
name = "Glowcaps"
wanted_types = list(/obj/item/food/grown/mushroom/glowshroom/glowcap)
wanted_types = list(/obj/item/food/grown/mushroom/glowshroom/glowcap = TRUE)
multiplier = 2
foodtype = "omelet"
/datum/bounty/item/botany/glowshroom_shadow
name = "Shadowshrooms"
wanted_types = list(/obj/item/food/grown/mushroom/glowshroom/shadowshroom)
wanted_types = list(/obj/item/food/grown/mushroom/glowshroom/shadowshroom = TRUE)
multiplier = 2
foodtype = "omelet"
/datum/bounty/item/botany/nettles_death
name = "Death Nettles"
wanted_types = list(/obj/item/food/grown/nettle/death)
wanted_types = list(/obj/item/food/grown/nettle/death = TRUE)
multiplier = 2
bonus_desc = "Wear protection when handling them."
foodtype = "cheese"
/datum/bounty/item/botany/pineapples
name = "Pineapples"
wanted_types = list(/obj/item/food/grown/pineapple)
wanted_types = list(/obj/item/food/grown/pineapple = TRUE)
bonus_desc = "Not for human consumption."
foodtype = "ashtray"
/datum/bounty/item/botany/tomato
name = "Tomatoes"
wanted_types = list(/obj/item/food/grown/tomato)
exclude_types = list(/obj/item/food/grown/tomato/blue)
wanted_types = list(
/obj/item/food/grown/tomato = TRUE,
/obj/item/food/grown/tomato/blue = FALSE,
)
/datum/bounty/item/botany/tomato_bluespace
name = "Bluespace Tomatoes"
wanted_types = list(/obj/item/food/grown/tomato/blue/bluespace)
wanted_types = list(/obj/item/food/grown/tomato/blue/bluespace = TRUE)
multiplier = 4
/datum/bounty/item/botany/oatz
name = "Oats"
wanted_types = list(/obj/item/food/grown/oat)
wanted_types = list(/obj/item/food/grown/oat = TRUE)
multiplier = 2
foodtype = "batch of oatmeal"
bonus_desc = "Squats and oats. We're all out of oats."
@@ -203,7 +214,7 @@
/datum/bounty/item/botany/bonfire
name = "Lit Bonfire"
description = "Space heaters are malfunctioning and the cargo crew of Central Command is starting to feel cold. Grow some logs and Ship a lit bonfire to warm them up."
wanted_types = list(/obj/structure/bonfire)
wanted_types = list(/obj/structure/bonfire = TRUE)
/datum/bounty/item/botany/bonfire/applies_to(obj/O)
if(!..())
+31 -22
View File
@@ -2,143 +2,152 @@
name = "Birthday Cake"
description = "Nanotrasen's birthday is coming up! Ship them a birthday cake to celebrate!"
reward = CARGO_CRATE_VALUE * 8
wanted_types = list(/obj/item/food/cake/birthday, /obj/item/food/cakeslice/birthday)
wanted_types = list(
/obj/item/food/cake/birthday = TRUE,
/obj/item/food/cakeslice/birthday = TRUE
)
/datum/bounty/item/chef/soup
name = "Soup"
description = "To quell the homeless uprising, Nanotrasen will be serving soup to all underpaid workers. Ship any type of soup."
reward = CARGO_CRATE_VALUE * 6
required_count = 3
wanted_types = list(/obj/item/food/soup)
wanted_types = list(/obj/item/food/soup = TRUE)
/datum/bounty/item/chef/popcorn
name = "Popcorn Bags"
description = "Upper management wants to host a movie night. Ship bags of popcorn for the occasion."
reward = CARGO_CRATE_VALUE * 6
required_count = 3
wanted_types = list(/obj/item/food/popcorn)
wanted_types = list(/obj/item/food/popcorn = TRUE)
/datum/bounty/item/chef/onionrings
name = "Onion Rings"
description = "Nanotrasen is remembering Saturn day. Ship onion rings to show the station's support."
reward = CARGO_CRATE_VALUE * 6
required_count = 3
wanted_types = list(/obj/item/food/onionrings)
wanted_types = list(/obj/item/food/onionrings = TRUE)
/datum/bounty/item/chef/icecreamsandwich
name = "Ice Cream Sandwiches"
description = "Upper management has been screaming non-stop for ice cream. Please send some."
reward = CARGO_CRATE_VALUE * 8
required_count = 3
wanted_types = list(/obj/item/food/icecreamsandwich)
wanted_types = list(/obj/item/food/icecreamsandwich = TRUE)
/datum/bounty/item/chef/strawberryicecreamsandwich
name = " Strawberry Ice Cream Sandwiches"
description = "Upper management has been screaming non-stop for more flavourful ice cream. Please send some."
reward = CARGO_CRATE_VALUE * 10
required_count = 3
wanted_types = list(/obj/item/food/strawberryicecreamsandwich)
wanted_types = list(/obj/item/food/strawberryicecreamsandwich = TRUE)
/datum/bounty/item/chef/bread
name = "Bread"
description = "Problems with central planning have led to bread prices skyrocketing. Ship some bread to ease tensions."
reward = CARGO_CRATE_VALUE * 2
wanted_types = list(/obj/item/food/bread, /obj/item/food/breadslice, /obj/item/food/bun, /obj/item/food/pizzabread, /obj/item/food/rawpastrybase)
wanted_types = list(
/obj/item/food/bread = TRUE,
/obj/item/food/breadslice = TRUE,
/obj/item/food/bun = TRUE,
/obj/item/food/pizzabread = TRUE,
/obj/item/food/rawpastrybase = TRUE,
)
/datum/bounty/item/chef/pie
name = "Pie"
description = "3.14159? No! CentCom management wants edible pie! Ship a whole one."
reward = 3142 //Screw it I'll do this one by hand
wanted_types = list(/obj/item/food/pie)
wanted_types = list(/obj/item/food/pie = TRUE)
/datum/bounty/item/chef/salad
name = "Salad or Rice Bowls"
description = "CentCom management is going on a health binge. Your order is to ship salad or rice bowls."
reward = CARGO_CRATE_VALUE * 6
required_count = 3
wanted_types = list(/obj/item/food/salad)
wanted_types = list(/obj/item/food/salad = TRUE)
/datum/bounty/item/chef/carrotfries
name = "Carrot Fries"
description = "Night sight can mean life or death! A shipment of carrot fries is the order."
reward = CARGO_CRATE_VALUE * 7
required_count = 3
wanted_types = list(/obj/item/food/carrotfries)
wanted_types = list(/obj/item/food/carrotfries = TRUE)
/datum/bounty/item/chef/superbite
name = "Super Bite Burger"
description = "Commander Tubbs thinks he can set a competitive eating world record. All he needs is a super bite burger shipped to him."
reward = CARGO_CRATE_VALUE * 24
wanted_types = list(/obj/item/food/burger/superbite)
wanted_types = list(/obj/item/food/burger/superbite = TRUE)
/datum/bounty/item/chef/poppypretzel
name = "Poppy Pretzel"
description = "Central Command needs a reason to fire their HR head. Send over a poppy pretzel to force a failed drug test."
reward = CARGO_CRATE_VALUE * 6
wanted_types = list(/obj/item/food/poppypretzel)
wanted_types = list(/obj/item/food/poppypretzel = TRUE)
/datum/bounty/item/chef/cubancarp
name = "Cuban Carp"
description = "To celebrate the birth of Castro XXVII, ship one cuban carp to CentCom."
reward = CARGO_CRATE_VALUE * 16
wanted_types = list(/obj/item/food/cubancarp)
wanted_types = list(/obj/item/food/cubancarp = TRUE)
/datum/bounty/item/chef/hotdog
name = "Hot Dog"
description = "Nanotrasen is conducting taste tests to determine the best hot dog recipe. Ship your station's version to participate."
reward = CARGO_CRATE_VALUE * 16
wanted_types = list(/obj/item/food/hotdog)
wanted_types = list(/obj/item/food/hotdog = TRUE)
/datum/bounty/item/chef/eggplantparm
name = "Eggplant Parmigianas"
description = "A famous singer will be arriving at CentCom, and their contract demands that they only be served Eggplant Parmigiana. Ship some, please!"
reward = CARGO_CRATE_VALUE * 7
required_count = 3
wanted_types = list(/obj/item/food/eggplantparm)
wanted_types = list(/obj/item/food/eggplantparm = TRUE)
/datum/bounty/item/chef/muffin
name = "Muffins"
description = "The Muffin Man is visiting CentCom, but he's forgotten his muffins! Your order is to rectify this."
reward = CARGO_CRATE_VALUE * 6
required_count = 3
wanted_types = list(/obj/item/food/muffin)
wanted_types = list(/obj/item/food/muffin = TRUE)
/datum/bounty/item/chef/chawanmushi
name = "Chawanmushi"
description = "Nanotrasen wants to improve relations with its sister company, Japanotrasen. Ship Chawanmushi immediately."
reward = CARGO_CRATE_VALUE * 16
wanted_types = list(/obj/item/food/chawanmushi)
wanted_types = list(/obj/item/food/chawanmushi = TRUE)
/datum/bounty/item/chef/kebab
name = "Kebabs"
description = "Remove all kebab from station you are best food. Ship to CentCom to remove from the premises."
reward = CARGO_CRATE_VALUE * 7
required_count = 3
wanted_types = list(/obj/item/food/kebab)
wanted_types = list(/obj/item/food/kebab = TRUE)
/datum/bounty/item/chef/soylentgreen
name = "Soylent Green"
description = "CentCom has heard wonderful things about the product 'Soylent Green', and would love to try some. If you endulge them, expect a pleasant bonus."
reward = CARGO_CRATE_VALUE * 10
wanted_types = list(/obj/item/food/soylentgreen)
wanted_types = list(/obj/item/food/soylentgreen = TRUE)
/datum/bounty/item/chef/pancakes
name = "Pancakes"
description = "Here at Nanotrasen we consider employees to be family. And you know what families love? Pancakes. Ship a baker's dozen."
reward = CARGO_CRATE_VALUE * 10
required_count = 13
wanted_types = list(/obj/item/food/pancakes)
wanted_types = list(/obj/item/food/pancakes = TRUE)
/datum/bounty/item/chef/nuggies
name = "Chicken Nuggets"
description = "The vice president's son won't shut up about chicken nuggies. Would you mind shipping some?"
reward = CARGO_CRATE_VALUE * 8
required_count = 6
wanted_types = list(/obj/item/food/nugget)
wanted_types = list(/obj/item/food/nugget = TRUE)
/datum/bounty/item/chef/corgifarming //Butchering is a chef's job.
name = "Corgi Hides"
description = "Admiral Weinstein's space yacht needs new upholstery. A dozen Corgi furs should do just fine."
reward = CARGO_CRATE_VALUE * 60 //that's a lot of dead dogs
required_count = 12
wanted_types = list(/obj/item/stack/sheet/animalhide/corgi)
wanted_types = list(/obj/item/stack/sheet/animalhide/corgi = TRUE)
+3 -3
View File
@@ -2,7 +2,7 @@
name = "Full Tank of Pluoxium"
description = "CentCom RnD is researching extra compact internals. Ship us a tank full of Pluoxium and you'll be compensated."
reward = CARGO_CRATE_VALUE * 15
wanted_types = list(/obj/item/tank)
wanted_types = list(/obj/item/tank = TRUE)
var/moles_required = 20 // A full tank is 28 moles, but CentCom ignores that fact.
var/gas_type = /datum/gas/pluoxium
@@ -45,10 +45,10 @@
name = "Emitter"
description = "We think there may be a defect in your station's emitter designs, based on the sheer number of delaminations your sector seems to see. Ship us one of yours."
reward = CARGO_CRATE_VALUE * 5
wanted_types = list(/obj/machinery/power/emitter)
wanted_types = list(/obj/machinery/power/emitter = TRUE)
/datum/bounty/item/engineering/hydro_tray
name = "Hydroponics Tray"
description = "The lab technicians are trying to figure out how to lower the power drain of hydroponics trays, but we fried our last one. Mind building one for us?"
reward = CARGO_CRATE_VALUE * 4
wanted_types = list(/obj/machinery/hydroponics/constructable)
wanted_types = list(/obj/machinery/hydroponics/constructable = TRUE)
+2 -14
View File
@@ -3,26 +3,14 @@
var/required_count = 1
///How many items have been shipped for the bounty so far
var/shipped_count = 0
///Types accepted by the bounty (including all subtypes, unless include_subtypes is set to FALSE)
///Types accepted|denied by the bounty. (including all subtypes, unless include_subtypes is set to FALSE)
var/list/wanted_types
///Set to FALSE to make the bounty not accept subtypes of the wanted_types
var/include_subtypes = TRUE
///Types that should not be accepted by the bounty, also excluding all their subtypes
var/list/exclude_types
///Individual types that should be accepted even if their supertypes are excluded (yes, apparently this is necessary)
var/list/special_include_types
/datum/bounty/item/New()
..()
wanted_types = typecacheof(wanted_types, only_root_path = !include_subtypes)
if (exclude_types)
exclude_types = string_assoc_list(typecacheof(exclude_types))
for (var/e_type in exclude_types)
wanted_types[e_type] = FALSE
if (special_include_types)
for (var/i_type in special_include_types)
wanted_types[i_type] = TRUE
wanted_types = string_assoc_list(wanted_types)
wanted_types = string_assoc_list(zebra_typecacheof(wanted_types, only_root_path = !include_subtypes))
/datum/bounty/item/can_claim()
return ..() && shipped_count >= required_count
+5 -5
View File
@@ -13,24 +13,24 @@
/datum/bounty/item/mech/ripleymk2
name = "APLU MK-II \"Ripley\""
reward = CARGO_CRATE_VALUE * 26
wanted_types = list(/obj/vehicle/sealed/mecha/working/ripley/mk2)
wanted_types = list(/obj/vehicle/sealed/mecha/working/ripley/mk2 = TRUE)
/datum/bounty/item/mech/clarke
name = "Clarke"
reward = CARGO_CRATE_VALUE * 32
wanted_types = list(/obj/vehicle/sealed/mecha/working/clarke)
wanted_types = list(/obj/vehicle/sealed/mecha/working/clarke = TRUE)
/datum/bounty/item/mech/odysseus
name = "Odysseus"
reward = CARGO_CRATE_VALUE * 22
wanted_types = list(/obj/vehicle/sealed/mecha/medical/odysseus)
wanted_types = list(/obj/vehicle/sealed/mecha/medical/odysseus = TRUE)
/datum/bounty/item/mech/gygax
name = "Gygax"
reward = CARGO_CRATE_VALUE * 56
wanted_types = list(/obj/vehicle/sealed/mecha/combat/gygax)
wanted_types = list(/obj/vehicle/sealed/mecha/combat/gygax = TRUE)
/datum/bounty/item/mech/durand
name = "Durand"
reward = CARGO_CRATE_VALUE * 40
wanted_types = list(/obj/vehicle/sealed/mecha/combat/durand)
wanted_types = list(/obj/vehicle/sealed/mecha/combat/durand = TRUE)
+35 -22
View File
@@ -2,90 +2,103 @@
name = "Heart"
description = "Commander Johnson is in critical condition after suffering yet another heart attack. Doctors say he needs a new heart fast. Ship one, pronto! We'll take a better cybernetic one, if need be."
reward = CARGO_CRATE_VALUE * 6
wanted_types = list(/obj/item/organ/heart)
exclude_types = list(/obj/item/organ/heart/cybernetic)//Excluding tier 1s, no cheesing.
special_include_types = list(/obj/item/organ/heart/cybernetic/tier2, /obj/item/organ/heart/cybernetic/tier3)
wanted_types = list(
/obj/item/organ/heart = TRUE,
/obj/item/organ/heart/cybernetic = FALSE,
/obj/item/organ/heart/cybernetic/tier2 = TRUE,
/obj/item/organ/heart/cybernetic/tier3 = TRUE,
)
/datum/bounty/item/medical/lung
name = "Lungs"
description = "A recent explosion at Central Command has left multiple staff with punctured lungs. Ship spare lungs to be rewarded. We'll take a better cybernetic one, if need be."
reward = CARGO_CRATE_VALUE * 20
required_count = 3
wanted_types = list(/obj/item/organ/lungs)
exclude_types = list(/obj/item/organ/lungs/cybernetic)//As above, for all printable organs.
special_include_types = list(/obj/item/organ/lungs/cybernetic/tier2, /obj/item/organ/lungs/cybernetic/tier3)
wanted_types = list(
/obj/item/organ/lungs = TRUE,
/obj/item/organ/lungs/cybernetic = FALSE,
/obj/item/organ/lungs/cybernetic/tier2 = TRUE,
/obj/item/organ/lungs/cybernetic/tier3 = TRUE,
)
/datum/bounty/item/medical/appendix
name = "Appendix"
description = "Chef Gibb of Central Command wants to prepare a meal using a very special delicacy: an appendix. If you ship one, he'll pay. We'll take a better cybernetic one, if need be."
reward = CARGO_CRATE_VALUE * 10 //there are no synthetic appendixes
wanted_types = list(/obj/item/organ/appendix)
wanted_types = list(/obj/item/organ/appendix = TRUE)
/datum/bounty/item/medical/ears
name = "Ears"
description = "Multiple staff at Station 12 have been left deaf due to unauthorized clowning. Ship them new ears. "
reward = CARGO_CRATE_VALUE * 10
required_count = 3
wanted_types = list(/obj/item/organ/ears)
exclude_types = list(/obj/item/organ/ears/cybernetic)
special_include_types = list(/obj/item/organ/ears/cybernetic/upgraded)
wanted_types = list(
/obj/item/organ/ears = TRUE,
/obj/item/organ/ears/cybernetic = FALSE,
/obj/item/organ/ears/cybernetic/upgraded = TRUE,
)
/datum/bounty/item/medical/liver
name = "Livers"
description = "Multiple high-ranking CentCom diplomats have been hospitalized with liver failure after a recent meeting with Third Soviet Union ambassadors. Help us out, will you? We'll take better cybernetic ones, if need be."
reward = CARGO_CRATE_VALUE * 10
required_count = 3
wanted_types = list(/obj/item/organ/liver)
exclude_types = list(/obj/item/organ/liver/cybernetic)
special_include_types = list(/obj/item/organ/liver/cybernetic/tier2, /obj/item/organ/liver/cybernetic/tier3)
wanted_types = list(
/obj/item/organ/liver = TRUE,
/obj/item/organ/liver/cybernetic = FALSE,
/obj/item/organ/liver/cybernetic/tier2 = TRUE,
/obj/item/organ/liver/cybernetic/tier3 = TRUE,
)
/datum/bounty/item/medical/eye
name = "Organic Eyes"
description = "Station 5's Research Director Willem is requesting a few pairs of non-robotic eyes. Don't ask questions, just ship them."
reward = CARGO_CRATE_VALUE * 20
required_count = 3
wanted_types = list(/obj/item/organ/eyes)
exclude_types = list(/obj/item/organ/eyes/robotic)
wanted_types = list(
/obj/item/organ/eyes = TRUE,
/obj/item/organ/eyes/robotic = FALSE,
)
/datum/bounty/item/medical/tongue
name = "Tongues"
description = "A recent attack by Mime extremists has left staff at Station 23 speechless. Ship some spare tongues."
reward = CARGO_CRATE_VALUE * 20
required_count = 3
wanted_types = list(/obj/item/organ/tongue)
wanted_types = list(/obj/item/organ/tongue = TRUE)
/datum/bounty/item/medical/lizard_tail
name = "Lizard Tail"
description = "The Wizard Federation has made off with Nanotrasen's supply of lizard tails. While CentCom is dealing with the wizards, can the station spare a tail of their own?"
reward = CARGO_CRATE_VALUE * 6
wanted_types = list(/obj/item/organ/tail/lizard)
wanted_types = list(/obj/item/organ/tail/lizard = TRUE)
/datum/bounty/item/medical/cat_tail
name = "Cat Tail"
description = "Central Command has run out of heavy duty pipe cleaners. Can you ship over a cat tail to help us out?"
reward = CARGO_CRATE_VALUE * 6
wanted_types = list(/obj/item/organ/tail/cat)
wanted_types = list(/obj/item/organ/tail/cat = TRUE)
/datum/bounty/item/medical/chainsaw
name = "Chainsaw"
description = "A CMO at CentCom is having trouble operating on golems. She requests one chainsaw, please."
reward = CARGO_CRATE_VALUE * 5
wanted_types = list(/obj/item/chainsaw)
wanted_types = list(/obj/item/chainsaw = TRUE)
/datum/bounty/item/medical/tail_whip //Like the cat tail bounties, with more processing.
name = "Nine Tails whip"
description = "Commander Jackson is looking for a fine addition to her exotic weapons collection. She will reward you handsomely for either a Cat or Liz o' Nine Tails."
reward = CARGO_CRATE_VALUE * 8
wanted_types = list(/obj/item/melee/chainofcommand/tailwhip)
wanted_types = list(/obj/item/melee/chainofcommand/tailwhip = TRUE)
/datum/bounty/item/medical/surgerycomp
name = "Surgery Computer"
description = "After another freak bombing incident at our annual cheesefest at centcom, we have a massive stack of injured crew on our end. Please send us a fresh surgery computer, if at all possible."
reward = CARGO_CRATE_VALUE * 12
wanted_types = list(/obj/machinery/computer/operating)
wanted_types = list(/obj/machinery/computer/operating = TRUE)
/datum/bounty/item/medical/surgerytable
name = "Operating Table"
description = "After a recent influx of infected crew members recently, we've seen that masks just aren't cutting it alone. Silver Operating tables might just do the trick though, send us one to use."
reward = CARGO_CRATE_VALUE * 6
wanted_types = list(/obj/structure/table/optable)
wanted_types = list(/obj/structure/table/optable = TRUE)
+11 -11
View File
@@ -3,69 +3,69 @@
description = "Admiral Pavlov has gone on hunger strike ever since the canteen started serving only monkey and monkey byproducts. She is demanding lava-cooked Goliath steaks."
reward = CARGO_CRATE_VALUE * 10
required_count = 3
wanted_types = list(/obj/item/food/meat/steak/goliath)
wanted_types = list(/obj/item/food/meat/steak/goliath = TRUE)
/datum/bounty/item/mining/goliath_boat
name = "Goliath Hide Boat"
description = "Commander Menkov wants to participate in the annual Lavaland Regatta. He is asking your shipwrights to build the swiftest boat known to man."
reward = CARGO_CRATE_VALUE * 20
wanted_types = list(/obj/vehicle/ridden/lavaboat)
wanted_types = list(/obj/vehicle/ridden/lavaboat = TRUE)
/datum/bounty/item/mining/bone_oar
name = "Bone Oars"
description = "Commander Menkov requires oars to participate in the annual Lavaland Regatta. Ship a pair over."
reward = CARGO_CRATE_VALUE * 8
required_count = 2
wanted_types = list(/obj/item/oar)
wanted_types = list(/obj/item/oar = TRUE)
/datum/bounty/item/mining/bone_axe
name = "Bone Axe"
description = "Station 12 has had their fire axes stolen by marauding clowns. Ship them a bone axe as a replacement."
reward = CARGO_CRATE_VALUE * 15
wanted_types = list(/obj/item/fireaxe/boneaxe)
wanted_types = list(/obj/item/fireaxe/boneaxe = TRUE)
/datum/bounty/item/mining/bone_armor
name = "Bone Armor"
description = "Station 14 has volunteered their lizard crew for ballistic armor testing. Ship over some bone armor."
reward = CARGO_CRATE_VALUE * 10
wanted_types = list(/obj/item/clothing/suit/armor/bone)
wanted_types = list(/obj/item/clothing/suit/armor/bone = TRUE)
/datum/bounty/item/mining/skull_helmet
name = "Skull Helmet"
description = "Station 42's Head of Security has her birthday tomorrow! We want to suprise her with a fashionable skull helmet."
reward = CARGO_CRATE_VALUE * 8
wanted_types = list(/obj/item/clothing/head/helmet/skull)
wanted_types = list(/obj/item/clothing/head/helmet/skull = TRUE)
/datum/bounty/item/mining/bone_talisman
name = "Bone Talismans"
description = "Station 14's Research Director claims that pagan bone talismans protect their wearer. Ship them a few so they can start testing."
reward = CARGO_CRATE_VALUE * 15
required_count = 3
wanted_types = list(/obj/item/clothing/accessory/talisman)
wanted_types = list(/obj/item/clothing/accessory/talisman = TRUE)
/datum/bounty/item/mining/bone_dagger
name = "Bone Daggers"
description = "Central Command's canteen is undergoing budget cuts. Ship over some bone daggers so our Chef can keep working."
reward = CARGO_CRATE_VALUE * 10
required_count = 3
wanted_types = list(/obj/item/knife/combat/bone)
wanted_types = list(/obj/item/knife/combat/bone = TRUE)
/datum/bounty/item/mining/polypore_mushroom
name = "Mushroom Bowl"
description = "Lieutenant Jeb dropped his favorite mushroom bowl. Cheer him up by shipping a new one, will you?"
reward = CARGO_CRATE_VALUE * 15 //5x mushroom shavings
wanted_types = list(/obj/item/reagent_containers/glass/bowl/mushroom_bowl)
wanted_types = list(/obj/item/reagent_containers/glass/bowl/mushroom_bowl = TRUE)
/datum/bounty/item/mining/inocybe_mushroom
name = "Mushroom Caps"
description = "Our botanist claims that he can distill tasty liquor from absolutely any plant. Let's see what he'll do with Inocybe mushroom caps."
reward = CARGO_CRATE_VALUE * 9
required_count = 3
wanted_types = list(/obj/item/food/grown/ash_flora/mushroom_cap)
wanted_types = list(/obj/item/food/grown/ash_flora/mushroom_cap = TRUE)
/datum/bounty/item/mining/porcini_mushroom
name = "Mushroom Leaves"
description = "Porcini mushroom leaves are rumored to have healing properties. Our researchers want to put that claim to the test."
reward = CARGO_CRATE_VALUE * 9
required_count = 3
wanted_types = list(/obj/item/food/grown/ash_flora/mushroom_leaf)
wanted_types = list(/obj/item/food/grown/ash_flora/mushroom_leaf = TRUE)
+9 -6
View File
@@ -3,7 +3,7 @@
name = "E.X.P.E.R.I-MENTORially Discovered Devices"
description = "Psst, hey. Don't tell the assistants, but we're undercutting them on the value of those 'strange objects' they've been finding. Fish one up and send us a discovered one by using the E.X.P.E.R.I-MENTOR."
reward = CARGO_CRATE_VALUE * 8
wanted_types = list(/obj/item/relic)
wanted_types = list(/obj/item/relic = TRUE)
/datum/bounty/item/science/relic/applies_to(obj/O)
if(!..())
@@ -17,13 +17,16 @@
name = "Reformatted Tech Disk"
description = "It turns out the diskettes the BEPIS prints experimental nodes on are extremely space-efficient. Send us one of your spares when you're done with it."
reward = CARGO_CRATE_VALUE * 8
wanted_types = list(/obj/item/disk/tech_disk/major, /obj/item/disk/tech_disk/spaceloot)
wanted_types = list(
/obj/item/disk/tech_disk/major = TRUE,
/obj/item/disk/tech_disk/spaceloot = TRUE,
)
/datum/bounty/item/science/genetics
name = "Genetics Disability Mutator"
description = "Understanding the humanoid genome is the first step to curing many spaceborn genetic defects, and exceeding our basest limits."
reward = CARGO_CRATE_VALUE * 2
wanted_types = list(/obj/item/dnainjector)
wanted_types = list(/obj/item/dnainjector = TRUE)
///What's the instability
var/desired_instability = 0
@@ -55,7 +58,7 @@
description = "Turns out that NTNet wasn't actually a fad afterall, who knew. Ship us some fully constructed tablets and send it turned on."
reward = CARGO_CRATE_VALUE * 6
required_count = 4
wanted_types = list(/obj/item/modular_computer/tablet)
wanted_types = list(/obj/item/modular_computer/tablet = TRUE)
var/require_powered = TRUE
/datum/bounty/item/science/ntnet/applies_to(obj/O)
@@ -72,14 +75,14 @@
description = "Central command brass need something more powerful than a tablet, but more portable than a console. Help these old fogeys out by shipping us some working laptops. Send it turned on."
reward = CARGO_CRATE_VALUE * 3
required_count = 2
wanted_types = list(/obj/item/modular_computer/laptop)
wanted_types = list(/obj/item/modular_computer/laptop = TRUE)
/datum/bounty/item/science/ntnet/console
name = "Modular Computer Console"
description = "Our big data devision needs more powerful hardware to play 'Outbomb Cuban Pe-', err, to closely monitor threats in your sector. Send us a working modular computer console."
reward = CARGO_CRATE_VALUE * 6
required_count = 1
wanted_types = list(/obj/machinery/modular_computer/console)
wanted_types = list(/obj/machinery/modular_computer/console = TRUE)
require_powered = FALSE
/datum/bounty/item/science/ntnet/console/applies_to(obj/O)
+7 -7
View File
@@ -3,41 +3,41 @@
description = "Nanotrasen military academy is conducting marksmanship exercises. They request that rechargers be shipped."
reward = CARGO_CRATE_VALUE * 4
required_count = 3
wanted_types = list(/obj/machinery/recharger)
wanted_types = list(/obj/machinery/recharger = TRUE)
/datum/bounty/item/security/pepperspray
name = "Pepperspray"
description = "We've been having a bad run of riots on Space Station 76. We could use some new pepperspray cans."
reward = CARGO_CRATE_VALUE * 6
required_count = 4
wanted_types = list(/obj/item/reagent_containers/spray/pepper)
wanted_types = list(/obj/item/reagent_containers/spray/pepper = TRUE)
/datum/bounty/item/security/prison_clothes
name = "Prison Uniforms"
description = "Terragov has been unable to source any new prisoner uniforms, so if you have any spares, we'll take them off your hands."
reward = CARGO_CRATE_VALUE * 4
required_count = 4
wanted_types = list(/obj/item/clothing/under/rank/prisoner)
wanted_types = list(/obj/item/clothing/under/rank/prisoner = TRUE)
/datum/bounty/item/security/plates
name = "License Plates"
description = "As a result of a bad clown car crash, we could use an advance on some of your prisoner's license plates."
reward = CARGO_CRATE_VALUE * 2
required_count = 10
wanted_types = list(/obj/item/stack/license_plates/filled)
wanted_types = list(/obj/item/stack/license_plates/filled = TRUE)
/datum/bounty/item/security/earmuffs
name = "Earmuffs"
description = "Central Command is getting tired of your station's messages. They've ordered that you ship some earmuffs to lessen the annoyance."
reward = CARGO_CRATE_VALUE * 2
wanted_types = list(/obj/item/clothing/ears/earmuffs)
wanted_types = list(/obj/item/clothing/ears/earmuffs = TRUE)
/datum/bounty/item/security/handcuffs
name = "Handcuffs"
description = "A large influx of escaped convicts have arrived at Central Command. Now is the perfect time to ship out spare handcuffs (or restraints)."
reward = CARGO_CRATE_VALUE * 2
required_count = 5
wanted_types = list(/obj/item/restraints/handcuffs)
wanted_types = list(/obj/item/restraints/handcuffs = TRUE)
///Bounties that require you to perform documentation and inspection of your department to send to centcom.
@@ -45,7 +45,7 @@
name = "Routine Security Inspection"
description = "Perform a routine security inspection using an N-spect scanner on the following station area:"
required_count = 1
wanted_types = list(/obj/item/paper/report)
wanted_types = list(/obj/item/paper/report = TRUE)
reward = CARGO_CRATE_VALUE * 5
var/area/demanded_area
+8 -8
View File
@@ -8,32 +8,32 @@
/datum/bounty/item/slime/green
name = "Green Slime Extract"
wanted_types = list(/obj/item/slime_extract/green)
wanted_types = list(/obj/item/slime_extract/green = TRUE)
/datum/bounty/item/slime/pink
name = "Pink Slime Extract"
wanted_types = list(/obj/item/slime_extract/pink)
wanted_types = list(/obj/item/slime_extract/pink = TRUE)
/datum/bounty/item/slime/gold
name = "Gold Slime Extract"
wanted_types = list(/obj/item/slime_extract/gold)
wanted_types = list(/obj/item/slime_extract/gold = TRUE)
/datum/bounty/item/slime/oil
name = "Oil Slime Extract"
wanted_types = list(/obj/item/slime_extract/oil)
wanted_types = list(/obj/item/slime_extract/oil = TRUE)
/datum/bounty/item/slime/black
name = "Black Slime Extract"
wanted_types = list(/obj/item/slime_extract/black)
wanted_types = list(/obj/item/slime_extract/black = TRUE)
/datum/bounty/item/slime/lightpink
name = "Light Pink Slime Extract"
wanted_types = list(/obj/item/slime_extract/lightpink)
wanted_types = list(/obj/item/slime_extract/lightpink = TRUE)
/datum/bounty/item/slime/adamantine
name = "Adamantine Slime Extract"
wanted_types = list(/obj/item/slime_extract/adamantine)
wanted_types = list(/obj/item/slime_extract/adamantine = TRUE)
/datum/bounty/item/slime/rainbow
name = "Rainbow Slime Extract"
wanted_types = list(/obj/item/slime_extract/rainbow)
wanted_types = list(/obj/item/slime_extract/rainbow = TRUE)
+14 -4
View File
@@ -3,13 +3,23 @@
description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thoroughly compensated."
reward = CARGO_CRATE_VALUE * 50
required_count = 3
wanted_types = list(/obj/item/organ/brain/alien, /obj/item/organ/alien, /obj/item/organ/body_egg/alien_embryo, /obj/item/organ/liver/alien, /obj/item/organ/tongue/alien, /obj/item/organ/eyes/night_vision/alien)
wanted_types = list(
/obj/item/organ/brain/alien = TRUE,
/obj/item/organ/alien = TRUE,
/obj/item/organ/body_egg/alien_embryo = TRUE,
/obj/item/organ/liver/alien = TRUE,
/obj/item/organ/tongue/alien = TRUE,
/obj/item/organ/eyes/night_vision/alien = TRUE,
)
/datum/bounty/item/syndicate_documents
name = "Syndicate Documents"
description = "Intel regarding the syndicate is highly prized at CentCom. If you find syndicate documents, ship them. You could save lives."
reward = CARGO_CRATE_VALUE * 30
wanted_types = list(/obj/item/documents/syndicate, /obj/item/documents/photocopy)
wanted_types = list(
/obj/item/documents/syndicate = TRUE,
/obj/item/documents/photocopy = TRUE,
)
/datum/bounty/item/syndicate_documents/applies_to(obj/O)
if(!..())
@@ -24,11 +34,11 @@
description = "Nanotrasen's anomalous materials division is in desparate need for Adamantine. Send them a large shipment and we'll make it worth your while."
reward = CARGO_CRATE_VALUE * 70
required_count = 10
wanted_types = list(/obj/item/stack/sheet/mineral/adamantine)
wanted_types = list(/obj/item/stack/sheet/mineral/adamantine = TRUE)
/datum/bounty/item/trash
name = "Trash"
description = "Recently a group of janitors have run out of trash to clean up, without any trash CentCom wants to fire them to cut costs. Send a shipment of trash to keep them employed, and they'll give you a small compensation."
reward = CARGO_CRATE_VALUE * 2
required_count = 10
wanted_types = list(/obj/item/trash)
wanted_types = list(/obj/item/trash = TRUE)
+1 -1
View File
@@ -87,7 +87,7 @@ Then the player gets the profit from selling his own wasted time.
..()
SSprocessing.processing += src
init_cost = cost
export_types = typecacheof(export_types, FALSE, !include_subtypes)
export_types = typecacheof(export_types, only_root_path = !include_subtypes, ignore_root_path = FALSE)
exclude_types = typecacheof(exclude_types)
/datum/export/Destroy()
+2 -2
View File
@@ -24,8 +24,8 @@
/area/holodeck,
/area/shuttle,
/area/maintenance,
/area/science/test_area)
)
/area/science/test_area,
))
//Subtypes from the above that actually should explode.
var/static/list/unsafe_area_subtypes = typecacheof(list(/area/engineering/break_room))
+1 -1
View File
@@ -13,7 +13,7 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list(
/mob/living/simple_animal/hostile/retaliate/snake,
/mob/living/simple_animal/hostile/retaliate/goose/vomit,
/mob/living/simple_animal/bot/mulebot,
/mob/living/simple_animal/bot/secbot/beepsky
/mob/living/simple_animal/bot/secbot/beepsky,
)))
/datum/round_event_control/sentience
+2 -2
View File
@@ -71,8 +71,8 @@
/area/ai_monitored/turret_protected/ai,
/area/ai_monitored/turret_protected/ai_upload,
/area/engineering,
/area/shuttle)
)
/area/shuttle,
))
///Subtypes from the above that actually should explode.
var/static/list/unsafe_area_subtypes = typecacheof(list(/area/engineering/break_room))
+8 -6
View File
@@ -44,12 +44,14 @@
attack_verb_simple = list("bash", "batter", "bludgeon", "whack")
var/plank_type = /obj/item/stack/sheet/mineral/wood
var/plank_name = "wooden planks"
var/static/list/accepted = typecacheof(list(/obj/item/food/grown/tobacco,
/obj/item/food/grown/tea,
/obj/item/food/grown/ash_flora/mushroom_leaf,
/obj/item/food/grown/ambrosia/vulgaris,
/obj/item/food/grown/ambrosia/deus,
/obj/item/food/grown/wheat))
var/static/list/accepted = typecacheof(list(
/obj/item/food/grown/tobacco,
/obj/item/food/grown/tea,
/obj/item/food/grown/ash_flora/mushroom_leaf,
/obj/item/food/grown/ambrosia/vulgaris,
/obj/item/food/grown/ambrosia/deus,
/obj/item/food/grown/wheat,
))
/obj/item/grown/log/attackby(obj/item/W, mob/user, params)
if(W.get_sharpness())
+6 -7
View File
@@ -206,13 +206,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/auxiliary_base, 32)
to_chat(user, span_warning("This station is not equipped with an auxiliary base. Please contact your Nanotrasen contractor."))
return
if(!no_restrictions)
var/static/list/disallowed_turf_types = typecacheof(list(
/turf/closed,
/turf/open/lava,
/turf/open/indestructible,
)) - typecacheof(list(
/turf/closed/mineral,
))
var/static/list/disallowed_turf_types = zebra_typecacheof(list(
/turf/closed = TRUE,
/turf/open/lava = TRUE,
/turf/open/indestructible = TRUE,
/turf/closed/mineral = FALSE,
))
if(!is_mining_level(T.z))
return BAD_ZLEVEL
+25 -17
View File
@@ -212,22 +212,30 @@
*/
var/atom/closest_atom
var/closest_type = 0
var/static/list/things_to_shock = typecacheof(list(/obj/machinery, /mob/living, /obj/structure, /obj/vehicle/ridden))
var/static/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics,
/obj/machinery/portable_atmospherics,
/obj/machinery/power/emitter,
/obj/machinery/field/generator,
/mob/living/simple_animal,
/obj/machinery/field/containment,
/obj/structure/disposalpipe,
/obj/structure/disposaloutlet,
/obj/machinery/disposal/delivery_chute,
/obj/machinery/camera,
/obj/structure/sign,
/obj/machinery/gateway,
/obj/structure/lattice,
/obj/structure/grille,
/obj/structure/frame/machine))
var/static/list/things_to_shock = zebra_typecacheof(list(
// Things that we want to shock.
/obj/machinery = TRUE,
/mob/living = TRUE,
/obj/structure = TRUE,
/obj/vehicle/ridden = TRUE,
// Things that we don't want to shock.
/obj/machinery/atmospherics = FALSE,
/obj/machinery/portable_atmospherics = FALSE,
/obj/machinery/power/emitter = FALSE,
/obj/machinery/field/generator = FALSE,
/obj/machinery/field/containment = FALSE,
/obj/machinery/camera = FALSE,
/obj/machinery/gateway = FALSE,
/mob/living/simple_animal = FALSE,
/obj/structure/disposalpipe = FALSE,
/obj/structure/disposaloutlet = FALSE,
/obj/machinery/disposal/delivery_chute = FALSE,
/obj/structure/sign = FALSE,
/obj/structure/lattice = FALSE,
/obj/structure/grille = FALSE,
/obj/structure/frame/machine = FALSE,
))
//Ok so we are making an assumption here. We assume that view() still calculates from the center out.
//This means that if we find an object we can assume it is the closest one of its type. This is somewhat of a speed increase.
@@ -235,7 +243,7 @@
//Darkness fucks oview up hard. I've tried dview() but it doesn't seem to work
//I hate existance
for(var/a in typecache_filter_multi_list_exclusion(oview(zap_range+2, source), things_to_shock, blacklisted_tesla_types))
for(var/a in typecache_filter_list(oview(zap_range+2, source), things_to_shock))
var/atom/A = a
if(!(zap_flags & ZAP_ALLOW_DUPLICATES) && LAZYACCESS(shocked_targets, A))
continue