mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-18 02:28:37 +01:00
## About The Pull Request <details> - renamed ai folder to announcer -- announcer -- - moved vox_fem to announcer - moved approachingTG to announcer - separated the ambience folder into ambience and instrumental -- ambience -- - created holy folder moved all related sounds there - created engineering folder and moved all related sounds there - created security folder and moved ambidet there - created general folder and moved ambigen there - created icemoon folder and moved all icebox-related ambience there - created medical folder and moved all medbay-related ambi there - created ruin folder and moves all ruins ambi there - created beach folder and moved seag and shore there - created lavaland folder and moved related ambi there - created aurora_caelus folder and placed its ambi there - created misc folder and moved the rest of the files that don't have a specific category into it -- instrumental -- - moved traitor folder here - created lobby_music folder and placed our songs there (title0 not used anywhere? - server-side modification?) -- items -- - moved secdeath to hailer - moved surgery to handling -- effects -- - moved chemistry into effects - moved hallucinations into effects - moved health into effects - moved magic into effects -- vehicles -- - moved mecha into vehicles created mobs folder -- mobs -- - moved creatures folder into mobs - moved voice into mobs renamed creatures to non-humanoids renamed voice to humanoids -- non-humanoids-- created cyborg folder created hiss folder moved harmalarm.ogg to cyborg -- humanoids -- -- misc -- moved ghostwhisper to misc moved insane_low_laugh to misc I give up trying to document this. </details> - [X] ambience - [x] announcer - [x] effects - [X] instrumental - [x] items - [x] machines - [x] misc - [X] mobs - [X] runtime - [X] vehicles - [ ] attributions ## Why It's Good For The Game This folder is so disorganized that it's vomit inducing, will make it easier to find and add new sounds, providng a minor structure to the sound folder. ## Changelog 🆑 grungussuss refactor: the sound folder in the source code has been reorganized, please report any oddities with sounds playing or not playing server: lobby music has been repathed to sound/music/lobby_music /🆑
181 lines
7.0 KiB
Plaintext
181 lines
7.0 KiB
Plaintext
/**
|
|
* Base type of various spider life stages
|
|
*/
|
|
/mob/living/basic/spider
|
|
name = "abstract spider"
|
|
desc = "Furry and abstract, it makes you shudder to look at it. This one should not exist."
|
|
icon = 'icons/mob/simple/arachnoid.dmi'
|
|
mob_biotypes = MOB_ORGANIC|MOB_BUG
|
|
speak_emote = list("chitters")
|
|
butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8)
|
|
response_help_continuous = "pets"
|
|
response_help_simple = "pet"
|
|
response_disarm_continuous = "gently pushes aside"
|
|
response_disarm_simple = "gently push aside"
|
|
initial_language_holder = /datum/language_holder/spider
|
|
melee_attack_cooldown = CLICK_CD_MELEE
|
|
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 1, OXY = 1)
|
|
basic_mob_flags = FLAMMABLE_MOB
|
|
status_flags = NONE
|
|
unsuitable_cold_damage = 4
|
|
unsuitable_heat_damage = 4
|
|
combat_mode = TRUE
|
|
faction = list(FACTION_SPIDER)
|
|
pass_flags = PASSTABLE
|
|
attack_verb_continuous = "bites"
|
|
attack_verb_simple = "bite"
|
|
attack_sound = 'sound/items/weapons/bite.ogg'
|
|
attack_vis_effect = ATTACK_EFFECT_BITE
|
|
unique_name = TRUE
|
|
lighting_cutoff_red = 22
|
|
lighting_cutoff_green = 5
|
|
lighting_cutoff_blue = 5
|
|
/// Speed modifier to apply if controlled by a human player
|
|
var/player_speed_modifier = -4
|
|
/// What reagent the mob injects targets with
|
|
var/poison_type = /datum/reagent/toxin/hunterspider
|
|
/// How much of a reagent the mob injects on attack
|
|
var/poison_per_bite = 0
|
|
/// How tough is our bite?
|
|
var/bite_injection_flags = NONE
|
|
/// Multiplier to apply to web laying speed. Fractional numbers make it faster, because it's a multiplier.
|
|
var/web_speed = 1
|
|
/// Type of webbing ability to learn.
|
|
var/web_type = /datum/action/cooldown/mob_cooldown/lay_web
|
|
/// The message that the mother spider left for this spider when the egg was layed.
|
|
var/directive = ""
|
|
/// Short description of what this mob is capable of, for radial menu uses
|
|
var/menu_description = "Tanky and strong for the defense of the nest and other spiders."
|
|
/// If true then you shouldn't be told that you're a spider antagonist as soon as you are placed into this mob
|
|
var/apply_spider_antag = TRUE
|
|
|
|
/mob/living/basic/spider/Initialize(mapload)
|
|
. = ..()
|
|
add_traits(list(TRAIT_WEB_SURFER, TRAIT_FENCE_CLIMBER), INNATE_TRAIT)
|
|
AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW)
|
|
AddElement(/datum/element/nerfed_pulling, GLOB.typecache_general_bad_things_to_easily_move)
|
|
AddElement(/datum/element/prevent_attacking_of_types, GLOB.typecache_general_bad_hostile_attack_targets, "this tastes awful!")
|
|
AddElement(/datum/element/cliff_walking)
|
|
AddComponent(/datum/component/health_scaling_effects, min_health_slowdown = 1.5)
|
|
|
|
if(poison_per_bite)
|
|
AddElement(/datum/element/venomous, poison_type, poison_per_bite, injection_flags = bite_injection_flags)
|
|
|
|
var/datum/action/cooldown/mob_cooldown/lay_web/webbing = new web_type(src)
|
|
webbing.webbing_time *= web_speed
|
|
webbing.Grant(src)
|
|
ai_controller?.set_blackboard_key(BB_SPIDER_WEB_ACTION, webbing)
|
|
|
|
/mob/living/basic/spider/Login()
|
|
. = ..()
|
|
if(!. || !client)
|
|
return FALSE
|
|
GLOB.spidermobs[src] = TRUE
|
|
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/player_spider_modifier, multiplicative_slowdown = player_speed_modifier)
|
|
|
|
/mob/living/basic/spider/Logout()
|
|
. = ..()
|
|
remove_movespeed_modifier(/datum/movespeed_modifier/player_spider_modifier)
|
|
|
|
/mob/living/basic/spider/Destroy()
|
|
GLOB.spidermobs -= src
|
|
return ..()
|
|
|
|
/mob/living/basic/spider/mob_negates_gravity()
|
|
if(locate(/obj/structure/spider/stickyweb) in loc)
|
|
return TRUE
|
|
return ..()
|
|
|
|
/mob/living/basic/spider/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE)
|
|
. = ..()
|
|
for(var/datum/reagent/toxin/pestkiller/current_reagent in reagents)
|
|
apply_damage(50 * volume_modifier, STAMINA, BODY_ZONE_CHEST)
|
|
|
|
/// Spider which turns into another spider over time
|
|
/mob/living/basic/spider/growing
|
|
/// The mob type we will grow into.
|
|
var/mob/living/basic/spider/grow_as = null
|
|
/// The time it takes for the spider to grow into the next stage
|
|
var/spider_growth_time = 1 MINUTES
|
|
|
|
/mob/living/basic/spider/growing/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(\
|
|
/datum/component/growth_and_differentiation,\
|
|
growth_time = spider_growth_time,\
|
|
growth_path = grow_as,\
|
|
growth_probability = 25,\
|
|
lower_growth_value = 1,\
|
|
upper_growth_value = 2,\
|
|
optional_checks = CALLBACK(src, PROC_REF(ready_to_grow)),\
|
|
optional_grow_behavior = CALLBACK(src, PROC_REF(grow_up))\
|
|
)
|
|
|
|
/**
|
|
* Checks to see if we're ready to grow, primarily if we are on solid ground and not in a vent or something.
|
|
* The component will automagically grow us when we return TRUE and that threshold has been met.
|
|
*/
|
|
/mob/living/basic/spider/growing/proc/ready_to_grow()
|
|
if(isturf(loc))
|
|
return TRUE
|
|
|
|
return FALSE
|
|
|
|
/// Actually grows the young spider into a giant spider. We have to do a bunch of unique behavior that really can't be genericized, so we have to override the component in this manner.
|
|
/**
|
|
* Actually move to our next stage of life.
|
|
*/
|
|
/mob/living/basic/spider/growing/proc/grow_up()
|
|
if(isnull(grow_as))
|
|
if(prob(3))
|
|
grow_as = pick(/mob/living/basic/spider/giant/tarantula, /mob/living/basic/spider/giant/viper, /mob/living/basic/spider/giant/midwife)
|
|
else
|
|
grow_as = pick(/mob/living/basic/spider/giant/guard, /mob/living/basic/spider/giant/ambush, /mob/living/basic/spider/giant/hunter, /mob/living/basic/spider/giant/scout, /mob/living/basic/spider/giant/nurse, /mob/living/basic/spider/giant/tangle)
|
|
|
|
var/mob/living/basic/spider/giant/grown = change_mob_type(grow_as, get_turf(src), initial(grow_as.name))
|
|
ADD_TRAIT(grown, TRAIT_WAS_EVOLVED, REF(src))
|
|
grown.faction = faction.Copy()
|
|
grown.directive = directive
|
|
grown.set_name()
|
|
grown.setBruteLoss(getBruteLoss())
|
|
grown.setFireLoss(getFireLoss())
|
|
qdel(src)
|
|
|
|
/**
|
|
* ### Duct Spider
|
|
* A less than giant spider which lives in the maintenance ducts and makes them annoying to traverse.
|
|
*/
|
|
/mob/living/basic/spider/maintenance
|
|
name = "duct spider"
|
|
desc = "Nanotrasen's imported solution to mice, comes with its own problems."
|
|
icon_state = "maint_spider"
|
|
icon_living = "maint_spider"
|
|
icon_dead = "maint_spider_dead"
|
|
can_be_held = TRUE
|
|
mob_size = MOB_SIZE_TINY
|
|
held_w_class = WEIGHT_CLASS_TINY
|
|
worn_slot_flags = ITEM_SLOT_HEAD
|
|
head_icon = 'icons/mob/clothing/head/pets_head.dmi'
|
|
density = FALSE
|
|
pass_flags = PASSTABLE|PASSGRILLE|PASSMOB
|
|
gold_core_spawnable = FRIENDLY_SPAWN
|
|
maxHealth = 10
|
|
health = 10
|
|
melee_damage_lower = 1
|
|
melee_damage_upper = 1
|
|
speed = 0
|
|
player_speed_modifier = 0
|
|
web_speed = 0.25
|
|
menu_description = "Fragile spider variant which is not good for much other than laying webs."
|
|
response_harm_continuous = "splats"
|
|
response_harm_simple = "splat"
|
|
ai_controller = /datum/ai_controller/basic_controller/giant_spider/pest
|
|
apply_spider_antag = FALSE
|
|
|
|
/mob/living/basic/spider/maintenance/Initialize(mapload)
|
|
. = ..()
|
|
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
|
|
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web)
|
|
AddElement(/datum/element/ai_retaliate)
|
|
AddElement(/datum/element/tiny_mob_hunter)
|