Vim mecha changes (#66153)

This PR changes the following:

    fixes a bug with Vim overlays, making it always appear as if there was a pilot inside, even after leaving it
    adds a balloon alert when a mob fails to enter the mech due to its size
    adds a crafting recipe for Vim in the "robots" category
    allows using Vim as a circuit shell
    allows small mobs to use the mech as well

My reasoning behind the changes:

    fixing the overlay bug - bugfixes good, bugs bad
    balloon alert - it should help reduce confusion among players who can't figure why on earth they cannot enter the mech
    crafting recipe - I think a crafting recipe will make it a lot more accessible to players, especially because there is no way to learn about its existence in-game
    circuit shell - non-standard circuit shells can be pretty fun and people seemed to enjoy the ability to use circuits inside their piano synths or cameras, so I figured we could expand on this, while giving players more ways to interact with sentient pets
    maximum mob size increase - Vim has never really been built too often, most likely because even if people got their hands on a sentient pet, it wouldn't probably fit in the tiny mecha anyway. Currently pretty much only butterflies, rats and cockroaches can use Vim and they pretty much never become sentient.
This commit is contained in:
B4CKU
2022-04-21 15:35:23 -07:00
committed by GitHub
parent 4b0590d0c1
commit dca0edc30e
4 changed files with 91 additions and 2 deletions
@@ -338,6 +338,15 @@
///sent to targets during the process_hit proc of projectiles
#define COMSIG_PELLET_CLOUD_INIT "pellet_cloud_init"
// /obj/vehicle/sealed/car/vim signals
///from /datum/action/vehicle/sealed/noise/chime/Trigger(): ()
#define COMSIG_VIM_CHIME_USED "vim_chime_used"
///from /datum/action/vehicle/sealed/noise/buzz/Trigger(): ()
#define COMSIG_VIM_BUZZ_USED "vim_buzz_used"
///from /datum/action/vehicle/sealed/headlights/vim/Trigger(): (headlights_on)
#define COMSIG_VIM_HEADLIGHTS_TOGGLED "vim_headlights_toggled"
// /obj/vehicle/sealed/mecha signals
///sent from mecha action buttons to the mecha they're linked to
@@ -444,6 +444,18 @@
time = 40
category = CAT_ROBOT
/datum/crafting_recipe/vim
name = "Vim"
result = /obj/vehicle/sealed/car/vim
reqs = list(/obj/item/clothing/head/helmet/space/eva = 1,
/obj/item/bodypart/l_leg/robot = 1,
/obj/item/bodypart/r_leg/robot = 1,
/obj/item/flashlight = 1,
/obj/item/assembly/voice = 1)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 6 SECONDS //Has a four second do_after when building manually
category = CAT_ROBOT
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
name = "Pneumatic Cannon"
result = /obj/item/pneumatic_cannon/ghetto
+56 -1
View File
@@ -20,8 +20,18 @@
engine_sound = 'sound/effects/servostep.ogg'
///TRUE while the vim is being welded
var/being_repaired = FALSE
///Maximum size of a mob trying to enter the mech
var/maximum_mob_size = MOB_SIZE_SMALL
COOLDOWN_DECLARE(sound_cooldown)
/obj/vehicle/sealed/car/vim/Initialize(mapload)
. = ..()
AddComponent( \
/datum/component/shell, \
unremovable_circuit_components = list(new /obj/item/circuit_component/vim), \
capacity = SHELL_CAPACITY_SMALL, \
)
/obj/vehicle/sealed/car/vim/examine(mob/user)
. = ..()
. += span_notice("[src] can be repaired with a welder.")
@@ -36,7 +46,8 @@
if(!isanimal_or_basicmob(entering))
return FALSE
var/mob/living/animal_or_basic = entering
if(animal_or_basic.mob_size != MOB_SIZE_TINY)
if(animal_or_basic.mob_size > maximum_mob_size)
entering.balloon_alert(entering, "can't fit inside!")
return FALSE
return ..()
@@ -71,6 +82,10 @@
if(atom_integrity == max_integrity)
SEND_SOUND(newoccupant, sound('sound/mecha/nominal.ogg',volume=50))
/obj/vehicle/sealed/car/vim/mob_try_exit(mob/pilot, mob/user, silent = FALSE, randomstep = FALSE)
. = ..()
update_appearance()
/obj/vehicle/sealed/car/vim/generate_actions()
initialize_controller_action_type(/datum/action/vehicle/sealed/climb_out/vim, VEHICLE_CONTROL_DRIVE)
initialize_controller_action_type(/datum/action/vehicle/sealed/noise/chime, VEHICLE_CONTROL_DRIVE)
@@ -90,3 +105,43 @@
. += piloted_overlay
if(headlights_toggle)
. += headlights_overlay
/obj/item/circuit_component/vim
display_name = "Vim"
desc = "An minature exosuit from Nanotrasen, developed to let the irreplacable station pets live a little longer."
/// Sent when the mech chimes.
var/datum/port/output/chime
/// Sent when the mech buzzes.
var/datum/port/output/buzz
/// Whether the mech headlights are currently on.
var/datum/port/output/are_headlights_on
/obj/item/circuit_component/vim/populate_ports()
are_headlights_on = add_output_port("Are Headlights On", PORT_TYPE_NUMBER)
chime = add_output_port("On Chime Used", PORT_TYPE_SIGNAL)
buzz = add_output_port("On Buzz Used", PORT_TYPE_SIGNAL)
/obj/item/circuit_component/vim/register_shell(atom/movable/shell)
. = ..()
RegisterSignal(shell, COMSIG_VIM_HEADLIGHTS_TOGGLED, .proc/on_headlights_toggle)
RegisterSignal(shell, COMSIG_VIM_CHIME_USED, .proc/on_chime_used)
RegisterSignal(shell, COMSIG_VIM_BUZZ_USED, .proc/on_buzz_used)
/obj/item/circuit_component/vim/unregister_shell(atom/movable/shell)
. = ..()
UnregisterSignal(shell, COMSIG_VIM_HEADLIGHTS_TOGGLED)
UnregisterSignal(shell, COMSIG_VIM_CHIME_USED)
UnregisterSignal(shell, COMSIG_VIM_BUZZ_USED)
/obj/item/circuit_component/vim/proc/on_headlights_toggle(datum/source, headlights_on)
SIGNAL_HANDLER
are_headlights_on.set_output(headlights_on)
/obj/item/circuit_component/vim/proc/on_chime_used()
SIGNAL_HANDLER
chime.set_output(COMPONENT_SIGNAL)
/obj/item/circuit_component/vim/proc/on_buzz_used()
SIGNAL_HANDLER
buzz.set_output(COMPONENT_SIGNAL)
+14 -1
View File
@@ -341,10 +341,11 @@
var/obj/vehicle/sealed/car/vim/vim_mecha = vehicle_entered_target
if(!COOLDOWN_FINISHED(vim_mecha, sound_cooldown))
vim_mecha.balloon_alert(owner, "on cooldown!")
return
return FALSE
COOLDOWN_START(vim_mecha, sound_cooldown, VIM_SOUND_COOLDOWN)
vehicle_entered_target.visible_message(span_notice("[vehicle_entered_target] [sound_message]"))
playsound(vim_mecha, sound_path, 75)
return TRUE
/datum/action/vehicle/sealed/noise/chime
name = "Chime!"
@@ -353,6 +354,10 @@
sound_path = 'sound/machines/chime.ogg'
sound_message = "chimes!"
/datum/action/vehicle/sealed/noise/chime/Trigger(trigger_flags)
if(..())
SEND_SIGNAL(vehicle_entered_target, COMSIG_VIM_CHIME_USED)
/datum/action/vehicle/sealed/noise/buzz
name = "Buzz."
desc = "Negative!"
@@ -360,5 +365,13 @@
sound_path = 'sound/machines/buzz-sigh.ogg'
sound_message = "buzzes."
/datum/action/vehicle/sealed/noise/buzz/Trigger(trigger_flags)
if(..())
SEND_SIGNAL(vehicle_entered_target, COMSIG_VIM_BUZZ_USED)
/datum/action/vehicle/sealed/headlights/vim
button_icon_state = "vim_headlights"
/datum/action/vehicle/sealed/headlights/vim/Trigger(trigger_flags)
. = ..()
SEND_SIGNAL(vehicle_entered_target, COMSIG_VIM_HEADLIGHTS_TOGGLED, vehicle_entered_target.headlights_toggle)