mirror of
https://github.com/KabKebab/GS13.git
synced 2026-08-30 16:38:30 +01:00
Reapply "Merge branch 'master' into trash-eat-Mk2"
This reverts commit d638582401.
This commit is contained in:
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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'"
|
||||
|
||||
Reference in New Issue
Block a user