Skip to content

Commit

Permalink
The big ayylmao improvement PR (#1621)
Browse files Browse the repository at this point in the history
* Abductor improvements

* Makes abductor organ surgery consistent with other surgeries (#76124)

## About The Pull Request
Just swaps the Hemo and Retractor steps to make it more in line with
other surgeries
## Why It's Good For The Game
This might just be me but I always forget that the order is different
and it throws off my muscle memory
## Changelog
:cl:
qol: Abductor organ surgery steps shifted around to match other
surgeries
/:cl:

* Abductees strapped to the abductor operating table are now properly layed down (#75524)

## About The Pull Request

This gives the abductor surgery table a buckle angle, so buckled humans
lie down on it properly.

This wasn't an issue for sleeping test subjects, but awake ones would
look like they're standing on the table instead of buckled.

This also changes a the table's can_buckle boolean arg from a 1 to a
TRUE, because I was right next to it.
## Why It's Good For The Game

Reduces confusion, goofiness, etc.
## Changelog
:cl: Rhials
fix: Humans who wake up buckled to the abductor surgery table will no
longer look as if they are standing on it.
/:cl:

* Abductors can now use batons in general. (not just their specialized baton) (#75561)

Abductors can now use any baton instead of just their special baton.
Abductors are a bit fucked if they lose their baton and are unable to
buy one from their shop. Sure they can just use flashes or maint-fu but
those methods are hard and or unreliable. (if they manage to lose their
baton, they probably aren't that robust anyways). This PR gives more
leeway if you fuck up as an abductor.
:cl:
balance: The mothership which abductors came from has worked very hard
to train their field agents how to use batons from their specimen's
habitat
/:cl:

---------

Co-authored-by: san7890 <the@san7890.com>

* Gives abductors three new equipment shop purchase options, splits up abductor_gear.dm (#76101)

Three new items have been added to the abductor credit store. One
carries concrete utility, with the other two being useful for
pranking/mind games.

The first is an alien hypertool with toolsets for either hacking or
surgery equipment. Toggle by right-clicking the item in your hand!

![product
demonstration](https://github.com/tgstation/tgstation/assets/28870487/344772e9-7932-412c-bf56-b501d0793de7)

This can be an equipment upgrade, or replacement, for either member of
the team. It costs 2 research credits to purchase.

Also on the list of new stuff to buy (and stuff shown in the gif above)
-- You can spend extra points on abductorized versions of existing
posters. They can be used as decoration, or to troll and assert
dominance over the crew.

You can also buy a cow. It comes with some wheat.

Now, let's talk about all of the impulsive code changes I made while
making this PR:
- abduction_gear.dm has been split up into abductor_clothing.dm,
abductor_items.dm, and abductor_structures.dm because the file was
getting huge and I didn't want to make it bigger.
- There is now a runtime prevention check for trying to probe
non-humanoid subjects (like a cow).
- The abductor shop now uses defines for its categories, and uses lists
for build paths similarly to cargo crates.

Lastly, to facilitate the hanging of posters on the abductor ship,
posters can now be placed on indestructible walls. The code associated
with hanging posters (/turf/closed/wall/proc/place_poster) has been
moved to the /turf/closed level.

The scope of this PR kind of spiraled out of control with the file
splitting and the change to indestructible walls, I'm hoping it isn't
too much.

As for the spritework, most of it was done through the cannibalization
and recycling of other, existing sprites. Things may not look good (I'm
a coder not a spriter!) and I am open to interjections on what can be
improved.

The hypertool allows for both the scientist and agent to replace their
lost tools (with the same toolspeed), as well as upgrade their current
toolset if they have the spare points. Many use cases, all for the same
2 credit package.

The posters, while providing no mechanical advantage, are a nice
decoration (for an otherwise cramped, totally undecoratable ship) or way
of rubbing your success in the noses of the crew.

The cow is a dual-purpose psychological support/hindrance tool. He can
keep you from getting lonely on the mothership, or be beamed down to the
crew to annoy them.

Each of these are luxury items that give thriving abductor teams
something to spend their excess credits on.
:cl:
add: The abductor equipment vendor now offers a hacking/medical
hypertool, at a price of 2 research points.
add: The abductor equipment vendor now sells decorative abductor
posters, at a price of 1 research point.
add: The abductor equipment vendor now sells a cow, at the price of 1
research point.
fix: Fixes a runtime when trying to probe non-human mobs.
image: Some abductorized versions of existing wall posters and an alien
hypertool.
code: The abductor shop listings now use lists of items, rather than
single build paths.
code: The abductor_gear.dm file has been split up into a few different
files.
code: Posters can now be hung on indestructible walls.
/:cl:

* Blacklist abductor posters from spawning (#76876)

* Abductor / general "Summon Item" spell QoL (#77419)

- Abductor Baton Recall now starts linked to the Abductor's Baton
- Did some misc. spell changed to the abductor baton recall to make it
less spell-like
- Fixes Instant Summon's name not changing to "Recall whatever item"
when an item is marked
- Instant Summons now displays the item marked on the button

Having to mark the abductor baton is bad UX, when making it start marked
is pretty trivial.

Also this just helps it be a lot more obvious what is linked to what if
you end up having more than one instant summons known.

:cl: Melbert
qol: Abductor Baton Recall now starts linked to their baton, and you can
no longer unlink your baton
qol: Instant Summons now shows what item is marked over the icon
fix: Fixes Instant Summon's name not updating when marking an item
/:cl:

* Use stamina containers

* Posters return to your hand when cut down/not hung up, abductor posters more resilient to wirecutters (#81924)

## About The Pull Request

Posters now drop into your hand when you cancel the hanging process, or
snip them down with wirecutters. If they can't drop into your hands,
they go to the floor.

Oh, also, this makes it so that abductor wirecutters (or any wirecutters
with a toolspeed better than 0.2 in case of varedits/future additions)
are too weak to cut down abductor posters.
## Why It's Good For The Game

Posters getting dropped to the ground when cancelling the hanging
process has always really annoyed me and I want it to not happen
anymore.

If you want to get those unsightly abductor posters out of your
department you'll have to loot the abductor scientist first (or just
take the wall down but that's admitting defeat).
## Changelog
:cl: Rhials
qol: Posters now return to your hand when the hanging process is
cancelled, or they are snipped down.
qol: Abductor posters can now only be cut down with abductor-tier
wirecutters.
/:cl:

* better abductor vendor; give abductors defibs

* More fixups/improvements

* remove batong recall

* make slimes non-passive

* Update screenshot test

* Allow abductors to brainwash once they've done all their objectives

* Eh, they can do it once they've passed 3 abductions

* Improve code

* I'm an idiot

---------

Co-authored-by: DaydreamIQ <62606051+DaydreamIQ@users.noreply.github.com>
Co-authored-by: Rhials <Datguy33456@gmail.com>
Co-authored-by: Singul0 <127663818+Singul0@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: BlueMemesauce <47338680+BlueMemesauce@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
  • Loading branch information
8 people authored Apr 30, 2024
1 parent c2cbcac commit ef12b56
Show file tree
Hide file tree
Showing 56 changed files with 1,053 additions and 494 deletions.
2 changes: 1 addition & 1 deletion _maps/templates/lazy_templates/abductor_ships.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@
},
/area/centcom/abductor_ship)
"Bh" = (
/obj/machinery/abductor/gland_dispenser,
/obj/machinery/smartfridge/abductor,
/turf/open/floor/plating/abductor,
/area/centcom/abductor_ship)
"BX" = (
Expand Down
20 changes: 20 additions & 0 deletions code/__DEFINES/antagonists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -340,3 +340,23 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list(

/// For changelings, this is how many recent say lines are retained when absorbing a mob
#define LING_ABSORB_RECENT_SPEECH 8

// Various abductor equipment modes.

#define VEST_STEALTH 1
#define VEST_COMBAT 2

#define GIZMO_SCAN 1
#define GIZMO_MARK 2

#define MIND_DEVICE_MESSAGE 1
#define MIND_DEVICE_CONTROL 2

#define TOOLSET_MEDICAL 1
#define TOOLSET_HACKING 2

#define BATON_STUN 0
#define BATON_SLEEP 1
#define BATON_CUFF 2
#define BATON_PROBE 3
#define BATON_MODES 4
1 change: 1 addition & 0 deletions code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_FENCE_CLIMBER "can_climb_fences"
/// means that you can't use weapons with normal trigger guards.
#define TRAIT_CHUNKYFINGERS "chunkyfingers"
#define TRAIT_CHUNKYFINGERS_IGNORE_BATON "chunkyfingers_ignore_baton"
#define TRAIT_DUMB "dumb"
/// Whether a mob is dexterous enough to use machines and certain items or not.
#define TRAIT_ADVANCEDTOOLUSER "advancedtooluser"
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/~monkestation/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@
// /obj/item
/// Whether a storage item can be compressed by the bluespace compression kit, without the usual storage limitation.
#define TRAIT_BYPASS_COMPRESS_CHECK "can_compress_anyways"

#define ABDUCTOR_GLAND_VENTCRAWLING_TRAIT "abductor_gland_ventcrawling"
1 change: 1 addition & 0 deletions code/_globalvars/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_BADDNA" = TRAIT_BADDNA,
"TRAIT_CLUMSY" = TRAIT_CLUMSY,
"TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS,
"TRAIT_CHUNKYFINGERS_IGNORE_BATON" = TRAIT_CHUNKYFINGERS_IGNORE_BATON,
"TRAIT_DUMB" = TRAIT_DUMB,
"TRAIT_ADVANCEDTOOLUSER" = TRAIT_ADVANCEDTOOLUSER,
"TRAIT_DISCOORDINATED_TOOL_USER" = TRAIT_DISCOORDINATED_TOOL_USER,
Expand Down
44 changes: 25 additions & 19 deletions code/game/objects/effects/posters/poster.dm
Original file line number Diff line number Diff line change
Expand Up @@ -185,24 +185,15 @@
qdel(src)
else
to_chat(user, span_notice("You carefully remove the poster from the wall."))
roll_and_drop(Adjacent(user) ? get_turf(user) : loc)
roll_and_drop(Adjacent(user) ? get_turf(user) : loc, user)

/obj/structure/sign/poster/attack_hand(mob/user, list/modifiers)
. = ..()
if(.)
return
if(ruined)
return

visible_message(span_notice("[user] rips [src] in a single, decisive motion!") )
playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, TRUE)
spring_trap(user)

var/obj/structure/sign/poster/ripped/R = new(loc)
R.pixel_y = pixel_y
R.pixel_x = pixel_x
R.add_fingerprint(user)
qdel(src)
tear_poster(user)

/obj/structure/sign/poster/proc/spring_trap(mob/user)
var/obj/item/shard/payload = trap?.resolve()
Expand All @@ -221,15 +212,16 @@
return FALSE
return !user.gloves || !(user.gloves.body_parts_covered & HANDS) || HAS_TRAIT(user, TRAIT_FINGERPRINT_PASSTHROUGH) || HAS_TRAIT(user.gloves, TRAIT_FINGERPRINT_PASSTHROUGH)

/obj/structure/sign/poster/proc/roll_and_drop(atom/location)
/obj/structure/sign/poster/proc/roll_and_drop(atom/location, mob/user)
pixel_x = 0
pixel_y = 0
var/obj/item/poster/rolled_poster = new poster_item_type(location, src) // /obj/structure/sign/poster/wanted/roll_and_drop() has some snowflake handling due to icon memes, if you make a major change to this, don't forget to update it too. <3
forceMove(rolled_poster)
if(!user?.put_in_hands(rolled_poster))
forceMove(rolled_poster)
return rolled_poster

//separated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby()
/turf/closed/wall/proc/place_poster(obj/item/poster/rolled_poster, mob/user)
/turf/closed/proc/place_poster(obj/item/poster/rolled_poster, mob/user)
if(!rolled_poster.poster_structure)
to_chat(user, span_warning("[rolled_poster] has no poster... inside it? Inform a coder!"))
return
Expand Down Expand Up @@ -259,19 +251,30 @@
playsound(src, 'sound/items/poster_being_created.ogg', 100, TRUE)

var/turf/user_drop_location = get_turf(user) //cache this so it just falls to the ground if they move. also no tk memes allowed.
if(!do_after(user, PLACE_SPEED, placed_poster, extra_checks = CALLBACK(placed_poster, TYPE_PROC_REF(/obj/structure/sign/poster, snowflake_wall_turf_check), src)))
placed_poster.roll_and_drop(user_drop_location)
if(!do_after(user, PLACE_SPEED, placed_poster, extra_checks = CALLBACK(placed_poster, TYPE_PROC_REF(/obj/structure/sign/poster, snowflake_closed_turf_check), src)))
placed_poster.roll_and_drop(user_drop_location, user)
return

placed_poster.on_placed_poster(user)
return TRUE

/obj/structure/sign/poster/proc/snowflake_wall_turf_check(atom/hopefully_still_a_wall_turf) //since turfs never get deleted but instead change type, make sure we're still being placed on a wall.
return iswallturf(hopefully_still_a_wall_turf)
/obj/structure/sign/poster/proc/snowflake_closed_turf_check(atom/hopefully_still_a_closed_turf) //since turfs never get deleted but instead change type, make sure we're still being placed on a wall.
return isclosedturf(hopefully_still_a_closed_turf)

/obj/structure/sign/poster/proc/on_placed_poster(mob/user)
to_chat(user, span_notice("You place the poster!"))

/obj/structure/sign/poster/proc/tear_poster(mob/user)
visible_message(span_notice("[user] rips [src] in a single, decisive motion!") )
playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, TRUE)
spring_trap(user)

var/obj/structure/sign/poster/ripped/R = new(loc)
R.pixel_y = pixel_y
R.pixel_x = pixel_x
R.add_fingerprint(user)
qdel(src)

// Various possible posters follow

/obj/structure/sign/poster/ripped
Expand All @@ -287,7 +290,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/ripped, 32)
icon_state = "random_anything"
never_random = TRUE
random_basetype = /obj/structure/sign/poster
blacklisted_types = list(/obj/structure/sign/poster/traitor)
blacklisted_types = list(
/obj/structure/sign/poster/traitor,
/obj/structure/sign/poster/abductor,
)

MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/random, 32)

Expand Down
4 changes: 2 additions & 2 deletions code/game/objects/effects/spawners/random/medical.dm
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
/obj/item/organ/internal/heart/gland/plasma = 7,
/obj/item/organ/internal/heart/gland/chem = 5,
/obj/item/organ/internal/heart/gland/mindshock = 5,
/obj/item/organ/internal/heart/gland/transform = 5,
/obj/item/organ/internal/heart/gland/spiderman = 5,
// /obj/item/organ/internal/heart/gland/transform = 5, /* monkestation: removed */
// /obj/item/organ/internal/heart/gland/spiderman = 5, /* monkestation: removed */
/obj/item/organ/internal/heart/gland/slime = 4,
/obj/item/organ/internal/heart/gland/trauma = 4,
/obj/item/organ/internal/heart/gland/electric = 3,
Expand Down
5 changes: 3 additions & 2 deletions code/game/objects/effects/wanted_poster.dm
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,10 @@
poster_icon.Blend(letter_icon, ICON_OVERLAY)
startX = startX + 4

/obj/structure/sign/poster/wanted/roll_and_drop(atom/location)
/obj/structure/sign/poster/wanted/roll_and_drop(atom/location, mob/user)
pixel_x = 0
pixel_y = 0
var/obj/item/poster/rolled_poster = new poster_item_type(location, original_icon, wanted_name, desc, posterHeaderText, posterHeaderColor)
forceMove(rolled_poster)
if(!user?.put_in_hands(rolled_poster))
forceMove(rolled_poster)
return rolled_poster
2 changes: 1 addition & 1 deletion code/game/objects/items/melee/baton.dm
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@

if(!chunky_finger_usable && ishuman(user))
var/mob/living/carbon/human/potential_chunky_finger_human = user
if(potential_chunky_finger_human.check_chunky_fingers() && user.is_holding(src))
if(potential_chunky_finger_human.check_chunky_fingers() && user.is_holding(src) && !HAS_MIND_TRAIT(user, TRAIT_CHUNKYFINGERS_IGNORE_BATON))
balloon_alert(potential_chunky_finger_human, "fingers are too big!")
return BATON_ATTACK_DONE

Expand Down
6 changes: 6 additions & 0 deletions code/game/turfs/closed/_closed.dm
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@
/turf/closed/indestructible/singularity_act()
return

/turf/closed/indestructible/attackby(obj/item/attacking_item, mob/user, params)
if(istype(attacking_item, /obj/item/poster) && Adjacent(user))
return place_poster(attacking_item, user)

return ..()

/turf/closed/indestructible/oldshuttle
name = "strange shuttle wall"
icon = 'icons/turf/shuttleold.dmi'
Expand Down
2 changes: 1 addition & 1 deletion code/game/turfs/closed/walls.dm
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
for(var/obj/O in src.contents) //Eject contents!
if(istype(O, /obj/structure/sign/poster))
var/obj/structure/sign/poster/P = O
P.roll_and_drop(src)
INVOKE_ASYNC(P, TYPE_PROC_REF(/obj/structure/sign/poster, roll_and_drop), src)
if(decon_type)
ChangeTurf(decon_type, flags = CHANGETURF_INHERIT_AIR)
else
Expand Down
124 changes: 124 additions & 0 deletions code/modules/antagonists/abductor/abductor_structures.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@

// Operating Table / Beds / Lockers

/obj/structure/bed/abductor
name = "resting contraption"
desc = "This looks similar to contraptions from Earth. Could aliens be stealing our technology?"
icon = 'icons/obj/abductor.dmi'
buildstacktype = /obj/item/stack/sheet/mineral/abductor
icon_state = "bed"

/obj/structure/table_frame/abductor
name = "alien table frame"
desc = "A sturdy table frame made from alien alloy."
icon_state = "alien_frame"
framestack = /obj/item/stack/sheet/mineral/abductor
framestackamount = 1

/obj/structure/table_frame/abductor/attackby(obj/item/attacking_item, mob/user, params)
if(attacking_item.tool_behaviour == TOOL_WRENCH)
to_chat(user, span_notice("You start disassembling [src]..."))
attacking_item.play_tool_sound(src)
if(attacking_item.use_tool(src, user, 30))
playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE)
for(var/i in 0 to framestackamount)
new framestack(get_turf(src))
qdel(src)
return
if(istype(attacking_item, /obj/item/stack/sheet/mineral/abductor))
var/obj/item/stack/sheet/stacked_sheets = attacking_item
if(stacked_sheets.get_amount() < 1)
to_chat(user, span_warning("You need one alien alloy sheet to do this!"))
return
to_chat(user, span_notice("You start adding [stacked_sheets] to [src]..."))
if(do_after(user, 50, target = src))
stacked_sheets.use(1)
new /obj/structure/table/abductor(src.loc)
qdel(src)
return
if(istype(attacking_item, /obj/item/stack/sheet/mineral/silver))
var/obj/item/stack/sheet/stacked_sheets = attacking_item
if(stacked_sheets.get_amount() < 1)
to_chat(user, span_warning("You need one sheet of silver to do this!"))
return
to_chat(user, span_notice("You start adding [stacked_sheets] to [src]..."))
if(do_after(user, 50, target = src))
stacked_sheets.use(1)
new /obj/structure/table/optable/abductor(src.loc)
qdel(src)

/obj/structure/table/abductor
name = "alien table"
desc = "Advanced flat surface technology at work!"
icon = 'icons/obj/smooth_structures/alien_table.dmi'
icon_state = "alien_table-0"
base_icon_state = "alien_table"
buildstack = /obj/item/stack/sheet/mineral/abductor
framestack = /obj/item/stack/sheet/mineral/abductor
buildstackamount = 1
framestackamount = 1
smoothing_groups = SMOOTH_GROUP_ABDUCTOR_TABLES
canSmoothWith = SMOOTH_GROUP_ABDUCTOR_TABLES
frame = /obj/structure/table_frame/abductor
custom_materials = list(/datum/material/silver =SHEET_MATERIAL_AMOUNT)

/obj/structure/table/optable/abductor
name = "alien operating table"
desc = "Used for alien medical procedures. The surface is covered in tiny spines."
frame = /obj/structure/table_frame/abductor
buildstack = /obj/item/stack/sheet/mineral/silver
framestack = /obj/item/stack/sheet/mineral/abductor
buildstackamount = 1
framestackamount = 1
icon = 'icons/obj/abductor.dmi'
icon_state = "bed"
can_buckle = TRUE
buckle_lying = 90
/// Amount to inject per second
var/inject_amount = 0.5

var/static/list/injected_reagents = list(/datum/reagent/medicine/cordiolis_hepatico)

/obj/structure/table/optable/abductor/Initialize(mapload)
. = ..()
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
)
AddElement(/datum/element/connect_loc, loc_connections)

/obj/structure/table/optable/abductor/proc/on_entered(datum/source, atom/movable/AM)
SIGNAL_HANDLER
if(iscarbon(AM))
START_PROCESSING(SSobj, src)
to_chat(AM, span_danger("You feel a series of tiny pricks!"))

/obj/structure/table/optable/abductor/process(seconds_per_tick)
. = PROCESS_KILL
for(var/mob/living/carbon/victim in get_turf(src))
. = TRUE
for(var/chemical in injected_reagents)
if(victim.reagents.get_reagent_amount(chemical) < inject_amount * seconds_per_tick)
victim.reagents.add_reagent(chemical, inject_amount * seconds_per_tick)
return .

/obj/structure/table/optable/abductor/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()

/obj/structure/closet/abductor
name = "alien locker"
desc = "Contains secrets of the universe."
icon_state = "abductor"
icon_door = "abductor"
can_weld_shut = FALSE
door_anim_time = 0
material_drop = /obj/item/stack/sheet/mineral/abductor

/obj/structure/door_assembly/door_assembly_abductor
name = "alien airlock assembly"
icon = 'icons/obj/doors/airlocks/abductor/abductor_airlock.dmi'
base_name = "alien airlock"
overlays_file = 'icons/obj/doors/airlocks/abductor/overlays.dmi'
airlock_type = /obj/machinery/door/airlock/abductor
material_type = /obj/item/stack/sheet/mineral/abductor
noglass = TRUE
42 changes: 26 additions & 16 deletions code/modules/antagonists/abductor/equipment/abduction_outfits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,21 @@
for(var/obj/item/abductor/gizmo/G in B.contents)
console.AddGizmo(G)

/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(!visualsOnly)
link_to_console(H)
/datum/outfit/abductor/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return

if(!isnull(user.mind))
link_to_console(user)

/* monkestation removal: get rid of the abductor batong recall
var/obj/item/melee/baton/abductor/batong = locate() in user
if(!isnull(batong))
var/datum/action/cooldown/spell/summonitem/abductor/ayy_summon = new(user.mind || user)
ayy_summon.mark_item(batong)
ayy_summon.Grant(user)
*/

/datum/outfit/abductor/agent
name = "Abductor Agent"
Expand All @@ -40,20 +50,19 @@
backpack_contents = list(
/obj/item/gun/energy/alien = 1,
/obj/item/abductor/silencer = 1
)
)

/datum/outfit/abductor/scientist
name = "Abductor Scientist"

backpack_contents = list(
/obj/item/abductor/gizmo = 1
)
belt = /obj/item/defibrillator/compact/combat/loaded // monke edit: give abductors defibs
backpack_contents = list(/obj/item/abductor/gizmo = 1)

/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(!visualsOnly)
var/obj/item/implant/abductor/beamplant = new /obj/item/implant/abductor(H)
beamplant.implant(H)
/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
. = ..()
if(!visualsOnly && !isnull(user.mind))
var/obj/item/implant/abductor/beamplant = new /obj/item/implant/abductor(user)
beamplant.implant(user)

/datum/outfit/abductor/scientist/onemanteam
name = "Abductor Scientist (w/ agent gear)"
Expand All @@ -63,7 +72,8 @@
belt = /obj/item/storage/belt/military/abductor/full

backpack_contents = list(
/obj/item/abductor/gizmo = 1,
/obj/item/gun/energy/alien = 1,
/obj/item/abductor/silencer = 1
/obj/item/abductor/gizmo = 1,
/obj/item/gun/energy/alien = 1,
/obj/item/abductor/silencer = 1,
/obj/item/defibrillator/compact/combat/loaded = 1 // monke edit: give abductors defibs
)
Loading

0 comments on commit ef12b56

Please sign in to comment.