Reapply "Merge branch 'master' into trash-eat-Mk2"

This reverts commit d638582401.
This commit is contained in:
MrSky12
2024-05-15 23:28:30 +02:00
parent d638582401
commit 6ba955d90c
82 changed files with 1090 additions and 218 deletions
+14 -4
View File
@@ -8,6 +8,7 @@
power = /obj/effect/proc_holder/spell/targeted/touch/fatfang
instability = 10
energy_coeff = 1
power_coeff = 1
/obj/effect/proc_holder/spell/targeted/touch/fatfang
name = "The Nibble"
@@ -28,7 +29,8 @@
icon_state = "power_feed"
///How much weight is added?
var/chem_to_add = 5
///What verb is used for the spell?
var/starttime = 0
/obj/item/melee/touch_attack/fatfang/afterattack(atom/target, mob/living/carbon/user, proximity)
if(!proximity || !iscarbon(target) || target == user)
@@ -36,10 +38,18 @@
if(!target || !chem_to_add)
return FALSE
target.reagents.add_reagent(/datum/reagent/consumable/lipoifier, chem_to_add)
target.visible_message("<span class='danger'>[user] nibbles [target]!</span>","<span class='userdanger'>[user] nibbles you!</span>")
if(target == user.pulling && ishuman(user.pulling))
starttime = world.time
user.dna.get_mutation(FATFANG).power.charge_max = 600 * GET_MUTATION_ENERGY(user.dna.get_mutation(FATFANG))
while(starttime + 300 > world.time && in_range(user, target))
if(do_mob(user, target, 10, 0, 1))
target.reagents.add_reagent(/datum/reagent/consumable/lipoifier, (chem_to_add * GET_MUTATION_POWER(user.dna.get_mutation(FATFANG))/2))
target.visible_message("<span class='danger'>[user] pumps some venom in [target]!</span>","<span class='userdanger'>[user] pumps some venom in you!</span>")
else
user.dna.get_mutation(FATFANG).power.charge_max = 50 * GET_MUTATION_ENERGY(user.dna.get_mutation(FATFANG))
target.reagents.add_reagent(/datum/reagent/consumable/lipoifier, chem_to_add * GET_MUTATION_POWER(user.dna.get_mutation(FATFANG)))
return ..()
/obj/item/dnainjector/antifang
@@ -0,0 +1,149 @@
/obj/machinery/power/adipoelectric_generator
name = "adipoelectric generator"
desc = "This device uses calorite technology to transform excess blubber into power!"
icon = 'GainStation13/icons/obj/adipoelectric_transformer.dmi'
icon_state = "state_off"
density = FALSE
anchored = FALSE
use_power = NO_POWER_USE
state_open = TRUE
circuit = /obj/item/circuitboard/machine/power/adipoelectric_generator
occupant_typecache = list(/mob/living/carbon)
var/laser_modifier
var/max_fat
var/obj/structure/cable/attached
var/conversion_rate = 10000
var/emp_timer = 0
var/active = FALSE
var/datum/looping_sound/generator/soundloop
/obj/machinery/power/adipoelectric_generator/Initialize()
. = ..()
soundloop = new(list(src), active)
if(anchored)
connect_to_network()
update_icon()
/obj/machinery/power/adipoelectric_generator/RefreshParts()
laser_modifier = 0
max_fat = 0
for(var/obj/item/stock_parts/micro_laser/C in component_parts)
laser_modifier += C.rating
for(var/obj/item/stock_parts/matter_bin/C in component_parts)
max_fat += C.rating * 2
/obj/machinery/power/adipoelectric_generator/process()
if(occupant:fatness_real > 0 && powernet && anchored && (emp_timer < world.time))
active = TRUE
add_avail(conversion_rate * laser_modifier * max_fat)
occupant:adjust_fatness(-max_fat, FATTENING_TYPE_ITEM)
soundloop.start()
else
active = FALSE
soundloop.stop()
update_icon()
/obj/machinery/power/adipoelectric_generator/relaymove(mob/user)
if(user.stat)
return
open_machine()
soundloop.stop()
/obj/machinery/power/adipoelectric_generator/emp_act(severity)
. = ..()
if(!(stat & (BROKEN|NOPOWER)))
emp_timer = world.time + 600
if(occupant)
open_machine()
/obj/machinery/power/adipoelectric_generator/attackby(obj/item/P, mob/user, params)
if(state_open)
if(default_deconstruction_screwdriver(user, "state_open", "state_off", P))
return
if(default_pry_open(P))
return
if(default_deconstruction_crowbar(P))
return
if(istype(P, /obj/item/wrench) && !active)
if(!anchored && !isinspace())
connect_to_network()
to_chat(user, "<span class='notice'>You secure the generator to the floor.</span>")
anchored = TRUE
dir = SOUTH
else if(anchored)
disconnect_from_network()
to_chat(user, "<span class='notice'>You unsecure the generator from the floor.</span>")
anchored = FALSE
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
return
return ..()
/obj/machinery/power/adipoelectric_generator/interact(mob/user)
toggle_open()
return TRUE
/obj/machinery/power/adipoelectric_generator/proc/toggle_open()
if(state_open)
close_machine()
else
open_machine()
soundloop.stop()
update_icon()
/obj/machinery/power/adipoelectric_generator/open_machine()
. = ..()
/obj/machinery/power/adipoelectric_generator/close_machine()
. = ..()
if(occupant && anchored && !panel_open)
add_fingerprint(occupant)
else
open_machine()
/obj/machinery/power/adipoelectric_generator/update_icon()
cut_overlays()
if(panel_open)
icon_state = "state_open"
return
if(occupant)
var/image/occupant_overlay
occupant_overlay = image(occupant.icon, occupant.icon_state)
occupant_overlay.copy_overlays(occupant)
occupant_overlay.dir = SOUTH
occupant_overlay.pixel_y = 10
add_overlay(occupant_overlay)
if(!active)
icon_state = "state_off"
else
icon_state = "state_on"
else
icon_state = "state_off"
/obj/machinery/power/adipoelectric_generator/power_change()
..()
update_icon()
/obj/machinery/power/adipoelectric_generator/Destroy()
QDEL_NULL(soundloop)
. = ..()
/obj/item/circuitboard/machine/power/adipoelectric_generator
name = "Adipoelectric Generator (Machine Board)"
build_path = /obj/machinery/power/adipoelectric_generator
req_components = list(
/obj/item/stock_parts/micro_laser = 5,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stack/cable_coil = 2)
needs_anchored = FALSE
/datum/design/board/adipoelectric_generator
name = "Machine Design (Adipoelectric Generator Board)"
desc = "The circuit board for an Adipoelectric Generator."
id = "adipoelectric_generator"
build_path = /obj/item/circuitboard/machine/power/adipoelectric_generator
category = list("Engineering Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
@@ -0,0 +1,150 @@
GLOBAL_LIST_EMPTY(adipoelectric_transformer)
/obj/machinery/adipoelectric_transformer
name = "adipoelectric transformer"
desc = "This device uses calorite technology to store excess current in the wire it's placed on into whoever steps on!"
icon = 'GainStation13/icons/obj/adipoelectric_transformer.dmi'
icon_state = "state_off"
density = FALSE
use_power = NO_POWER_USE
state_open = TRUE
circuit = /obj/item/circuitboard/machine/adipoelectric_transformer
occupant_typecache = list(/mob/living/carbon)
var/recharge_speed
var/obj/structure/cable/attached
var/drain_rate = 1000000
var/lastprocessed = 0
var/power_avaliable = 0
var/conversion_rate = 0.000001
var/emp_timer = 0
var/emp_multiplier = 5
/obj/machinery/adipoelectric_transformer/Initialize()
. = ..()
update_icon()
/obj/machinery/adipoelectric_transformer/RefreshParts()
recharge_speed = 0
for(var/obj/item/stock_parts/capacitor/C in component_parts)
recharge_speed += C.rating
/obj/machinery/adipoelectric_transformer/process()
if(!is_operational())
return
if(!attached)
playsound(src, 'sound/machines/buzz-two.ogg', 50)
return PROCESS_KILL
var/datum/powernet/PN = attached.powernet
if(PN)
power_avaliable = PN.netexcess
update_icon()
if(power_avaliable <= 0)
return
if(occupant)
if(power_avaliable > drain_rate)
lastprocessed = ((power_avaliable - drain_rate) * (conversion_rate / 10)) + 1
else
lastprocessed = power_avaliable * conversion_rate
if(!(world.time >= emp_timer + 600))
lastprocessed = lastprocessed * emp_multiplier
occupant:adjust_fatness(lastprocessed * recharge_speed, FATTENING_TYPE_ITEM)
return 1
/obj/machinery/adipoelectric_transformer/relaymove(mob/user)
if(user.stat)
return
open_machine()
/obj/machinery/adipoelectric_transformer/emp_act(severity)
. = ..()
if(!(stat & (BROKEN|NOPOWER)))
if(occupant)
emp_timer = world.time //stuck in for 600 ticks, about 60 seconds
/obj/machinery/adipoelectric_transformer/attackby(obj/item/P, mob/user, params)
if(state_open)
if(default_deconstruction_screwdriver(user, "state_open", "state_off", P))
return
if(default_pry_open(P))
return
if(default_deconstruction_crowbar(P))
return
return ..()
/obj/machinery/adipoelectric_transformer/interact(mob/user)
toggle_open()
return TRUE
/obj/machinery/adipoelectric_transformer/proc/toggle_open()
if(state_open)
close_machine()
else
open_machine()
update_icon()
/obj/machinery/adipoelectric_transformer/open_machine()
if(!(world.time >= emp_timer + 600))
return
. = ..()
GLOB.adipoelectric_transformer -= src
STOP_PROCESSING(SSobj, src)
/obj/machinery/adipoelectric_transformer/close_machine()
. = ..()
if(LAZYLEN(GLOB.adipoelectric_transformer) < 1 && occupant)
var/turf/T = loc
if(isturf(T) && !T.intact)
attached = locate() in T
add_fingerprint(occupant)
GLOB.adipoelectric_transformer += src
START_PROCESSING(SSobj, src)
else
playsound(src, 'sound/machines/buzz-two.ogg', 50)
open_machine()
/obj/machinery/adipoelectric_transformer/update_icon()
cut_overlays()
if(occupant)
var/image/occupant_overlay
occupant_overlay = image(occupant.icon, occupant.icon_state)
occupant_overlay.copy_overlays(occupant)
occupant_overlay.dir = SOUTH
occupant_overlay.pixel_y = 10
add_overlay(occupant_overlay)
if(power_avaliable <= 0)
icon_state = "state_off"
else
if(!(world.time >= emp_timer + 600))
icon_state = "state_overdrive"
add_overlay("particles_overdrive")
else
icon_state = "state_on"
add_overlay("particles_on")
else
icon_state = "state_off"
/obj/machinery/adipoelectric_transformer/power_change()
..()
update_icon()
/obj/machinery/adipoelectric_transformer/Destroy()
. = ..()
GLOB.adipoelectric_transformer -= src
/obj/item/circuitboard/machine/adipoelectric_transformer
name = "Adipoelectric Transformer (Machine Board)"
build_path = /obj/machinery/adipoelectric_transformer
req_components = list(
/obj/item/stock_parts/capacitor = 5,
/obj/item/stack/sheet/glass = 1,
/obj/item/stack/sheet/mineral/calorite = 1)
/datum/design/board/adipoelectric_transformer
name = "Machine Design (Adipoelectric Transformer Board)"
desc = "The circuit board for an Adipoelectric Transformer."
id = "adipoelectric_transformer"
build_path = /obj/item/circuitboard/machine/adipoelectric_transformer
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+13
View File
@@ -52,6 +52,9 @@
else //If it's not being hidden
fatness = fatness_real //Make their current fatness their real fatness
if(client?.prefs?.weight_gain_extreme)
xwg_resize()
return TRUE
@@ -102,11 +105,21 @@
fatness_hidden = TRUE
fatness_over = hide_amount
fatness = fatness_over //To update a mob's fatness with the new amount to be shown immediately
if(client?.prefs?.weight_gain_extreme)
xwg_resize()
return TRUE
/mob/living/carbon/proc/fat_show() //If something that hides fatness is removed or expires, it'll call this method
fatness_hidden = FALSE
fatness = fatness_real //To update a mob's fatness with their real one immediately
if(client?.prefs?.weight_gain_extreme)
xwg_resize()
return TRUE
/mob/living/carbon/proc/xwg_resize()
var/xwg_size = sqrt(fatness/FATNESS_LEVEL_BLOB)
xwg_size = min(xwg_size, RESIZE_MACRO)
xwg_size = max(xwg_size, custom_body_size*0.01)
resize(xwg_size)
+26 -4
View File
@@ -5,15 +5,20 @@
gain_text = "<span class='notice'>You find yourself able to weave webs.</span>"
lose_text = "<span class='notice'>You are no longer able to weave webs.</span>"
category = CATEGORY_SEXUAL
mob_trait = TRAIT_WEB_WEAVER
///What action is linked with this quirk?
var/datum/action/innate/wrap_target/linked_action
var/datum/action/innate/wrap_target/linked_action1
var/datum/action/innate/make_web/linked_action2
/datum/quirk/web_weaving/post_add()
linked_action = new
linked_action.Grant(quirk_holder)
linked_action1 = new
linked_action1.Grant(quirk_holder)
linked_action2 = new
linked_action2.Grant(quirk_holder)
/datum/quirk/web_weaving/remove()
linked_action.Remove(quirk_holder)
linked_action1.Remove(quirk_holder)
linked_action2.Remove(quirk_holder)
return ..()
/datum/action/innate/wrap_target
@@ -83,3 +88,20 @@
/obj/structure/spider/cocoon/quirk
max_integrity = 20
/datum/action/innate/make_web
name = "weave"
desc = "spins a sticky web."
icon_icon = 'icons/effects/effects.dmi'
button_icon_state = "stickyweb1"
background_icon_state = "bg_alien"
/datum/action/innate/make_web/Activate()
var/turf/T = get_turf(owner)
owner.visible_message("<span class='warning'>[owner] begins spinning a web!</span>", "<span class='warning'>You begin spinning a web.</span>")
if(!do_after(owner, 10 SECONDS, 1, null, 1))
owner.visible_message("<span class='warning'>[owner] fails to spin a web!</span>", "<span class='warning'>You fail to spin web.</span>")
return FALSE
T.ChangeTurf(/obj/structure/spider/stickyweb)
owner.visible_message("<span class='warning'>[owner] spin a sticky web!</span>", "<span class='warning'>You spin a sticky web.</span>")
return TRUE
@@ -13,6 +13,8 @@
var/weight_gain_magic = FALSE
///Weight gain from viruses
var/weight_gain_viruses = FALSE
///Extreme weight gain
var/weight_gain_extreme = FALSE
///Does the person wish to be involved with non-con weight gain events?
var/noncon_weight_gain = FALSE
@@ -0,0 +1,4 @@
// This is a file for emotes that have been rewritten to be more modular. Such as varying based on species or whathave you. May move this later or something.
//I was going to put screams in here but I overhauled it in a different more austistic way
@@ -0,0 +1,230 @@
// This is an emote file for random shit we've ported. Im just copying the style recipes_ported.dm did, yell at me if im wrong later.
// It said it was lazy but personally I think this might be a better way of organizing otherwise unique content that we're porting
// for ourselves. -Reo
// I found this tacked onto the bottom of code/modules/mob/living/emote.dm. No //code add: notice or anything. Moving it here,
// since it seems to all be ported emotes. -Reo
/*
//Carl wuz here
//FUCK YOU CARL SUCK MY BALLS YOU WHORE
/datum/emote/living/tesh_sneeze
key = "tesh_sneeze"
key_third_person = "sneezes"
message = "sneezes."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/tesh_sneeze/can_run_emote(mob/living/user, status_check = TRUE)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
return !C.silent
/datum/emote/living/tesh_sneeze/run_emote(mob/user, params)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
if(!C.mind || C.mind.miming)//no cute sneezing for you.
return
if(ishumanbasic(C))
playsound(C, pick('hyperstation/sound/voice/emotes/tesh_sneeze1.ogg', 'hyperstation/sound/voice/emotes/tesh_sneeze1b.ogg'), 50, 1)
if(is_species(user, /datum/species/avian))//This is required(related to subtypes), otherwise it doesn't play the noises. Sometimes. Always sometimes. Just how it be.
playsound(C, pick('hyperstation/sound/voice/emotes/tesh_sneeze1.ogg', 'hyperstation/sound/voice/emotes/tesh_sneeze1b.ogg'), 50, 1)
if(is_species(user, /datum/species/mammal))//Just because the avian subspecies doesn't have proper sprites. Some people can't use it.
playsound(C, pick('hyperstation/sound/voice/emotes/tesh_sneeze1.ogg', 'hyperstation/sound/voice/emotes/tesh_sneeze1b.ogg'), 50, 1)
/datum/emote/living/racc
key = "racc_chitter"
key_third_person = "chitters"
message = "chitters."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/racc/can_run_emote(mob/living/user, status_check = TRUE)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
return !C.silent
/datum/emote/living/racc/run_emote(mob/user, params)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
if(!C.mind || C.mind.miming)
return
if(ishumanbasic(C))
playsound(C, pick('hyperstation/sound/voice/emotes/racc_chitter_1.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_2.ogg',\
'hyperstation/sound/voice/emotes/racc_chitter_3.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_4.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_5.ogg',\
'hyperstation/sound/voice/emotes/racc_chitter_6.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_7.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_8.ogg'), 50, 1)
if(is_species(user, /datum/species/mammal))
playsound(C, pick('hyperstation/sound/voice/emotes/racc_chitter_1.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_2.ogg',\
'hyperstation/sound/voice/emotes/racc_chitter_3.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_4.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_5.ogg',\
'hyperstation/sound/voice/emotes/racc_chitter_6.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_7.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_8.ogg'), 50, 1)
/datum/emote/living/bat
key = "bat_chitter"
key_third_person = "chitters"
message = "chitters."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/bat/can_run_emote(mob/living/user, status_check = TRUE)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
return !C.silent
/datum/emote/living/bat/run_emote(mob/user, params)
. = ..()
if(. && iscarbon(user))
var/mob/living/carbon/C = user
if(!C.mind || C.mind.miming)
return
if(ishumanbasic(C))
playsound(C, pick('hyperstation/sound/voice/emotes/bat_c1.ogg', 'hyperstation/sound/voice/emotes/bat_c2.ogg', 'hyperstation/sound/voice/emotes/bat_c3.ogg',\
'hyperstation/sound/voice/emotes/bat_c4.ogg', 'hyperstation/sound/voice/emotes/bat_c5.ogg',\
'hyperstation/sound/voice/emotes/bat_c6.ogg', 'hyperstation/sound/voice/emotes/bat_c7.ogg', 'hyperstation/sound/voice/emotes/bat_c8.ogg',\
'hyperstation/sound/voice/emotes/bat_c9.ogg'), 50, 1)
if(is_species(user, /datum/species/mammal))
playsound(C, pick('hyperstation/sound/voice/emotes/bat_c1.ogg', 'hyperstation/sound/voice/emotes/bat_c2.ogg', 'hyperstation/sound/voice/emotes/bat_c3.ogg',\
'hyperstation/sound/voice/emotes/bat_c4.ogg', 'hyperstation/sound/voice/emotes/bat_c5.ogg',\
'hyperstation/sound/voice/emotes/bat_c6.ogg', 'hyperstation/sound/voice/emotes/bat_c7.ogg', 'hyperstation/sound/voice/emotes/bat_c8.ogg',\
'hyperstation/sound/voice/emotes/bat_c9.ogg'), 50, 1)
if(is_species(user, /datum/species/avian))//this and mammal should be considered the same AAAAAAAAAAAA
playsound(C, pick('hyperstation/sound/voice/emotes/bat_c1.ogg', 'hyperstation/sound/voice/emotes/bat_c2.ogg', 'hyperstation/sound/voice/emotes/bat_c3.ogg',\
'hyperstation/sound/voice/emotes/bat_c4.ogg', 'hyperstation/sound/voice/emotes/bat_c5.ogg',\
'hyperstation/sound/voice/emotes/bat_c6.ogg', 'hyperstation/sound/voice/emotes/bat_c7.ogg', 'hyperstation/sound/voice/emotes/bat_c8.ogg',\
'hyperstation/sound/voice/emotes/bat_c9.ogg'), 50, 1)
*/
//End of the random emotes I found in mob/living
//Rewrites of the above start.
/datum/emote/living/carbon/teshsneeze
key = "teshsneeze"
key_third_person = "sneezes"
message = "sneezes."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/teshsneeze/get_sound()
return pick('GainStation13/sound/voice/teshari/teshsneeze.ogg', 'GainStation13/sound/voice/teshari/teshsneezeb.ogg')
/datum/emote/living/carbon/racc
key = "racc_chitter"
key_third_person = "raccchitters"
message = "chitters."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/racc/get_sound()
return pick('hyperstation/sound/voice/emotes/racc_chitter_1.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_2.ogg',\
'hyperstation/sound/voice/emotes/racc_chitter_3.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_4.ogg', \
'hyperstation/sound/voice/emotes/racc_chitter_5.ogg','hyperstation/sound/voice/emotes/racc_chitter_6.ogg', \
'hyperstation/sound/voice/emotes/racc_chitter_7.ogg', 'hyperstation/sound/voice/emotes/racc_chitter_8.ogg')
/datum/emote/living/carbon/bat
key = "bat_chitter"
key_third_person = "bat_chitters"
message = "chitters."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/bat/get_sound()
return pick('hyperstation/sound/voice/emotes/bat_c1.ogg', 'hyperstation/sound/voice/emotes/bat_c2.ogg', \
'hyperstation/sound/voice/emotes/bat_c3.ogg', 'hyperstation/sound/voice/emotes/bat_c4.ogg', \
'hyperstation/sound/voice/emotes/bat_c5.ogg','hyperstation/sound/voice/emotes/bat_c6.ogg', \
'hyperstation/sound/voice/emotes/bat_c7.ogg', 'hyperstation/sound/voice/emotes/bat_c8.ogg',\
'hyperstation/sound/voice/emotes/bat_c9.ogg')
//Rewrites of the above end.
//Ported from Vorestation
/datum/emote/living/carbon/teshsqueak
key = "teshsurprise" //Originally, It was just "surprised" but I dont think that's very telling of a teshari emote.
key_third_person = "teshsurprised"
message = "chirps in surprise!"
message_param = "chirps in surprise at %t!"
emote_type = EMOTE_AUDIBLE
sound = 'GainStation13/sound/voice/teshari/teshsqueak.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
/datum/emote/living/carbon/teshchirp
key = "tchirp"
key_third_person = "tchirps"
message = "chirps!"
message_param = "chirps at %t!"
emote_type = EMOTE_AUDIBLE
sound = 'GainStation13/sound/voice/teshari/teshchirp.ogg' // Copyright Sampling+ 1.0 Incarnidine (freesound.org) for the source audio.
/datum/emote/living/carbon/teshtrill
key = "trill"
key_third_person = "trills"
message = "trills."
message_param = "trills at %t."
emote_type = EMOTE_AUDIBLE
sound = 'GainStation13/sound/voice/teshari/teshtrill.ogg' // Copyright CC BY-NC 3.0 Arnaud Coutancier (freesound.org) for the source audio.
/datum/emote/living/sneeze/teshsneeze //Replace this with a modular species/tongue based sneeze system later. Also piggybacking on normal sneezes
key = "teshsneeze"
key_third_person = "teshsneezes"
message = "sneezes."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/sneeze/teshsneeze/get_sound()
return pick('GainStation13/sound/voice/teshari/teshsneeze.ogg', 'GainStation13/sound/voice/teshari/teshsneezeb.ogg')
/datum/emote/living/cough/teshcough //Same as above. Replace with a modular system later.
key = "teshcough"
key_third_person = "teshcoughs"
message = "coughs."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/cough/teshcough/get_sound()
return pick('GainStation13/sound/voice/teshari/teshcougha.ogg', 'GainStation13/sound/voice/teshari/teshcoughb.ogg')
/datum/emote/living/carbon/teshscream
key = "teshscream"
key_third_person = "teshscreams"
message = "screams!"
message_param = "screams at %t!"
emote_type = EMOTE_AUDIBLE
sound = 'GainStation13/sound/voice/teshari/teshscream.ogg'
/datum/emote/living/teppi
key = "gyoh"
key_third_person = "gyohs"
message = "gyohs"
var/bigsound = list('GainStation13/sound/voice/teppi/gyooh1.ogg', 'GainStation13/sound/voice/teppi/gyooh2.ogg', \
'GainStation13/sound/voice/teppi/gyooh3.ogg', 'GainStation13/sound/voice/teppi/gyooh4.ogg', \
'GainStation13/sound/voice/teppi/gyooh5.ogg', 'GainStation13/sound/voice/teppi/gyooh6.ogg')
var/smolsound = list('GainStation13/sound/voice/teppi/whine1.ogg', 'GainStation13/sound/voice/teppi/whine2.ogg')
/datum/emote/living/teppi/run_emote(mob/living/user, params)
/* //If we port teppi later, Enable this.
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi))
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi/baby))
sound = pick(smolsound)
else
sound = pick(bigsound)
return ..()
*/
if(user.size_multipler >= 1.5)
sound = pick(bigsound)
else
sound = pick(smolsound)
. = ..()
/datum/emote/living/teppi/rumble
key = "rumble"
key_third_person = "rumbles"
message = "rumbles contentedly."
sound = 'GainStation13/sound/voice/teppi/cute_rumble.ogg'
var/bigsound = list('GainStation13/sound/voice/teppi/rumble.ogg')
var/smolsound = list('GainStation13/sound/voice/teppi/cute_rumble.ogg')
//Vorestation ports end.
//Ported from Chompstation
/datum/emote/living/wawa
key = "wawa"
key_third_person = "wawas"
message = "wawas."
message_param = "wawas at %t."
emote_type = EMOTE_AUDIBLE
sound = 'GainStation13/sound/voice/emotes/wawa.ogg'
//Chompstation ports end.
@@ -11,6 +11,7 @@
actions_types = list(/datum/action/item_action/toggle_tube)
var/mob/living/carbon/U = null
var/transfer_amount = 1
amount_per_transfer_from_this = 0
possible_transfer_amounts = list(0)
@@ -60,7 +61,7 @@
if(reagents.total_volume)
var/fraction = min(1/reagents.total_volume, 1)
reagents.reaction(U, INGEST, fraction, FALSE)
reagents.trans_to(U, 1, 2)
reagents.trans_to(U, transfer_amount, 2)
else
to_chat(U, "<span class='warning'>The barrel is empty!</span>")
U = null
@@ -5,7 +5,7 @@
display_name = "Nutri-Tech Tools"
description = "Ending world hunger was never made easier!"
prereq_ids = list("biotech", "adv_engi") // add "engineering" if the designs get complicated later on
design_ids = list("calorite_collar", "ci-nutrimentturbo", "bluespace_belt")
design_ids = list("calorite_collar", "ci-nutrimentturbo", "bluespace_belt", "adipoelectric_transformer")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
boost_item_paths = list(/obj/item/gun/energy/fatoray, /obj/item/gun/energy/fatoray/cannon, /obj/item/trash/fatoray_scrap1, /obj/item/trash/fatoray_scrap2)
export_price = 5000
@@ -143,3 +143,17 @@
icon_state = "ballgag"
item_state = "ballgag"
flags_inv = HIDEFACE
/obj/item/service_sign
name = "service sign"
desc = "A sign that reads 'closed'"
icon = 'GainStation13/icons/obj/service_sign.dmi'
icon_state = "sign_closed"
/obj/item/service_sign/attack_self()
if(icon_state == "sign_closed")
icon_state = "sign_open"
desc = "A sign that reads 'open'"
else
icon_state = "sign_closed"
desc = "A sign that reads 'closed'"