Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions code/game/objects/effects/landmarks/landmarks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -152,11 +152,16 @@
/obj/effect/landmark/lizard_spawn
name = "lizard spawn"
icon_state = "lizard_spawn"
var/lizard_path = /mob/living/simple_animal/hostile/retaliate/giant_lizard

/obj/effect/landmark/lizard_spawn/bortrough
name = "bortrough spawn"
lizard_path = /mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough

/obj/effect/landmark/lizard_spawn/Initialize(mapload, ...)
. = ..()
if(prob(66))
new /mob/living/simple_animal/hostile/retaliate/giant_lizard(loc)
new lizard_path(loc)
addtimer(CALLBACK(src, PROC_REF(latespawn_lizard)), rand(35 MINUTES, 50 MINUTES))

/obj/effect/landmark/lizard_spawn/proc/latespawn_lizard()
Expand All @@ -170,7 +175,7 @@
continue
addtimer(CALLBACK(src, PROC_REF(latespawn_lizard)), 1 MINUTES)
return
new /mob/living/simple_animal/hostile/retaliate/giant_lizard(loc)
new lizard_path(loc)

#undef MAXIMUM_LIZARD_AMOUNT

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#define ALIGATOR_SPEED_DRAGING 2.8
#define LIZARD_SPEED_NORMAL 1.2


/mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough
name = "Aligator"
icon = 'icons/mob/bortrough.dmi'
icon_state = "Bortrough Running"
icon_living = "Bortrough Running"
icon_dead = "Bortrough Dead"
stun_duration = 2
grab_level = GRAB_CHOKE
base_state = "Bortrough"
death_sound = 'sound/effects/bortrough-die.mp3'
growl_sound = "bortrough-chuff"
hiss_sound = "bortrough-hurt"
wound_icon = 'icons/mob/bortrough.dmi'
pixel_x = -22
var/pulling_state = "Bortrough Running Open Jaws"

/mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough/ListTargets(dist = 4)
. = ..()

/mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough/update_transform(instant_update = FALSE)
. = ..()
if(pulling)
icon_state = "Bortrough Running Open Jaws"
if(istype(loc, /turf/open/gm/river) && stat != DEAD)
icon_state = "Bortrough Submerged"

/mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough/Move(NewLoc, direct)
. = ..()
if(istype(loc, /turf/open/gm/river) && stat != DEAD)
icon_state = "Bortrough Submerged"
update_wounds()
else
if(icon_state == "Bortrough Submerged")
update_transform()
update_wounds()

/mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough/update_wounds()
. = ..()
if(istype(loc, /turf/open/gm/river) && stat != DEAD)
wound_icon_holder.icon_state = "none"

/mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough/try_to_extinguish()
if(istype(get_turf(src), /turf/open/gm/river) || (/obj/effect/blocker/water in loc) || istype(get_turf(src), /turf/open/beach/coastline) || istype(get_turf(src), /turf/open/gm/coast))
ExtinguishMob()
. = ..()

/mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough/pounced_mob(mob/living/pounced_mob)
. = ..()
throwing = 0
start_pulling(pounced_mob, TRUE, simple_mob = TRUE)
MoveTo(target_mob_ref?.resolve(), 5, TRUE, 2 SECONDS, TRUE) //drag our target away

/mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough/start_pulling(atom/movable/clone/AM, lunge, no_msg, simple_mob)
. = ..()
if(.)
update_transform()
speed = ALIGATOR_SPEED_DRAGING
/mob/living/simple_animal/hostile/retaliate/giant_lizard/bortrough/stop_pulling()
. = ..()
speed = LIZARD_SPEED_NORMAL
update_transform()

#undef ALIGATOR_SPEED_DRAGING
#undef LIZARD_SPEED_NORMAL
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,17 @@
attack_same = FALSE
langchat_color = LIGHT_COLOR_GREEN

///used for the other icons to be modular
var/base_state = "Giant Lizard"

var/death_sound = 'sound/effects/giant_lizard_death.ogg'

var/growl_sound = "giant_lizard_growl"

var/hiss_sound = "giant_lizard_hiss"

var/wound_icon = 'icons/mob/mob_64.dmi'

///Reference to the ZZzzz sleep overlay when resting.
var/sleep_overlay
///Reference to the tongue flick overlay.
Expand Down Expand Up @@ -89,6 +100,8 @@
var/list/acceptable_foods = list(/obj/item/reagent_container/food/snacks/mre_food, /obj/item/reagent_container/food/snacks/resin_fruit)
///Is the mob currently eating the food_target?
var/is_eating = FALSE
///How long do we stun the pounced target for
var/stun_duration = 0.5
///Cooldown dictating how long the mob will wait between eating food.
COOLDOWN_DECLARE(food_cooldown)

Expand Down Expand Up @@ -148,6 +161,7 @@
/mob/living/simple_animal/hostile/retaliate/giant_lizard/Initialize()
. = ..()
wound_icon_holder = new(null, src)
wound_icon_holder.icon = wound_icon
tongue_icon_holder = new(null, src)
tongue_icon_holder.pixel_x = 2
vis_contents += wound_icon_holder
Expand Down Expand Up @@ -178,7 +192,7 @@
manual_emote("growls at [target_mob].")
else
manual_emote("growls.")
playsound(loc, "giant_lizard_growl", 60)
playsound(loc, growl_sound, 60)
COOLDOWN_START(src, growl_message, rand(10, 14) SECONDS)

/mob/living/simple_animal/hostile/retaliate/giant_lizard/get_status_tab_items()
Expand Down Expand Up @@ -237,9 +251,9 @@
icon_state = icon_dead
else if(body_position == LYING_DOWN)
if(!HAS_TRAIT(src, TRAIT_INCAPACITATED) && !HAS_TRAIT(src, TRAIT_FLOORED))
icon_state = "Giant Lizard Sleeping"
icon_state = "[base_state] Sleeping"
else
icon_state = "Giant Lizard Knocked Down"
icon_state = "[base_state] Knocked Down"
tongue_icon_holder.alpha = 0
//we can't stop an animation that's called via flick(). best we can do is hide it.
else
Expand Down Expand Up @@ -271,11 +285,11 @@
wound_icon_holder.icon_state = "none"
else if(body_position == LYING_DOWN)
if(!HAS_TRAIT(src, TRAIT_INCAPACITATED) && !HAS_TRAIT(src, TRAIT_FLOORED))
wound_icon_holder.icon_state = "Giant Lizard [health_threshold] Rest"
wound_icon_holder.icon_state = "[base_state] [health_threshold] Rest"
else
wound_icon_holder.icon_state = "Giant Lizard [health_threshold] Stun"
wound_icon_holder.icon_state = "[base_state] [health_threshold] Stun"
else
wound_icon_holder.icon_state = "Giant Lizard [health_threshold]"
wound_icon_holder.icon_state = "[base_state] [health_threshold]"

#undef NO_WOUNDS
#undef SMALL_WOUNDS
Expand Down Expand Up @@ -313,7 +327,7 @@
return ..()

/mob/living/simple_animal/hostile/retaliate/giant_lizard/death(datum/cause_data/cause_data, gibbed = FALSE, deathmessage = "lets out a waning growl....")
playsound(loc, 'sound/effects/giant_lizard_death.ogg', 70)
playsound(loc, death_sound, 70)
GLOB.giant_lizards_alive -= src
return ..()

Expand Down Expand Up @@ -355,7 +369,7 @@
COOLDOWN_START(src, emote_cooldown, rand(5, 8) SECONDS)
manual_emote(pick(pick(pet_emotes), "stares at [attacking_mob].", "nuzzles [attacking_mob].", "licks [attacking_mob]'s hand."), "nibbles [attacking_mob]'s arm.")
if(prob(50))
playsound(loc, "giant_lizard_hiss", 25)
playsound(loc, hiss_sound, 25)
flick("Giant Lizard Tongue", tongue_icon_holder)
if(attacking_mob.a_intent == INTENT_DISARM && prob(25))
playsound(loc, 'sound/weapons/alien_knockdown.ogg', 25, 1)
Expand Down Expand Up @@ -397,7 +411,7 @@
food_target_ref = null
is_eating = FALSE
manual_emote("hisses in agony!")
playsound(src, "giant_lizard_hiss", 40)
playsound(src, hiss_sound, 40)
MoveTo(null, 9, TRUE, 4 SECONDS, FALSE)
COOLDOWN_START(src, calm_cooldown, 8 SECONDS)

Expand Down Expand Up @@ -932,8 +946,8 @@
playsound(loc, 'sound/weapons/alien_knockdown.ogg', 25, 1)
return

playsound(loc, "giant_lizard_hiss", 25)
pounced_mob.KnockDown(0.5)
playsound(loc, hiss_sound, 25)
pounced_mob.KnockDown(stun_duration)
step_to(src, pounced_mob)
if(!client && !(pounced_mob.faction in faction_group))
ravagingattack(pounced_mob)
Expand Down
4 changes: 2 additions & 2 deletions code/modules/mob/mob.dm
Original file line number Diff line number Diff line change
Expand Up @@ -471,11 +471,11 @@
/mob/proc/start_pulling(atom/movable/AM, lunge, no_msg)
return

/mob/living/start_pulling(atom/movable/clone/AM, lunge, no_msg)
/mob/living/start_pulling(atom/movable/clone/AM, lunge, no_msg, simple_mob = FALSE)
if(istype(AM, /atom/movable/clone))
AM = AM.mstr //If AM is a clone, refer to the real target

if ( QDELETED(AM) || !usr || src==AM || !isturf(loc) || !isturf(AM.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
if ( QDELETED(AM) || (!usr && !simple_mob) || src==AM || !isturf(loc) || !isturf(AM.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
return

if (AM.anchored || AM.throwing)
Expand Down
1 change: 1 addition & 0 deletions colonialmarines.dme
Original file line number Diff line number Diff line change
Expand Up @@ -2328,6 +2328,7 @@
#include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm"
#include "code\modules\mob\living\simple_animal\hostile\hostile.dm"
#include "code\modules\mob\living\simple_animal\hostile\tree.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\bortrough.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\giant_lizard.dm"
Expand Down
Binary file added icons/mob/bortrough.dmi
Binary file not shown.
Binary file added sound/effects/bortrough-chuff1.mp3
Binary file not shown.
Binary file added sound/effects/bortrough-chuff2.mp3
Binary file not shown.
Binary file added sound/effects/bortrough-die.mp3
Binary file not shown.
Loading