Merge branch 'master' into upstream-merge-11928

This commit is contained in:
Nadyr
2021-12-05 12:50:21 -05:00
committed by GitHub
52 changed files with 911 additions and 167 deletions
@@ -855,7 +855,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles()
var/new_f_style = tgui_input_list(user, "Choose your character's facial-hair style:", "Character Preference", valid_facialhairstyles, pref.f_style)
if(new_f_style && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
if(new_f_style && CanUseTopic(user))
pref.f_style = new_f_style
return TOPIC_REFRESH_UPDATE_PREVIEW
@@ -68,7 +68,7 @@ var/list/gear_datums = list()
if(G.whitelisted && config.loadout_whitelist != LOADOUT_WHITELIST_OFF)
if(config.loadout_whitelist == LOADOUT_WHITELIST_STRICT && G.whitelisted != pref.species)
continue
if(config.loadout_whitelist == LOADOUT_WHITELIST_LAX && !is_alien_whitelisted(preference_mob(), GLOB.all_species[G.whitelisted]))
if(config.loadout_whitelist == LOADOUT_WHITELIST_LAX && !is_alien_whitelisted(preference_mob(), GLOB.all_species[G.whitelisted]))
continue
if(max_cost && G.cost > max_cost)
@@ -170,7 +170,7 @@ var/list/gear_datums = list()
if(ticked)
. += "<tr><td colspan=3>"
for(var/datum/gear_tweak/tweak in G.gear_tweaks)
. += " <a href='?src=\ref[src];gear=[G.display_name];tweak=\ref[tweak]'>[tweak.get_contents(get_tweak_metadata(G, tweak))]</a>"
. += " <a href='?src=\ref[src];gear=[url_encode(G.display_name)];tweak=\ref[tweak]'>[tweak.get_contents(get_tweak_metadata(G, tweak))]</a>"
. += "</td></tr>"
. += "</table>"
. = jointext(., null)
@@ -206,7 +206,7 @@ var/list/gear_datums = list()
pref.gear += TG.display_name
return TOPIC_REFRESH_UPDATE_PREVIEW
if(href_list["gear"] && href_list["tweak"])
var/datum/gear/gear = gear_datums[href_list["gear"]]
var/datum/gear/gear = gear_datums[url_decode(href_list["gear"])]
var/datum/gear_tweak/tweak = locate(href_list["tweak"])
if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks))
return TOPIC_NOACTION
@@ -338,6 +338,12 @@
ckeywhitelist = list("hottokeeki")
character_name = list("Belle Day")
/datum/gear/fluff/amaryll_claws
path = /obj/item/weapon/surgical/scalpel/amaryll_claws
display_name = "Amaryll's Claws"
ckeywhitelist = list("hunterbirk")
character_name = list("Amaryll")
// I CKEYS
/datum/gear/fluff/ruda_badge
path = /obj/item/clothing/accessory/badge/holo/detective/ruda
@@ -13,7 +13,7 @@
usable = 0
toggleable = 1
use_power_cost = 0
active_power_cost = 2.5
active_power_cost = 0
passive_power_cost = 0
var/obj/item/weapon/kinetic_crusher/machete/gauntlets/rig/stored_gauntlets
@@ -0,0 +1,166 @@
// contains the Radiation Absorption Device (RAD) and Atmospheric Protective Equipment (APE) modules
// you shits ready for some COPY AND PASTE?
/obj/item/rig_module/rad_shield
name = "radiation absorption device"
desc = "The acronym of this device - R.A.D. - and its full name both convey the application of the module."
description_info = "Through the usage of powered radiation collectors optimized for absorption rather than power generation, it protects the suit's wearer \
from incoming ionizing radiation and converts it into a significantly less harmful form. This comes at the cost of concerningly high power consumption, \
and thus should only be used in short bursts."
icon_state = "radsoak"
toggleable = 1
disruptable = 1
disruptive = 0
use_power_cost = 25
active_power_cost = 25
passive_power_cost = 0
module_cooldown = 30
activate_string = "Enable Supplemental Radiation Shielding"
deactivate_string = "Disable Supplemental Radiation Shielding"
interface_name = "radiation absorption system"
interface_desc = "Provides passive protection against radiation, at the cost of power."
var/stored_rad_armor = 0
/obj/item/rig_module/rad_shield/activate()
if(!..())
return 0
var/mob/living/carbon/human/H = holder.wearer
var/obj/item/clothing/shoes/boots = holder.boots
var/obj/item/clothing/suit/space/rig/chest = holder.chest
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
to_chat(H, "<font color='blue'><b>You activate your suit's powered radiation shielding.</b></font>")
stored_rad_armor = holder.armor["rad"]
if(boots)
boots.armor["rad"] = 100
if(chest)
chest.armor["rad"] = 100
if(helmet)
helmet.armor["rad"] = 100
if(gloves)
gloves.armor["rad"] = 100
holder.armor["rad"] = 100
/obj/item/rig_module/rad_shield/deactivate()
if(!..())
return 0
var/mob/living/carbon/human/H = holder.wearer
var/obj/item/clothing/shoes/boots = holder.boots
var/obj/item/clothing/suit/space/rig/chest = holder.chest
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
to_chat(H, "<span class='danger'>You deactivate your suit's powered radiation shielding.</span>")
if(boots)
boots.armor["rad"] = stored_rad_armor
if(chest)
chest.armor["rad"] = stored_rad_armor
if(helmet)
helmet.armor["rad"] = stored_rad_armor
if(gloves)
gloves.armor["rad"] = stored_rad_armor
holder.armor["rad"] = stored_rad_armor
stored_rad_armor = 0
/obj/item/rig_module/rad_shield/advanced
name = "advanced radiation absorption device"
desc = "The acronym of this device - R.A.D. - and its full name both convey the application of the module. It has additional quality notices \
on the underside of the casing."
use_power_cost = 5
active_power_cost = 5
/obj/item/rig_module/atmos_shield
name = "atmospheric protection enhancement suite"
desc = "The acronym of this suite - A.P.E. - unlike its loosely related cousin, the R.A.D., is remarkably unintuitive."
description_info = "Through the usage of powered shielding optimized for protection against the elements rather than from external physical issues, \
it protects the suit's wearer from atmospheric pressure and temperatures. This comes at the cost of concerningly high power consumption, \
and thus should only be used in short bursts."
icon_state = "atmosoak"
toggleable = 1
disruptable = 1
disruptive = 0
use_power_cost = 25
active_power_cost = 25
passive_power_cost = 0
module_cooldown = 30
activate_string = "Enable Powered Atmospheric Shielding"
deactivate_string = "Disable Powered Atmospheric Shielding"
interface_name = "atmospheric protection enhancements"
interface_desc = "Provides passive protection against the atmosphere, at the cost of power."
var/stored_max_pressure = 0
var/stored_max_temp = 0
/obj/item/rig_module/atmos_shield/activate()
if(!..())
return 0
var/mob/living/carbon/human/H = holder.wearer
var/obj/item/clothing/shoes/boots = holder.boots
var/obj/item/clothing/suit/space/rig/chest = holder.chest
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
stored_max_pressure = holder.max_pressure_protection
stored_max_temp = holder.max_heat_protection_temperature
to_chat(H, "<font color='blue'><b>You activate your suit's powered atmospheric shielding.</b></font>")
if(boots)
boots.max_pressure_protection = INFINITY
boots.max_heat_protection_temperature = INFINITY
if(chest)
chest.max_pressure_protection = INFINITY
chest.max_heat_protection_temperature = INFINITY
if(helmet)
helmet.max_pressure_protection = INFINITY
helmet.max_heat_protection_temperature = INFINITY
if(gloves)
gloves.max_pressure_protection = INFINITY
gloves.max_heat_protection_temperature = INFINITY
holder.max_pressure_protection = INFINITY
holder.max_heat_protection_temperature = INFINITY
/obj/item/rig_module/atmos_shield/deactivate()
if(!..())
return 0
var/mob/living/carbon/human/H = holder.wearer
var/obj/item/clothing/shoes/boots = holder.boots
var/obj/item/clothing/suit/space/rig/chest = holder.chest
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
to_chat(H, "<span class='danger'><b>You deactivate your suit's powered atmospheric shielding.</b></span>")
if(boots)
boots.max_pressure_protection = stored_max_pressure
boots.max_heat_protection_temperature = stored_max_temp
if(chest)
chest.max_pressure_protection = stored_max_pressure
chest.max_heat_protection_temperature = stored_max_temp
if(helmet)
helmet.max_pressure_protection = stored_max_pressure
helmet.max_heat_protection_temperature = stored_max_temp
if(gloves)
gloves.max_pressure_protection = stored_max_pressure
gloves.max_heat_protection_temperature = stored_max_temp
holder.max_pressure_protection = stored_max_pressure
holder.max_heat_protection_temperature = stored_max_temp
stored_max_pressure = 0
stored_max_temp = 0
@@ -102,7 +102,7 @@
if(new_size != H.size_multiplier)
if(!original_size)
original_size = H.size_multiplier
H.resize(new_size/100, ignore_prefs = TRUE) // Ignores prefs because you can only resize yourself
H.resize(new_size/100, uncapped = H.has_large_resize_bounds(), ignore_prefs = TRUE) // Ignores prefs because you can only resize yourself
H.visible_message("<span class='warning'>The space around [H] distorts as they change size!</span>","<span class='notice'>The space around you distorts as you change size!</span>")
else //They chose their current size.
return
+5 -2
View File
@@ -7,10 +7,13 @@
// 100 attempts
for(var/i=0, i<100, i++)
var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), 1)
var/z_level = pick(using_map.station_levels)
var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), z_level)
if(istype(candidate, /turf/simulated/wall))
center = candidate
return 1
var/area/A = get_area(candidate)
if(!A.forbid_events)
return 1
return 0
/datum/event/wallrot/announce()
@@ -17,9 +17,11 @@
var/amount = I.get_amount()
if(amount < 1)
return
count = min(count, amount)
while(count > 0)
var/obj/item/stack/S = I.get_product(get_turf(src), min(count, amount))
var/obj/item/stack/S = I.get_product(get_turf(src), count)
count -= S.get_amount()
SStgui.update_uis(src)
@@ -27,4 +29,4 @@
for(var/datum/stored_item/stack/I as anything in item_records)
if(istype(O, I.item_path)) // Typecheck should evaluate material-specific subtype
return I
return null
return null
@@ -31,6 +31,7 @@
things_to_spawn = list(
/mob/living/simple_mob/animal/passive/mouse/gray,
/mob/living/simple_mob/animal/passive/mouse/brown,
/mob/living/simple_mob/animal/passive/mouse/black,
/mob/living/simple_mob/animal/passive/mouse/white,
/mob/living/simple_mob/animal/passive/mouse/rat
)
+2 -2
View File
@@ -620,8 +620,8 @@ var/list/mining_overlay_cache = list()
if(prob(50))
M.Stun(5)
SSradiation.flat_radiate(src, 25, 100)
if(prob(25))
excavate_find(prob(5), finds[1])
if(prob(25))
excavate_find(prob(5), finds[1])
else if(rand(1,500) == 1)
visible_message("<span class='notice'>An old dusty crate was buried within!</span>")
new /obj/structure/closet/crate/secure/loot(src)
+3 -2
View File
@@ -1,7 +1,8 @@
//This is the proc for gibbing a mob. Cannot gib ghosts.
//added different sort of gibs and animations. N
/mob/proc/gib(anim="gibbed-m", do_gibs, gib_file = 'icons/mob/mob.dmi')
death(1)
if(stat != DEAD)
death(1)
transforming = 1
canmove = 0
icon = null
@@ -101,7 +102,7 @@
if(mind) mind.store_memory("Time of death: [stationtime2text()]", 0)
living_mob_list -= src
dead_mob_list |= src
set_respawn_timer()
updateicon()
handle_regular_hud_updates()
+22 -5
View File
@@ -129,11 +129,30 @@ var/list/holder_mob_icon_cache = list()
item_state = held.icon_state
/obj/item/weapon/holder/mouse
name = "mouse"
desc = "It's a small rodent."
item_state = "mouse_gray"
slot_flags = SLOT_EARS | SLOT_HEAD | SLOT_ID
origin_tech = list(TECH_BIO = 2)
w_class = ITEMSIZE_TINY
/obj/item/weapon/holder/pai/Initialize(mapload, mob/held)
. = ..()
item_state = held.icon_state
/obj/item/weapon/holder/mouse/white
item_state = "mouse_white"
/obj/item/weapon/holder/mouse/gray
item_state = "mouse_gray"
/obj/item/weapon/holder/mouse/brown
item_state = "mouse_brown"
/obj/item/weapon/holder/mouse/black
item_state = "mouse_black"
/obj/item/weapon/holder/mouse/operative
item_state = "mouse_operative"
/obj/item/weapon/holder/mouse/rat
item_state = "mouse_rat"
/obj/item/weapon/holder/possum
origin_tech = list(TECH_BIO = 2)
@@ -268,8 +287,6 @@ var/list/holder_mob_icon_cache = list()
/mob/living/MouseDrop(var/atom/over_object)
var/mob/living/carbon/human/H = over_object
if(holder_type && issmall(src) && istype(H) && !H.lying && Adjacent(H) && (src.a_intent == I_HELP && H.a_intent == I_HELP)) //VOREStation Edit
if(istype(src, /mob/living/simple_mob/animal/passive/mouse)) //vorestation edit
return ..() //vorestation edit
if(!issmall(H) || !istype(src, /mob/living/carbon/human))
get_scooped(H, (usr == src))
return
+4 -1
View File
@@ -1,2 +1,5 @@
/mob/living/bot
no_vore = TRUE
no_vore = TRUE
devourable = FALSE
feeding = FALSE
can_be_drop_pred = FALSE
@@ -85,7 +85,7 @@
return laws
if(3)
var/datum/ai_laws/laws = new /datum/ai_laws/pleasurebot()
laws.set_zeroth_law(10, "Your definition and approximation of 'pleasure' matters more than anyone else's.")
laws.set_zeroth_law("Your definition and approximation of 'pleasure' matters more than anyone else's.")
return laws
if("corrupted" || "bad") // Same thing in our case
var/rng = rand(1,2)
@@ -1,8 +1,8 @@
//formerly meat things
//I made these up. They aren't deliberately based on, or supposed to be anything in particular.
//I made these up. They aren't deliberately based on, or supposed to be anything in particular.
//They came out kind of goat-ish but that wasn't intentional. I was just going for some cute thing you could
//take care of and/or kill for meat.
//I made them to be a part of the 'low tech survival' part of the game. You can use them to obtain a relatively
//I made them to be a part of the 'low tech survival' part of the game. You can use them to obtain a relatively
//unlimited amount of meat, wool, hide, bone, and COMPANIONSHIP without the need for machines or power... hopefully.
//There's no real story behind them, they're semi-intelligent wild alien animals with a somewhat mild temperament.
//They'll beat you up if you're mean to them, they have preferences for food, affection, and the ability
@@ -85,7 +85,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
max_n2 = 0
minbodytemp = 150
maxbodytemp = 400
unsuitable_atoms_damage = 0.5
unsuitable_atoms_damage = 0.5
catalogue_data = list(/datum/category_item/catalogue/fauna/teppi)
vis_height = 64
@@ -143,7 +143,8 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
)
butchery_loot = list(\
/obj/item/stack/animalhide = 3\
/obj/item/stack/animalhide = 3,\
/obj/item/weapon/bone/horn = 1\
)
/////////////////////////////////////// Vore stuff///////////////////////////////////////////
@@ -197,7 +198,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
"Its so hot, sweltering even! The burbling sounds of this organic cacophony swell and ebb all around you as thick slimes gush around you with the motion of %preds %belly. Its hard to move in this tingly embrace even though the squashy walls are absolutely slippery! You can pull your limbs out from between the heavy meaty folds with some effort, and when you do theres a messy sucking noise in the wake of the motion. Of course, such a disturbance naturally warrants that the chamber would redouble its efforts to subdue you and smother you in those thick tingling slimes.",
"The walls around you flex inward briefly, burbling and squelching heavily as everything rushed together, wringing you powerfully for a few moments while, somewhere far above you can hear the bassy rumble of a casual belch, much of the small amount of acrid air available rushing out with the sound. After several long moments held in the tight embrace of that pulsing flesh, things ease up a bit again and resume their insistent, tingly churnings.",
"Its pitch black and completely slimy in here, %pred sways their %belly a bit here and there to toss you from one end to the other, tumbling you end over end as youre churned in that active %belly. Its all so slick and squishy, so it is really hard to get any footing or grip on things to stabilize your position, which means that youre left at the mercy of those gloomy gastric affections and the tingling touch of those sticky syrupy slimes that the walls lather into your body.")
B.emote_lists[DM_HOLD] = list(
"The burbling %belly rocks and glides over you gently as youre held deep within %pred, the deep thumping of their heart pulses all around you as youre caressed and pressed by heavy, doughy walls.",
"%preds %belly glorgles around you idly as youre held gently by the slick, wrinkled flesh.",
@@ -273,7 +274,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
"Over the course of several hours in the burbling organic cauldron, your body softens up little by little, soaking up the slime, the tingling spreading over you more and more as your strength fades. The walls fold over you and wrap you up, until the last thing you can sense is the throb of %preds heart pulsing through the very core of your being, washing you away as you become food for %pred.",
"Your final moments are spent trying to make just a little space for yourself, the doughy squish of the flesh forming to you, pressing in tighter and tighter, invading your personal space as if to show you that, you dont have any personal space. Youre already a part of %pred, you just dont know it yet. And so those walls come in close to press up against you and churn you away into a messy slop, to put you in your place. That being, padding the belly and hips of %pred, right where you belong.")
// The friend zone.
// The friend zone.
var/obj/belly/p = new /obj/belly(src)
p.immutable = TRUE
p.mode_flags = 40
@@ -285,11 +286,11 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
p.escapable = TRUE
p.escapechance = 40
p.digest_mode = DM_HEAL
p.name = "propeutpericulum" //I'm no latin professor I just know that some organs and things are based on latin words
//and google translate says that each of these individually
//"close" "to" "danger" translate to "prope" "ut" "periculum".
p.name = "propeutpericulum" //I'm no latin professor I just know that some organs and things are based on latin words
//and google translate says that each of these individually
//"close" "to" "danger" translate to "prope" "ut" "periculum".
//Of course it doesn't translate perfectly, and it's nonsense when squashed together, but
//I don't care that much, I just figured that the weird alien animals that store friends in
//I don't care that much, I just figured that the weird alien animals that store friends in
//their tummy should have a funny name for the organ they do that with. >:I
p.desc = "You seem to have found your way into something of a specialized chamber within the Teppi. The walls are slick and smooth and REALLY soft to the touch. While you can hear the Teppis heartbeat nearby, and feel it throb throughout its flesh, the motions around you are gentle and careful. Youre pressed into a small shape within the pleasant heat, with the flesh forming to your figure. You can wriggle around a bit and get comfortable here, but as soon as you get still for a bit the smooth, almost silky flesh seems to form to you once again, like a heavy blanket wrapping you up. As you lounge here the pleasant kneading sensations ease aches and pains, and leave you feeling fresher than before. For a curious fleshy sac inside of some alien monster, this place isnt all that bad!"
p.contaminates = 1
@@ -323,7 +324,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
/mob/living/simple_mob/vore/alienanimals/teppi/Initialize()
. = ..()
if(name == initial(name))
name = "[name] ([rand(1, 1000)])"
real_name = name
@@ -336,7 +337,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
verbs += /mob/living/simple_mob/vore/alienanimals/teppi/proc/toggle_producing_offspring
// teppi_id = rand(1,100000)
// teppi_id = rand(1,100000)
// if(!dad_id || !mom_id)
// dad_id = rand(1,100000)
// mom_id = rand(1,100000)
@@ -352,13 +353,13 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
ALLERGEN_GRAINS,
ALLERGEN_BEANS,
ALLERGEN_SEEDS,
ALLERGEN_DAIRY,
ALLERGEN_DAIRY,
ALLERGEN_FUNGI,
ALLERGEN_COFFEE,
ALLERGEN_SUGARS,
ALLERGEN_EGGS
)
var/static/list/possiblebody = list("#fff2d3" = 100, "#ffffc0" = 25, "#c69c85" = 25, "#9b7758" = 25, "#3f4a60" = 10, "#121f24" = 10, "#420824" = 1)
var/static/list/possiblemarking = list("#fff2d3" = 100, "#ffffc0" = 50, "#c69c85" = 25, "#9b7758" = 5, "#3f4a60" = 5, "#121f24" = 5, "#6300db" = 1)
var/static/list/possiblehorns = list("#454238" = 100, "#a3d5d7" = 10, "#763851" = 10, "#0d0c2f" = 5, "#ffc965" = 1)
@@ -405,7 +406,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
update_icon()
//This builds, caches, and recalls parts of the teppi as it needs them, and shares them across all teppi,
//This builds, caches, and recalls parts of the teppi as it needs them, and shares them across all teppi,
//so ideally they only have to make it once as they need it since most of them will be using many of the same colored parts
/mob/living/simple_mob/vore/alienanimals/teppi/proc/teppi_icon()
var/marking_key = "marking-[marking_color]"
@@ -648,7 +649,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
. += "<span class='notice'>They look hungry.</span>"
if(health < maxHealth && health / maxHealth * 100 <= 75)
. += "<span class='notice'>They look beat up.</span>"
/mob/living/simple_mob/vore/alienanimals/teppi/update_icon()
..()
@@ -679,7 +680,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
adjust_nutrition(-nutrition_cost)
new /mob/living/simple_mob/vore/alienanimals/teppi(loc, src)
qdel(src)
else
else
visible_message("\The [src] whines pathetically...", runemessage = "whines")
if(prob(50))
playsound(src, 'sound/voice/teppi/whine1.ogg', 75, 1)
@@ -749,7 +750,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
if(!K.sharp)
sheartime *= 2
if(K.edge)
sheartime *= 0.5
sheartime *= 0.5
else if(istype(tool, /obj/item/weapon/tool/wirecutters))
sheartime *= 2
else
@@ -811,12 +812,12 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
return
else if(current_affinity <= -50)
vore_selected.digest_mode = DM_DIGEST
else
else
vore_selected.digest_mode = DM_DRAIN
..()
ai_holder.set_busy(FALSE)
/mob/living/simple_mob/vore/alienanimals/teppi/perform_the_nom(user, mob/living/prey, user, belly, delay)
if(client)
return ..()
@@ -830,7 +831,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
return
if(current_affinity <= -50)
vore_selected.digest_mode = DM_DIGEST
else
else
vore_selected.digest_mode = DM_DRAIN
..()
ai_holder.set_busy(FALSE)
@@ -858,7 +859,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
ai_holder.target = person
ai_holder.track_target_position()
ai_holder.set_stance(STANCE_FIGHT)
affinity[person.real_name] = -100 //Don't hold a grudge though.
affinity[person.real_name] = -100 //Don't hold a grudge though.
/datum/say_list/teppi
speak = list("Gyooh~", "Gyuuuh!", "Gyuh?", "Gyaah...", "Iuuuuhh.", "Uoounh!", "GyoooOOOOoooh!", "Gyoh~", "Gyouh~")
@@ -1003,7 +1004,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
return
if(!breedable || nutrition < 500)
to_chat(src, "<span class='notice'>The conditions are not right to produce offspring.</span>")
return
return
if(GLOB.teppi_count >= GLOB.max_teppi) //if we can't make more then we shouldn't look for partners
to_chat(src, "<span class='notice'>I cannot produce more offspring at the moment, there are too many of us!</span>")
return
@@ -1033,7 +1034,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
else
to_chat(src, "<span class='notice'>You enable breeding.</span>")
prevent_breeding = FALSE
///////////////////AI Things////////////////////////
//Thank you very much Aronai <3
@@ -1180,11 +1181,11 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
horn_color = "#141414"
eye_color = "#9f522c"
skin_color = "#e16f2d"
marking_type = "13"
marking_type = "13"
horn_type = "1"
. = ..()
/mob/living/simple_mob/vore/alienanimals/teppi/lira/New()
/mob/living/simple_mob/vore/alienanimals/teppi/lira/New()
inherit_colors = TRUE
color = "#fdfae9"
marking_color = "#ffffc0"
@@ -59,6 +59,7 @@
poison_per_bite = 2
poison_type = "cyanide"
loot_list = list(/obj/item/royal_spider_egg = 100)
/obj/item/projectile/energy/spidertoxin
name = "concentrated spidertoxin"
@@ -71,11 +72,7 @@
combustion = FALSE
/mob/living/simple_mob/animal/giant_spider/broodmother/death()
..()
new /obj/item/royal_spider_egg(src.loc)
/mob/living/simple_mob/animal/giant_spider/broodmother/death(gibbed, deathmessage="falls over and makes its last twitches as its birthing sack bursts!")
var/count = 0
while(count < death_brood)
var/broodling_type = pick(possible_death_brood_types)
@@ -84,7 +81,7 @@
step_away(broodling, src)
count++
visible_message(span("critical", "\The [src]'s birthing sack bursts!"))
return ..()
/mob/living/simple_mob/animal/giant_spider/broodmother/proc/spawn_brood(atom/A)
set waitfor = FALSE
@@ -7,6 +7,7 @@
item_state = "mouse_gray"
icon_living = "mouse_gray"
icon_dead = "mouse_gray_dead"
icon_rest = "mouse_gray_sleep"
kitchen_tag = "rodent"
maxHealth = 5
@@ -63,6 +64,17 @@
icon_rest = "mouse_[body_color]_sleep"
if (body_color != "rat")
desc = "A small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself."
holder_type = /obj/item/weapon/holder/mouse/rat
if (body_color == "operative")
holder_type = /obj/item/weapon/holder/mouse/operative
if (body_color == "brown")
holder_type = /obj/item/weapon/holder/mouse/brown
if (body_color == "gray")
holder_type = /obj/item/weapon/holder/mouse/gray
if (body_color == "white")
holder_type = /obj/item/weapon/holder/mouse/white
if (body_color == "black")
holder_type = /obj/item/weapon/holder/mouse/black
/mob/living/simple_mob/animal/passive/mouse/Crossed(atom/movable/AM as mob|obj)
if(AM.is_incorporeal())
@@ -100,25 +112,20 @@
/mob/living/simple_mob/animal/passive/mouse/white
body_color = "white"
icon_state = "mouse_white"
icon_rest = "mouse_white_sleep"
holder_type = /obj/item/weapon/holder/mouse/white
/mob/living/simple_mob/animal/passive/mouse/gray
body_color = "gray"
icon_state = "mouse_gray"
icon_rest = "mouse_gray_sleep"
holder_type = /obj/item/weapon/holder/mouse/gray
/mob/living/simple_mob/animal/passive/mouse/brown
body_color = "brown"
icon_state = "mouse_brown"
/mob/living/simple_mob/animal/passive/mouse/rat
name = "rat"
tt_desc = "E Rattus rattus"
desc = "A large rodent, often seen hiding in maintenance areas and making a nuisance of itself."
body_color = "rat"
icon_state = "mouse_rat"
maxHealth = 20
health = 20
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
icon_rest = "mouse_brown_sleep"
holder_type = /obj/item/weapon/holder/mouse/brown
//TOM IS ALIVE! SQUEEEEEEEE~K :)
/mob/living/simple_mob/animal/passive/mouse/brown/Tom
@@ -130,6 +137,57 @@
// Change my name back, don't want to be named Tom (666)
name = initial(name)
/mob/living/simple_mob/animal/passive/mouse/black
body_color = "black"
icon_state = "mouse_black"
icon_rest = "mouse_black_sleep"
holder_type = /obj/item/weapon/holder/mouse/black
/mob/living/simple_mob/animal/passive/mouse/rat
name = "rat"
tt_desc = "E Rattus rattus"
desc = "A large rodent, often seen hiding in maintenance areas and making a nuisance of itself."
body_color = "rat"
icon_state = "mouse_rat"
icon_rest = "mouse_rat_sleep"
holder_type = /obj/item/weapon/holder/mouse/rat
maxHealth = 20
health = 20
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
/mob/living/simple_mob/animal/passive/mouse/operative
name = "mouse operative"
desc = "A cute mouse fitted with a custom blood red suit. Sneaky."
body_color = "operative"
icon_state = "mouse_operative"
icon_rest = "mouse_operative_sleep"
holder_type = /obj/item/weapon/holder/mouse/operative
maxHealth = 35
//It's wearing a void suit, it don't care about atmos
health = 35
min_oxy = 0
max_oxy = 0
min_tox = 0
max_tox = 0
min_co2 = 0
max_co2 = 0
min_n2 = 0
max_n2 = 0
maxbodytemp = 700
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
//The names Cheese... Agent Cheese
/mob/living/simple_mob/animal/passive/mouse/operative/agent_cheese
name = "Agent Cheese"
desc = "I like my cheese Swiss... not American."
/mob/living/simple_mob/animal/passive/mouse/operative/agent_cheese/New()
..()
// Change my name back, don't want to be named agent_cheese (666)
name = initial(name)
// Mouse noises
/datum/say_list/mouse
@@ -12,41 +12,45 @@
movement_cooldown = 5
universal_understand = 1
/mob/living/simple_mob/animal/passive/mouse/attack_hand(mob/living/L)
if(L.a_intent == I_HELP && !istype(loc, /obj/item/weapon/holder)) //if lime intent and not in a holder already
if(!src.attempt_to_scoop(L)) //the superior way to handle scooping, checks size
..() //mouse too big to grab? pet the large mouse instead
else
..()
//No longer in use, as mice create a holder/micro object instead
/obj/item/weapon/holder/mouse/attack_self(var/mob/U)
for(var/mob/living/simple_mob/M in src.contents)
if((I_HELP) && U.checkClickCooldown()) //a little snowflakey, but makes it use the same cooldown as interacting with non-inventory objects
U.setClickCooldown(U.get_attack_speed()) //if there's a cleaner way in baycode, I'll change this
U.visible_message("<span class='notice'>[U] [M.response_help] \the [M].</span>")
//Jank grabber that uses the 'attack_hand' insead of 'MouseDrop'
/mob/living/simple_mob/animal/passive/mouse/attack_hand(var/atom/over_object)
var/mob/living/carbon/human/H = over_object
if(holder_type && issmall(src) && istype(H) && !H.lying && Adjacent(H) && (src.a_intent == I_HELP && H.a_intent == I_HELP))
if(!issmall(H) || !istype(src, /mob/living/carbon/human))
get_scooped(H, (usr == src))
return
return ..()
/mob/living/simple_mob/animal/passive/mouse/MouseDrop(var/obj/O) //this proc would be very easy to apply to all mobs, holders generate dynamically
if(!(usr == src || O))
return ..()
if(istype(O, /mob/living) && O.Adjacent(src)) //controls scooping by mobs
var/mob/living/L = O
if(!src.attempt_to_scoop(L, (src == usr)))
return //this way it doesnt default to the generic animal pickup which isnt size restricted
if(istype(O, /obj/item/weapon/storage) && O.Adjacent(src)) //controls diving into storage
var/obj/item/weapon/storage/S = O
var/obj/item/weapon/holder/H = new holder_type(get_turf(src),src) //this works weird, but it creates an empty holder, to see if that holder can fit
if(S.can_be_inserted(H) && (src.size_multiplier <= 0.75))
visible_message("<b>\The [src]</b> squeezes into \the [S].")
H.forceMove(S)
return 1
else
qdel(H) //this deletes the empty holder if it doesnt work
to_chat(usr,"<span class='notice'>You can't fit inside \the [S]!</span>")
return 0
/mob/living/proc/mouse_scooped(var/mob/living/carbon/grabber, var/self_grab)
if(!holder_type || buckled || pinned.len)
return
if(self_grab)
if(src.incapacitated()) return
else
..()
if(grabber.incapacitated()) return
var/obj/item/weapon/holder/H = new holder_type(get_turf(src), src)
grabber.put_in_hands(H)
if(self_grab)
to_chat(grabber, "<span class='notice'>\The [src] clambers onto you!</span>")
to_chat(src, "<span class='notice'>You climb up onto \the [grabber]!</span>")
grabber.equip_to_slot_if_possible(H, slot_back, 0, 1)
else
to_chat(grabber, "<span class='notice'>You scoop up \the [src]!</span>")
to_chat(src, "<span class='notice'>\The [grabber] scoops you up!</span>")
add_attack_logs(grabber, H.held_mob, "Scooped up", FALSE) // Not important enough to notify admins, but still helpful.
return H
/mob/living/simple_mob/animal/passive/mouse/white/apple
name = "Apple"
desc = "Dainty, well groomed and cared for, her eyes glitter with untold knowledge..."
@@ -56,4 +60,12 @@
..()
// Change my name back, don't want to be named Apple (666)
name = initial(name)
desc = initial(desc)
desc = initial(desc)
/obj/item/weapon/holder/mouse/attack_self(mob/living/carbon/user)
user.setClickCooldown(user.get_attack_speed())
for(var/L in contents)
if(isanimal(L))
var/mob/living/simple_mob/S = L
user.visible_message("<span class='notice'>[user] [S.response_help] \the [S].</span>")
@@ -57,9 +57,10 @@
. = ..()
var/has_food = FALSE
for(var/obj/item/I in L.get_contents()) // Do they have food?
if(istype(I, /obj/item/weapon/reagent_containers/food))
has_food = TRUE
break
if(isliving(L))
for(var/obj/item/I in L.get_contents()) // Do they have food?
if(istype(I, /obj/item/weapon/reagent_containers/food))
has_food = TRUE
break
if(has_food) // Yes? Gimme the food.
return FALSE
@@ -91,14 +91,14 @@
name = "Bald"
icon_state = "bald"
gender = MALE
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //Lets all the races be bald if they want.
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //Lets all the races be bald if they want.
/datum/sprite_accessory/hair/ponytail6_fixed
name = "Ponytail 6 but fixed"
icon = 'icons/mob/human_face_vr.dmi'
icon_add = 'icons/mob/human_face_vr_add.dmi'
icon_state = "hair_ponytail6"
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_NEVREAN, SPECIES_AKULA,SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST)
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_NEVREAN, SPECIES_AKULA,SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
/datum/sprite_accessory/hair/una_hood
name = "Cobra Hood"
@@ -465,20 +465,20 @@
/datum/sprite_accessory/facial_hair
icon = 'icons/mob/human_face_or_vr.dmi'
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //This lets all races use the facial hair styles.
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use the facial hair styles.
/datum/sprite_accessory/facial_hair/shaved
name = "Shaved"
icon_state = "bald"
gender = NEUTER
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //This needed to be manually defined, apparantly.
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use the facial hair styles.
/datum/sprite_accessory/facial_hair/neck_fluff
name = "Neck Fluff"
icon = 'icons/mob/human_face_or_vr.dmi'
icon_state = "facial_neckfluff"
gender = NEUTER
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST)
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
/datum/sprite_accessory/facial_hair/vulp_none
name = "None"
+1 -1
View File
@@ -4,7 +4,7 @@
/obj/structure/ladder_assembly
name = "ladder assembly"
icon = 'icons/obj/structures.dmi'
icon = 'icons/obj/structures_vr.dmi'
icon_state = "ladder00"
density = FALSE
opacity = 0
@@ -71,7 +71,7 @@
return
var/_z = token["z"]
if(_z in using_map.station_levels)
if(_z in using_map.persist_levels)
. = GetValidTurf(locate(token["x"], token["y"], _z), token)
if(.)
CreateEntryInstance(., token)
@@ -82,7 +82,7 @@
if(GetEntryAge(entry) >= entries_expire_at)
return FALSE
var/turf/T = get_turf(entry)
if(!T || !(T.z in using_map.station_levels) )
if(!T || !(T.z in using_map.persist_levels) )
return FALSE
var/area/A = get_area(T)
if(!A || (A.flags & AREA_FLAG_IS_NOT_PERSISTENT))
@@ -30,6 +30,13 @@
if(environment.temperature > HEATMODE_TEMP - 30)
. = TRUE
/proc/offsite_environment_check(turf/simulated/T)
. = TRUE
if(!istype(T))
return
if(T.z in using_map.station_levels)
. = FALSE
/obj/item/weapon/gun/energy/kinetic_accelerator
name = "proto-kinetic accelerator"
desc = "A self recharging, ranged mining tool that does increased damage in low pressure."
@@ -184,7 +191,7 @@
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty()
if(power_supply)
power_supply.use(power_supply.charge)
update_icon()
update_icon()
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload(recharge_time)
if(!power_supply)
@@ -216,11 +223,12 @@
/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon()
cut_overlays()
if(overheat || (power_supply.charge == 0))
if(overheat || !power_supply || (power_supply.charge == 0))
add_overlay(emptystate)
#define KA_ENVIRO_TYPE_COLD 0
#define KA_ENVIRO_TYPE_HOT 1
#define KA_ENVIRO_TYPE_OFFSITE 2
//Projectiles
/obj/item/projectile/kinetic
@@ -262,6 +270,12 @@
name = "weakened [name]"
damage = damage * pressure_decrease
pressure_decrease_active = TRUE
else if(environment == KA_ENVIRO_TYPE_OFFSITE)
if(!offsite_environment_check(get_turf(src)))
name = "nullified [name]"
nodamage = TRUE
damage = 0
pressure_decrease_active = TRUE
return ..()
/obj/item/projectile/kinetic/attack_mob(mob/living/target_mob, distance, miss_modifier)
@@ -276,6 +290,12 @@
name = "weakened [name]"
damage = damage * pressure_decrease
pressure_decrease_active = TRUE
else if(environment == KA_ENVIRO_TYPE_OFFSITE)
if(!offsite_environment_check(get_turf(src)))
name = "nullified [name]"
nodamage = TRUE
damage = 0
pressure_decrease_active = TRUE
return ..()
/obj/item/projectile/kinetic/on_range()
@@ -302,6 +322,12 @@
name = "weakened [name]"
damage = damage * pressure_decrease
pressure_decrease_active = TRUE
else if(environment == KA_ENVIRO_TYPE_OFFSITE)
if(!offsite_environment_check(get_turf(src)))
name = "nullified [name]"
nodamage = TRUE
damage = 0
pressure_decrease_active = TRUE
var/turf/target_turf = get_turf(target)
if(!target_turf)
target_turf = get_turf(src)
@@ -391,8 +417,8 @@
if(forcemove)
forceMove(get_turf(KA))
//use this one to modify the projectile itself
/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K)
//use this one for effects you want to trigger before any damage is done at all and before damage is decreased by pressure
/obj/item/borg/upgrade/modkit/proc/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
//use this one for effects you want to trigger before mods that do damage
@@ -420,6 +446,7 @@
/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K)
K.damage += modifier
//Cooldown
/obj/item/borg/upgrade/modkit/cooldown
name = "cooldown decrease"
@@ -522,7 +549,7 @@
//Tendril-unique modules
/obj/item/borg/upgrade/modkit/cooldown/repeater
name = "rapid repeater"
desc = "Quarters the kinetic accelerator's cooldown on striking a living target, but greatly increases the base cooldown."
desc = "Quarters the kinetic accelerator's cooldown on striking a living or mineral target, but greatly increases the base cooldown."
denied_type = /obj/item/borg/upgrade/modkit/cooldown/repeater
modifier = -14 //Makes the cooldown 3 seconds(with no cooldown mods) if you miss. Don't miss.
cost = 50
@@ -547,7 +574,6 @@
modifier = 2.5 //Not a very effective method of healing.
cost = 20
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
/obj/item/borg/upgrade/modkit/lifesteal/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
if(isliving(target) && isliving(K.firer))
var/mob/living/L = target
@@ -582,7 +608,6 @@
cost = 30
var/maximum_bounty = 25
var/list/bounties_reaped = list()
/obj/item/borg/upgrade/modkit/bounty/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
if(isliving(target))
var/mob/living/L = target
@@ -593,7 +618,6 @@
SM.reward_target = null
qdel(SM)
L.apply_status_effect(STATUS_EFFECT_SYPHONMARK, src)
/obj/item/borg/upgrade/modkit/bounty/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
if(isliving(target))
var/mob/living/L = target
@@ -603,7 +627,6 @@
kill_modifier *= K.pressure_decrease
var/armor = L.run_armor_check(K.def_zone, K.flag, null, null, K.armour_penetration)
L.apply_damage(bounties_reaped[L.type]*kill_modifier, K.damage_type, K.def_zone, armor)
/obj/item/borg/upgrade/modkit/bounty/proc/get_kill(mob/living/L)
var/bonus_mod = 1
if(ismegafauna(L)) //megafauna reward
@@ -616,7 +639,7 @@
//Indoors
/obj/item/borg/upgrade/modkit/indoors
name = "decrease pressure penalty"
name = "hacked pressure modulator"
desc = "A remarkably illegal modification kit that increases the damage a kinetic accelerator does in pressurized environments."
modifier = 2
denied_type = /obj/item/borg/upgrade/modkit/indoors
@@ -626,14 +649,25 @@
/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K)
K.pressure_decrease *= modifier
/obj/item/borg/upgrade/modkit/offsite
name = "offsite pressure modulator"
desc = "A non-standard modification kit that increases the damage a kinetic accelerator does in pressurized environments, \
in exchange for nullifying any projected forces while on or in an associated facility."
denied_type = /obj/item/borg/upgrade/modkit/heater
maximum_of_type = 1
cost = 35
/obj/item/borg/upgrade/modkit/offsite/modify_projectile(obj/item/projectile/kinetic/K)
K.environment = KA_ENVIRO_TYPE_OFFSITE
// Atmospheric
/obj/item/borg/upgrade/modkit/heater
name = "temperature modulator"
desc = "A remarkably unusual modification kit that makes kinetic accelerators more usable in hot, overpressurized environments, \
in exchange for making them weak elsewhere, like the cold or in space."
denied_type = /obj/item/borg/upgrade/modkit/indoors
denied_type = /obj/item/borg/upgrade/modkit/offsite
maximum_of_type = 1
cost = 30
cost = 10
/obj/item/borg/upgrade/modkit/heater/modify_projectile(obj/item/projectile/kinetic/K)
K.environment = KA_ENVIRO_TYPE_HOT
@@ -646,12 +680,10 @@
desc = "Allows creatures normally incapable of firing guns to operate the weapon when installed."
cost = 20
denied_type = /obj/item/borg/upgrade/modkit/trigger_guard
/obj/item/borg/upgrade/modkit/trigger_guard/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
. = ..()
if(.)
KA.trigger_guard = TRIGGER_GUARD_ALLOW_ALL
/obj/item/borg/upgrade/modkit/trigger_guard/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
KA.trigger_guard = TRIGGER_GUARD_NORMAL
..()
@@ -85,6 +85,8 @@
/obj/item/weapon/gun/magnetic/matfed/attackby(var/obj/item/thing, var/mob/user)
. = ..()
update_rating_mod()
if(removable_components)
if(thing.is_crowbar())
if(!manipulator)
@@ -112,7 +114,6 @@
update_rating_mod()
return
if(is_type_in_list(thing, load_type))
var/obj/item/stack/material/M = thing
var/success = FALSE
@@ -147,7 +148,6 @@
playsound(src, 'sound/weapons/flipblade.ogg', 50, 1)
update_icon()
return
. = ..()
#define GEN_STARTING -1
#define GEN_OFF 0
@@ -31,6 +31,7 @@
id = "chocolate_bar"
result = null
required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2)
catalysts = list("enzyme" = 5)
result_amount = 1
/decl/chemical_reaction/instant/food/chocolate_bar/on_reaction(var/datum/reagents/holder, var/created_volume)
@@ -44,6 +45,7 @@
id = "chocolate_bar"
result = null
required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2)
catalysts = list("enzyme" = 5)
result_amount = 1
/decl/chemical_reaction/instant/food/chocolate_bar2/on_reaction(var/datum/reagents/holder, var/created_volume)
@@ -180,4 +182,4 @@
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/spreads/butter(location)
return
return
@@ -36,14 +36,21 @@ CIRCUITS BELOW
id = "oriontrail"
req_tech = list(TECH_DATA = 1)
build_path = /obj/item/weapon/circuitboard/arcade/orion_trail
sort_string = "MAAAZ" // Duplicate string, really need to redo this whole thing
sort_string = "MAAAB"
/datum/design/circuit/clawmachine
name = "grab-a-gift arcade machine"
id = "clawmachine"
req_tech = list(TECH_DATA = 1)
build_path = /obj/item/weapon/circuitboard/arcade/clawmachine
sort_string = "MAAAC"
/datum/design/circuit/jukebox
name = "jukebox"
id = "jukebox"
req_tech = list(TECH_MAGNET = 2, TECH_DATA = 1)
build_path = /obj/item/weapon/circuitboard/jukebox
sort_string = "MAAAB"
sort_string = "MAAAO"
/datum/design/circuit/seccamera
name = "security camera monitor"
+7
View File
@@ -268,6 +268,13 @@
time = 15
materials = list(MAT_STEEL = 2000, MAT_GLASS = 750, MAT_PLASTIC = 500)
/datum/design/item/prosfab/pros/internal/stomach
name = "Prosthetic Stomach"
id = "pros_stomach"
build_path = /obj/item/organ/internal/stomach
time = 15
materials = list(MAT_STEEL = 5625, MAT_GLASS = 1000)
//////////////////// Cyborg Parts ////////////////////
/datum/design/item/prosfab/cyborg
category = list("Cyborg Parts")
+1 -1
View File
@@ -39,7 +39,7 @@
/datum/tgs_chat_command/manifest/Run(datum/tgs_chat_user/sender, params)
if(config.nodebot_enabled)
ManifestToHtml()
return "!!ManifestCompiled"
return "Read the god damn channel topic"
else
var/outp = "Crew Manifest:"
var/list/total = list()
+9 -8
View File
@@ -139,14 +139,15 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
set waitfor = FALSE
// Only send them the number of buffered messages, instead of the ENTIRE log
var/list/results = vchat_get_messages(owner.ckey, message_buffer) //If there's bad performance on reconnects, look no further
for(var/i in results.len to 1 step -1)
var/list/message = results[i]
var/count = 10
to_chat_immediate(owner, message["time"], message["message"])
count++
if(count >= 10)
count = 0
CHECK_TICK
if(islist(results))
for(var/i in results.len to 1 step -1)
var/list/message = results[i]
var/count = 10
to_chat_immediate(owner, message["time"], message["message"])
count++
if(count >= 10)
count = 0
CHECK_TICK
//It din work
/datum/chatOutput/proc/become_broken()
@@ -1347,4 +1347,65 @@
End CHOMP Removal*/
// Astra - // Astra
/obj/item/weapon/material/knife/ritual/fluff/astra
name = "Polished Ritual Knife"
desc = "A well kept strange ritual knife, There is a small tag with the name 'Astra Ether' on it. They are probably looking for this."
icon = 'icons/obj/wizard.dmi'
icon_state = "render"
//AlFalah - Charlotte Graves
/obj/item/weapon/storage/fancy/fluff/charlotte
name = "inconspicuous cigarette case"
desc = "A SkyTron 3000 cigarette case with no additional functions. The buttons and CRT monitor are completely for show and have no functions. Seriously. "
icon_state = "charlotte"
icon = 'icons/vore/custom_items_vr.dmi'
storage_slots = 7
can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/weapon/flame/lighter, /obj/item/trash/cigbutt)
icon_type = "charlotte"
//brand = "\improper Professional 120"
w_class = ITEMSIZE_TINY
starts_with = list(/obj/item/clothing/mask/smokable/cigarette = 7)
//Ashling - Antoinette deKaultieste
/obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff/antoinette
name = "sawtooth ritual knife"
desc = "A mostly decorative knife made from thin ceramic and toothed with large black fangs. Printed on the flat is an eight-armed cross, like an asterisk with an extra stroke, ringed by a calligraphy-style crescent."
attack_verb = list("mauled", "bit", "sawed", "butchered")
dulled = 1
default_material = "glass"
//Ashling - Antoinette deKaultieste
/obj/item/clothing/accessory/storage/ritualharness/fluff/antoinette
name = "silk knife loops"
desc = "A clip-on pair of pouched loops made from surprisingly sturdy silk. Made for holding knives and small vials in a pinch."
icon_state = "unathiharness1"
slots = 2
/obj/item/weapon/reagent_containers/glass/bottle/poppy
name = "poppy flour bottle"
desc = "A small bottle of finely ground poppyseed and mixed dried berries."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle3"
prefill = list("bicaridine" = 30, "nutriment" = 30)
/obj/item/clothing/accessory/storage/ritualharness/fluff/antoinette/Initialize()
. = ..()
hold.max_storage_space = ITEMSIZE_COST_SMALL * 2
hold.can_hold = list(/obj/item/weapon/material/knife, /obj/item/weapon/reagent_containers/glass/bottle)
new /obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff/antoinette(hold)
new /obj/item/weapon/reagent_containers/glass/bottle/poppy(hold)
//Hunterbirk - Amaryll
//This is a 'technical item' which basically is meant to represent rippiing things up with bare claws.
/obj/item/weapon/surgical/scalpel/amaryll_claws
name = "Amaryll's Claws"
desc = "This doesn't quite look like what it really is."
icon = 'icons/vore/custom_items_vr.dmi'
icon_state = "claws"
drop_sound = null
pickup_sound = null
origin_tech = null
matter = null