Files
SkyratBot 1fdf3d739a [MIRROR] Donk Co Interstellar Trading Post 6016 (#29007)
* Donk Co Interstellar Trading Post 6016 (#83075)

## About The Pull Request
Adds a new space ruin to the pool. It's the haunted trading post. It is
a whiteship dock with a large (safe) common area. The back rooms contain
loot and danger. Here are a few 'teaser' images.

https://i.imgur.com/M1te9Ha.png https://i.imgur.com/SF3bJ62.png
https://i.imgur.com/i9xeUFP.png https://i.imgur.com/UBwpJAM.png

Notable treasures: Cash, Donk Co merch, Donk Co guns, Donk Co Donk
Pockets, Donk Co vendors, Donk Co ID Cards, and the Donk Co Secret
Recipe.

Oh yeah the secret documents teach you how to make three prototype
variants of Donk Pockets. There is no limit to the amount of times it
can be read, so if you want to corner the market remember to lock up the
documents. Or you can share them with your friends.

**Now COMPLETE!**

![proof i ran this at least once
locally](https://i.imgur.com/39kvyqd.png)

## Why It's Good For The Game
This ruin is a multi-room dungeon with multiple solutions to each room.
It has plenty of action from mobs, traps and hazards. Each room has some
form of treasure or unique item in it. There's a boss at the end with
great rewards for fighting it, including a cool gun (slightly worse
variant of laser carbine).

This ruin is also a whiteship dock and space base. The public area is
entirely safe: stick to the well lit sector and don't trespass in the
employees only areas and you won't be harmed. There is a variety of
vendors to resupply at (including a brand new Donk Co snack vendor) but
unlike most other space ruins you do have to pay. A whiteship can dock
at this ruin if you have one, so you can bring groups of people to party
or attack the dungeon together.
## Changelog
🆑
add: Adds the Haunted Trading Post space ruin.
add: Adds 10+ unique items for the Haunted Trading Post
add: Adds 5 dangerous mobs for the Haunted Trading Post
add: Adds 4 new types of hazardous traps for the Haunted Trading Post.
/🆑

---------

Co-authored-by: Afevis <ShizCalev@ users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>

* Donk Co Interstellar Trading Post 6016

* [MIRROR] Donk Co Interstellar Trading Post 6016 [MDB IGNORE] (#3943)

* Donk Co Interstellar Trading Post 6016

* i'd rather a pepsi

---------

Co-authored-by: Da Cool Boss <142358580+DaCoolBoss@users.noreply.github.com>
Co-authored-by: Fluffles <piecopresident@gmail.com>

---------

Co-authored-by: Da Cool Boss <142358580+DaCoolBoss@users.noreply.github.com>
Co-authored-by: Afevis <ShizCalev@ users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
Co-authored-by: NovaBot <154629622+NovaBot13@users.noreply.github.com>
Co-authored-by: Fluffles <piecopresident@gmail.com>
2024-07-27 19:57:49 +05:30

119 lines
4.3 KiB
Plaintext

///////////////Donk Exenteration Drone - DED////////////
//A patrolling bot that cuts you up if you get close. Use ranged weapons or avoid it.
#define SPIN_SLASH_ABILITY_TYPEPATH /datum/action/cooldown/mob_cooldown/exenterate
/mob/living/basic/bot/dedbot
name = "\improper Donk Exenteration Drone" //Exenteration means ripping entrails out, ouch!
desc = "A bladed commercial defence drone, often called an 'Ex-Drone' or 'D.E.D.bot'. It follows a simple programmed patrol route, and slashes at anyone who doesn't have an identity implant."
icon_state = "ded_drone0"
base_icon_state = "ded_drone"
req_one_access = list(ACCESS_SYNDICATE)
health = 50
maxHealth = 50
melee_damage_lower = 15
melee_damage_upper = 20
light_range = 1
light_power = 0.3
light_color = "#eb1809"
ai_controller = /datum/ai_controller/basic_controller/bot/dedbot
faction = list(ROLE_SYNDICATE)
sharpness = SHARP_EDGED
attack_verb_continuous = "eviscerates"
attack_verb_simple = "eviscerate"
attack_sound = 'sound/weapons/bladeslice.ogg'
attack_vis_effect = ATTACK_EFFECT_SLASH
gold_core_spawnable = HOSTILE_SPAWN
limb_destroyer = TRUE
bubble_icon = "machine"
pass_flags = PASSMOB | PASSFLAPS
maximum_survivable_temperature = 360 //prone to overheating
possessed_message = "You are an exenteration drone. Exenterate."
additional_access = /datum/id_trim/away/hauntedtradingpost/boss
bot_mode_flags = BOT_MODE_ON | BOT_MODE_AUTOPATROL
mob_size = MOB_SIZE_SMALL
robot_arm = /obj/item/hatchet/cutterblade
density = FALSE
COOLDOWN_DECLARE(trigger_cooldown)
//time between exenteration uses
var/exenteration_cooldown_duration = 0.5 SECONDS
//aoe slash ability
var/datum/action/cooldown/mob_cooldown/bot/exenterate
/mob/living/basic/bot/dedbot/Initialize(mapload)
. = ..()
AddElement(/datum/element/death_drops, /obj/effect/gibspawner/robot)
var/static/list/innate_actions = list(
SPIN_SLASH_ABILITY_TYPEPATH = BB_DEDBOT_SLASH,
)
grant_actions_by_list(innate_actions)
/datum/ai_controller/basic_controller/bot/dedbot
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
BB_TARGET_MINIMUM_STAT = DEAD,
BB_AGGRO_RANGE = 2,
)
ai_movement = /datum/ai_movement/jps/bot
planning_subtrees = list(
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/targeted_mob_ability/exenterate,
/datum/ai_planning_subtree/respond_to_summon,
/datum/ai_planning_subtree/find_patrol_beacon,
/datum/ai_planning_subtree/manage_unreachable_list,
)
max_target_distance = AI_BOT_PATH_LENGTH
///keys to be reset when the bot is reseted
reset_keys = list(
BB_BEACON_TARGET,
BB_PREVIOUS_BEACON_TARGET,
BB_BOT_SUMMON_TARGET,
)
/datum/ai_planning_subtree/targeted_mob_ability/exenterate
ability_key = BB_DEDBOT_SLASH
finish_planning = FALSE
/datum/action/cooldown/mob_cooldown/exenterate
name = "Exenterate"
desc = "Disembowel every living thing in range with your blades."
button_icon = 'icons/obj/weapons/stabby.dmi'
button_icon_state = "huntingknife"
click_to_activate = FALSE
background_icon = 'icons/hud/guardian.dmi'
background_icon_state = "base"
cooldown_time = 0.5 SECONDS
// radius in tiles of AOE effect
var/ability_range = 1
// how much damage this ability does
var/damage_dealt = 18
// factions we dont attack
var/immune_factions = list(ROLE_SYNDICATE)
// weighted list of body zones this can hit
var/static/list/valid_targets = list(
BODY_ZONE_CHEST = 2,
BODY_ZONE_R_ARM = 1,
BODY_ZONE_L_ARM = 1,
BODY_ZONE_R_LEG = 1,
BODY_ZONE_L_LEG = 1,
)
/datum/action/cooldown/mob_cooldown/exenterate/Activate(atom/caster)
if(!COOLDOWN_FINISHED(src, cooldown_time))
return FALSE
caster.Shake(1.4, 0.8, 0.3 SECONDS)
caster.visible_message(span_danger("[caster] shakes violently!"))
playsound(caster, 'sound/weapons/drill.ogg', 120 , TRUE)
slash_em(caster)
StartCooldown(cooldown_time)
/datum/action/cooldown/mob_cooldown/exenterate/proc/slash_em(atom/caster)
for(var/mob/living/victim in range(ability_range, caster))
if(faction_check(victim.faction, immune_factions) && owner.CanReach(victim))
continue
to_chat(caster, span_warning("You slice [victim]!"))
to_chat(victim, span_warning("You are cut by [caster]'s blades!"))
victim.apply_damage(damage = damage_dealt, damagetype = BRUTE, def_zone = pick(valid_targets), sharpness = SHARP_EDGED)
#undef SPIN_SLASH_ABILITY_TYPEPATH