mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-20 19:44:46 +01:00
Merge branch 'master' into entrepreneur-items
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#define MESSAGE_TYPE_SYSTEM "system"
|
||||
#define MESSAGE_TYPE_LOCALCHAT "localchat"
|
||||
#define MESSAGE_TYPE_NPCEMOTE "npcemote"
|
||||
#define MESSAGE_TYPE_MULTIZCHAT "multizsay"
|
||||
#define MESSAGE_TYPE_PLOCALCHAT "plocalchat"
|
||||
#define MESSAGE_TYPE_HIVEMIND "hivemind"
|
||||
#define MESSAGE_TYPE_RADIO "radio"
|
||||
|
||||
@@ -23,3 +23,4 @@
|
||||
/decl/hierarchy/outfit/job/assistant/entrepreneur
|
||||
id_type = /obj/item/weapon/card/id/civilian/entrepreneur
|
||||
l_hand = /obj/item/device/ticket_printer/train
|
||||
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
idle_power_usage = 300
|
||||
active_power_usage = 300
|
||||
blocks_emissive = FALSE
|
||||
var/climbable = TRUE
|
||||
var/list/climbers
|
||||
var/climb_delay = 3.5 SECONDS
|
||||
var/processing = 0
|
||||
|
||||
var/icon_keyboard = "generic_key"
|
||||
@@ -22,6 +25,8 @@
|
||||
. = ..()
|
||||
power_change()
|
||||
update_icon()
|
||||
if(climbable)
|
||||
verbs += /obj/structure/proc/climb_on
|
||||
|
||||
/obj/machinery/computer/process()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
@@ -132,3 +137,86 @@
|
||||
return
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/proc/climb_on()
|
||||
set name = "Climb structure"
|
||||
set desc = "Climbs onto a structure."
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
do_climb(usr)
|
||||
|
||||
/obj/machinery/computer/MouseDrop_T(mob/target, mob/user)
|
||||
var/mob/living/H = user
|
||||
if(istype(H) && can_climb(H) && target == user)
|
||||
do_climb(target)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/proc/can_climb(var/mob/living/user, post_climb_check=0)
|
||||
if (!climbable || !can_touch(user) || (!post_climb_check && (user in climbers)))
|
||||
return 0
|
||||
|
||||
if (!user.Adjacent(src))
|
||||
to_chat(user, "<span class='danger'>You can't climb there, the way is blocked.</span>")
|
||||
return 0
|
||||
|
||||
var/obj/occupied = turf_is_crowded()
|
||||
if(occupied)
|
||||
to_chat(user, "<span class='danger'>There's \a [occupied] in the way.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/computer/proc/turf_is_crowded()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T || !istype(T))
|
||||
return "empty void"
|
||||
if(T.density)
|
||||
return T
|
||||
for(var/obj/O in T.contents)
|
||||
if(istype(O,/obj/machinery/computer))
|
||||
var/obj/machinery/computer/S = O
|
||||
if(S.climbable) continue
|
||||
if(O && O.density && !(O.flags & ON_BORDER)) //ON_BORDER structures are handled by the Adjacent() check.
|
||||
return O
|
||||
return 0
|
||||
|
||||
/obj/machinery/computer/proc/do_climb(var/mob/living/user)
|
||||
if (!can_climb(user))
|
||||
return
|
||||
|
||||
usr.visible_message("<span class='warning'>[user] starts climbing onto \the [src]!</span>")
|
||||
LAZYDISTINCTADD(climbers, user)
|
||||
|
||||
if(!do_after(user,(issmall(user) ? climb_delay * 0.6 : climb_delay)))
|
||||
LAZYREMOVE(climbers, user)
|
||||
return
|
||||
|
||||
if (!can_climb(user, post_climb_check=1))
|
||||
LAZYREMOVE(climbers, user)
|
||||
return
|
||||
|
||||
usr.forceMove(climb_to(user))
|
||||
|
||||
if (get_turf(user) == get_turf(src))
|
||||
usr.visible_message("<span class='warning'>[user] climbs onto \the [src]!</span>")
|
||||
LAZYREMOVE(climbers, user)
|
||||
|
||||
/obj/machinery/computer/proc/climb_to(var/mob/living/user)
|
||||
return get_turf(src)
|
||||
|
||||
|
||||
/obj/machinery/computer/proc/can_touch(var/mob/user)
|
||||
if (!user)
|
||||
return 0
|
||||
if(!Adjacent(user))
|
||||
return 0
|
||||
if (user.restrained() || user.buckled)
|
||||
to_chat(user, "<span class='notice'>You need your hands and legs free for this.</span>")
|
||||
return 0
|
||||
if (user.stat || user.paralysis || user.sleeping || user.lying || user.weakened)
|
||||
return 0
|
||||
if (isAI(user))
|
||||
to_chat(user, "<span class='notice'>You need hands for this.</span>")
|
||||
return 0
|
||||
return 1
|
||||
@@ -222,6 +222,8 @@
|
||||
if(M)
|
||||
if(isobserver(M))
|
||||
message = "<span class='emote'><B>[src]</B> ([ghost_follow_link(src, M)]) [input]</span>"
|
||||
if(usr && usr.client && M && !(get_z(usr) == get_z(M)))
|
||||
message = "<span class='multizsay'>[message]</span>"
|
||||
M.show_message(message, m_type)
|
||||
M.create_chat_message(src, "[runemessage]", FALSE, list("emote"), (m_type == AUDIBLE_MESSAGE))
|
||||
|
||||
|
||||
@@ -145,6 +145,8 @@
|
||||
message = "<span class='game say'>[message]</span>"
|
||||
if(speaker && !speaker.client)
|
||||
message = "<span class='npcsay'>[message]</span>"
|
||||
else if(speaker && !(get_z(src) == get_z(speaker)))
|
||||
message = "<span class='multizsay'>[message]</span>"
|
||||
to_chat(src, message)
|
||||
else if(teleop)
|
||||
to_chat(teleop, "<span class='game say'>[create_text_tag("body", "BODY:", teleop.client)][message]</span>")
|
||||
@@ -159,6 +161,8 @@
|
||||
message = "<span class='game say'>[message]</span>"
|
||||
if(speaker && !speaker.client)
|
||||
message = "<span class='npcsay'>[message]</span>"
|
||||
else if(speaker && !(get_z(src) == get_z(speaker)))
|
||||
message = "<span class='multizsay'>[message]</span>"
|
||||
to_chat(src, message)
|
||||
else if(teleop)
|
||||
to_chat(teleop, "<span class='game say'>[create_text_tag("body", "BODY:", teleop.client)][message]</span>")
|
||||
@@ -333,4 +337,6 @@
|
||||
var/rendered = "<span class='game say'><span class='name'>[name]</span> [message]</span>"
|
||||
if(!speaker.client)
|
||||
rendered = "<span class='npcsay'>[rendered]</span>"
|
||||
else if(speaker && !(get_z(src) == get_z(speaker)))
|
||||
rendered = "<span class='multizsay'>[message]</span>"
|
||||
to_chat(src, rendered)
|
||||
|
||||
@@ -548,3 +548,9 @@
|
||||
if(src.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags
|
||||
if(src.wear_mask.clean_blood())
|
||||
src.update_inv_wear_mask(0)
|
||||
|
||||
/mob/living/carbon/proc/food_preference(var/allergen_type) //RS edit
|
||||
|
||||
if(allergen_type in species.food_preference)
|
||||
return species.food_preference_bonus
|
||||
return 0
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
var/can_climb = FALSE
|
||||
var/climbing_delay = 1.5 // We climb with a quarter delay
|
||||
|
||||
var/list/food_preference = list() //RS edit
|
||||
var/food_preference_bonus = 0
|
||||
|
||||
/datum/species/proc/give_numbing_bite() //Holy SHIT this is hacky, but it works. Updating a mob's attacks mid game is insane.
|
||||
unarmed_attacks = list()
|
||||
|
||||
@@ -774,3 +774,231 @@
|
||||
/datum/trait/neutral/synth_cosmetic_pain/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/trait_prefs = null)
|
||||
..()
|
||||
H.verbs |= /mob/living/carbon/human/proc/toggle_pain_module
|
||||
|
||||
//Food preferences ported from RogueStar
|
||||
|
||||
/datum/trait/neutral/food_pref
|
||||
name = "Food Preference - Carnivore"
|
||||
desc = "You prefer to eat meat, and gain extra nutrition for doing so!"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
can_take = ORGANICS
|
||||
var_changes = list("food_preference_bonus" = 5)
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
var/list/our_allergens = list(ALLERGEN_MEAT)
|
||||
|
||||
/datum/trait/neutral/food_pref/apply(datum/species/S, mob/living/carbon/human/H, trait_prefs)
|
||||
. = ..()
|
||||
for(var/a in our_allergens)
|
||||
S.food_preference |= a
|
||||
|
||||
/datum/trait/neutral/food_pref/herbivore
|
||||
name = "Food Preference - Herbivore"
|
||||
desc = "You prefer to eat fruits and vegitables, and gain extra nutrition for doing so!"
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_VEGETABLE,ALLERGEN_FRUIT)
|
||||
|
||||
/datum/trait/neutral/food_pref/beanivore
|
||||
name = "Food Preference - Legumovore"
|
||||
desc = "You prefer to eat bean related foods, such as tofu, and gain extra nutrition for doing so!"
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_BEANS)
|
||||
|
||||
/datum/trait/neutral/food_pref/omnivore
|
||||
name = "Food Preference - Omnivore"
|
||||
desc = "You prefer to eat meat and vegitables, and gain extra nutrition for doing so!"
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_VEGETABLE,ALLERGEN_MEAT)
|
||||
|
||||
/datum/trait/neutral/food_pref/fungivore
|
||||
name = "Food Preference - Fungivore"
|
||||
desc = "You prefer to eat mushrooms and fungus, and gain extra nutrition for doing so!"
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_FUNGI)
|
||||
|
||||
/datum/trait/neutral/food_pref/piscivore
|
||||
name = "Food Preference - Piscivore"
|
||||
desc = "You prefer to eat fish, and gain extra nutrition for doing so!"
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_FISH)
|
||||
|
||||
/datum/trait/neutral/food_pref/granivore
|
||||
name = "Food Preference - Granivore"
|
||||
desc = "You prefer to eat grains and seeds, and gain extra nutrition for doing so!"
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_GRAINS,ALLERGEN_SEEDS)
|
||||
|
||||
/datum/trait/neutral/food_pref/cocoavore
|
||||
name = "Food Preference - Cocoavore"
|
||||
desc = "You prefer to eat chocolate, and gain extra nutrition for doing so!"
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_CHOCOLATE)
|
||||
|
||||
/datum/trait/neutral/food_pref/glycovore
|
||||
name = "Food Preference - Glycovore"
|
||||
desc = "You prefer to eat sugar, and gain extra nutrition for doing so!"
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_SUGARS)
|
||||
|
||||
/datum/trait/neutral/food_pref/lactovore
|
||||
name = "Food Preference - Lactovore"
|
||||
desc = "You prefer to eat and drink things with milk in them, and gain extra nutrition for doing so!"
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/coffee,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_DAIRY)
|
||||
|
||||
/datum/trait/neutral/food_pref/coffee
|
||||
name = "Food Preference - Coffee Dependant"
|
||||
desc = "You can get by on coffee alone if you have to, and you like it that way."
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
)
|
||||
our_allergens = list(ALLERGEN_COFFEE)
|
||||
|
||||
/datum/trait/neutral/food_pref/stimulant
|
||||
name = "Food Preference - Stimulant Dependant"
|
||||
desc = "You can get by on caffine alone if you have to, and you like it that way."
|
||||
excludes = list(
|
||||
/datum/trait/neutral/food_pref,
|
||||
/datum/trait/neutral/food_pref/herbivore,
|
||||
/datum/trait/neutral/food_pref/beanivore,
|
||||
/datum/trait/neutral/food_pref/omnivore,
|
||||
/datum/trait/neutral/food_pref/fungivore,
|
||||
/datum/trait/neutral/food_pref/piscivore,
|
||||
/datum/trait/neutral/food_pref/granivore,
|
||||
/datum/trait/neutral/food_pref/cocoavore,
|
||||
/datum/trait/neutral/food_pref/glycovore,
|
||||
/datum/trait/neutral/food_pref/lactovore,
|
||||
/datum/trait/neutral/food_pref/coffee
|
||||
)
|
||||
our_allergens = list(ALLERGEN_STIMULANT)
|
||||
|
||||
@@ -758,7 +758,7 @@
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/custom/capslug)
|
||||
holder_type = /obj/item/weapon/holder/catslug/custom/capslug
|
||||
say_list_type = /datum/say_list/catslug/custom/capslug
|
||||
myid_access = list(access_maint_tunnels) //The all_station_access part below adds onto this.
|
||||
myid_access = list(access_heads, access_keycard_auth) //Same access as a bridge secretary.
|
||||
|
||||
/datum/say_list/catslug/custom/capslug
|
||||
speak = list("How open big glass box with shiny inside?.", "What is that?", "Respect my authority!", "What are you doing?", "How did you get here?", "Fax for yellow-shirts!", "WAOW!", "Why is that console blinking and clicking?", "Do we need to call for ERT?", "Have been called comdom before, not sure why they thought I was a balloon.")
|
||||
@@ -773,7 +773,6 @@
|
||||
mob_radio.ks2type = /obj/item/device/encryptionkey/heads/captain //Might not be able to speak, but the catslug can listen.
|
||||
mob_radio.keyslot2 = new /obj/item/device/encryptionkey/heads/captain(mob_radio)
|
||||
mob_radio.recalculateChannels(1)
|
||||
myid.access |= get_all_station_access()
|
||||
|
||||
//=============================================================================
|
||||
//Admin-spawn only catslugs below - Expect overpowered things & silliness below
|
||||
|
||||
@@ -103,3 +103,95 @@
|
||||
speak = list("NEHEHEHEHEH","Neh?")
|
||||
emote_hear = list("snorts","whinnies")
|
||||
emote_see = list("shakes its head", "stamps a hoof", "looks around")
|
||||
|
||||
//Kelpie resprite of the big horse
|
||||
|
||||
/mob/living/simple_mob/vore/horse/kelpie
|
||||
name = "kelpie"
|
||||
icon_state = "kelpie"
|
||||
icon_living = "kelpie"
|
||||
icon_dead = "kelpie-dead"
|
||||
icon = 'icons/mob/vore64x64.dmi'
|
||||
desc = "A darkly furred horse-like creature with piercing light green eyes. It's mane is a dark green and has an almost seaweed like texture."
|
||||
tt_desc = "Equus cailpeach"
|
||||
|
||||
vore_capacity = 2
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
meat_amount = 10
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
mount_offset_y = 22
|
||||
say_list_type = /datum/say_list/horse/kelpie
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/vore/kelpie
|
||||
|
||||
vore_bump_chance = 75
|
||||
vore_pounce_chance = 75
|
||||
vore_pounce_maxhealth = 200
|
||||
vore_bump_emote = "chomps down on"
|
||||
|
||||
/mob/living/simple_mob/vore/horse/kelpie/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "stomach"
|
||||
B.desc = "With a final few gulps, the kelpie finishes swallowing you down into its hot, humid gut... and with a slosh, your weight makes the equine's belly hang down slightly like some sort of organic hammock. The thick, damp air is tinged with the smell of seaweed, and the surrounding flesh wastes no time in clenching and massaging down over its newfound fodder."
|
||||
B.digest_brute = 3
|
||||
B.digest_burn = 3
|
||||
B.digestchance = 40
|
||||
B.absorbchance = 1
|
||||
B.escapechance = 7
|
||||
B.escape_stun = 5
|
||||
|
||||
B.emote_lists[DM_HOLD] = list(
|
||||
"The kelpie's idle trotting helps its stomach gently churn around you, slimily squelching against your figure.",
|
||||
"The equine predator takes a moment to intentionally clench its gut around you, encapsulating you in a strange, fleshy hug.",
|
||||
"Some hot, viscous slime oozes down over your form, helping slicken you up during your stay.",
|
||||
"During a moment of relative silence, you can hear the beast's soft, relaxed breathing as it casually goes about its day.",
|
||||
"The thick, humid atmosphere within the kelpie's hanging belly works in tandem with its steady, metronome-like heartbeat to soothe you.",
|
||||
"Your surroundings sway from side to side as the kelpie trots about, as if it is showing off its newest catch.")
|
||||
|
||||
B.emote_lists[DM_DIGEST] = list(
|
||||
"The kelpie huffs in annoyance before clenching those wrinkled walls tight against your form, grinding away at you!",
|
||||
"As the beast trots about, you're forced to slip and slide around amidst a pool of thick digestive goop!",
|
||||
"You can barely hear the horse let out a pleased nicker as its stomach eagerly gurgles around its newfound meal!",
|
||||
"As the thinning air begins to make you feel dizzy, menacing bworps and grumbles fill that dark, constantly shifting organ!",
|
||||
"The constant, rhythmic kneading and massaging starts to take its toll along with the muggy heat, making you feel weaker and weaker!",
|
||||
"The kelpie happily trots around while digesting its meal, almost like it is trying to show off the hanging gut you've given it.")
|
||||
|
||||
/datum/say_list/horse/kelpie
|
||||
speak = list("...","?")
|
||||
emote_hear = list("whispers something","lets out a high pitched, distorted neigh")
|
||||
emote_see = list("beckons you near", "watches", "swishes it's grass-like tail")
|
||||
|
||||
/datum/ai_holder/simple_mob/vore/kelpie
|
||||
|
||||
/datum/ai_holder/simple_mob/vore/kelpie/handle_wander_movement()
|
||||
if(!holder)
|
||||
return
|
||||
ai_log("handle_wander_movement() : Entered.", AI_LOG_TRACE)
|
||||
if(isturf(holder.loc) && can_act())
|
||||
wander_delay--
|
||||
var/turf/simulated/floor/water/deep/ocean/diving/sink = holder.loc
|
||||
var/turf/simulated/floor/water/underwater/surface = holder.loc
|
||||
var/mob/living/simple_mob/H = holder
|
||||
if(istype(sink) && H.vore_fullness)
|
||||
holder.zMove(DOWN)
|
||||
wander_delay = base_wander_delay
|
||||
else if(istype(surface) && !H.vore_fullness)
|
||||
holder.zMove(UP)
|
||||
wander_delay = base_wander_delay
|
||||
else if(wander_delay <= 0)
|
||||
if(!wander_when_pulled && (holder.pulledby || holder.grabbed_by.len))
|
||||
ai_log("handle_wander_movement() : Being pulled and cannot wander. Exiting.", AI_LOG_DEBUG)
|
||||
return
|
||||
|
||||
var/moving_to = 0 // Apparently this is required or it always picks 4, according to the previous developer for simplemob AI.
|
||||
moving_to = pick(cardinal)
|
||||
holder.set_dir(moving_to)
|
||||
holder.IMove(get_step(holder,moving_to))
|
||||
wander_delay = base_wander_delay
|
||||
ai_log("handle_wander_movement() : Exited.", AI_LOG_TRACE)
|
||||
@@ -200,6 +200,8 @@
|
||||
for(var/mob/M as anything in vis_mobs)
|
||||
if(isnewplayer(M))
|
||||
continue
|
||||
if(src.client && M && !(get_z(src) == get_z(M)))
|
||||
message = "<span class='multizsay'>[message]</span>"
|
||||
if(isobserver(M) && (!M.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle) || \
|
||||
!is_preference_enabled(/datum/client_preference/whisubtle_vis) && !M.client?.holder))
|
||||
spawn(0)
|
||||
|
||||
@@ -26,6 +26,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
var/sendcooldown = 0 // to avoid spamming fax messages
|
||||
var/department = "Unknown" // our department
|
||||
var/destination = null // the department we're sending to
|
||||
var/talon = 0 // So that the talon can access their own crew roles for the request
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/New()
|
||||
allfaxes += src
|
||||
@@ -85,12 +86,18 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
|
||||
var/list/jobs = list()
|
||||
for(var/datum/department/dept as anything in SSjob.get_all_department_datums())
|
||||
if(!dept.assignable || dept.centcom_only)
|
||||
continue
|
||||
for(var/job in SSjob.get_job_titles_in_department(dept.name))
|
||||
var/datum/job/J = SSjob.get_job(job)
|
||||
if(J.requestable)
|
||||
jobs |= job
|
||||
if(!src.talon)
|
||||
if(!dept.assignable || dept.centcom_only)
|
||||
continue
|
||||
for(var/job in SSjob.get_job_titles_in_department(dept.name))
|
||||
var/datum/job/J = SSjob.get_job(job)
|
||||
if(J.requestable)
|
||||
jobs |= job
|
||||
else
|
||||
for(var/job in SSjob.get_job_titles_in_department(dept.name))
|
||||
var/datum/job/J = SSjob.get_job(job)
|
||||
if(J.offmap_spawn)
|
||||
jobs |= job
|
||||
|
||||
var/role = tgui_input_list(L, "Pick the job to request.", "Job Request", jobs)
|
||||
if(!role)
|
||||
@@ -131,8 +138,8 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
ping_name = "Expedition"
|
||||
if(DEPARTMENT_SYNTHETIC)
|
||||
ping_name = "Silicon"
|
||||
//if(DEPARTMENT_TALON)
|
||||
// ping_name = "Offmap"
|
||||
if(DEPARTMENT_TALON)
|
||||
ping_name = "Offmap"
|
||||
if(!ping_name)
|
||||
to_chat(L, "<span class='warning'>Selected job cannot be requested for \[ERRORUNKNOWNDEPT] reason. Please report this to system administrator.</span>")
|
||||
return
|
||||
@@ -503,3 +510,4 @@ Extracted to its own procedure for easier logic handling with paper bundles.
|
||||
query_string += "&reason=[url_encode(reason)]"
|
||||
query_string += "&job=[url_encode(jobname)]"
|
||||
world.Export("[config.chat_webhook_url]?[query_string]")
|
||||
|
||||
|
||||
@@ -58,10 +58,10 @@
|
||||
if(!M.isSynthetic())
|
||||
if(!(M.species.allergens & allergen_type)) //assuming it doesn't cause a horrible reaction, we'll be ok!
|
||||
M.heal_organ_damage(0.5 * removed, 0)
|
||||
M.adjust_nutrition((nutriment_factor * removed) * M.species.organic_food_coeff)
|
||||
M.adjust_nutrition(((nutriment_factor + M.food_preference(allergen_type)) * removed) * M.species.organic_food_coeff) //RS edit
|
||||
M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed)
|
||||
else
|
||||
M.adjust_nutrition((nutriment_factor * removed) * M.species.synthetic_food_coeff)
|
||||
M.adjust_nutrition(((nutriment_factor + M.food_preference(allergen_type)) * removed) * M.species.synthetic_food_coeff) //RS edit
|
||||
|
||||
//VOREStation Edits Stop
|
||||
|
||||
@@ -957,7 +957,8 @@
|
||||
|
||||
/datum/reagent/drink/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(!(M.species.allergens & allergen_type))
|
||||
M.adjust_nutrition(nutrition * removed)
|
||||
var/bonus = M.food_preference(allergen_type)
|
||||
M.adjust_nutrition((nutrition + bonus) * removed) //RS edit
|
||||
M.dizziness = max(0, M.dizziness + adj_dizzy)
|
||||
M.drowsyness = max(0, M.drowsyness + adj_drowsy)
|
||||
M.AdjustSleeping(adj_sleepy)
|
||||
@@ -2585,6 +2586,7 @@
|
||||
if(M.species.robo_ethanol_drunk || !(M.isSynthetic()))
|
||||
if(alien == IS_DIONA)
|
||||
return
|
||||
M.adjust_nutrition((M.food_preference(allergen_type) / 2) * removed) //RS edit
|
||||
M.jitteriness = max(M.jitteriness - 3, 0)
|
||||
|
||||
/datum/reagent/ethanol/beer/lite
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 212 KiB After Width: | Height: | Size: 221 KiB |
@@ -318,6 +318,7 @@ personally I recommend using the ship's boat if you need to evacuate, but if you
|
||||
/obj/machinery/photocopier/faxmachine/talon
|
||||
department = "ITV Talon"
|
||||
desc = "The ship's fax machine! It's a safe assumption that most of the departments listed aren't on your ship, since the ship only has one."
|
||||
talon = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/captain/talon
|
||||
name = "talon captain's voidsuit helmet"
|
||||
|
||||
@@ -24,6 +24,7 @@ export const MESSAGE_TYPE_INTERNAL = 'internal';
|
||||
export const MESSAGE_TYPE_SYSTEM = 'system';
|
||||
export const MESSAGE_TYPE_LOCALCHAT = 'localchat';
|
||||
export const MESSAGE_TYPE_NPCEMOTE = 'npcemote';
|
||||
export const MESSAGE_TYPE_MULTIZCHAT = 'multizsay';
|
||||
export const MESSAGE_TYPE_PLOCALCHAT = 'plocalchat';
|
||||
export const MESSAGE_TYPE_VORE = 'vore';
|
||||
export const MESSAGE_TYPE_HIVEMIND = 'hivemind';
|
||||
@@ -64,6 +65,12 @@ export const MESSAGE_TYPES = [
|
||||
description: 'In-character emotes and says from NPCs',
|
||||
selector: '.npcemote, .npcsay',
|
||||
},
|
||||
{
|
||||
type: MESSAGE_TYPE_MULTIZCHAT,
|
||||
name: 'MultiZ Emotes / Says',
|
||||
description: 'In-character emotes and says from levels above/below',
|
||||
selector: '.multizsay',
|
||||
},
|
||||
{
|
||||
type: MESSAGE_TYPE_LOCALCHAT,
|
||||
name: 'Local',
|
||||
|
||||
@@ -370,6 +370,7 @@ img.icon.bigicon {
|
||||
.say,
|
||||
.emote,
|
||||
.emotesubtle,
|
||||
.multizsay,
|
||||
.npcemote,
|
||||
.npcsay,
|
||||
.infoplain,
|
||||
|
||||
@@ -388,6 +388,7 @@ img.icon.bigicon {
|
||||
.say,
|
||||
.emote,
|
||||
.emotesubtle,
|
||||
.multizsay,
|
||||
.npcemote,
|
||||
.npcsay,
|
||||
.infoplain,
|
||||
|
||||
@@ -370,6 +370,7 @@ img.icon.bigicon {
|
||||
.say,
|
||||
.emote,
|
||||
.emotesubtle,
|
||||
.multizsay,
|
||||
.npcemote,
|
||||
.npcsay,
|
||||
.infoplain,
|
||||
|
||||
@@ -388,6 +388,7 @@ img.icon.bigicon {
|
||||
.say,
|
||||
.emote,
|
||||
.emotesubtle,
|
||||
.multizsay,
|
||||
.npcemote,
|
||||
.npcsay,
|
||||
.infoplain,
|
||||
|
||||
@@ -126,11 +126,11 @@
|
||||
* @file
|
||||
* @copyright 2020 Aleksej Komarov
|
||||
* @license MIT
|
||||
*/var i=(0,r.VP)("chat/load"),l=(0,r.VP)("chat/rebuild"),s=(0,r.VP)("chat/updateMessageCount"),d=(0,r.VP)("chat/addPage",function(){return{payload:(0,a.a3)()}}),g=(0,r.VP)("chat/changePage"),p=(0,r.VP)("chat/updatePage"),y=(0,r.VP)("chat/toggleAcceptedType"),x=(0,r.VP)("chat/removePage"),E=(0,r.VP)("chat/changeScrollTracking"),I=(0,r.VP)("chat/saveToDisk"),T=(0,r.VP)("chat/purgeMessageArchive"),O=(0,r.VP)("chat/movePageLeft"),P=(0,r.VP)("chat/movePageRight")},95944:function(v,h,t){"use strict";t.d(h,{C_:function(){return s},HC:function(){return i},HL:function(){return r},Ol:function(){return st},PM:function(){return d},bS:function(){return l},xr:function(){return a}});/**
|
||||
*/var i=(0,r.VP)("chat/load"),l=(0,r.VP)("chat/rebuild"),s=(0,r.VP)("chat/updateMessageCount"),d=(0,r.VP)("chat/addPage",function(){return{payload:(0,a.a3)()}}),g=(0,r.VP)("chat/changePage"),p=(0,r.VP)("chat/updatePage"),y=(0,r.VP)("chat/toggleAcceptedType"),x=(0,r.VP)("chat/removePage"),E=(0,r.VP)("chat/changeScrollTracking"),I=(0,r.VP)("chat/saveToDisk"),T=(0,r.VP)("chat/purgeMessageArchive"),O=(0,r.VP)("chat/movePageLeft"),P=(0,r.VP)("chat/movePageRight")},95944:function(v,h,t){"use strict";t.d(h,{C_:function(){return s},HC:function(){return i},HL:function(){return r},Ol:function(){return Y},PM:function(){return d},bS:function(){return l},xr:function(){return a}});/**
|
||||
* @file
|
||||
* @copyright 2020 Aleksej Komarov
|
||||
* @license MIT
|
||||
*/var r=6e4,a=250,i=10,l=6e4,s="unknown",d="internal",g="system",p="localchat",y="npcemote",x="plocalchat",E="vore",I="hivemind",T="radio",O="nif",P="info",R="warning",D="deadchat",w="ooc",F="looc",U="adminpm",M="mentorpm",B="combat",j="chatprint",N="adminchat",$="modchat",H="rlooc",k="prayer",tt="eventchat",G="adminlog",_="attacklog",q="debug",st=[{type:g,name:"System Messages",description:"Messages from your client, always enabled",selector:".boldannounce",important:!0},{type:y,name:"NPC Emotes / Says",description:"In-character emotes and says from NPCs",selector:".npcemote, .npcsay"},{type:p,name:"Local",description:"In-character local messages (say, emote, etc)",selector:".say, .emote, .emotesubtle"},{type:x,name:"Local (Pred/Prey)",description:"Messages from / to absorbed or dominated prey",selector:".psay, .pemote"},{type:E,name:"Vorgan Messages",description:"Messages regarding vore interactions",selector:".valert, .vwarning, .vnotice, .vdanger"},{type:I,name:"Global Say",description:"All global languages (Hivemind / Binary)",selector:".hivemind, .binarysay"},{type:T,name:"Radio",description:"All departments of radio messages",selector:".alert, .minorannounce, .syndradio, .centradio, .airadio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .supradio, .srvradio, .expradio, .radio, .deptradio, .newscaster, .resonate, .abductor, .alien, .changeling"},{type:O,name:"NIF",description:"Messages from the NIF itself and people inside",selector:".nif"},{type:P,name:"Info",description:"Non-urgent messages from the game and items",selector:".notice:not(.pm), .adminnotice:not(.pm), .info, .sinister, .cult, .infoplain, .announce, .hear, .smallnotice, .holoparasite, .boldnotice"},{type:R,name:"Warnings",description:"Urgent messages from the game and items",selector:".warning:not(.pm), .critical, .userdanger, .italics, .alertsyndie, .warningplain"},{type:D,name:"Deadchat",description:"All of deadchat",selector:".deadsay, .ghostalert"},{type:w,name:"OOC",description:"The bluewall of global OOC messages",selector:".ooc, .adminooc, .adminobserverooc, .oocplain"},{type:F,name:"Local OOC",description:"Local OOC messages, always enabled",selector:".looc",important:!0},{type:U,name:"Admin PMs",description:"Messages to/from admins (adminhelp)",selector:".pm, .adminhelp"},{type:M,name:"Mentor PMs",description:"Mentorchat and mentor pms",selector:".mentor_channel, .mentor"},{type:B,name:"Combat Log",description:"Urist McTraitor has stabbed you with a knife!",selector:".danger"},{type:j,name:"Chat prints",description:"Chat outputs of ooc notes or vorebelly exports",selector:".chatexport"},{type:s,name:"Unsorted",description:"Everything we could not sort, always enabled"},{type:N,name:"Admin Chat",description:"ASAY messages",selector:".admin_channel, .adminsay",admin:!0},{type:$,name:"Mod Chat",description:"MSAY messages",selector:".mod_channel",admin:!0},{type:tt,name:"Event Chat",description:"ESAY messages",selector:".event_channel",admin:!0},{type:H,name:"Remote LOOC",description:"Remote LOOC messages",selector:".rlooc",admin:!0},{type:k,name:"Prayers",description:"Prayers from players",admin:!0},{type:G,name:"Admin Log",description:"ADMIN LOG: Urist McAdmin has jumped to coordinates X, Y, Z",selector:".log_message",admin:!0},{type:_,name:"Attack Log",description:"Urist McTraitor has shot John Doe",admin:!0},{type:q,name:"Debug Log",description:"DEBUG: SSPlanets subsystem Recover().",admin:!0}]},23152:function(v,h,t){"use strict";t.d(h,{Vu:function(){return E},Xe:function(){return Qt},dH:function(){return ce},X4:function(){return me},v7:function(){return Kn}});var r=t(88095),a=t(4413),i=t(92514),l=t(43488),s=t(95944),d=t(11358);/**
|
||||
*/var r=6e4,a=250,i=10,l=6e4,s="unknown",d="internal",g="system",p="localchat",y="npcemote",x="multizsay",E="plocalchat",I="vore",T="hivemind",O="radio",P="nif",R="info",D="warning",w="deadchat",F="ooc",U="looc",M="adminpm",B="mentorpm",j="combat",N="chatprint",$="adminchat",H="modchat",k="rlooc",tt="prayer",G="eventchat",_="adminlog",q="attacklog",st="debug",Y=[{type:g,name:"System Messages",description:"Messages from your client, always enabled",selector:".boldannounce",important:!0},{type:y,name:"NPC Emotes / Says",description:"In-character emotes and says from NPCs",selector:".npcemote, .npcsay"},{type:x,name:"MultiZ Emotes / Says",description:"In-character emotes and says from levels above/below",selector:".multizsay"},{type:p,name:"Local",description:"In-character local messages (say, emote, etc)",selector:".say, .emote, .emotesubtle"},{type:E,name:"Local (Pred/Prey)",description:"Messages from / to absorbed or dominated prey",selector:".psay, .pemote"},{type:I,name:"Vorgan Messages",description:"Messages regarding vore interactions",selector:".valert, .vwarning, .vnotice, .vdanger"},{type:T,name:"Global Say",description:"All global languages (Hivemind / Binary)",selector:".hivemind, .binarysay"},{type:O,name:"Radio",description:"All departments of radio messages",selector:".alert, .minorannounce, .syndradio, .centradio, .airadio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .supradio, .srvradio, .expradio, .radio, .deptradio, .newscaster, .resonate, .abductor, .alien, .changeling"},{type:P,name:"NIF",description:"Messages from the NIF itself and people inside",selector:".nif"},{type:R,name:"Info",description:"Non-urgent messages from the game and items",selector:".notice:not(.pm), .adminnotice:not(.pm), .info, .sinister, .cult, .infoplain, .announce, .hear, .smallnotice, .holoparasite, .boldnotice"},{type:D,name:"Warnings",description:"Urgent messages from the game and items",selector:".warning:not(.pm), .critical, .userdanger, .italics, .alertsyndie, .warningplain"},{type:w,name:"Deadchat",description:"All of deadchat",selector:".deadsay, .ghostalert"},{type:F,name:"OOC",description:"The bluewall of global OOC messages",selector:".ooc, .adminooc, .adminobserverooc, .oocplain"},{type:U,name:"Local OOC",description:"Local OOC messages, always enabled",selector:".looc",important:!0},{type:M,name:"Admin PMs",description:"Messages to/from admins (adminhelp)",selector:".pm, .adminhelp"},{type:B,name:"Mentor PMs",description:"Mentorchat and mentor pms",selector:".mentor_channel, .mentor"},{type:j,name:"Combat Log",description:"Urist McTraitor has stabbed you with a knife!",selector:".danger"},{type:N,name:"Chat prints",description:"Chat outputs of ooc notes or vorebelly exports",selector:".chatexport"},{type:s,name:"Unsorted",description:"Everything we could not sort, always enabled"},{type:$,name:"Admin Chat",description:"ASAY messages",selector:".admin_channel, .adminsay",admin:!0},{type:H,name:"Mod Chat",description:"MSAY messages",selector:".mod_channel",admin:!0},{type:G,name:"Event Chat",description:"ESAY messages",selector:".event_channel",admin:!0},{type:k,name:"Remote LOOC",description:"Remote LOOC messages",selector:".rlooc",admin:!0},{type:tt,name:"Prayers",description:"Prayers from players",admin:!0},{type:_,name:"Admin Log",description:"ADMIN LOG: Urist McAdmin has jumped to coordinates X, Y, Z",selector:".log_message",admin:!0},{type:q,name:"Attack Log",description:"Urist McTraitor has shot John Doe",admin:!0},{type:st,name:"Debug Log",description:"DEBUG: SSPlanets subsystem Recover().",admin:!0}]},23152:function(v,h,t){"use strict";t.d(h,{Vu:function(){return E},Xe:function(){return Qt},dH:function(){return ce},X4:function(){return me},v7:function(){return Kn}});var r=t(88095),a=t(4413),i=t(92514),l=t(43488),s=t(95944),d=t(11358);/**
|
||||
* @file
|
||||
* @copyright 2020 Aleksej Komarov
|
||||
* @license MIT
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -4290,7 +4290,7 @@
|
||||
#include "maps\expedition_vr\beach\submaps\mountains.dm"
|
||||
#include "maps\expedition_vr\beach\submaps\mountains_areas.dm"
|
||||
#include "maps\gateway_archive_vr\blackmarketpackers.dm"
|
||||
#include "maps\groundbase\groundbase.dm"
|
||||
#include "maps\tether\tether.dm"
|
||||
#include "maps\redgate\fantasy_items.dm"
|
||||
#include "maps\redgate\falls\atoll_decals.dm"
|
||||
#include "maps\redgate\falls\atoll_objs.dm"
|
||||
|
||||
Reference in New Issue
Block a user