mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-20 12:29:32 +01:00
Merge branch 'master' into DRAGONMECH
This commit is contained in:
@@ -73,7 +73,7 @@
|
||||
|
||||
//Bodysize Limits
|
||||
#define MIN_BODYSIZE 50
|
||||
#define MAX_BODYSIZE 150
|
||||
#define MAX_BODYSIZE 200
|
||||
|
||||
#define BREASTS_SIZE_MIN BREASTS_SIZE_A
|
||||
#define BREASTS_SIZE_DEF BREASTS_SIZE_D
|
||||
|
||||
@@ -62,8 +62,7 @@
|
||||
#define isslimeperson(A) (is_species(A, /datum/species/jelly/slime))
|
||||
#define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent))
|
||||
#define iszombie(A) (is_species(A, /datum/species/zombie))
|
||||
#define ismoth(A) (is_species(A, /datum/species/moth))
|
||||
#define ismoth(A) (is_species(A, /datum/species/insect))
|
||||
#define ismoth(A) (is_species(A, /datum/species/moth) || is_species(A, /datum/species/insect))
|
||||
#define ishumanbasic(A) (is_species(A, /datum/species/human))
|
||||
#define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid) )
|
||||
#define isvampire(A) (is_species(A,/datum/species/vampire))
|
||||
|
||||
+14
-1
@@ -37,6 +37,7 @@ require only minor tweaks.
|
||||
#define ZTRAIT_AWAY "Away Mission"
|
||||
#define ZTRAIT_SPACE_RUINS "Space Ruins"
|
||||
#define ZTRAIT_LAVA_RUINS "Lava Ruins"
|
||||
#define ZTRAIT_LAVA_UNDERGROUND "Lava Underground"
|
||||
// prevents certain turfs from being stripped by a singularity
|
||||
#define ZTRAIT_PLANET "Planet"
|
||||
|
||||
@@ -63,7 +64,19 @@ require only minor tweaks.
|
||||
#define ZTRAITS_CENTCOM list(ZTRAIT_CENTCOM = TRUE)
|
||||
#define ZTRAITS_STATION list(ZTRAIT_LINKAGE = CROSSLINKED, ZTRAIT_STATION = TRUE)
|
||||
#define ZTRAITS_SPACE list(ZTRAIT_LINKAGE = CROSSLINKED, ZTRAIT_SPACE_RUINS = TRUE)
|
||||
#define ZTRAITS_LAVALAND list(ZTRAIT_MINING = TRUE, ZTRAIT_LAVA_RUINS = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 1)
|
||||
#define ZTRAITS_LAVALAND list(\
|
||||
ZTRAIT_MINING = TRUE, \
|
||||
ZTRAIT_ASHSTORM = TRUE, \
|
||||
ZTRAIT_LAVA_RUINS = TRUE, \
|
||||
ZTRAIT_BOMBCAP_MULTIPLIER = 5, \
|
||||
ZTRAIT_DOWN = -1, \
|
||||
ZTRAIT_BASETURF = /turf/open/lava/smooth/lava_land_surface) //You see Ivan, defines can't be modularized.
|
||||
#define ZTRAITS_LAVALAND_UNDERRGOUND list(\
|
||||
ZTRAIT_LAVA_UNDERGROUND = TRUE, \
|
||||
ZTRAIT_BOMBCAP_MULTIPLIER = 2, \
|
||||
ZTRAIT_UP = 1, \
|
||||
ZTRAIT_BASETURF = /turf/open/lava/smooth/lava_land_surface)
|
||||
|
||||
#define ZTRAITS_REEBE list(ZTRAIT_REEBE = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 0.5)
|
||||
|
||||
#define DL_NAME "name"
|
||||
|
||||
@@ -11,3 +11,8 @@
|
||||
#define SHOULD_CALL_PARENT(X)
|
||||
#define UNLINT(X) X
|
||||
#endif
|
||||
|
||||
/world/proc/enable_debugger()
|
||||
var/dll = world.GetConfig("env", "EXTOOLS_DLL")
|
||||
if (dll)
|
||||
call(dll, "debug_initialize")()
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
// This GLOBAL list is for radials.
|
||||
GLOBAL_VAR_INIT(vending_m_choices, list(
|
||||
"Booze-O-Mat" = image(icon = 'icons/obj/vending.dmi', icon_state = "boozeomat"),
|
||||
"Solar's Best Hot Drinks" = image(icon = 'icons/obj/vending.dmi', icon_state = "coffee"),
|
||||
"Getmore Chocolate Corp" = image(icon = 'icons/obj/vending.dmi', icon_state = "snack"),
|
||||
"Robust Softdrinks" = image(icon = 'icons/obj/vending.dmi', icon_state = "Cola_Machine"),
|
||||
"ShadyCigs Deluxe" = image(icon = 'icons/obj/vending.dmi', icon_state = "cigs"),
|
||||
"Good Clean Fun" = image(icon = 'icons/obj/vending.dmi', icon_state = "games"),
|
||||
"AutoDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "theater"),
|
||||
"Vendomat" = image(icon = 'icons/obj/vending.dmi', icon_state = "generic"),
|
||||
"Engi-Vend" = image(icon = 'icons/obj/vending.dmi', icon_state = "engivend"),
|
||||
"YouTool" = image(icon = 'icons/obj/vending.dmi', icon_state = "tool"),
|
||||
"Sustenance Vendor" = image(icon = 'icons/obj/vending.dmi', icon_state = "sustenance"),
|
||||
"Plasteel Chef's Dinnerware Vendor" = image(icon = 'icons/obj/vending.dmi', icon_state = "dinnerware"),
|
||||
"PTech" = image(icon = 'icons/obj/vending.dmi', icon_state = "cart"),
|
||||
"NutriMax" = image(icon = 'icons/obj/vending.dmi', icon_state = "nutri"),
|
||||
"MegaSeed Servitor" = image(icon = 'icons/obj/vending.dmi', icon_state = "seeds"),
|
||||
"SecDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "secdrobe"),
|
||||
"MediDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "medidrobe"),
|
||||
"EngiDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "engidrobe"),
|
||||
"AtmosDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "atmosdrobe"),
|
||||
"CargoDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "cargodrobe"),
|
||||
"RoboDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "robodrobe"),
|
||||
"SciDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "scidrobe"),
|
||||
"HyDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "hydrobe"),
|
||||
"CuraDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "curadrobe"),
|
||||
"BarDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "bardrobe"),
|
||||
"ChefDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "chefdrobe"),
|
||||
"JaniDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "janidrobe"),
|
||||
"LawDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "lawdrobe"),
|
||||
"ChapDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "chapdrobe"),
|
||||
"ChemDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "chemdrobe"),
|
||||
"GeneDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "genedrobe"),
|
||||
"ViroDrobe" = image(icon = 'icons/obj/vending.dmi', icon_state = "virodrobe"),
|
||||
"ClothesMate" = image(icon = 'icons/obj/vending.dmi', icon_state = "clothes"),
|
||||
"NanoMed Plus" = image(icon = 'icons/obj/vending.dmi', icon_state = "med"),
|
||||
"NanoMed" = image(icon = 'icons/obj/vending.dmi', icon_state = "wallmed"),
|
||||
"KinkMate" = image(icon = 'icons/obj/citvending.dmi', icon_state = "kink"),
|
||||
))
|
||||
// This GLOBAL list is just here to be here.
|
||||
GLOBAL_VAR_INIT(vending_machines, list(
|
||||
/obj/machinery/vending/boozeomat,
|
||||
/obj/machinery/vending/coffee,
|
||||
/obj/machinery/vending/snack,
|
||||
/obj/machinery/vending/cola,
|
||||
/obj/machinery/vending/cigarette,
|
||||
/obj/machinery/vending/games,
|
||||
/obj/machinery/vending/autodrobe,
|
||||
/obj/machinery/vending/assist,
|
||||
/obj/machinery/vending/engivend,
|
||||
/obj/machinery/vending/tool,
|
||||
/obj/machinery/vending/sustenance,
|
||||
/obj/machinery/vending/dinnerware,
|
||||
/obj/machinery/vending/cart,
|
||||
/obj/machinery/vending/hydronutrients,
|
||||
/obj/machinery/vending/hydroseeds,
|
||||
/obj/machinery/vending/wardrobe/sec_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/medi_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/engi_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/atmos_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/cargo_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/robo_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/science_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/hydro_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/curator_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/bar_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/chef_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/jani_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/law_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/chap_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/chem_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/gene_wardrobe,
|
||||
/obj/machinery/vending/wardrobe/viro_wardrobe,
|
||||
/obj/machinery/vending/clothing,
|
||||
/obj/machinery/vending/medical,
|
||||
/obj/machinery/vending/wallmed,
|
||||
/obj/machinery/vending/kink
|
||||
))
|
||||
@@ -255,6 +255,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
|
||||
current_user = M.client
|
||||
//Blank
|
||||
menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing",layer = ABOVE_HUD_LAYER)
|
||||
menu_holder.plane = ABOVE_HUD_PLANE
|
||||
menu_holder.appearance_flags |= KEEP_APART
|
||||
menu_holder.vis_contents += elements + close_button
|
||||
current_user.images += menu_holder
|
||||
@@ -285,13 +286,16 @@ GLOBAL_LIST_EMPTY(radial_menus)
|
||||
Choices should be a list where list keys are movables or text used for element names and return value
|
||||
and list values are movables/icons/images used for element icons
|
||||
*/
|
||||
/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE)
|
||||
/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE, no_repeat_close = FALSE)
|
||||
if(!user || !anchor || !length(choices))
|
||||
return
|
||||
if(!uniqueid)
|
||||
uniqueid = "defmenu_[REF(user)]_[REF(anchor)]"
|
||||
|
||||
if(GLOB.radial_menus[uniqueid])
|
||||
if(!no_repeat_close)
|
||||
var/datum/radial_menu/menu = GLOB.radial_menus[uniqueid]
|
||||
menu.finished = TRUE
|
||||
return
|
||||
|
||||
var/datum/radial_menu/menu = new
|
||||
@@ -308,4 +312,9 @@ GLOBAL_LIST_EMPTY(radial_menus)
|
||||
var/answer = menu.selected_choice
|
||||
qdel(menu)
|
||||
GLOB.radial_menus -= uniqueid
|
||||
return answer
|
||||
if(require_near && !in_range(anchor, user))
|
||||
return
|
||||
if(istype(custom_check))
|
||||
if(!custom_check.Invoke())
|
||||
return
|
||||
return answer
|
||||
|
||||
@@ -238,6 +238,7 @@ SUBSYSTEM_DEF(mapping)
|
||||
|
||||
// load mining
|
||||
if(config.minetype == "lavaland")
|
||||
LoadGroup(FailedZs, "Lavaland_Lower", "map_files/Mining", "Lavaland_Lower.dmm", default_traits = ZTRAITS_LAVALAND_UNDERRGOUND)
|
||||
LoadGroup(FailedZs, "Lavaland", "map_files/Mining", "Lavaland.dmm", default_traits = ZTRAITS_LAVALAND)
|
||||
else if (!isnull(config.minetype))
|
||||
INIT_ANNOUNCE("WARNING: An unknown minetype '[config.minetype]' was set! This is being ignored! Update the maploader code!")
|
||||
|
||||
@@ -80,12 +80,12 @@
|
||||
description = "<span class='nicegreen'>Heh...hehehe...hehe...</span>\n"
|
||||
mood_change = 4
|
||||
|
||||
/datum/mood_event/chemical_laughter
|
||||
/datum/mood_event/chemical_laughter
|
||||
description = "<span class='nicegreen'>Laughter really is the best medicine! Or is it?</span>\n"
|
||||
mood_change = 4
|
||||
timeout = 3 MINUTES
|
||||
|
||||
/datum/mood_event/chemical_superlaughter
|
||||
/datum/mood_event/chemical_superlaughter
|
||||
description = "<span class='nicegreen'>*WHEEZE*</span>\n"
|
||||
mood_change = 12
|
||||
timeout = 3 MINUTES
|
||||
|
||||
@@ -1334,3 +1334,35 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
/area/tcommsat/lounge
|
||||
name = "Telecommunications Satellite Lounge"
|
||||
icon_state = "tcomsatlounge"
|
||||
|
||||
/*************
|
||||
***XENOARCH***
|
||||
*************/
|
||||
|
||||
/area/xenoarch
|
||||
icon_state = "xenogen"
|
||||
has_gravity = STANDARD_GRAVITY
|
||||
|
||||
/area/xenoarch/arch
|
||||
name = "Xenoarchaeology"
|
||||
icon_state = "xenoarch"
|
||||
|
||||
/area/xenoarch/bot
|
||||
name = "Xenoarchaeology Botany"
|
||||
icon_state = "xenobot"
|
||||
|
||||
/area/xenoarch/eng
|
||||
name = "Xenoarchaeology Engineering"
|
||||
icon_state = "xenoeng"
|
||||
|
||||
/area/xenoarch/gen
|
||||
name = "Xenoarchaeology Living Quarters"
|
||||
icon_state = "xenogen"
|
||||
|
||||
/area/xenoarch/sec
|
||||
name = "Xenoarchaeology Security"
|
||||
icon_state = "xenosec"
|
||||
|
||||
/area/xenoarch/med
|
||||
name = "Xenoarchaeology Medical"
|
||||
icon_state = "xenomed"
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
/area/centcom/vip
|
||||
name = "VIP Zone"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
/area/centcom/winterball
|
||||
|
||||
/area/centcom/winterball
|
||||
name = "winterball Zone"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
|
||||
|
||||
@@ -204,8 +204,6 @@
|
||||
H.give_genitals(TRUE)
|
||||
|
||||
H.suiciding = FALSE
|
||||
H.custom_body_size = H.client.prefs.body_size
|
||||
//H.size_multiplier = (max(min( round((H.custom_body_size)), MAX_BODYSIZE),MIN_BODYSIZE)* 0.01) //Not working dont know why.
|
||||
attempting = FALSE
|
||||
|
||||
return TRUE
|
||||
@@ -382,6 +380,10 @@
|
||||
qdel(fl)
|
||||
unattached_flesh.Cut()
|
||||
|
||||
//Do the resize on ejection. The clone pod seems to do a lot of matrix transforms the way size code does, so we will handle our resize after.
|
||||
mob_occupant.previous_size = 1 //Set the previous size to default so the resize properly set health and speed.
|
||||
mob_occupant.custom_body_size = mob_occupant.client.prefs.body_size
|
||||
mob_occupant.resize(mob_occupant.custom_body_size * 0.01)
|
||||
occupant = null
|
||||
|
||||
/obj/machinery/clonepod/proc/malfunction()
|
||||
|
||||
@@ -6,17 +6,43 @@
|
||||
icon_state = "cutout_basic"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
resistance_flags = FLAMMABLE
|
||||
// Possible restyles for the cutout;
|
||||
// add an entry in change_appearance() if you add to here
|
||||
var/list/possible_appearances = list("Assistant", "Clown", "Mime",
|
||||
"Traitor", "Nuke Op", "Cultist", "Clockwork Cultist",
|
||||
"Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Xenomorph Maid", "Swarmer",
|
||||
"Ash Walker", "Deathsquad Officer", "Ian", "Slaughter Demon",
|
||||
"Laughter Demon", "Private Security Officer", "ceo")
|
||||
var/pushed_over = FALSE //If the cutout is pushed over and has to be righted
|
||||
var/deceptive = FALSE //If the cutout actually appears as what it portray and not a discolored version
|
||||
/// Possible restyles for the cutout, add an entry in change_appearance() if you add to here
|
||||
var/static/list/possible_appearances
|
||||
/// If the cutout is pushed over and has to be righted
|
||||
var/pushed_over = FALSE
|
||||
/// If the cutout actually appears as what it portray and not a discolored version
|
||||
var/deceptive = FALSE
|
||||
|
||||
var/lastattacker = null
|
||||
/obj/item/cardboard_cutout/Initialize()
|
||||
. = ..()
|
||||
if(possible_appearances)
|
||||
return
|
||||
possible_appearances = sortList(list(
|
||||
"Assistant" = image(icon = src.icon, icon_state = "cutout_greytide"),
|
||||
"Clown" = image(icon = src.icon, icon_state = "cutout_clown"),
|
||||
"Mime" = image(icon = src.icon, icon_state = "cutout_mime"),
|
||||
"Traitor" = image(icon = src.icon, icon_state = "cutout_traitor"),
|
||||
"Nuke Op" = image(icon = src.icon, icon_state = "cutout_fluke"),
|
||||
"Cultist" = image(icon = src.icon, icon_state = "cutout_cultist"),
|
||||
"Brass Cultist" = image(icon = src.icon, icon_state = "cutout_servant"),
|
||||
"Clockwork Cultist" = image(icon = src.icon, icon_state = "cutout_new_servant"),
|
||||
"Revolutionary" = image(icon = src.icon, icon_state = "cutout_viva"),
|
||||
"Wizard" = image(icon = src.icon, icon_state = "cutout_wizard"),
|
||||
"Shadowling" = image(icon = src.icon, icon_state = "cutout_shadowling"),
|
||||
"Xenomorph" = image(icon = src.icon, icon_state = "cutout_fukken_xeno"),
|
||||
"Xenomorph Maid" = image(icon = src.icon, icon_state = "cutout_lusty"),
|
||||
"Swarmer" = image(icon = src.icon, icon_state = "cutout_swarmer"),
|
||||
"Ash Walker" = image(icon = src.icon, icon_state = "cutout_free_antag"),
|
||||
"Deathsquad Officer" = image(icon = src.icon, icon_state = "cutout_deathsquad"),
|
||||
"Ian" = image(icon = src.icon, icon_state = "cutout_ian"),
|
||||
"Slaughter Demon" = image(icon = 'icons/mob/mob.dmi', icon_state = "daemon"),
|
||||
"Laughter Demon" = image(icon = 'icons/mob/mob.dmi', icon_state = "bowmon"),
|
||||
"Private Security Officer" = image(icon = src.icon, icon_state = "cutout_ntsec"),
|
||||
"Securitron" = image(icon = src.icon, icon_state = "cutout_law"),
|
||||
"Gondola" = image(icon = src.icon, icon_state = "cutout_gondola"),
|
||||
"Monkey" = image(icon = src.icon, icon_state = "cutout_monky"),
|
||||
"CEO" = image(icon = src.icon, icon_state = "cutout_val"),
|
||||
))
|
||||
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/item/cardboard_cutout/attack_hand(mob/living/user)
|
||||
@@ -74,23 +100,23 @@
|
||||
playsound(src, 'sound/weapons/slice.ogg', 50, 1)
|
||||
if(prob(P.damage))
|
||||
push_over()
|
||||
return BULLET_ACT_HIT
|
||||
|
||||
/**
|
||||
* change_appearance: Changes a skin of the cardboard cutout based on a user's choice
|
||||
*
|
||||
* Arguments:
|
||||
* * crayon The crayon used to change and recolor the cardboard cutout
|
||||
* * user The mob choosing a skin of the cardboard cutout
|
||||
*/
|
||||
/obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user)
|
||||
if(!crayon || !user)
|
||||
return
|
||||
if(pushed_over)
|
||||
to_chat(user, "<span class='warning'>Right [src] first!</span>")
|
||||
return
|
||||
if(crayon.check_empty(user))
|
||||
return
|
||||
if(crayon.is_capped)
|
||||
to_chat(user, "<span class='warning'>Take the cap off first!</span>")
|
||||
return
|
||||
var/new_appearance = input(user, "Choose a new appearance for [src].", "26th Century Deception") as null|anything in possible_appearances
|
||||
if(!new_appearance || !crayon || !user.canUseTopic(src))
|
||||
var/new_appearance = show_radial_menu(user, src, possible_appearances, custom_check = CALLBACK(src, .proc/check_menu, user, crayon), radius = 36, require_near = TRUE)
|
||||
if(!new_appearance)
|
||||
return
|
||||
if(!do_after(user, 10, FALSE, src, TRUE))
|
||||
return
|
||||
return FALSE
|
||||
if(!check_menu(user, crayon))
|
||||
return FALSE
|
||||
user.visible_message("<span class='notice'>[user] gives [src] a new look.</span>", "<span class='notice'>Voila! You give [src] a new look.</span>")
|
||||
crayon.use_charges(1)
|
||||
crayon.check_empty(user)
|
||||
@@ -123,10 +149,14 @@
|
||||
name = "Unknown"
|
||||
desc = "A cardboard cutout of a cultist."
|
||||
icon_state = "cutout_cultist"
|
||||
if("Brass Cultist")
|
||||
name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
|
||||
desc = "A cardboard cutout of a \"servant\" of Ratvar."
|
||||
icon_state = "cutout_servant"
|
||||
if("Clockwork Cultist")
|
||||
name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
|
||||
desc = "A cardboard cutout of a servant of Ratvar."
|
||||
icon_state = "cutout_servant"
|
||||
icon_state = "cutout_new_servant"
|
||||
if("Revolutionary")
|
||||
name = "Unknown"
|
||||
desc = "A cardboard cutout of a revolutionary."
|
||||
@@ -179,11 +209,49 @@
|
||||
name = "Private Security Officer"
|
||||
desc = "A cardboard cutout of a private security officer."
|
||||
icon_state = "cutout_ntsec"
|
||||
if("ceo")
|
||||
if("Securitron")
|
||||
name = "[pick("Officer", "Oftiser", "Sergeant", "General")][pick(" Genesky", " Pingsky", " Beepsky", " Pipsqueak", "-at-Armsky")]"
|
||||
desc = "A cardboard cutout of a securitron."
|
||||
icon_state = "cutout_law"
|
||||
if("Gondola")
|
||||
name = "gondola"
|
||||
desc = "A cardboard cutout of a gondola."
|
||||
icon_state = "cutout_gondola"
|
||||
if("Monkey")
|
||||
name = "monkey ([rand(1, 999)])"
|
||||
desc = "A cardboard cutout of a monkey."
|
||||
icon_state = "cutout_monky"
|
||||
if("CEO")
|
||||
name = "Valarie"
|
||||
desc = "The very owner of your soul"
|
||||
icon_state = "cutout_val"
|
||||
return 1
|
||||
else
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with a menu
|
||||
* * crayon The crayon used to interact with a menu
|
||||
*/
|
||||
/obj/item/cardboard_cutout/proc/check_menu(mob/living/user, obj/item/toy/crayon/crayon)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated())
|
||||
return FALSE
|
||||
if(pushed_over)
|
||||
to_chat(user, "<span class='warning'>Right [src] first!</span>")
|
||||
return FALSE
|
||||
if(!crayon || !user.is_holding(crayon))
|
||||
return FALSE
|
||||
if(crayon.check_empty(user))
|
||||
return FALSE
|
||||
if(crayon.is_capped)
|
||||
to_chat(user, "<span class='warning'>Take the cap off first!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/cardboard_cutout/setDir(newdir)
|
||||
dir = SOUTH
|
||||
|
||||
@@ -252,16 +252,22 @@
|
||||
/obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe",
|
||||
/obj/machinery/vending/clothing = "ClothesMate",
|
||||
/obj/machinery/vending/medical = "NanoMed Plus",
|
||||
/obj/machinery/vending/wallmed = "NanoMed")
|
||||
/obj/machinery/vending/wallmed = "NanoMed",
|
||||
/obj/machinery/vending/kink = "\improper KinkMate")
|
||||
|
||||
/obj/item/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
var/position = vending_names_paths.Find(build_path)
|
||||
position = (position == vending_names_paths.len) ? 1 : (position + 1)
|
||||
var/typepath = vending_names_paths[position]
|
||||
|
||||
to_chat(user, "<span class='notice'>You set the board to \"[vending_names_paths[typepath]]\".</span>")
|
||||
var/choice = show_radial_menu(user, src, GLOB.vending_m_choices, radius = 46, require_near = TRUE, tooltips = TRUE)
|
||||
if(!choice)
|
||||
return
|
||||
var/static/list/vendinglist = GLOB.vending_m_choices
|
||||
var/choiceposition = vendinglist.Find(choice)
|
||||
if(!choiceposition)
|
||||
return
|
||||
var/typepath = GLOB.vending_machines[choiceposition]
|
||||
var/namepath = vending_names_paths[choiceposition]
|
||||
set_type(typepath)
|
||||
to_chat(user, "<span class='notice'>You set the board to \"[vending_names_paths[namepath]]\".</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -244,21 +244,23 @@
|
||||
if(user.mind && (user.mind.isholy) && !reskinned)
|
||||
reskin_holy_weapon(user)
|
||||
|
||||
/obj/item/nullrod/proc/reskin_holy_weapon(mob/M)
|
||||
/obj/item/nullrod/proc/reskin_holy_weapon(mob/living/L)
|
||||
if(GLOB.holy_weapon_type)
|
||||
return
|
||||
var/obj/item/nullrod/holy_weapon
|
||||
var/list/holy_weapons_list = typesof(/obj/item/nullrod) + list(
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/chaplain
|
||||
)
|
||||
var/obj/item/holy_weapon
|
||||
var/list/holy_weapons_list = subtypesof(/obj/item/nullrod)
|
||||
var/list/display_names = list()
|
||||
var/list/nullrod_icons = list()
|
||||
for(var/V in holy_weapons_list)
|
||||
var/obj/item/nullrod/rodtype = V
|
||||
if (initial(rodtype.chaplain_spawnable))
|
||||
display_names[initial(rodtype.name)] = rodtype
|
||||
nullrod_icons += list(initial(rodtype.name) = image(icon = initial(rodtype.icon), icon_state = initial(rodtype.icon_state)))
|
||||
|
||||
var/choice = input(M,"What theme would you like for your holy weapon?","Holy Weapon Theme") as null|anything in display_names
|
||||
if(QDELETED(src) || !choice || M.stat || !in_range(M, src) || M.restrained() || !M.canmove || reskinned)
|
||||
nullrod_icons = sortList(nullrod_icons)
|
||||
|
||||
var/choice = show_radial_menu(L, src , nullrod_icons, custom_check = CALLBACK(src, .proc/check_menu, L), radius = 42, require_near = TRUE)
|
||||
if(!choice || !check_menu(L))
|
||||
return
|
||||
|
||||
var/A = display_names[choice] // This needs to be on a separate var as list member access is not allowed for new
|
||||
@@ -269,9 +271,23 @@
|
||||
SSblackbox.record_feedback("tally", "chaplain_weapon", 1, "[choice]")
|
||||
|
||||
if(holy_weapon)
|
||||
holy_weapon.reskinned = TRUE
|
||||
qdel(src)
|
||||
M.put_in_active_hand(holy_weapon)
|
||||
L.put_in_active_hand(holy_weapon)
|
||||
|
||||
/**
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with a menu
|
||||
*/
|
||||
/obj/item/nullrod/proc/check_menu(mob/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(QDELETED(src) || reskinned)
|
||||
return FALSE
|
||||
if(user.incapacitated() || !user.is_holding(src))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/nullrod/godhand
|
||||
icon_state = "disintegrate"
|
||||
@@ -738,4 +754,4 @@
|
||||
sharpness = IS_SHARP_ACCURATE
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
attack_verb = list("stabbed", "poked", "slashed", "clocked")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
@@ -311,7 +311,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
amount = 10
|
||||
|
||||
//Durathread fuck slash-asterisk comments
|
||||
GLOBAL_LIST_INIT(durathread_recipes, list ( \
|
||||
GLOBAL_LIST_INIT(durathread_recipes, list ( \
|
||||
new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/durathread, 4, time = 40),
|
||||
new/datum/stack_recipe("durathread jumpskirt", /obj/item/clothing/under/durathread/skirt, 4, time = 40), \
|
||||
new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 40), \
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
var/foldable = /obj/item/stack/sheet/cardboard
|
||||
var/illustration = "writing"
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //exploits ahoy
|
||||
|
||||
/obj/item/storage/box/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -104,25 +105,37 @@
|
||||
// Ordinary survival box
|
||||
/obj/item/storage/box/survival/PopulateContents()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/survival/radio/PopulateContents()
|
||||
..() // we want the survival stuff too.
|
||||
new /obj/item/radio/off(src)
|
||||
|
||||
/obj/item/storage/box/survival_mining/PopulateContents()
|
||||
new /obj/item/clothing/mask/gas/explorer(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/crowbar/red(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
// Engineer survival box
|
||||
/obj/item/storage/box/engineer/PopulateContents()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/engineer/radio/PopulateContents()
|
||||
..() // we want the regular items too.
|
||||
new /obj/item/radio/off(src)
|
||||
@@ -130,14 +143,22 @@
|
||||
// Syndie survival box
|
||||
/obj/item/storage/box/syndie/PopulateContents()
|
||||
new /obj/item/clothing/mask/gas/syndicate(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
// Security survival box
|
||||
/obj/item/storage/box/security/PopulateContents()
|
||||
new /obj/item/clothing/mask/gas/sechailer(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/security/radio/PopulateContents()
|
||||
..() // we want the regular stuff too
|
||||
new /obj/item/radio/off(src)
|
||||
@@ -397,7 +418,7 @@
|
||||
|
||||
/obj/item/storage/box/donkpockets/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/donkpocket))
|
||||
|
||||
/obj/item/storage/box/donkpockets/PopulateContents()
|
||||
@@ -412,7 +433,7 @@
|
||||
|
||||
/obj/item/storage/box/monkeycubes/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 7
|
||||
STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/monkeycube))
|
||||
|
||||
@@ -567,7 +588,7 @@
|
||||
|
||||
/obj/item/storage/box/snappops/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.can_hold = typecacheof(list(/obj/item/toy/snappop))
|
||||
STR.max_items = 8
|
||||
|
||||
@@ -585,7 +606,7 @@
|
||||
|
||||
/obj/item/storage/box/matches/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 10
|
||||
STR.can_hold = typecacheof(list(/obj/item/match))
|
||||
|
||||
@@ -608,7 +629,7 @@
|
||||
|
||||
/obj/item/storage/box/lights/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 21
|
||||
STR.can_hold = typecacheof(list(/obj/item/light/tube, /obj/item/light/bulb))
|
||||
STR.max_combined_w_class = 21
|
||||
@@ -706,11 +727,16 @@
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
// Clown survival box
|
||||
/obj/item/storage/box/hug/survival/PopulateContents()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/rubbershot
|
||||
name = "box of rubber shots"
|
||||
desc = "A box full of rubber shots, designed for riot shotguns."
|
||||
@@ -804,12 +830,6 @@
|
||||
|
||||
|
||||
|
||||
#define NODESIGN "None"
|
||||
#define NANOTRASEN "NanotrasenStandard"
|
||||
#define SYNDI "SyndiSnacks"
|
||||
#define HEART "Heart"
|
||||
#define SMILEY "SmileyFace"
|
||||
|
||||
/obj/item/storage/box/papersack
|
||||
name = "paper sack"
|
||||
desc = "A sack neatly crafted out of paper."
|
||||
@@ -817,64 +837,84 @@
|
||||
item_state = "paperbag_None"
|
||||
resistance_flags = FLAMMABLE
|
||||
foldable = null
|
||||
var/design = NODESIGN
|
||||
/// A list of all available papersack reskins
|
||||
var/list/papersack_designs = list()
|
||||
|
||||
/obj/item/storage/box/papersack/update_icon()
|
||||
/obj/item/storage/box/papersack/Initialize(mapload)
|
||||
. = ..()
|
||||
papersack_designs = sortList(list(
|
||||
"None" = image(icon = src.icon, icon_state = "paperbag_None"),
|
||||
"NanotrasenStandard" = image(icon = src.icon, icon_state = "paperbag_NanotrasenStandard"),
|
||||
"SyndiSnacks" = image(icon = src.icon, icon_state = "paperbag_SyndiSnacks"),
|
||||
"Heart" = image(icon = src.icon, icon_state = "paperbag_Heart"),
|
||||
"SmileyFace" = image(icon = src.icon, icon_state = "paperbag_SmileyFace")
|
||||
))
|
||||
|
||||
/obj/item/storage/box/papersack/update_icon_state()
|
||||
if(contents.len == 0)
|
||||
icon_state = "[item_state]"
|
||||
else icon_state = "[item_state]_closed"
|
||||
else
|
||||
icon_state = "[item_state]_closed"
|
||||
|
||||
/obj/item/storage/box/papersack/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/pen))
|
||||
//if a pen is used on the sack, dialogue to change its design appears
|
||||
if(contents.len)
|
||||
to_chat(user, "<span class='warning'>You can't modify [src] with items still inside!</span>")
|
||||
return
|
||||
var/list/designs = list(NODESIGN, NANOTRASEN, SYNDI, HEART, SMILEY, "Cancel")
|
||||
var/switchDesign = input("Select a Design:", "Paper Sack Design", designs[1]) in designs
|
||||
if(get_dist(usr, src) > 1)
|
||||
to_chat(usr, "<span class='warning'>You have moved too far away!</span>")
|
||||
return
|
||||
var/choice = designs.Find(switchDesign)
|
||||
if(design == designs[choice] || designs[choice] == "Cancel")
|
||||
return 0
|
||||
to_chat(usr, "<span class='notice'>You make some modifications to [src] using your pen.</span>")
|
||||
design = designs[choice]
|
||||
icon_state = "paperbag_[design]"
|
||||
item_state = "paperbag_[design]"
|
||||
switch(designs[choice])
|
||||
if(NODESIGN)
|
||||
var/choice = show_radial_menu(user, src , papersack_designs, custom_check = CALLBACK(src, .proc/check_menu, user, W), radius = 36, require_near = TRUE)
|
||||
if(!choice)
|
||||
return FALSE
|
||||
if(icon_state == "paperbag_[choice]")
|
||||
return FALSE
|
||||
switch(choice)
|
||||
if("None")
|
||||
desc = "A sack neatly crafted out of paper."
|
||||
if(NANOTRASEN)
|
||||
if("NanotrasenStandard")
|
||||
desc = "A standard Nanotrasen paper lunch sack for loyal employees on the go."
|
||||
if(SYNDI)
|
||||
if("SyndiSnacks")
|
||||
desc = "The design on this paper sack is a remnant of the notorious 'SyndieSnacks' program."
|
||||
if(HEART)
|
||||
if("Heart")
|
||||
desc = "A paper sack with a heart etched onto the side."
|
||||
if(SMILEY)
|
||||
if("SmileyFace")
|
||||
desc = "A paper sack with a crude smile etched onto the side."
|
||||
return 0
|
||||
else
|
||||
return FALSE
|
||||
to_chat(user, "<span class='notice'>You make some modifications to [src] using your pen.</span>")
|
||||
icon_state = "paperbag_[choice]"
|
||||
item_state = "paperbag_[choice]"
|
||||
return FALSE
|
||||
else if(W.is_sharp())
|
||||
if(!contents.len)
|
||||
if(item_state == "paperbag_None")
|
||||
user.show_message("<span class='notice'>You cut eyeholes into [src].</span>", 1)
|
||||
new /obj/item/clothing/head/papersack(user.loc)
|
||||
qdel(src)
|
||||
return 0
|
||||
return FALSE
|
||||
else if(item_state == "paperbag_SmileyFace")
|
||||
user.show_message("<span class='notice'>You cut eyeholes into [src] and modify the design.</span>", 1)
|
||||
new /obj/item/clothing/head/papersack/smiley(user.loc)
|
||||
qdel(src)
|
||||
return 0
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
#undef NODESIGN
|
||||
#undef NANOTRASEN
|
||||
#undef SYNDI
|
||||
#undef HEART
|
||||
#undef SMILEY
|
||||
/**
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with a menu
|
||||
* * P The pen used to interact with a menu
|
||||
*/
|
||||
/obj/item/storage/box/papersack/proc/check_menu(mob/user, obj/item/pen/P)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated())
|
||||
return FALSE
|
||||
if(contents.len)
|
||||
to_chat(user, "<span class='warning'>You can't modify [src] with items still inside!</span>")
|
||||
return FALSE
|
||||
if(!P || !user.is_holding(P))
|
||||
to_chat(user, "<span class='warning'>You need a pen to modify [src]!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/storage/box/ingredients //This box is for the randomely chosen version the chef spawns with, it shouldn't actually exist.
|
||||
/obj/item/storage/box/ingredients //This box is for the randomly chosen version the chef spawns with, it shouldn't actually exist.
|
||||
name = "ingredients box"
|
||||
illustration = "fruit"
|
||||
var/theme_name
|
||||
|
||||
@@ -763,79 +763,55 @@
|
||||
name = "hand of cards"
|
||||
desc = "A number of cards not in a deck, customarily held in ones hand."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "nanotrasen_hand2"
|
||||
icon_state = "none"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/list/currenthand = list()
|
||||
var/choice = null
|
||||
|
||||
|
||||
/obj/item/toy/cards/cardhand/attack_self(mob/user)
|
||||
user.set_machine(src)
|
||||
var/list/handradial = list()
|
||||
interact(user)
|
||||
|
||||
/obj/item/toy/cards/cardhand/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = "You have:<BR>"
|
||||
for(var/t in currenthand)
|
||||
dat += "<A href='?src=[REF(src)];pick=[t]'>A [t].</A><BR>"
|
||||
dat += "Which card will you remove next?"
|
||||
var/datum/browser/popup = new(user, "cardhand", "Hand of Cards", 400, 240)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
handradial[t] = image(icon = src.icon, icon_state = "sc_[t]_[deckstyle]")
|
||||
|
||||
|
||||
/obj/item/toy/cards/cardhand/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(usr.stat || !ishuman(usr))
|
||||
return
|
||||
var/mob/living/carbon/human/cardUser = usr
|
||||
var/O = src
|
||||
if(href_list["pick"])
|
||||
if (cardUser.is_holding(src))
|
||||
var/choice = href_list["pick"]
|
||||
var/obj/item/toy/cards/singlecard/C = new/obj/item/toy/cards/singlecard(cardUser.loc)
|
||||
src.currenthand -= choice
|
||||
C.parentdeck = src.parentdeck
|
||||
C.cardname = choice
|
||||
C.apply_card_vars(C,O)
|
||||
C.pickup(cardUser)
|
||||
cardUser.put_in_hands(C)
|
||||
cardUser.visible_message("<span class='notice'>[cardUser] draws a card from [cardUser.p_their()] hand.</span>", "<span class='notice'>You take the [C.cardname] from your hand.</span>")
|
||||
var/choice = show_radial_menu(usr,src, handradial, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 36, require_near = TRUE)
|
||||
if(!choice)
|
||||
return FALSE
|
||||
var/obj/item/toy/cards/singlecard/C = new/obj/item/toy/cards/singlecard(cardUser.loc)
|
||||
currenthand -= choice
|
||||
handradial -= choice
|
||||
C.parentdeck = parentdeck
|
||||
C.cardname = choice
|
||||
C.apply_card_vars(C,O)
|
||||
C.pickup(cardUser)
|
||||
cardUser.put_in_hands(C)
|
||||
cardUser.visible_message("<span class='notice'>[cardUser] draws a card from [cardUser.p_their()] hand.</span>", "<span class='notice'>You take the [C.cardname] from your hand.</span>")
|
||||
|
||||
interact(cardUser)
|
||||
if(src.currenthand.len < 3)
|
||||
src.icon_state = "[deckstyle]_hand2"
|
||||
else if(src.currenthand.len < 4)
|
||||
src.icon_state = "[deckstyle]_hand3"
|
||||
else if(src.currenthand.len < 5)
|
||||
src.icon_state = "[deckstyle]_hand4"
|
||||
if(src.currenthand.len == 1)
|
||||
var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(src.loc)
|
||||
N.parentdeck = src.parentdeck
|
||||
N.cardname = src.currenthand[1]
|
||||
N.apply_card_vars(N,O)
|
||||
qdel(src)
|
||||
N.pickup(cardUser)
|
||||
cardUser.put_in_hands(N)
|
||||
to_chat(cardUser, "<span class='notice'>You also take [currenthand[1]] and hold it.</span>")
|
||||
cardUser << browse(null, "window=cardhand")
|
||||
return
|
||||
interact(cardUser)
|
||||
update_sprite()
|
||||
if(length(currenthand) == 1)
|
||||
var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(loc)
|
||||
N.parentdeck = parentdeck
|
||||
N.cardname = currenthand[1]
|
||||
N.apply_card_vars(N,O)
|
||||
qdel(src)
|
||||
N.pickup(cardUser)
|
||||
cardUser.put_in_hands(N)
|
||||
to_chat(cardUser, "<span class='notice'>You also take [currenthand[1]] and hold it.</span>")
|
||||
|
||||
/obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
|
||||
if(istype(C))
|
||||
if(C.parentdeck == src.parentdeck)
|
||||
src.currenthand += C.cardname
|
||||
user.visible_message("[user] adds a card to [user.p_their()] hand.", "<span class='notice'>You add the [C.cardname] to your hand.</span>")
|
||||
user.visible_message("<span class='notice'>[user] adds a card to [user.p_their()] hand.</span>", "<span class='notice'>You add the [C.cardname] to your hand.</span>")
|
||||
qdel(C)
|
||||
interact(user)
|
||||
if(currenthand.len > 4)
|
||||
src.icon_state = "[deckstyle]_hand5"
|
||||
else if(currenthand.len > 3)
|
||||
src.icon_state = "[deckstyle]_hand4"
|
||||
else if(currenthand.len > 2)
|
||||
src.icon_state = "[deckstyle]_hand3"
|
||||
update_sprite(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't mix cards from other decks!</span>")
|
||||
else
|
||||
@@ -844,7 +820,7 @@
|
||||
/obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/toy/cards/sourceobj)
|
||||
..()
|
||||
newobj.deckstyle = sourceobj.deckstyle
|
||||
newobj.icon_state = "[deckstyle]_hand2" // Another dumb hack, without this the hand is invisible (or has the default deckstyle) until another card is added.
|
||||
update_sprite()
|
||||
newobj.card_hitsound = sourceobj.card_hitsound
|
||||
newobj.card_force = sourceobj.card_force
|
||||
newobj.card_throwforce = sourceobj.card_throwforce
|
||||
@@ -853,6 +829,31 @@
|
||||
newobj.card_attack_verb = sourceobj.card_attack_verb
|
||||
newobj.resistance_flags = sourceobj.resistance_flags
|
||||
|
||||
/**
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with a menu
|
||||
*/
|
||||
/obj/item/toy/cards/cardhand/proc/check_menu(mob/living/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated())
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* This proc updates the sprite for when you create a hand of cards
|
||||
*/
|
||||
/obj/item/toy/cards/cardhand/proc/update_sprite()
|
||||
cut_overlays()
|
||||
var/overlay_cards = currenthand.len
|
||||
|
||||
var/k = overlay_cards == 2 ? 1 : overlay_cards - 2
|
||||
for(var/i = k; i <= overlay_cards; i++)
|
||||
var/card_overlay = image(icon=src.icon,icon_state="sc_[currenthand[i]]_[deckstyle]",pixel_x=(1-i+k)*3,pixel_y=(1-i+k)*3)
|
||||
add_overlay(card_overlay)
|
||||
|
||||
/obj/item/toy/cards/singlecard
|
||||
name = "card"
|
||||
desc = "a card"
|
||||
@@ -865,13 +866,13 @@
|
||||
|
||||
|
||||
/obj/item/toy/cards/singlecard/examine(mob/user)
|
||||
. = ..()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/cardUser = user
|
||||
if(cardUser.is_holding(src))
|
||||
cardUser.visible_message("[cardUser] checks [cardUser.p_their()] card.", "<span class='notice'>The card reads: [cardname].</span>")
|
||||
else
|
||||
to_chat(cardUser, "<span class='warning'>You need to have the card in your hand to check it!</span>")
|
||||
|
||||
. += "<span class='warning'>You need to have the card in your hand to check it!</span>"
|
||||
|
||||
/obj/item/toy/cards/singlecard/verb/Flip()
|
||||
set name = "Flip Card"
|
||||
|
||||
@@ -6,11 +6,10 @@
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
//copypaste sorry
|
||||
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
|
||||
var/obj/item/storage/bag/trash/mybag = null
|
||||
var/obj/item/mop/mymop = null
|
||||
var/obj/item/reagent_containers/spray/cleaner/myspray = null
|
||||
var/obj/item/lightreplacer/myreplacer = null
|
||||
var/obj/item/storage/bag/trash/mybag
|
||||
var/obj/item/mop/mymop
|
||||
var/obj/item/reagent_containers/spray/cleaner/myspray
|
||||
var/obj/item/lightreplacer/myreplacer
|
||||
var/signs = 0
|
||||
var/const/max_signs = 4
|
||||
|
||||
@@ -32,7 +31,6 @@
|
||||
/obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user)
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
updateUsrDialog()
|
||||
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
|
||||
return
|
||||
|
||||
@@ -49,7 +47,6 @@
|
||||
m.janicart_insert(user, src)
|
||||
else
|
||||
to_chat(user, fail_msg)
|
||||
|
||||
else if(istype(I, /obj/item/storage/bag/trash))
|
||||
if(!mybag)
|
||||
var/obj/item/storage/bag/trash/t=I
|
||||
@@ -91,63 +88,74 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
|
||||
var/list/items = list()
|
||||
if(mybag)
|
||||
dat += "<a href='?src=[REF(src)];garbage=1'>[mybag.name]</a><br>"
|
||||
items += list("Trash bag" = image(icon = mybag.icon, icon_state = mybag.icon_state))
|
||||
if(mymop)
|
||||
dat += "<a href='?src=[REF(src)];mop=1'>[mymop.name]</a><br>"
|
||||
items += list("Mop" = image(icon = mymop.icon, icon_state = mymop.icon_state))
|
||||
if(myspray)
|
||||
dat += "<a href='?src=[REF(src)];spray=1'>[myspray.name]</a><br>"
|
||||
items += list("Spray bottle" = image(icon = myspray.icon, icon_state = myspray.icon_state))
|
||||
if(myreplacer)
|
||||
dat += "<a href='?src=[REF(src)];replacer=1'>[myreplacer.name]</a><br>"
|
||||
if(signs)
|
||||
dat += "<a href='?src=[REF(src)];sign=1'>[signs] sign\s</a><br>"
|
||||
var/datum/browser/popup = new(user, "janicart", name, 240, 160)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
items += list("Light replacer" = image(icon = myreplacer.icon, icon_state = myreplacer.icon_state))
|
||||
var/obj/item/caution/sign = locate() in src
|
||||
if(sign)
|
||||
items += list("Sign" = image(icon = sign.icon, icon_state = sign.icon_state))
|
||||
|
||||
|
||||
/obj/structure/janitorialcart/Topic(href, href_list)
|
||||
if(!in_range(src, usr))
|
||||
if(!length(items))
|
||||
return
|
||||
if(!isliving(usr))
|
||||
items = sortList(items)
|
||||
var/pick = show_radial_menu(user, src, items, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 38, require_near = TRUE)
|
||||
if(!pick)
|
||||
return
|
||||
var/mob/living/user = usr
|
||||
if(href_list["garbage"])
|
||||
if(mybag)
|
||||
switch(pick)
|
||||
if("Trash bag")
|
||||
if(!mybag)
|
||||
return
|
||||
user.put_in_hands(mybag)
|
||||
to_chat(user, "<span class='notice'>You take [mybag] from [src].</span>")
|
||||
mybag = null
|
||||
if(href_list["mop"])
|
||||
if(mymop)
|
||||
if("Mop")
|
||||
if(!mymop)
|
||||
return
|
||||
user.put_in_hands(mymop)
|
||||
to_chat(user, "<span class='notice'>You take [mymop] from [src].</span>")
|
||||
mymop = null
|
||||
if(href_list["spray"])
|
||||
if(myspray)
|
||||
if("Spray bottle")
|
||||
if(!myspray)
|
||||
return
|
||||
user.put_in_hands(myspray)
|
||||
to_chat(user, "<span class='notice'>You take [myspray] from [src].</span>")
|
||||
myspray = null
|
||||
if(href_list["replacer"])
|
||||
if(myreplacer)
|
||||
if("Light replacer")
|
||||
if(!myreplacer)
|
||||
return
|
||||
user.put_in_hands(myreplacer)
|
||||
to_chat(user, "<span class='notice'>You take [myreplacer] from [src].</span>")
|
||||
myreplacer = null
|
||||
if(href_list["sign"])
|
||||
if(signs)
|
||||
var/obj/item/caution/Sign = locate() in src
|
||||
if(Sign)
|
||||
user.put_in_hands(Sign)
|
||||
to_chat(user, "<span class='notice'>You take \a [Sign] from [src].</span>")
|
||||
signs--
|
||||
else
|
||||
WARNING("Signs ([signs]) didn't match contents")
|
||||
signs = 0
|
||||
if("Sign")
|
||||
if(signs <= 0)
|
||||
return
|
||||
user.put_in_hands(sign)
|
||||
to_chat(user, "<span class='notice'>You take \a [sign] from [src].</span>")
|
||||
signs--
|
||||
else
|
||||
return
|
||||
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
|
||||
/**
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with a menu
|
||||
*/
|
||||
/obj/structure/janitorialcart/proc/check_menu(mob/living/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated())
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/structure/janitorialcart/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
down.update_icon()
|
||||
up = down = null
|
||||
|
||||
/obj/structure/ladder/update_icon()
|
||||
/obj/structure/ladder/update_icon_state()
|
||||
if(up && down)
|
||||
icon_state = "ladder11"
|
||||
|
||||
@@ -91,8 +91,13 @@
|
||||
if (!is_ghost && !in_range(src, user))
|
||||
return
|
||||
|
||||
var/list/tool_list = list(
|
||||
"Up" = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = NORTH),
|
||||
"Down" = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = SOUTH)
|
||||
)
|
||||
|
||||
if (up && down)
|
||||
var/result = alert("Go up or down [src]?", "Ladder", "Up", "Down", "Cancel")
|
||||
var/result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
|
||||
if (!is_ghost && !in_range(src, user))
|
||||
return // nice try
|
||||
switch(result)
|
||||
@@ -112,6 +117,11 @@
|
||||
if(!is_ghost)
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/structure/ladder/proc/check_menu(mob/user)
|
||||
if(user.incapacitated() || !user.Adjacent(src))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/structure/ladder/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
|
||||
@@ -50,7 +50,8 @@
|
||||
name = "bar"
|
||||
desc = "A direction sign, pointing out which way the Bar is."
|
||||
icon_state = "direction_bar"
|
||||
/obj/structure/sign/directions/cafe
|
||||
|
||||
/obj/structure/sign/directions/cafe
|
||||
name = "cafe"
|
||||
desc = "A direction sign, pointing out which way the Cafe is."
|
||||
icon_state = "direction_cafe"
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
AddComponent(/datum/component/chasm, SSmapping.get_turf_below(src))
|
||||
|
||||
/turf/open/chasm/proc/set_target(turf/target)
|
||||
GET_COMPONENT(chasm_component, /datum/component/chasm)
|
||||
var/datum/component/chasm/chasm_component = GetComponent(/datum/component/chasm)
|
||||
chasm_component.target_turf = target
|
||||
|
||||
/turf/open/chasm/proc/drop(atom/movable/AM)
|
||||
GET_COMPONENT(chasm_component, /datum/component/chasm)
|
||||
var/datum/component/chasm/chasm_component = GetComponent(/datum/component/chasm)
|
||||
chasm_component.drop(AM)
|
||||
|
||||
/turf/open/chasm/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
|
||||
@@ -38,7 +38,7 @@
|
||||
switch(passed_mode)
|
||||
if(RCD_FLOORWALL)
|
||||
to_chat(user, "<span class='notice'>You build a floor.</span>")
|
||||
PlaceOnTop(/turf/open/floor/plating)
|
||||
PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
to_chat(user, "<span class='notice'>You build a floor.</span>")
|
||||
// Create a floor, which has this chasm underneath it
|
||||
PlaceOnTop(/turf/open/floor/plating)
|
||||
PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need one floor tile to build a floor!</span>")
|
||||
else
|
||||
@@ -88,7 +88,6 @@
|
||||
light_power = 0.65 //less bright, too
|
||||
light_color = LIGHT_COLOR_LAVA //let's just say you're falling into lava, that makes sense right
|
||||
|
||||
|
||||
// Chasms for the jungle, with planetary atmos and a different icon
|
||||
/turf/open/chasm/jungle
|
||||
icon = 'icons/turf/floors/junglechasm.dmi'
|
||||
@@ -115,4 +114,4 @@
|
||||
. = ..()
|
||||
var/turf/T = safepick(get_area_turfs(/area/fabric_of_reality))
|
||||
if(T)
|
||||
set_target(T)
|
||||
set_target(T)
|
||||
|
||||
@@ -194,8 +194,9 @@
|
||||
/turf/open/floor/plating/ice/smooth
|
||||
icon_state = "smooth"
|
||||
smooth = SMOOTH_MORE | SMOOTH_BORDER
|
||||
canSmoothWith = list(/turf/open/floor/plating/ice/smooth, /turf/open/floor/plating/ice)
|
||||
/turf/open/floor/plating/ice/colder
|
||||
canSmoothWith = list(/turf/open/floor/plating/ice/smooth,
|
||||
/turf/open/floor/plating/ice,
|
||||
/turf/open/floor/plating/ice/colder)
|
||||
|
||||
/turf/open/floor/plating/ice/colder
|
||||
temperature = 140
|
||||
|
||||
@@ -7,6 +7,10 @@ GLOBAL_VAR(restart_counter)
|
||||
//This happens after the Master subsystem new(s) (it's a global datum)
|
||||
//So subsystems globals exist, but are not initialised
|
||||
/world/New()
|
||||
var/extools = world.GetConfig("env", "EXTOOLS_DLL") || (world.system_type == MS_WINDOWS ? "./byond-extools.dll" : "./libbyond-extools.so")
|
||||
if (fexists(extools))
|
||||
call(extools, "maptick_initialize")()
|
||||
enable_debugger()
|
||||
|
||||
log_world("World loaded at [TIME_STAMP("hh:mm:ss", FALSE)]!")
|
||||
|
||||
|
||||
@@ -141,14 +141,14 @@
|
||||
|
||||
/datum/antagonist/traitor/proc/forge_single_human_objective() //Returns how many objectives are added
|
||||
.=1
|
||||
if(prob(50))
|
||||
if(prob(35))
|
||||
var/list/active_ais = active_ais()
|
||||
if(active_ais.len && prob(100/GLOB.joined_player_list.len))
|
||||
var/datum/objective/destroy/destroy_objective = new
|
||||
destroy_objective.owner = owner
|
||||
destroy_objective.find_target()
|
||||
add_objective(destroy_objective)
|
||||
else if(prob(30))
|
||||
else if(prob(65))
|
||||
var/datum/objective/maroon/maroon_objective = new
|
||||
maroon_objective.owner = owner
|
||||
maroon_objective.find_target()
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell
|
||||
name = "cryo cell"
|
||||
icon = 'icons/obj/cryogenics.dmi'
|
||||
|
||||
@@ -2921,14 +2921,13 @@
|
||||
crate_name = "security department supply crate"
|
||||
|
||||
/datum/supply_pack/costumes_toys/kinkmate
|
||||
name = "Kinkmate construction kit"
|
||||
name = "Kinkmate kit"
|
||||
cost = 2000
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/vending_refill/kink,
|
||||
/obj/item/vending_refill/kink,
|
||||
/obj/item/vending_refill/kink,
|
||||
/obj/item/circuitboard/machine/kinkmate)
|
||||
crate_name = "Kinkmate construction kit"
|
||||
/obj/item/vending_refill/kink)
|
||||
crate_name = "Kinkmate kit"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Miscellaneous ///////////////////////////////////
|
||||
@@ -3193,7 +3192,6 @@
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/dildo/custom,
|
||||
/obj/item/dildo/custom,
|
||||
/obj/item/circuitboard/machine/kinkmate,
|
||||
/obj/item/vending_refill/kink,
|
||||
/obj/item/vending_refill/kink,
|
||||
/obj/item/vending_refill/kink,
|
||||
|
||||
@@ -66,18 +66,25 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
actions_types = list(/datum/action/item_action/adjust)
|
||||
dog_fashion = /datum/dog_fashion/head/clown
|
||||
var/list/clownmask_designs = list()
|
||||
|
||||
/obj/item/clothing/mask/gas/clown_hat/Initialize(mapload)
|
||||
.=..()
|
||||
clownmask_designs = list(
|
||||
"True Form" = image(icon = src.icon, icon_state = "clown"),
|
||||
"The Feminist" = image(icon = src.icon, icon_state = "sexyclown"),
|
||||
"The Madman" = image(icon = src.icon, icon_state = "joker"),
|
||||
"The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow")
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user)
|
||||
if(!istype(user) || user.incapacitated())
|
||||
return
|
||||
|
||||
var/list/options = list()
|
||||
options["True Form"] = "clown"
|
||||
options["The Feminist"] = "sexyclown"
|
||||
options["The Madman"] = "joker"
|
||||
options["The Rainbow Color"] ="rainbow"
|
||||
var/static/list/options = list("True Form" = "clown", "The Feminist" = "sexyclown",
|
||||
"The Rainbow Color" = "rainbow", "The Madman" = "joker")
|
||||
|
||||
var/choice = input(user,"To what form do you wish to Morph this mask?","Morph Mask") in options
|
||||
var/choice = show_radial_menu(user,src, clownmask_designs, custom_check = FALSE, radius = 36, require_near = TRUE)
|
||||
|
||||
if(src && choice && !user.incapacitated() && in_range(user,src))
|
||||
icon_state = options[choice]
|
||||
@@ -86,7 +93,7 @@
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
to_chat(user, "<span class='notice'>Your Clown Mask has now morphed into [choice], all praise the Honkmother!</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/mask/gas/sexyclown
|
||||
name = "sexy-clown wig and mask"
|
||||
@@ -106,19 +113,26 @@
|
||||
flags_cover = MASKCOVERSEYES
|
||||
resistance_flags = FLAMMABLE
|
||||
actions_types = list(/datum/action/item_action/adjust)
|
||||
var/list/mimemask_designs = list()
|
||||
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/Initialize(mapload)
|
||||
.=..()
|
||||
mimemask_designs = list(
|
||||
"Blanc" = image(icon = src.icon, icon_state = "mime"),
|
||||
"Excité" = image(icon = src.icon, icon_state = "sexymime"),
|
||||
"Triste" = image(icon = src.icon, icon_state = "sadmime"),
|
||||
"Effrayé" = image(icon = src.icon, icon_state = "scaredmime")
|
||||
)
|
||||
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/ui_action_click(mob/user)
|
||||
if(!istype(user) || user.incapacitated())
|
||||
return
|
||||
|
||||
var/list/options = list()
|
||||
options["Blanc"] = "mime"
|
||||
options["Triste"] = "sadmime"
|
||||
options["Effrayé"] = "scaredmime"
|
||||
options["Excité"] ="sexymime"
|
||||
var/static/list/options = list("Blanc" = "mime", "Triste" = "sadmime", "Effrayé" = "scaredmime", "Excité" ="sexymime")
|
||||
|
||||
var/choice = input(user,"To what form do you wish to Morph this mask?","Morph Mask") in options
|
||||
var/choice = show_radial_menu(user,src, mimemask_designs, custom_check = FALSE, radius = 36, require_near = TRUE)
|
||||
|
||||
if(src && choice && !user.incapacitated() && in_range(user,src))
|
||||
icon_state = options[choice]
|
||||
@@ -127,7 +141,7 @@
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
to_chat(user, "<span class='notice'>Your Mime Mask has now morphed into [choice]!</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/mask/gas/monkeymask
|
||||
name = "monkey mask"
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
icon_state = "captain"
|
||||
item_state = "b_suit"
|
||||
item_color = "captain"
|
||||
armor = list("melee" = 10, "bullet" = 10, "laser" = 10,"energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 10, "acid" = 10)
|
||||
sensor_mode = SENSOR_COORDS
|
||||
random_sensor = FALSE
|
||||
|
||||
@@ -51,6 +52,7 @@
|
||||
icon_state = "qm"
|
||||
item_state = "lb_suit"
|
||||
item_color = "qm"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/skirt
|
||||
name = "quartermaster's jumpskirt"
|
||||
@@ -58,6 +60,7 @@
|
||||
icon_state = "qm_skirt"
|
||||
item_state = "lb_suit"
|
||||
item_color = "qm_skirt"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
can_adjust = FALSE
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
@@ -68,6 +71,7 @@
|
||||
icon_state = "cargotech"
|
||||
item_state = "lb_suit"
|
||||
item_color = "cargo"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
alt_covers_chest = TRUE
|
||||
@@ -78,6 +82,7 @@
|
||||
icon_state = "cargo_skirt"
|
||||
item_state = "lb_suit"
|
||||
item_color = "cargo_skirt"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
can_adjust = FALSE
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
@@ -193,6 +198,7 @@
|
||||
icon_state = "hop"
|
||||
item_state = "b_suit"
|
||||
item_color = "hop"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_personnel/skirt
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "chiefengineer"
|
||||
item_state = "gy_suit"
|
||||
item_color = "chief"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 80, "acid" = 40)
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 10, "acid" = 0)
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/clothing/under/rank/chief_engineer/skirt
|
||||
@@ -24,6 +24,7 @@
|
||||
icon_state = "atmos"
|
||||
item_state = "atmos_suit"
|
||||
item_color = "atmos"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 10, "acid" = 0)
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/clothing/under/rank/atmospheric_technician/skirt
|
||||
@@ -42,7 +43,7 @@
|
||||
icon_state = "engine"
|
||||
item_state = "engi_suit"
|
||||
item_color = "engine"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 60, "acid" = 20)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 10, "acid" = 0)
|
||||
resistance_flags = NONE
|
||||
/obj/item/clothing/under/rank/engineer/hazard
|
||||
name = "engineer's hazard jumpsuit"
|
||||
@@ -68,6 +69,7 @@
|
||||
icon_state = "robotics"
|
||||
item_state = "robotics"
|
||||
item_color = "robotics"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) // Considering science department, it explodes a lot, bomb resist 10%
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist/skirt
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
icon_state = "director"
|
||||
item_state = "lb_suit"
|
||||
item_color = "director"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 35)
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/research_director/skirt
|
||||
@@ -26,7 +26,7 @@
|
||||
icon_state = "rdwhimsy"
|
||||
item_state = "rdwhimsy"
|
||||
item_color = "rdwhimsy"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
can_adjust = TRUE
|
||||
alt_covers_chest = TRUE
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
icon_state = "rdturtle"
|
||||
item_state = "p_suit"
|
||||
item_color = "rdturtle"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
can_adjust = TRUE
|
||||
alt_covers_chest = TRUE
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
item_state = "w_suit"
|
||||
item_color = "chemistrywhite"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/chemist/skirt
|
||||
name = "chemist's jumpskirt"
|
||||
@@ -108,7 +108,7 @@
|
||||
item_state = "w_suit"
|
||||
item_color = "cmo"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/chief_medical_officer/skirt
|
||||
name = "chief medical officer's jumpskirt"
|
||||
@@ -127,7 +127,7 @@
|
||||
item_state = "w_suit"
|
||||
item_color = "geneticswhite"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 5, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 5) // They work in both science and medical so split the values of bomb and acid by 5 and 5?
|
||||
|
||||
/obj/item/clothing/under/rank/geneticist/skirt
|
||||
name = "geneticist's jumpskirt"
|
||||
@@ -146,7 +146,7 @@
|
||||
item_state = "w_suit"
|
||||
item_color = "virologywhite"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/virologist/skirt
|
||||
name = "virologist's jumpskirt"
|
||||
@@ -165,7 +165,7 @@
|
||||
item_state = "w_suit"
|
||||
item_color = "nursesuit"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 10)
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
fitted = NO_FEMALE_UNIFORM
|
||||
can_adjust = FALSE
|
||||
@@ -176,7 +176,7 @@
|
||||
item_state = "w_suit"
|
||||
item_color = "medical"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 10)
|
||||
/obj/item/clothing/under/rank/medical/blue
|
||||
name = "medical scrubs"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
icon_state = "rsecurity"
|
||||
item_state = "r_suit"
|
||||
item_color = "rsecurity"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
strip_delay = 50
|
||||
alt_covers_chest = TRUE
|
||||
sensor_mode = SENSOR_COORDS
|
||||
@@ -41,7 +41,7 @@
|
||||
icon_state = "rwarden"
|
||||
item_state = "r_suit"
|
||||
item_color = "rwarden"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
strip_delay = 50
|
||||
alt_covers_chest = TRUE
|
||||
sensor_mode = 3
|
||||
@@ -72,7 +72,7 @@
|
||||
icon_state = "detective"
|
||||
item_state = "det"
|
||||
item_color = "detective"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
strip_delay = 50
|
||||
alt_covers_chest = TRUE
|
||||
sensor_mode = 3
|
||||
@@ -115,7 +115,7 @@
|
||||
icon_state = "rhos"
|
||||
item_state = "r_suit"
|
||||
item_color = "rhos"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
strip_delay = 60
|
||||
alt_covers_chest = TRUE
|
||||
sensor_mode = 3
|
||||
|
||||
@@ -916,7 +916,7 @@
|
||||
time = 30
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_helmet
|
||||
/datum/crafting_recipe/durathread_helmet
|
||||
name = "Makeshift Durathread Helmet"
|
||||
result = /obj/item/clothing/head/helmet/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 4,
|
||||
@@ -974,4 +974,4 @@
|
||||
reqs = list(/obj/item/stack/sheet/mineral/bamboo = 2,
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut = 1)
|
||||
time = 70
|
||||
category = CAT_MISC
|
||||
category = CAT_MISC
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/donut
|
||||
subcategory = CAT_PASTRY
|
||||
|
||||
/datum/crafting_recipe/food/donut
|
||||
/datum/crafting_recipe/food/donut/semen
|
||||
time = 15
|
||||
name = "Semen donut"
|
||||
reqs = list(
|
||||
|
||||
@@ -178,9 +178,14 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
|
||||
var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Extraction and Rescue Kit", "Crusher Kit", "Mining Conscription Kit")
|
||||
var/items = list( "Survival Capsule and Explorer's Webbing" = image(icon = 'icons/obj/storage.dmi', icon_state = "explorerpack"),
|
||||
"Resonator Kit" = image(icon = 'icons/obj/mining.dmi', icon_state = "resonator"),
|
||||
"Minebot Kit" = image(icon = 'icons/mob/aibots.dmi', icon_state = "mining_drone"),
|
||||
"Extraction and Rescue Kit" = image(icon = 'icons/obj/fulton.dmi', icon_state = "extraction_pack"),
|
||||
"Crusher Kit" = image(icon = 'icons/obj/mining.dmi', icon_state = "mining_hammer"),
|
||||
"Mining Conscription Kit" = image(icon = 'icons/obj/storage.dmi', icon_state = "duffel"))
|
||||
|
||||
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items
|
||||
var/selection = show_radial_menu(redeemer, src, items, require_near = TRUE, tooltips = TRUE)
|
||||
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
|
||||
return
|
||||
var/drop_location = drop_location()
|
||||
@@ -349,9 +354,10 @@
|
||||
new /obj/item/clothing/glasses/meson/prescription(src)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/proc/RedeemSVoucher(obj/item/suit_voucher/voucher, mob/redeemer)
|
||||
var/items = list("Exo-suit", "SEVA suit")
|
||||
var/items = list( "Exo-suit" = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "exo"),
|
||||
"SEVA suit" = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "seva"))
|
||||
|
||||
var/selection = input(redeemer, "Pick your suit.", "Suit Voucher Redemption") as null|anything in items
|
||||
var/selection = show_radial_menu(redeemer, src, items, require_near = TRUE, tooltips = TRUE)
|
||||
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
|
||||
return
|
||||
var/drop_location = drop_location()
|
||||
|
||||
@@ -580,7 +580,8 @@
|
||||
H.name = real_name
|
||||
//h13 assign your characters custom height.
|
||||
if (H.custom_body_size) //Do they have it set?
|
||||
H.size_multiplier = (max(min( round((H.custom_body_size)), MAX_BODYSIZE),MIN_BODYSIZE)* 0.01)
|
||||
//H.size_multiplier = (max(min( round((H.custom_body_size)), MAX_BODYSIZE),MIN_BODYSIZE)* 0.01) //Old method
|
||||
H.resize(H.custom_body_size * 0.01)
|
||||
//h13 give your starting impregchance (30%)
|
||||
if (H.breedable == TRUE)
|
||||
H.impregchance = 30
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
/mob/living/carbon/Life()
|
||||
set invisibility = 0
|
||||
|
||||
//Hyper Change
|
||||
if(size_multiplier != previous_size)
|
||||
sleep(1)
|
||||
resize(size_multiplier)
|
||||
|
||||
if(notransform)
|
||||
return
|
||||
|
||||
|
||||
@@ -69,7 +69,6 @@
|
||||
if(previous_size > 1 && size_multiplier > 1) //macro stays a macro. We just scale the sprite with no offset changes
|
||||
ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly
|
||||
|
||||
previous_size = size_multiplier
|
||||
|
||||
if(changed)
|
||||
animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT)
|
||||
|
||||
@@ -213,6 +213,7 @@
|
||||
/datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/M)
|
||||
M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that.
|
||||
M.heal_bodypart_damage(1,1)
|
||||
M.cure_husk()
|
||||
REMOVE_TRAIT(M, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
..()
|
||||
. = 1
|
||||
@@ -448,6 +449,8 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
|
||||
/datum/reagent/medicine/synthflesh/overdose_start(mob/living/M)
|
||||
metabolization_rate = 15 * REAGENTS_METABOLISM
|
||||
if(M.getFireLoss() <= 20 && M.getBruteLoss() <= 20)
|
||||
M.cure_husk()
|
||||
|
||||
/datum/reagent/medicine/charcoal
|
||||
name = "Charcoal"
|
||||
|
||||
@@ -2225,3 +2225,11 @@
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/ipc
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... metallic.</span>"
|
||||
|
||||
/datum/reagent/mutationtoxin/synthliz
|
||||
name = "Synthlizard Mutation Toxin"
|
||||
id = "synthlizmutationtoxin"
|
||||
description = "A synthetic toxin." //NANOMACHINES SON.
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/synthliz
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... artificial.</span>"
|
||||
@@ -735,3 +735,12 @@
|
||||
required_reagents = list("oil" = 1) //Oil, makes sense for it being their blood, so..
|
||||
required_other = TRUE
|
||||
required_container = /obj/item/slime_extract/green
|
||||
|
||||
/datum/chemical_reaction/slime/slimesynthliz //They keep coming back for more
|
||||
name = "Synthlizard Mutation Toxin"
|
||||
id = "synthlizmuttoxin"
|
||||
results = list("synthlizmutationtoxin" = 1)
|
||||
required_reagents = list("silicon" = 1) //It'd be annoying to make it require synthflesh, so this will work
|
||||
required_other = TRUE
|
||||
required_container = /obj/item/slime_extract/green
|
||||
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
/obj/item/ancientartifact
|
||||
name = "Admin Debug. Parent Artifact"
|
||||
desc = "You shouldn't have this."
|
||||
icon = 'code/modules/research/xenoarch/fossil_and_artifact.dmi'
|
||||
|
||||
/obj/item/ancientartifact/Initialize()
|
||||
..()
|
||||
|
||||
//
|
||||
|
||||
/datum/export/artifacts
|
||||
cost = 2000 //Big cash
|
||||
unit_name = "useless artifact"
|
||||
export_types = list(/obj/item/ancientartifact/useless)
|
||||
|
||||
/datum/export/artifacts
|
||||
cost = 4000 //Big cash
|
||||
unit_name = "fossil artifact"
|
||||
export_types = list(/obj/item/ancientartifact/faunafossil,/obj/item/ancientartifact/florafossil)
|
||||
|
||||
//
|
||||
|
||||
/obj/item/ancientartifact/useless
|
||||
name = "nonfunctional artifact"
|
||||
desc = "This artifact is nonfunctional... perhaps it can be researched or sold."
|
||||
|
||||
/obj/item/ancientartifact/useless/Initialize()
|
||||
icon_state = pick(list("urn","statuette","instrument","unknown1","unknown2","unknown3"))
|
||||
..()
|
||||
|
||||
/obj/item/ancientartifact/useless/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W,/obj/item/xenoarch/help/research))
|
||||
if(!do_after(user,100,target=src))
|
||||
to_chat(user,"You must stand still to analyze.")
|
||||
return
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = 2000))
|
||||
to_chat(user,"You successfully researched the artifact. You have gained 2000 research points.")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/ancientartifact/faunafossil
|
||||
name = "fauna fossil"
|
||||
desc = "This is a fossil of an animal... seems dead."
|
||||
|
||||
/obj/item/ancientartifact/faunafossil/Initialize()
|
||||
icon_state = pick(list("bone1","bone2","bone3","bone4","bone5","bone6"))
|
||||
..()
|
||||
|
||||
/obj/item/ancientartifact/faunafossil/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W,/obj/item/xenoarch/help/research))
|
||||
if(!do_after(user,100,target=src))
|
||||
to_chat(user,"You must stand still to analyze.")
|
||||
return
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = 4000))
|
||||
to_chat(user,"You successfully researched the artifact. You have gained 4000 research points.")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/ancientartifact/florafossil
|
||||
name = "flora fossil"
|
||||
desc = "This is a fossil of a plant... seems dead."
|
||||
|
||||
/obj/item/ancientartifact/florafossil/Initialize()
|
||||
icon_state = pick(list("plant1","plant2","plant3","plant4","plant5","plant6"))
|
||||
..()
|
||||
|
||||
/obj/item/ancientartifact/florafossil/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W,/obj/item/xenoarch/help/research))
|
||||
if(!do_after(user,100,target=src))
|
||||
to_chat(user,"You must stand still to analyze.")
|
||||
return
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = 4000))
|
||||
to_chat(user,"You successfully researched the artifact. You have gained 4000 research points.")
|
||||
qdel(src)
|
||||
if(istype(W,/obj/item/xenoarch/help/plant))
|
||||
if(!do_after(user,50,target=src))
|
||||
to_chat(user,"You need to stand still to extract the seeds.")
|
||||
return
|
||||
var/seed = pick(list( /obj/item/seeds/amauri,
|
||||
/obj/item/seeds/gelthi,
|
||||
/obj/item/seeds/jurlmah,
|
||||
/obj/item/seeds/nofruit,
|
||||
/obj/item/seeds/shand,
|
||||
/obj/item/seeds/surik,
|
||||
/obj/item/seeds/telriis,
|
||||
/obj/item/seeds/thaadra,
|
||||
/obj/item/seeds/vale,
|
||||
/obj/item/seeds/vaporsac,
|
||||
/obj/item/seeds/random
|
||||
))
|
||||
|
||||
new seed(get_turf(user))
|
||||
user.put_in_active_hand(seed)
|
||||
qdel(src)
|
||||
@@ -0,0 +1,63 @@
|
||||
GLOBAL_LIST_INIT(bas_artifact,list( /obj/item/kitchen/fork=1,
|
||||
/obj/item/kitchen/knife=1,
|
||||
/obj/item/toy/gun=1,
|
||||
/obj/item/toy/sword=1,
|
||||
/obj/item/toy/cards/deck=1,
|
||||
/obj/item/shield/riot/roman/fake=1,
|
||||
/obj/item/trash/plate=1,
|
||||
/obj/item/extendohand=1,
|
||||
/obj/item/toy/plush/random=1,
|
||||
/obj/item/ancientartifact/useless=11
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(adv_artifact,list( /obj/item/shield/riot/roman=1,
|
||||
/obj/item/shield/riot/tower=1,
|
||||
/obj/item/toy/figure/miner=1,
|
||||
/obj/item/stack/telecrystal=1,
|
||||
/obj/item/sharpener=1,
|
||||
/obj/item/switchblade=1,
|
||||
/obj/item/laser_pointer=1,
|
||||
/obj/item/instrument/piano_synth=1,
|
||||
/obj/item/megaphone=1,
|
||||
/obj/item/storage/backpack/satchel/bone=1,
|
||||
/obj/item/clothing/accessory/talisman=1,
|
||||
/obj/item/clothing/accessory/skullcodpiece=1,
|
||||
/obj/item/clothing/gloves/bracer=1,
|
||||
/obj/item/clothing/suit/hooded/cloak/goliath=1,
|
||||
/obj/item/kitchen/knife/ritual=1,
|
||||
/obj/item/slime_extract/grey=1,
|
||||
/obj/item/ancientartifact/useless=5,
|
||||
/obj/item/ancientartifact/faunafossil=10,
|
||||
/obj/item/ancientartifact/florafossil=10
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(ult_artifact,list( /obj/item/nuke_core/supermatter_sliver=1,
|
||||
/obj/item/storage/belt/sabre/rapier=1,
|
||||
/obj/item/storage/box/syndie_kit/guardian=1,
|
||||
/obj/item/flashlight/emp=1,
|
||||
/obj/item/jammer=1,
|
||||
/obj/item/encryptionkey/binary=1,
|
||||
/obj/item/gun/medbeam=1,
|
||||
/obj/item/storage/box/syndie_kit/imp_storage=1,
|
||||
/obj/item/pen/edagger=1,
|
||||
/obj/item/dice/d20/fate/one_use=1,
|
||||
/obj/item/instrument/violin/golden=1,
|
||||
/obj/item/healthanalyzer/rad_laser=1,
|
||||
/obj/item/clothing/suit/hooded/cloak/drake=1,
|
||||
/obj/item/crowbar/abductor=1,
|
||||
/obj/item/screwdriver/abductor=1,
|
||||
/obj/item/weldingtool/abductor=1,
|
||||
/obj/item/wirecutters/abductor=1,
|
||||
/obj/item/wrench/abductor=1,
|
||||
/obj/item/multitool/abductor=1,
|
||||
/obj/item/scalpel/alien=1,
|
||||
/obj/item/hemostat/alien=1,
|
||||
/obj/item/retractor/alien=1,
|
||||
/obj/item/circular_saw/alien=1,
|
||||
/obj/item/surgicaldrill/alien=1,
|
||||
/obj/item/cautery/alien=1,
|
||||
/obj/item/compressionkit=1,
|
||||
/obj/item/circuitboard/machine/plantgenes/vault=1,
|
||||
/obj/item/disk/design_disk/golem_shell=1,
|
||||
/obj/item/disk/tech_disk/illegal=1
|
||||
))
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.3 KiB |
@@ -0,0 +1,128 @@
|
||||
/obj/item/strangerock
|
||||
icon = 'code/modules/research/xenoarch/fossil_and_artifact.dmi'
|
||||
name = "strange rock"
|
||||
desc = "This is a strange rock, it appears to have a relic encased."
|
||||
icon_state = "strange"
|
||||
item_state = "strange"
|
||||
|
||||
var/chosenitem = null
|
||||
var/itemsafedepth = null
|
||||
var/itembasedepth = null
|
||||
var/itemactualdepth = null
|
||||
var/dugdepth = null
|
||||
|
||||
var/tryagain = null
|
||||
|
||||
/obj/item/strangerock/Initialize()
|
||||
icon_state = pick("strange","strange0","strange1","strange2","strange3")
|
||||
var/randomnumber = rand(1,100)
|
||||
switch(randomnumber)
|
||||
if(1 to 69)
|
||||
chosenitem = pickweight(GLOB.bas_artifact)
|
||||
itembasedepth = rand(30,40)
|
||||
itemsafedepth = rand(3,6)
|
||||
itemactualdepth = rand(itembasedepth - itemsafedepth,itembasedepth)
|
||||
if(70 to 99)
|
||||
chosenitem = pickweight(GLOB.adv_artifact)
|
||||
itembasedepth = rand(40,60)
|
||||
itemsafedepth = rand(6,12)
|
||||
itemactualdepth = rand(itembasedepth - itemsafedepth,itembasedepth)
|
||||
if(100)
|
||||
chosenitem = pickweight(GLOB.ult_artifact)
|
||||
itembasedepth = rand(70,100)
|
||||
itemsafedepth = rand(12,14)
|
||||
itemactualdepth = rand(itembasedepth - itemsafedepth,itembasedepth)
|
||||
..()
|
||||
|
||||
/obj/item/strangerock/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W,/obj/item/xenoarch/clean/hammer))
|
||||
if(tryagain)
|
||||
to_chat(user,"You are already mining this.")
|
||||
return
|
||||
tryagain = TRUE
|
||||
var/obj/item/xenoarch/clean/hammer/HM = W
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
if(!do_after(user,HM.cleanspeed,target = src))
|
||||
to_chat(user,"You must stand still to clean.")
|
||||
tryagain = FALSE
|
||||
return
|
||||
dugdepth += HM.cleandepth
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
if(dugdepth > itemactualdepth)
|
||||
to_chat(user,"The strange rock crumbles, destroying anything that could have been recovered.")
|
||||
qdel(src)
|
||||
return
|
||||
tryagain = FALSE
|
||||
if(istype(W,/obj/item/xenoarch/clean/brush))
|
||||
if(tryagain)
|
||||
to_chat(user,"You are already mining this.")
|
||||
return
|
||||
tryagain = TRUE
|
||||
var/obj/item/xenoarch/clean/brush/HM = W
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
if(!do_after(user,HM.brushspeed,target = src))
|
||||
to_chat(user,"You must stand still to clean.")
|
||||
tryagain = FALSE
|
||||
return
|
||||
if(dugdepth < itemactualdepth)
|
||||
dugdepth++
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
to_chat(user,"You brush away 1cm of debris.")
|
||||
tryagain = FALSE
|
||||
return
|
||||
if(dugdepth > itemactualdepth)
|
||||
to_chat(user,"You somehow managed to destroy a strange rock with a brush... good job?")
|
||||
qdel(src)
|
||||
return
|
||||
if(dugdepth == itemactualdepth)
|
||||
new chosenitem(get_turf(src))
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
to_chat(user,"You uncover an artifact!")
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(W,/obj/item/xenoarch/help/scanner))
|
||||
var/obj/item/xenoarch/help/scanner/HM = W
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
if(!do_after(user,30,target = src))
|
||||
to_chat(user,"You must stand still to scan.")
|
||||
return
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
to_chat(user,"Base Depth: [itembasedepth] centimeters.")
|
||||
to_chat(user,"Safe Depth: [itemsafedepth] centimeters.")
|
||||
if(istype(W,/obj/item/xenoarch/help/scanneradv))
|
||||
var/obj/item/xenoarch/help/scanneradv/HM = W
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
if(!do_after(user,10,target = src))
|
||||
to_chat(user,"You must stand still to scan.")
|
||||
return
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
to_chat(user,"Base Depth: [itembasedepth] centimeters.")
|
||||
to_chat(user,"Safe Depth: [itemsafedepth] centimeters.")
|
||||
to_chat(user,"Item Depth: [itemactualdepth] centimeters.")
|
||||
if(istype(W,/obj/item/xenoarch/help/measuring))
|
||||
var/obj/item/xenoarch/help/measuring/HM = W
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
if(!do_after(user,10,target = src))
|
||||
to_chat(user,"You must stand still to measure.")
|
||||
return
|
||||
if(!dugdepth)
|
||||
to_chat(user,"This rock has not been touched.")
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
return
|
||||
to_chat(user,"Current depth dug: [dugdepth] centimeters.")
|
||||
playsound(loc, HM.usesound, 50, 1, -1)
|
||||
//
|
||||
|
||||
/turf/closed/mineral/strange
|
||||
mineralType = /obj/item/strangerock
|
||||
spreadChance = 5
|
||||
spread = 1
|
||||
mineralAmt = 1
|
||||
scan_state = "rock_Strange"
|
||||
|
||||
/turf/closed/mineral/random/volcanic/strangerock
|
||||
mineralSpawnChanceList = list(
|
||||
/turf/closed/mineral/uranium/volcanic = 2, /turf/closed/mineral/diamond/volcanic = 1, /turf/closed/mineral/gold/volcanic = 4, /turf/closed/mineral/titanium/volcanic = 4,
|
||||
/turf/closed/mineral/silver/volcanic = 10, /turf/closed/mineral/plasma/volcanic = 15, /turf/closed/mineral/bscrystal/volcanic = 1, /turf/closed/mineral/gibtonite/volcanic = 2,
|
||||
/turf/closed/mineral/iron/volcanic = 40, /turf/closed/mineral/strange = 15)
|
||||
|
||||
@@ -0,0 +1,576 @@
|
||||
/obj/item/xenoarch
|
||||
name = "Parent Xenoarch"
|
||||
desc = "Debug. Parent Clean"
|
||||
icon = 'code/modules/research/xenoarch/tools.dmi'
|
||||
|
||||
/obj/item/xenoarch/Initialize()
|
||||
..()
|
||||
|
||||
/obj/item/xenoarch/clean/hammer
|
||||
name = "Parent hammer"
|
||||
desc = "Debug. Parent Hammer."
|
||||
var/cleandepth = 15
|
||||
var/cleanspeed = 15
|
||||
usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg')
|
||||
|
||||
/obj/item/xenoarch/clean/hammer/cm1
|
||||
name = "mining hammer cm1"
|
||||
desc = "removes 1cm of material."
|
||||
icon_state = "pick1"
|
||||
cleandepth = 1
|
||||
cleanspeed = 5
|
||||
|
||||
/obj/item/xenoarch/clean/hammer/cm2
|
||||
name = "mining hammer cm2"
|
||||
desc = "removes 2cm of material."
|
||||
icon_state = "pick2"
|
||||
cleandepth = 2
|
||||
cleanspeed = 10
|
||||
|
||||
/obj/item/xenoarch/clean/hammer/cm3
|
||||
name = "mining hammer cm3"
|
||||
desc = "removes 3cm of material."
|
||||
icon_state = "pick3"
|
||||
cleandepth = 3
|
||||
cleanspeed = 15
|
||||
|
||||
/obj/item/xenoarch/clean/hammer/cm4
|
||||
name = "mining hammer cm4"
|
||||
desc = "removes 4cm of material."
|
||||
icon_state = "pick4"
|
||||
cleandepth = 4
|
||||
cleanspeed = 20
|
||||
|
||||
/obj/item/xenoarch/clean/hammer/cm5
|
||||
name = "mining hammer cm5"
|
||||
desc = "removes 5cm of material."
|
||||
icon_state = "pick5"
|
||||
cleandepth = 5
|
||||
cleanspeed = 25
|
||||
|
||||
/obj/item/xenoarch/clean/hammer/cm6
|
||||
name = "mining hammer cm6"
|
||||
desc = "removes 6cm of material."
|
||||
icon_state = "pick6"
|
||||
cleandepth = 6
|
||||
cleanspeed = 30
|
||||
|
||||
/obj/item/xenoarch/clean/hammer/cm15
|
||||
name = "mining hammer cm15"
|
||||
desc = "removes 15cm of material."
|
||||
icon_state = "pick_hand"
|
||||
cleandepth = 15
|
||||
cleanspeed = 75
|
||||
|
||||
/obj/item/xenoarch/clean/hammer/advanced
|
||||
name = "advanced hammer"
|
||||
desc = "Removes a custom amount of debris."
|
||||
icon_state = "advpick"
|
||||
cleandepth = 30
|
||||
cleanspeed = 30
|
||||
usesound = 'sound/weapons/drill.ogg'
|
||||
|
||||
/obj/item/xenoarch/clean/hammer/advanced/attack_self(mob/living/carbon/user)
|
||||
var/depthchoice = input(user, "What depth would you like to mine with? (1-30)", "Change Dig Depth") as null|num
|
||||
if(depthchoice && (depthchoice > 0 && depthchoice <= 30))
|
||||
cleandepth = depthchoice
|
||||
cleanspeed = depthchoice
|
||||
desc = "Removes a custom amount of debris. It will dig [cleandepth] centimeters."
|
||||
to_chat(user, "<span class='notice'>You set the dig depth of the hammer to [cleandepth] centimeters.</span>")
|
||||
//
|
||||
|
||||
/obj/item/xenoarch/clean/brush
|
||||
name = "mining brush"
|
||||
desc = "cleans off the remaining debris."
|
||||
icon_state = "pick_brush"
|
||||
var/brushspeed = 100
|
||||
usesound = 'sound/items/towelwipe.ogg'
|
||||
|
||||
/obj/item/xenoarch/clean/brush/basic
|
||||
brushspeed = 50
|
||||
|
||||
/obj/item/xenoarch/clean/brush/adv
|
||||
name = "advanced mining brush"
|
||||
icon_state = "advbrush"
|
||||
brushspeed = 10
|
||||
|
||||
//
|
||||
|
||||
/obj/item/xenoarch/help/scanner
|
||||
name = "mining scanner"
|
||||
desc = "Inaccurately scans a rock's depths."
|
||||
icon_state = "scanner"
|
||||
usesound = 'sound/machines/chime.ogg'
|
||||
|
||||
/obj/item/xenoarch/help/scanneradv
|
||||
name = "advanced mining scanner"
|
||||
desc = "Accurately scans a rock's depths."
|
||||
icon_state = "adv_scanner"
|
||||
usesound = 'sound/machines/chime.ogg'
|
||||
|
||||
/obj/item/xenoarch/help/measuring
|
||||
name = "measuring tape"
|
||||
desc = "Measures how far a rock has been dug into."
|
||||
icon_state = "measuring"
|
||||
usesound = 'sound/items/poster_ripped.ogg'
|
||||
|
||||
/obj/item/xenoarch/help/research
|
||||
name = "research analyzer"
|
||||
desc = "Deconstructs artifacts for research."
|
||||
icon_state = "researchscanner"
|
||||
usesound = 'sound/weapons/resonator_blast.ogg'
|
||||
|
||||
/obj/item/xenoarch/help/plant
|
||||
name = "fossil seed extractor"
|
||||
desc = "Takes flora fossils and extracts the prehistoric seeds."
|
||||
icon_state = "plantscanner"
|
||||
usesound = 'sound/weapons/resonator_blast.ogg'
|
||||
|
||||
// Eventually, make it work on afterattack(atom/target, mob/user , proximity)
|
||||
// I dont want to take more time currently though.
|
||||
// Would have to create a list and then check if the item is in the list.
|
||||
|
||||
/obj/item/xenoarch/help/cargo
|
||||
name = "dimensional cargo scanner"
|
||||
desc = "teleports items to be sold."
|
||||
icon_state = "cargoscanner"
|
||||
usesound = 'sound/weapons/resonator_blast.ogg'
|
||||
|
||||
/obj/item/xenoarch/help/cargo/afterattack(atom/target, mob/user , proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
var/export_categories = EXPORT_CARGO
|
||||
if(!istype(target,/obj/item))
|
||||
return
|
||||
var/datum/export_report/ex = new
|
||||
if(!do_after(user,300,target=target))
|
||||
to_chat(user,"You need to stand still to export items.")
|
||||
return
|
||||
export_item_and_contents(target, export_categories , dry_run = FALSE, external_report = ex)
|
||||
for(var/datum/export/E in ex.total_amount)
|
||||
var/export_text = E.total_printout(ex)
|
||||
if(!export_text)
|
||||
continue
|
||||
SSshuttle.points += ex.total_value[E]
|
||||
to_chat(user,"You sell the [target].")
|
||||
|
||||
|
||||
|
||||
// Storage: Belt and Locker and Bag
|
||||
|
||||
/obj/item/storage/bag/strangerock
|
||||
name = "strange rock bag"
|
||||
desc = "A bag for strange rocks."
|
||||
icon = 'code/modules/research/xenoarch/tools.dmi'
|
||||
icon_state = "rockbag"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
var/mob/listeningTo
|
||||
var/range = null
|
||||
|
||||
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
|
||||
|
||||
/obj/item/storage/bag/strangerock/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_GIGANTIC
|
||||
STR.allow_quick_empty = TRUE
|
||||
STR.max_combined_w_class = 200
|
||||
STR.max_items = 10
|
||||
STR.display_numerical_stacking = FALSE
|
||||
STR.can_hold = typecacheof(list(/obj/item/strangerock))
|
||||
|
||||
|
||||
/obj/item/storage/bag/strangerock/equipped(mob/user)
|
||||
. = ..()
|
||||
if(listeningTo == user)
|
||||
return
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/Pickup_rocks)
|
||||
listeningTo = user
|
||||
|
||||
/obj/item/storage/bag/strangerock/dropped(mob/user)
|
||||
. = ..()
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
listeningTo = null
|
||||
|
||||
/obj/item/storage/bag/strangerock/proc/Pickup_rocks(mob/living/user)
|
||||
var/show_message = FALSE
|
||||
var/turf/tile = user.loc
|
||||
if (!isturf(tile))
|
||||
return
|
||||
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
if(STR)
|
||||
for(var/A in tile)
|
||||
if (!is_type_in_typecache(A, STR.can_hold))
|
||||
continue
|
||||
else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE))
|
||||
show_message = TRUE
|
||||
else
|
||||
if(!spam_protection)
|
||||
to_chat(user, "<span class='warning'>Your [name] is full and can't hold any more!</span>")
|
||||
spam_protection = TRUE
|
||||
continue
|
||||
if(show_message)
|
||||
playsound(user, "rustle", 50, TRUE)
|
||||
user.visible_message("<span class='notice'>[user] scoops up the rocks beneath [user.p_them()].</span>", \
|
||||
"<span class='notice'>You scoop up the rocks beneath you with your [name].</span>")
|
||||
spam_protection = FALSE
|
||||
|
||||
/obj/item/storage/bag/strangerockadv
|
||||
name = "bluespace strange rock bag"
|
||||
desc = "A bag for strange rocks."
|
||||
icon = 'code/modules/research/xenoarch/tools.dmi'
|
||||
icon_state = "rockbagadv"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
var/mob/listeningTo
|
||||
var/range = null
|
||||
|
||||
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
|
||||
|
||||
/obj/item/storage/bag/strangerockadv/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_GIGANTIC
|
||||
STR.allow_quick_empty = TRUE
|
||||
STR.max_combined_w_class = 1000
|
||||
STR.max_items = 50
|
||||
STR.display_numerical_stacking = FALSE
|
||||
STR.can_hold = typecacheof(list(/obj/item/strangerock))
|
||||
|
||||
/obj/item/storage/bag/strangerockadv/equipped(mob/user)
|
||||
. = ..()
|
||||
if(listeningTo == user)
|
||||
return
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/Pickup_rocks)
|
||||
listeningTo = user
|
||||
|
||||
/obj/item/storage/bag/strangerockadv/dropped(mob/user)
|
||||
. = ..()
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
listeningTo = null
|
||||
|
||||
/obj/item/storage/bag/strangerockadv/proc/Pickup_rocks(mob/living/user)
|
||||
var/show_message = FALSE
|
||||
var/turf/tile = user.loc
|
||||
if (!isturf(tile))
|
||||
return
|
||||
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
if(STR)
|
||||
for(var/A in tile)
|
||||
if (!is_type_in_typecache(A, STR.can_hold))
|
||||
continue
|
||||
else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE))
|
||||
show_message = TRUE
|
||||
else
|
||||
if(!spam_protection)
|
||||
to_chat(user, "<span class='warning'>Your [name] is full and can't hold any more!</span>")
|
||||
spam_protection = TRUE
|
||||
continue
|
||||
if(show_message)
|
||||
playsound(user, "rustle", 50, TRUE)
|
||||
user.visible_message("<span class='notice'>[user] scoops up the rocks beneath [user.p_them()].</span>", \
|
||||
"<span class='notice'>You scoop up the rocks beneath you with your [name].</span>")
|
||||
spam_protection = FALSE
|
||||
|
||||
//
|
||||
|
||||
/obj/item/storage/belt/xenoarch
|
||||
name = "xenoarchaeologist belt"
|
||||
desc = "used to store your tools for xenoarchaeology."
|
||||
icon = 'code/modules/research/xenoarch/tools.dmi'
|
||||
icon_state = "miningbelt"
|
||||
|
||||
/obj/item/storage/belt/xenoarch/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
var/static/list/can_hold = typecacheof(list(
|
||||
/obj/item/xenoarch/help,
|
||||
/obj/item/xenoarch/clean,
|
||||
/obj/item/t_scanner/adv_mining_scanner,
|
||||
/obj/item/gps
|
||||
))
|
||||
STR.can_hold = can_hold
|
||||
STR.max_items = 12
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.max_combined_w_class = 200
|
||||
|
||||
/obj/item/storage/belt/xenoarch/full/PopulateContents()
|
||||
new /obj/item/xenoarch/help/measuring(src)
|
||||
new /obj/item/xenoarch/help/scanner(src)
|
||||
new /obj/item/xenoarch/clean/brush/basic(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm15(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm6(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm5(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm4(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm3(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm2(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm1(src)
|
||||
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
|
||||
new /obj/item/gps(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/xenoarch
|
||||
name = "xenoarchaeologist wardrobe"
|
||||
icon_state = "science"
|
||||
icon_door = "science"
|
||||
|
||||
/obj/structure/closet/wardrobe/xenoarch/PopulateContents()
|
||||
new /obj/item/xenoarch/help/measuring(src)
|
||||
new /obj/item/xenoarch/help/scanner(src)
|
||||
new /obj/item/xenoarch/clean/brush/basic(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm15(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm6(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm5(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm4(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm3(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm2(src)
|
||||
new /obj/item/xenoarch/clean/hammer/cm1(src)
|
||||
new /obj/item/pickaxe(src)
|
||||
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
|
||||
new /obj/item/gps(src)
|
||||
new /obj/item/storage/belt/xenoarch(src)
|
||||
new /obj/item/storage/bag/strangerock(src)
|
||||
return
|
||||
|
||||
//
|
||||
|
||||
//Research WEB
|
||||
|
||||
/datum/techweb_node/xenoarchtools
|
||||
id = "xenoarchtools"
|
||||
display_name = "Xenoarchaeology Tools"
|
||||
description = "Xenoarchaeology tools that are used for xenoarchaeology, who knew."
|
||||
prereq_ids = list("base")
|
||||
design_ids = list("hammercm1","hammercm2","hammercm3","hammercm4","hammercm5","hammercm6","hammercm15","hammerbrush","xenoscanner","xenomeasure","xenobelt","xenorockback")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 750)
|
||||
|
||||
/datum/techweb_node/portxenoarch
|
||||
id = "portxenoarch"
|
||||
display_name = "Portable Xenoarchaeology Tools"
|
||||
description = "Tools for extracting seeds, and for getting some research points."
|
||||
prereq_ids = list("xenoarchtools")
|
||||
design_ids = list("xenoresearch","xenoplant")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
|
||||
|
||||
/datum/techweb_node/advportcargo
|
||||
id = "advportcargo"
|
||||
display_name = "Advanced Cargo Technology"
|
||||
description = "A tool for selling stuff not through a shuttle. Careful with its use."
|
||||
prereq_ids = list("portxenoarch")
|
||||
design_ids = list("advcargoscanner")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
|
||||
|
||||
/datum/techweb_node/advxenoarch
|
||||
id = "advxenoarch"
|
||||
display_name = "Advanced Xenoarchaeology Tools"
|
||||
description = "Tools that can make your excavation and recovering of artifacts easier."
|
||||
prereq_ids = list("xenoarchtools")
|
||||
design_ids = list("advxenoscanner","hammercmadv","hammerbrushadv","xenorockbackadv")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000)
|
||||
|
||||
//Research DESIGNS
|
||||
|
||||
/datum/design/hammercm1
|
||||
name = "Hammer cm1"
|
||||
desc = "A hammer that destroys 1 cm of debris."
|
||||
id = "hammercm1"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/clean/hammer/cm1
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/hammercm2
|
||||
name = "Hammer cm2"
|
||||
desc = "A hammer that destroys 2 cm of debris."
|
||||
id = "hammercm2"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/clean/hammer/cm2
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/hammercm3
|
||||
name = "Hammer cm3"
|
||||
desc = "A hammer that destroys 3 cm of debris."
|
||||
id = "hammercm3"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/clean/hammer/cm3
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/hammercm4
|
||||
name = "Hammer cm4"
|
||||
desc = "A hammer that destroys 4 cm of debris."
|
||||
id = "hammercm4"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/clean/hammer/cm4
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/hammercm5
|
||||
name = "Hammer cm5"
|
||||
desc = "A hammer that destroys 5 cm of debris."
|
||||
id = "hammercm5"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/clean/hammer/cm5
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/hammercm6
|
||||
name = "Hammer cm6"
|
||||
desc = "A hammer that destroys 6 cm of debris."
|
||||
id = "hammercm6"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/clean/hammer/cm6
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/hammercm15
|
||||
name = "Hammer cm15"
|
||||
desc = "A hammer that destroys 15 cm of debris."
|
||||
id = "hammercm15"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/clean/hammer/cm15
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/hammercmadv
|
||||
name = "Advanced Hammer"
|
||||
desc = "A hammer that destroys up to 30 cm of debris."
|
||||
id = "hammercmadv"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 1500)
|
||||
build_path = /obj/item/xenoarch/clean/hammer/advanced
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/cleanbrush
|
||||
name = "Brush"
|
||||
desc = "A brush that cleans debris."
|
||||
id = "hammerbrush"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/clean/brush/basic
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/cleanbrushadv
|
||||
name = "Advanced Brush"
|
||||
desc = "A brush that cleans debris."
|
||||
id = "hammerbrushadv"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 1500)
|
||||
build_path = /obj/item/xenoarch/clean/brush/adv
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
// Designs for tools
|
||||
|
||||
/datum/design/xenoscanner
|
||||
name = "Mining Scanner"
|
||||
desc = "A tool that scans depths of rocks."
|
||||
id = "xenoscanner"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/help/scanner
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/advxenoscanner
|
||||
name = "Advanced Mining Scanner"
|
||||
desc = "A tool that scans depths of rocks."
|
||||
id = "advxenoscanner"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 1500)
|
||||
build_path = /obj/item/xenoarch/help/scanneradv
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenomeasure
|
||||
name = "Measuring Tape"
|
||||
desc = "A tool to measure the dug depth of rocks."
|
||||
id = "xenomeasure"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/xenoarch/help/measuring
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenoresearch
|
||||
name = "Research Scanner"
|
||||
desc = "A tool used to get research points from artifacts."
|
||||
id = "xenoresearch"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 1000)
|
||||
build_path = /obj/item/xenoarch/help/research
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenoplant
|
||||
name = "Fossil Seed Extractor"
|
||||
desc = "A tool to extract the seeds from prehistoric fossils."
|
||||
id = "xenoplant"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 1000)
|
||||
build_path = /obj/item/xenoarch/help/plant
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/advcargoscanner
|
||||
name = "Cargo Scanner"
|
||||
desc = "A tool used to sell items, virtually."
|
||||
id = "advcargoscanner"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 1000, MAT_BLUESPACE = 1000)
|
||||
build_path = /obj/item/xenoarch/help/cargo
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
/datum/design/xenobelt
|
||||
name = "Xenoarchaeology Belt"
|
||||
desc = "A belt used to store some xenoarch tools."
|
||||
id = "xenobelt"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 2000)
|
||||
build_path = /obj/item/storage/belt/xenoarch
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenorockback
|
||||
name = "Xenoarchaeology Strange Rock Bag"
|
||||
desc = "A bag used to store 10 strange rocks."
|
||||
id = "xenorockback"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 2000)
|
||||
build_path = /obj/item/storage/bag/strangerock
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenorockbackadv
|
||||
name = "Xenoarchaeology Bluespace Strange Rock Bag"
|
||||
desc = "A bluespace bag used to store 50 strange rocks."
|
||||
id = "xenorockbackadv"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_BLUESPACE = 1000)
|
||||
build_path = /obj/item/storage/bag/strangerockadv
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/obj/item/paper/fluff/stations/lavaland/xenoarch
|
||||
name = "xenoarchaeology notice"
|
||||
info = "<b><i>XENOARCHAEOLOGY GUIDE</i></b><br><br>So you want to figure out xenoarchaeology? Well, it's easy to learn and can be 'fun' to pick up!<br><br>First, make sure you mine some rocks and find those weird, strange rocks that are occasionally found.<br>Then, bring them back safely to the facility, or somewhere... ANYWHERE really. Just be cautious of onlookers!<br>Next, take your depth scanner and scan the sucker.<br><br>It'll have a base depth and a safe depth. These depths are important:<br><br>1) Base depth is the deepest the relic can be within the rock.<br>2) Safe depth is the depth from the base depth that is the earliest it will appear FROM the base depth.<br><br>Essentially, take the base depth and subtract the safe depth from it. Mine to this point and start to brush brush brush!<br>For example: You get a rock that has a base depth of 30 and a safe depth of 10. How deep should you mine?<br><br>You should mine to 20, and then start brushing away. Eventually you'll get the relic!<br><br>Hopefully this helps! If not well... I don't know what to tell you.<br><br>Peace!<br><i><b>Kobe Ivanov</b></i>,<br>P-A Xenoarchaeologist"
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 8.7 KiB |
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/amauri
|
||||
name = "pack of amauri seeds"
|
||||
desc = "These seeds grow into amauri plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "amauri"
|
||||
species = "amauri"
|
||||
plantname = "Amauri Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/amauri
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "amauri-stage"
|
||||
growthstages = 3
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("shadowmutationtoxin" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/amauri
|
||||
seed = /obj/item/seeds/amauri
|
||||
name = "amauri"
|
||||
desc = "It's a little piece of amauri."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "amauri"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("shadowmutationtoxin" = 0.1)
|
||||
tastes = list("shadow" = 1)
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/gelthi
|
||||
name = "pack of gelthi seeds"
|
||||
desc = "These seeds grow into gelthi plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "gelthi"
|
||||
species = "gelthi"
|
||||
plantname = "Gelthi Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/gelthi
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "gelthi-stage"
|
||||
growthstages = 3
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("gold" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/gelthi
|
||||
seed = /obj/item/seeds/gelthi
|
||||
name = "gelthi"
|
||||
desc = "It's a little piece of gelthi."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "gelthi"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("gold" = 0.1)
|
||||
tastes = list("gold" = 1)
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/jurlmah
|
||||
name = "pack of jurlmah seeds"
|
||||
desc = "These seeds grow into jurlmah plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "jurlmah"
|
||||
species = "jurlmah"
|
||||
plantname = "Jurlmah Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/jurlmah
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "jurlmah-stage"
|
||||
growthstages = 5
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("cryoxadone" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/jurlmah
|
||||
seed = /obj/item/seeds/jurlmah
|
||||
name = "jurlmah"
|
||||
desc = "It's a little piece of jurlmah."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "jurlmah"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("cryoxadone" = 0.1)
|
||||
tastes = list("cold" = 1)
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/nofruit
|
||||
name = "pack of nofruit seeds"
|
||||
desc = "These seeds grow into nofruit plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "nofruit"
|
||||
species = "nofruit"
|
||||
plantname = "Nofruit Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/nofruit
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "nofruit-stage"
|
||||
growthstages = 4
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("nothing" = 0.1, "laughter" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/nofruit
|
||||
seed = /obj/item/seeds/nofruit
|
||||
name = "nofruit"
|
||||
desc = "It's a little piece of nofruit."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "nofruit"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("nothing" = 0.1, "laughter" = 0.1)
|
||||
tastes = list("entertainment" = 1)
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/shand
|
||||
name = "pack of shand seeds"
|
||||
desc = "These seeds grow into shand plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "shand"
|
||||
species = "shand"
|
||||
plantname = "Shand Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/shand
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "shand-stage"
|
||||
growthstages = 3
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("pax" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/shand
|
||||
seed = /obj/item/seeds/shand
|
||||
name = "shand"
|
||||
desc = "It's a little piece of shand."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "shand"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("pax" = 0.1)
|
||||
tastes = list("peace" = 1)
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/surik
|
||||
name = "pack of surik seeds"
|
||||
desc = "These seeds grow into surik plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "surik"
|
||||
species = "surik"
|
||||
plantname = "Surik Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/surik
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "surik-stage"
|
||||
growthstages = 4
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("frostoil" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/surik
|
||||
seed = /obj/item/seeds/surik
|
||||
name = "surik"
|
||||
desc = "It's a little piece of surik."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "surik"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("frostoil" = 0.1)
|
||||
tastes = list("snow" = 1)
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/telriis
|
||||
name = "pack of telriis seeds"
|
||||
desc = "These seeds grow into telriis plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "telriis"
|
||||
species = "telriis"
|
||||
plantname = "Telriis Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/telriis
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "telriis-stage"
|
||||
growthstages = 4
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("podmutationtoxin" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/telriis
|
||||
seed = /obj/item/seeds/telriis
|
||||
name = "telriis"
|
||||
desc = "It's a little piece of telriis."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "telriis"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("podmutationtoxin" = 0.1)
|
||||
tastes = list("plant" = 1)
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/thaadra
|
||||
name = "pack of thaadra seeds"
|
||||
desc = "These seeds grow into thaadra plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "thaadra"
|
||||
species = "thaadra"
|
||||
plantname = "Thaadra Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/thaadra
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "thaadra-stage"
|
||||
growthstages = 4
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("silver" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/thaadra
|
||||
seed = /obj/item/seeds/thaadra
|
||||
name = "thaadra"
|
||||
desc = "It's a little piece of thaadra."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "thaadra"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("silver" = 0.1)
|
||||
tastes = list("silver" = 1)
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/vale
|
||||
name = "pack of vale seeds"
|
||||
desc = "These seeds grow into vale plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "vale"
|
||||
species = "vale"
|
||||
plantname = "Vale Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/vale
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "vale-stage"
|
||||
growthstages = 4
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("slime_toxin" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/vale
|
||||
seed = /obj/item/seeds/vale
|
||||
name = "vale"
|
||||
desc = "It's a little piece of vale."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "vale"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("slime_toxin" = 0.1)
|
||||
tastes = list("slime" = 1)
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/seeds/vaporsac
|
||||
name = "pack of vaporsac seeds"
|
||||
desc = "These seeds grow into vaporsac plants."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
|
||||
icon_state = "vaporsac"
|
||||
species = "vaporsac"
|
||||
plantname = "Vaporsac Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/vaporsac
|
||||
lifespan = 55
|
||||
endurance = 35
|
||||
yield = 5
|
||||
growing_icon = 'code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
|
||||
icon_grow = "vaporsac-stage"
|
||||
growthstages = 3
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("nitrous_oxide" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/vaporsac
|
||||
seed = /obj/item/seeds/vaporsac
|
||||
name = "vaporsac"
|
||||
desc = "It's a little piece of vaporsac."
|
||||
icon = 'code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
|
||||
icon_state = "vaporsac"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100
|
||||
foodtype = FRUIT
|
||||
juice_results = list("nitrous_oxide" = 0.1)
|
||||
tastes = list("sleep" = 1)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.5 KiB |
@@ -27,6 +27,8 @@
|
||||
/datum/surgery_step/reconstruct/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("[user] fixes some of [target]'s wounds.", "<span class='notice'>You succeed in fixing some of [target]'s wounds.</span>")
|
||||
target.heal_bodypart_damage(10,10)
|
||||
if(target.getFireLoss() <= 20 && target.getBruteLoss() <= 20)
|
||||
target.cure_husk()
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/reconstruct/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
|
||||
@@ -377,7 +377,7 @@
|
||||
Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]]
|
||||
if(Smark)
|
||||
body_markings_icon = Smark.icon
|
||||
if(H.dna.features.["mam_body_markings"] != "None")
|
||||
if(H.dna.features["mam_body_markings"] != "None")
|
||||
body_markings = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"])
|
||||
auxmarking = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"])
|
||||
else
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
#define STANDARD_ORGAN_THRESHOLD 100
|
||||
#define STANDARD_ORGAN_HEALING 0.001
|
||||
|
||||
/obj/item/organ
|
||||
name = "organ"
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
|
||||
Reference in New Issue
Block a user