Skip to content

Commit

Permalink
Gondolas are now basic mobs (tgstation#83451)
Browse files Browse the repository at this point in the history
## About The Pull Request

This PR turns gondolas into basic mobs and does some fiddling with
gondola pods
Their verbs are now action buttons which they lose upon delivering. If
set to stay, they won't have their abilities afterwards (or wont get
them in the first place if the delivery is already done).
Lets them survive without a pod requirement in case admins want to spawn
one for their own stuff, so I also removed it from the snowflake checks
to exclude them from stuff.

Also replaced the hardcoded "cant speak" with simply giving the mute
trait, so admins can make gondolas speak if they want to for any reason.

## Why It's Good For The Game

The pet level of simple animals can finally be killed off, also gives
admins more control over gondola-related stuff if they so wish.

## Changelog

:cl:
refactor: Gondolas (including gondola pods) are now basic mobs.
/:cl:

---------

Co-authored-by: san7890 <[email protected]>
  • Loading branch information
JohnFulpWillard and san7890 authored May 31, 2024
1 parent 7a5e993 commit 8442124
Show file tree
Hide file tree
Showing 28 changed files with 212 additions and 324 deletions.
2 changes: 1 addition & 1 deletion _maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
/turf/open/floor/grass,
/area/ruin/space/has_grav)
"h" = (
/mob/living/simple_animal/pet/gondola,
/mob/living/basic/pet/gondola,
/turf/open/floor/grass,
/area/ruin/space/has_grav)
"i" = (
Expand Down
2 changes: 1 addition & 1 deletion _maps/deathmatch/ragin_mages.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
/area/deathmatch/teleport)
"ct" = (
/obj/structure/flora/bush/grassy/style_random,
/mob/living/simple_animal/pet/gondola{
/mob/living/basic/pet/gondola{
name = "Jommy";
faction = list("gondola", "Wizard")
},
Expand Down
2 changes: 1 addition & 1 deletion _maps/templates/lazy_templates/wizard_den.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@
/turf/open/floor/iron,
/area/centcom/wizard_station)
"AW" = (
/mob/living/simple_animal/pet/gondola{
/mob/living/basic/pet/gondola{
name = "Jommy";
faction = list("gondola", "Wizard")
},
Expand Down
2 changes: 1 addition & 1 deletion _maps/virtual_domains/gondola_asteroid.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
/turf/open/floor/grass,
/area/ruin/space/has_grav/powered/virtual_domain)
"z" = (
/mob/living/simple_animal/pet/gondola/virtual_domain,
/mob/living/basic/pet/gondola/virtual_domain,
/turf/open/floor/grass,
/area/ruin/space/has_grav/powered/virtual_domain)
"A" = (
Expand Down
1 change: 0 additions & 1 deletion code/_globalvars/lists/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ GLOBAL_LIST_INIT(abstract_mob_types, list(
/mob/living/simple_animal/hostile/mimic, // Cannot exist if spawned without being passed an item reference
/mob/living/simple_animal/hostile/retaliate,
/mob/living/simple_animal/hostile,
/mob/living/simple_animal/pet,
/mob/living/simple_animal/soulscythe, // As mimic, can't exist if spawned outside an item
/mob/living/simple_animal,
))
Expand Down
2 changes: 1 addition & 1 deletion code/datums/brain_damage/severe.dm
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@
for(var/mob/M in oview(owner, check_radius))
if(!isliving(M)) //ghosts ain't people
continue
if(istype(M, /mob/living/simple_animal/pet) || istype(M, /mob/living/basic/pet) || M.ckey)
if(istype(M, /mob/living/basic/pet) || M.ckey)
return FALSE
return TRUE

Expand Down
2 changes: 1 addition & 1 deletion code/datums/diseases/transformation.dm
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@
)
stage4 = list(span_danger("You can't feel your arms. It does not bother you anymore."), span_danger("You forgive the clown for hurting you."))
stage5 = list(span_danger("You have become a Gondola."))
new_form = /mob/living/simple_animal/pet/gondola
new_form = /mob/living/basic/pet/gondola


/datum/disease/transformation/gondola/stage_act(seconds_per_tick, times_fired)
Expand Down
8 changes: 2 additions & 6 deletions code/game/machinery/washing_machine.dm
Original file line number Diff line number Diff line change
Expand Up @@ -276,13 +276,9 @@ GLOBAL_LIST_INIT(dye_registry, list(
new /obj/item/food/meat/slab/corgi(loc)
qdel(src)

/mob/living/simple_animal/pet/machine_wash(obj/machinery/washing_machine/washer)
washer.bloody_mess = TRUE
investigate_log("has been gibbed by a washing machine.", INVESTIGATE_DEATHS)
gib()

/mob/living/basic/pet/machine_wash(obj/machinery/washing_machine/washer)
washer.bloody_mess = TRUE
investigate_log("has been gibbed by a washing machine.", INVESTIGATE_DEATHS)
gib()

/obj/item/machine_wash(obj/machinery/washing_machine/washer)
Expand Down Expand Up @@ -378,7 +374,7 @@ GLOBAL_LIST_INIT(dye_registry, list(
if(L.buckled || L.has_buckled_mobs())
return
if(state_open)
if(istype(L, /mob/living/simple_animal/pet) || istype(L, /mob/living/basic/pet))
if(istype(L, /mob/living/basic/pet))
L.forceMove(src)
update_appearance()
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@
/obj/structure/closet/crate/secure/bitrunning/encrypted/gondola
move_resist = MOVE_FORCE_STRONG

/mob/living/simple_animal/pet/gondola/virtual_domain
/mob/living/basic/pet/gondola/virtual_domain
health = 50
loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 1, /obj/item/food/meat/slab/gondola/virtual_domain = 1)
loot = list(
/obj/effect/decal/cleanable/blood/gibs = 1,
/obj/item/stack/sheet/animalhide/gondola = 1,
/obj/item/food/meat/slab/gondola/virtual_domain = 1,
)
maxHealth = 50
move_force = MOVE_FORCE_VERY_STRONG
move_resist = MOVE_FORCE_STRONG
Expand All @@ -30,4 +34,4 @@

/datum/disease/transformation/gondola/virtual_domain
stage_prob = 9
new_form = /mob/living/simple_animal/pet/gondola/virtual_domain
new_form = /mob/living/basic/pet/gondola/virtual_domain
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@

/datum/modular_mob_segment/gondolas
mobs = list(
/mob/living/simple_animal/pet/gondola,
/mob/living/basic/pet/gondola,
)

/datum/modular_mob_segment/corgis
Expand Down
80 changes: 0 additions & 80 deletions code/modules/cargo/gondolapod.dm

This file was deleted.

2 changes: 1 addition & 1 deletion code/modules/cargo/supplypod.dm
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@
qdel(src)
return
if (style == STYLE_GONDOLA) //Checks if we are supposed to be a gondola pod. If so, create a gondolapod mob, and move this pod to nullspace. I'd like to give a shout out, to my man oranges
var/mob/living/simple_animal/pet/gondola/gondolapod/benis = new(turf_underneath, src)
var/mob/living/basic/pet/gondola/gondolapod/benis = new(turf_underneath, src)
benis.contents |= contents //Move the contents of this supplypod into the gondolapod mob.
for (var/mob/living/mob_in_pod in benis.contents)
mob_in_pod.reset_perspective(null)
Expand Down
1 change: 0 additions & 1 deletion code/modules/events/ghost_role/sentience.dm
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list(
/mob/living/basic/spider/giant/sgt_araneus,
/mob/living/simple_animal/bot/secbot/beepsky,
/mob/living/simple_animal/hostile/retaliate/goose/vomit,
/mob/living/simple_animal/pet,
)))

/datum/round_event_control/sentience
Expand Down
2 changes: 1 addition & 1 deletion code/modules/events/vent_clog.dm
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@
/mob/living/basic/mushroom,
/mob/living/basic/viscerator,
/mob/living/simple_animal/hostile/retaliate/goose, //Janitors HATE geese.
/mob/living/simple_animal/pet/gondola,
/mob/living/basic/pet/gondola,
)
return pick(mob_list)

Expand Down
1 change: 0 additions & 1 deletion code/modules/events/wizard/petsplosion.dm
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ GLOBAL_LIST_INIT(petsplosion_candidates, typecacheof(list(
/mob/living/basic/snake,
/mob/living/basic/spider/giant/sgt_araneus,
/mob/living/simple_animal/hostile/retaliate/goose/vomit,
/mob/living/simple_animal/pet,
)))

/datum/round_event_control/wizard/petsplosion //the horror
Expand Down
2 changes: 1 addition & 1 deletion code/modules/explorer_drone/loot.dm
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index())
/datum/adventure_loot_generator/pet/generate()
var/obj/item/pet_carrier/carrier = new carrier_type()
var/chosen_pet_type = pick(possible_pets)
var/mob/living/simple_animal/pet/pet = new chosen_pet_type()
var/mob/living/basic/pet/pet = new chosen_pet_type()
carrier.add_occupant(pet)
return carrier

Expand Down
2 changes: 1 addition & 1 deletion code/modules/mining/abandoned_crates.dm
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@
if(71 to 72)
new /obj/item/toy/plush/snakeplushie(src)
if(73 to 74)
new /mob/living/simple_animal/pet/gondola(src)
new /mob/living/basic/pet/gondola(src)
if(75 to 76)
new /obj/item/bikehorn/airhorn(src)
if(77 to 78)
Expand Down
2 changes: 1 addition & 1 deletion code/modules/mob/living/basic/pets/dog/corgi.dm
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@
unique_pet = TRUE
held_state = "narsian"
/// Mobs we will consume in the name of Nar'Sie
var/static/list/edible_types = list(/mob/living/simple_animal/pet, /mob/living/basic/pet)
var/static/list/edible_types = list(/mob/living/basic/pet)

/mob/living/basic/pet/dog/corgi/narsie/Initialize(mapload)
. = ..()
Expand Down
83 changes: 83 additions & 0 deletions code/modules/mob/living/basic/pets/gondolas/gondola.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#define GONDOLA_HEIGHT pick(list("gondola_body_long", "gondola_body_medium", "gondola_body_short"))
#define GONDOLA_COLOR pick(list("A87855", "915E48", "683E2C"))
#define GONDOLA_MOUSTACHE pick(list("gondola_moustache_large", "gondola_moustache_small"))
#define GONDOLA_EYES pick(list("gondola_eyes_close", "gondola_eyes_far"))

/mob/living/basic/pet/gondola
name = "gondola"
real_name = "gondola"
desc = "Gondola is the silent walker. \
Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling \
facial expression shows his utter and complete acceptance of the world as it is. \
Its hide is extremely valuable."
icon = 'icons/mob/simple/gondolas.dmi'
icon_state = "gondola"
icon_living = "gondola"

maxHealth = 200
health = 200
faction = list(FACTION_GONDOLA)
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "bops"
response_disarm_simple = "bop"
response_harm_continuous = "kicks"
response_harm_simple = "kick"
ai_controller = /datum/ai_controller/basic_controller/gondola

//Gondolas aren't affected by cold.
unsuitable_atmos_damage = 0
basic_mob_flags = DEL_ON_DEATH

///List of loot drops on death, since it deletes itself on death (like trooper).
var/list/loot = list(
/obj/effect/decal/cleanable/blood/gibs = 1,
/obj/item/stack/sheet/animalhide/gondola = 1,
/obj/item/food/meat/slab/gondola = 1,
)

/mob/living/basic/pet/gondola/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_MUTE, INNATE_TRAIT)
AddElement(/datum/element/pet_bonus, "smiles!")
if(LAZYLEN(loot))
loot = string_list(loot)
AddElement(/datum/element/death_drops, loot)
create_gondola()

/mob/living/basic/pet/gondola/proc/create_gondola()
icon_state = null
icon_living = null
var/height = GONDOLA_HEIGHT
var/mutable_appearance/body_overlay = mutable_appearance(icon, height)
var/mutable_appearance/eyes_overlay = mutable_appearance(icon, GONDOLA_EYES)
var/mutable_appearance/moustache_overlay = mutable_appearance(icon, GONDOLA_MOUSTACHE)
body_overlay.color = ("#[GONDOLA_COLOR]")

//Offset the face to match the Gondola's height.
switch(height)
if("gondola_body_medium")
eyes_overlay.pixel_y = -4
moustache_overlay.pixel_y = -4
if("gondola_body_short")
eyes_overlay.pixel_y = -8
moustache_overlay.pixel_y = -8

cut_overlays(TRUE)
add_overlay(body_overlay)
add_overlay(eyes_overlay)
add_overlay(moustache_overlay)

/datum/ai_controller/basic_controller/gondola
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
)

ai_traits = STOP_MOVING_WHEN_PULLED
ai_movement = /datum/ai_movement/basic_avoidance
idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking

#undef GONDOLA_HEIGHT
#undef GONDOLA_COLOR
#undef GONDOLA_MOUSTACHE
#undef GONDOLA_EYES
Loading

0 comments on commit 8442124

Please sign in to comment.