Skip to content

Commit

Permalink
Adds giant lizards to LV-624 (#6882)
Browse files Browse the repository at this point in the history
# About the pull request

### **SPRITES DONE BY @SubjectD9341 (GODBLESS THEIR SOUL!!!!)**

~~still not done 100% but it's almost there. made as a draft PR so i can
push myself to finish it~~
eh it's probably done
adds giant lizards to LV624, which are slightly more sophisticated
simplemobs with a couple of neat features:

### 1. Taming
<details>

<summary>Taming Summary</summary>

the lizards by default will not seek to harm you, UNLESS you intrude in
their personal space. they will let you know when you get to close,
either by growling or attacking you if you get too close.

BUT, there is a way to bypass this. by offering specific food (any type
of butchered meat, xeno fruit or any snack in your MRE), they'll calm
down and become friendly to you and YOUR ENTIRE FACTION.


https://github.com/user-attachments/assets/ed46c1e2-639d-4eec-bc7a-22b502fd5d7c

if tame, they will completely refuse to engage in combat with you and
your faction. at most they will run away from you if you hurt them badly
enough. why? it's because ~~i'm a bit lazy to code in a better system
right now~~ they love you, and are unable to process the thought of
betrayal! :D

this works for ALL FACTIONS, including xenos. the only food that xenos
are able to offer it are resin fruits on account of them not being to
pick up anything else.

if you try taking away its food (and you're not its friend) though it'll
get pissed the fuck off and proceed to immediately maul you



https://github.com/user-attachments/assets/3ff69173-c1c1-47bf-8857-c2179301c268



</details>

### 2. Combat
<details>
<summary>Combat Summary</summary>
the lizards have slightly better combat AI than most simplemobs. they
will try to skirmish against their opponent. every time they hit
someone, there's a chance they'll try to move outside of their vision
before engaging again. in addition, they will keep trying to pounce at
their target in order to tear their throats out. they are not a big
threat to anyone with a rifle, as you can easily mow them down


https://github.com/user-attachments/assets/1d011aa1-d06b-4a1a-9920-13325f75bff8

unlike other simple mobs, **THEY WILL NOT STOP HURTING YOU UNTIL YOU
STOP BREATHING.** regular simple mobs will stop attacking mobs that are
not conscious, but these guys will rip you apart if you're on the
ground.


https://github.com/user-attachments/assets/62bb559d-3765-4dde-a0c2-d815e10ea87c

if they take too much damage, they will start retreating from combat
entirely, refusing to stop moving until there are no hostiles present in
their view.

combined, this makes them a mild threat alone, and a slightly more
terrifying threat when in packs. however, they're not much of a threat
to the "perfect lifeform", outside of the short stun that a pounce can
inflict. it will be hard to kill them, though, as they're much faster
than most xenos.



https://github.com/user-attachments/assets/de331d1d-a215-44c0-b33d-e70e5452d30d


</details>

### 3. Misc
<details>
<summary>Misc Summary</summary>

this is where i list some neat features n tidbits that aren't really
that big in themselves:

- unlike literally every other simplemob these guys can be set on fire
and will actually take damage from it
- since it's a simplemob, it cannot be infected (there would be some
balance implications that i don't want to get into if they could get
infected)

![image](https://github.com/user-attachments/assets/6188763f-f975-43a2-badd-c69e7cc0765c)

- petting it while its friendly to you will make it want to lay down and
sleep
- every lizard has an aggression value which gets higher whenever it
takes damage. if you anger them and they start combat, and do your best
at not harming them, they'll calm down and go back to minding their own
business
- they heal 5% of their hp per Life() tick if they're resting. this is
their main way of healing, but you can use bandages to heal them up
yourself if you feel like it
- if there's a friendly mob on their tile and they're resting, they'll
refuse to get up (they enjoy the warmth, i suppose)
- this is all simplemob code and is prone to exploding 50% of the time
- it can be allied to HUMANS and XENOS at the same time. additionally,
it handles human factions and not humans as a whole. if survivors feed a
lizard, it does not mean it'll be friendly to marines.
- they will NEVER attack monkeys in order to stop them from devastating
small host populations
- supports player control:



https://github.com/user-attachments/assets/b0781694-680d-41f4-afd4-c6196ca12b8b



- more to come...

</details>

# Explain why it's good for the game

adds a bit of life to a jungle planet that's supposedly supposed to be
filled with life, alongside making for some unique interactions for both
marines and xenos.

# Testing Photographs and Procedure
they're kinda all in the summary. it's still simplemob code and is by
proxy extremely unstable and buggy but i have tried to remove most of
the bugs (and i do have to say i've succeeded)

</details>


# Changelog
:cl: VileBeggar, SubjectD9341  
add: LV-624 now contains giant lizards. You can feed them with specific
food items in order to make them non-hostile to your faction.
code: Simple mobs can now process fire, though the functionality is
turned off by default.
/:cl:

---------

Co-authored-by: harryob <[email protected]>
  • Loading branch information
VileBeggar and harryob authored Aug 24, 2024
1 parent c4f3cce commit f7750b8
Show file tree
Hide file tree
Showing 21 changed files with 971 additions and 55 deletions.
2 changes: 1 addition & 1 deletion code/datums/pain/_pain.dm
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@
if(!isnull(threshold_horrible))
activate_horrible()

if(new_level >= PAIN_LEVEL_SEVERE)
if(new_level >= PAIN_LEVEL_SEVERE && feels_pain)
RegisterSignal(source_mob, COMSIG_MOB_DRAGGED, PROC_REF(oxyloss_drag), override = TRUE)
RegisterSignal(source_mob, COMSIG_MOB_DEVOURED, PROC_REF(handle_devour), override = TRUE)
RegisterSignal(source_mob, COMSIG_MOVABLE_PRE_THROW, PROC_REF(oxy_kill), override = TRUE)
Expand Down
9 changes: 9 additions & 0 deletions code/game/objects/effects/landmarks/landmarks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,15 @@
GLOB.monkey_spawns -= src
return ..()

/obj/effect/landmark/lizard_spawn
name = "lizard spawn"
icon_state = "lizard_spawn"

/obj/effect/landmark/lizard_spawn/Initialize(mapload, ...)
. = ..()
if(prob(66))
new /mob/living/simple_animal/hostile/retaliate/giant_lizard(loc)

/obj/effect/landmark/latewhiskey
name = "Whiskey Outpost Late join"

Expand Down
7 changes: 7 additions & 0 deletions code/game/objects/items/reagent_containers/food.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,16 @@
volume = 50 //Sets the default container amount for all food items.
flags_atom = CAN_BE_SYRINGED
var/filling_color = COLOR_WHITE //Used by sandwiches.
var/last_dropped_by

/obj/item/reagent_container/food/Initialize()
. = ..()
if (!pixel_x && !pixel_y)
src.pixel_x = rand(-6.0, 6) //Randomizes postion
src.pixel_y = rand(-6.0, 6)
RegisterSignal(src, COMSIG_ITEM_DROPPED, PROC_REF(update_last_dropped_by))

/obj/item/reagent_container/food/proc/update_last_dropped_by(datum/source, mob/user)
SIGNAL_HANDLER

last_dropped_by = user
4 changes: 4 additions & 0 deletions code/game/sound.dm
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,10 @@
sound = pick('sound/voice/pred_pain1.ogg','sound/voice/pred_pain2.ogg','sound/voice/pred_pain3.ogg','sound/voice/pred_pain4.ogg','sound/voice/pred_pain5.ogg',5;'sound/voice/pred_pain_rare1.ogg')
if("clownstep")
sound = pick('sound/effects/clownstep1.ogg', 'sound/effects/clownstep2.ogg')
if("giant_lizard_growl")
sound = pick('sound/effects/giant_lizard_growl1.ogg', 'sound/effects/giant_lizard_growl2.ogg')
if("giant_lizard_hiss")
sound = pick('sound/effects/giant_lizard_hiss1.ogg', 'sound/effects/giant_lizard_hiss2.ogg')
return sound

/client/proc/generate_sound_queues()
Expand Down
4 changes: 3 additions & 1 deletion code/modules/mob/living/carbon/xenomorph/attack_alien.dm
Original file line number Diff line number Diff line change
Expand Up @@ -258,14 +258,16 @@
if(M.frenzy_aura > 0)
damage += (M.frenzy_aura * FRENZY_DAMAGE_MULTIPLIER)

M.animation_attack_on(src)
//Somehow we will deal no damage on this attack
if(!damage)
playsound(M.loc, 'sound/weapons/alien_claw_swipe.ogg', 25, 1)
M.animation_attack_on(src)

M.visible_message(SPAN_DANGER("[M] lunges at [src]!"), \
SPAN_DANGER("We lunge at [src]!"), null, 5, CHAT_TYPE_XENO_COMBAT)
return XENO_ATTACK_ACTION

handle_blood_splatter(get_dir(M.loc, loc))
last_damage_data = create_cause_data(initial(M.name), M)
M.visible_message(SPAN_DANGER("[M] [M.slashes_verb] [src]!"), \
SPAN_DANGER("We [M.slash_verb] [src]!"), null, 5, CHAT_TYPE_XENO_COMBAT)
Expand Down
Loading

0 comments on commit f7750b8

Please sign in to comment.