Files
008876823c Adds two new BR maps, basic mobs, BR tweaks & fixes (#85292)
## About The Pull Request
Title. Adds two new maps: 
- Grasslands Hunt (peaceful)
- Meta Central (easy)

These maps add a new basic revolutionary mob and significantly upgrades
the ai of basic deer.
This fixes an issue where modular maps were not correctly spawning mobs
or adding them to the "mutable candidates" for antagonists.
There's also some balance changes to bitrunning vendor prices, which are
generally now lower. This change is unrelated to the PR as a whole so
I'm okay with removing it if there's concern

### photos
<details>
<summary>expand</summary>

![Screenshot 2024-07-26
151822](https://github.com/user-attachments/assets/61fd84f3-3768-4b7a-b421-a953fb8b8174)

![Screenshot 2024-07-26
151834](https://github.com/user-attachments/assets/27193237-858e-41ac-953c-6c30846c98c0)

</details>

### todo

- [x] Fix the revolutionary death anim
- [x] Make deer run when injured
## Why It's Good For The Game
New maps as a general positive for bitrunning
Bug fixes
Makes vendor choices for bitrunning-exclusive items generally less of a
chore to get
## Changelog
jlsnow301, MMMiracles, KikoWen0, Ben10Omintrix
🆑
add: Added two new bitrunning maps: Grasslands Hunt and Meta Central.
add: Deer are now more complex animals, granting them enhanced ability
to run amok and chew your favorite plants.
balance: Reduced the cost of most BR vendor items.
fix: Fixes an issue where modular virtual domains spawned less mobs than
intended.
fix: These modular spawns are now valid mutation targets to become an
antagonist.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-09-06 01:53:50 +02:00

147 lines
4.6 KiB
Plaintext

/mob/living/basic/revolutionary
name = "Revolutionary"
desc = "They stand for a cause..."
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
faction = list(FACTION_HOSTILE)
icon = 'icons/mob/simple/simple_human.dmi'
gender = MALE
basic_mob_flags = DEL_ON_DEATH
attack_verb_continuous = "robusts"
attack_verb_simple = "robust"
maxHealth = 50
health = 50
melee_damage_lower = 15
melee_damage_upper = 20
obj_damage = 20
attack_sound = 'sound/weapons/smash.ogg'
ai_controller = /datum/ai_controller/basic_controller/revolutionary
/// list of weapons we can have
var/static/list/possible_weapons = list(
/obj/item/storage/toolbox/mechanical = "robust",
/obj/item/spear = "pierce",
/obj/item/fireaxe = "slice",
/obj/item/melee/baseball_bat = "bat",
/obj/item/melee/baton = "discipline",
)
/// List of things to shout
var/static/list/phrases = list(
"The revolution will not be televized!",
"VIVA!",
"Dirty pig!",
"Gondola meat is murder!",
"Free Cargonia!",
"Mime rights are human rights!",
"猫娘 Free Terry!",
)
/// List of causes to #support
var/static/list/causes = list(
"Worker's rights",
"Icemoon climate change",
"Fair clown treatment",
"Lizards",
"Moths",
"Stop Lavaland drilling",
"The Captain has been replaced by a robot",
"Free Cargonia",
"Befriend all space dragons",
"The Grey Tide",
"Rising cost of medbay",
)
/// Monkey screeches
var/static/list/monkey_screeches = list(
'sound/creatures/monkey/monkey_screech_1.ogg',
'sound/creatures/monkey/monkey_screech_2.ogg',
'sound/creatures/monkey/monkey_screech_3.ogg',
'sound/creatures/monkey/monkey_screech_4.ogg',
)
/// Male screams
var/static/list/male_screams = list(
'sound/voice/human/malescream_1.ogg',
'sound/voice/human/malescream_2.ogg',
'sound/voice/human/malescream_3.ogg',
'sound/voice/human/malescream_4.ogg',
'sound/voice/human/malescream_5.ogg',
)
/// Female screams
var/static/list/female_screams = list(
'sound/voice/human/femalescream_1.ogg',
'sound/voice/human/femalescream_2.ogg',
'sound/voice/human/femalescream_3.ogg',
'sound/voice/human/femalescream_4.ogg',
'sound/voice/human/femalescream_5.ogg',
)
/mob/living/basic/revolutionary/Initialize(mapload)
. = ..()
shuffle_inplace(phrases)
var/static/list/display_emote = list(
BB_EMOTE_SAY = phrases,
BB_EMOTE_SOUND = monkey_screeches,
BB_SPEAK_CHANCE = 5,
)
ai_controller.set_blackboard_key(BB_BASIC_MOB_SPEAK_LINES, display_emote)
var/obj/item/weapon_of_choice = pick(possible_weapons)
attack_sound = weapon_of_choice::hitsound
attack_verb_simple = possible_weapons[weapon_of_choice]
attack_verb_continuous = "[attack_verb_simple]s"
var/static/list/death_loot = list(/obj/effect/mob_spawn/corpse/human/revolutionary)
AddElement(/datum/element/death_drops, death_loot)
apply_dynamic_human_appearance(src, mob_spawn_path = /obj/effect/mob_spawn/corpse/human/revolutionary, l_hand = weapon_of_choice)
gender = pick(MALE, FEMALE, PLURAL)
var/first_name
switch(gender)
if(MALE)
first_name = pick(GLOB.first_names_male)
death_sound = pick(male_screams + monkey_screeches)
if(FEMALE)
first_name = pick(GLOB.first_names_female)
death_sound = pick(female_screams + monkey_screeches)
if(PLURAL)
first_name = pick(GLOB.first_names)
death_sound = pick(male_screams + female_screams + monkey_screeches)
fully_replace_character_name(name, "[first_name] [pick(GLOB.last_names)]")
desc += span_infoplain("\nToday, that cause is: ")
shuffle_inplace(causes)
desc += span_notice("#[pick(causes)].")
/obj/effect/mob_spawn/corpse/human/revolutionary
name = "Revolutionary"
outfit = /datum/outfit/revolution
/datum/outfit/revolution
name = "Revolution"
uniform = /obj/item/clothing/under/color/grey
head = /obj/item/clothing/head/costume/ushanka
mask = /obj/item/clothing/mask/gas
gloves = /obj/item/clothing/gloves/color/black
shoes = /obj/item/clothing/shoes/jackboots
/datum/ai_controller/basic_controller/revolutionary
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
)
ai_movement = /datum/ai_movement/basic_avoidance
idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking
planning_subtrees = list(
/datum/ai_planning_subtree/random_speech/blackboard/revolutionary,
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
)
/datum/ai_planning_subtree/random_speech/blackboard/revolutionary
/datum/ai_planning_subtree/random_speech/blackboard/revolutionary/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
if(!controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET))
return
return ..()