Skip to content

Commit

Permalink
Lynx - Mobs (Merge Ready) (#76)
Browse files Browse the repository at this point in the history
* Fleshmother Initial Commit

* Flesh Egg Sound and Babs

* Beast Mother - Final Touches, Enraged Beasties

Sans Undertale easteregg ahh beastie

* Introducing: GutMuncher!

* File Changes, braingusher mob, new buff + edits

AND A NEW BUFF!!

* Braingusher!!!

* Braingusher fix

* Accidentally pushed map changes, woops.

* Name edits!

* Should probably add .dm huh.

* ugh im tired ffs this compiles now

* Else... Deleted... Perish...

* Minorsquishingofbugsdotestmaybetomakesurenobreaky!

* namefix fuck my LIFE man

* Audio Additions, Balance Changes!

* quickquick!

* dview so they don't runtime in darkness, woops!

* Wendigo Ability Fix, DREAM bEastR tweaks

* Working Claws and Ability on Wendigo

* New var added to prevent movement
  • Loading branch information
Lynx22330 authored Nov 30, 2024
1 parent 2dcecff commit 00dc8b9
Show file tree
Hide file tree
Showing 24 changed files with 503 additions and 33 deletions.
8 changes: 8 additions & 0 deletions code/modules/mob/living/simple_animal/hostile/hostile.dm
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@

var/next_seek

var/prevent_goto_target = FALSE // If true, prevent any kinds of movement.

cmode = 1
setparrytime = 30
dodgetime = 30
Expand Down Expand Up @@ -305,6 +307,8 @@
AttackingTarget()

/mob/living/simple_animal/hostile/proc/MoveToTarget(list/possible_targets)//Step 5, handle movement between us and our target
if(prevent_goto_target)
return FALSE
stop_automated_movement = 1
if(!target || !CanAttack(target))
LoseTarget()
Expand Down Expand Up @@ -361,6 +365,8 @@
// return 0

/mob/living/simple_animal/hostile/proc/Goto(target, delay, minimum_distance)
if(prevent_goto_target)
return FALSE
if(target == src.target)
approaching_target = TRUE
else
Expand Down Expand Up @@ -477,6 +483,8 @@


/mob/living/simple_animal/hostile/Move(atom/newloc, dir , step_x , step_y)
if(prevent_goto_target)
return FALSE
if(dodging && approaching_target && prob(dodge_prob) && moving_diagonally == 0 && isturf(loc) && isturf(newloc) && !incapacitated())
return dodge(newloc,dir)
else
Expand Down
10 changes: 5 additions & 5 deletions code/modules/mob/living/simple_animal/rogue/rogueanimals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -103,15 +103,15 @@
return TRUE
return FALSE

/mob/living/simple_animal/hostile/retaliate/rogue/proc/eat_bodies()
/mob/living/simple_animal/hostile/retaliate/rogue/proc/rend_bodies()
var/mob/living/L
// var/list/around = view(aggro_vision_range, src)
var/list/around = hearers(1, src)
var/list/foundfood = list()
if(stat)
return
for(var/mob/living/eattarg in around)
if(eattarg.stat != CONSCIOUS)
if(eattarg.stat == CONSCIOUS)
foundfood += eattarg
L = eattarg
if(src.Adjacent(L))
Expand All @@ -121,7 +121,7 @@
playsound(src, pick(attack_sound), 100, TRUE, -1)
face_atom(C)
src.visible_message(span_danger("[src] starts to rip apart [C]!"))
if(do_after(src,100, target = L))
if(do_mob(src,100, target = L))
var/obj/item/bodypart/limb
var/list/limb_list = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
for(var/zone in limb_list)
Expand All @@ -136,14 +136,14 @@
limb = C.get_bodypart(BODY_ZONE_CHEST)
if(limb)
if(!limb.dismember())
C.gib()
C.death()
return TRUE
else
if(attack_sound)
playsound(src, pick(attack_sound), 100, TRUE, -1)
src.visible_message(span_danger("[src] starts to rip apart [L]!"))
if(do_after(src,100, target = L))
L.gib()
L.death()
return TRUE
for(var/mob/living/eattarg in foundfood)
var/turf/T = get_turf(eattarg)
Expand Down
44 changes: 22 additions & 22 deletions code/modules/spells/roguetown/acolyte/malum.dm
Original file line number Diff line number Diff line change
Expand Up @@ -95,19 +95,19 @@
var/list/nosmeltore = list(/obj/item/rogueore/coal)
var/datum/effect_system/spark_spread/sparks = new()
var/target = targets[1]
if (!target || target in nosmeltore)
if (!target || (target in nosmeltore))
return
if (istype(target, /obj/item))
handle_item_smelting(target, user, sparks, nosmeltore)
else if (iscarbon(target))
handle_living_entity(target, user, nosmeltore)

proc/show_visible_message(mob/user, text, selftext)
/obj/effect/proc_holder/spell/invoked/proc/show_visible_message(mob/user, text, selftext)
var/text_to_send = addtext("<font color='yellow'>", text, "</font>")
var/selftext_to_send = addtext("<font color='yellow'>", selftext, "</font>")
user.visible_message(text_to_send, selftext_to_send)

proc/handle_item_smelting(obj/item/target, mob/user, datum/effect_system/spark_spread/sparks, list/nosmeltore)
/obj/effect/proc_holder/spell/invoked/heatmetal/proc/handle_item_smelting(obj/item/target, mob/user, datum/effect_system/spark_spread/sparks, list/nosmeltore)
if (!target.smeltresult) return
var/obj/item/itemtospawn = target.smeltresult
show_visible_message(user, "After [user]'s incantation, [target] glows brightly and melts into an ingot.", null)
Expand All @@ -116,7 +116,7 @@ proc/handle_item_smelting(obj/item/target, mob/user, datum/effect_system/spark_s
sparks.start()
qdel(target)

proc/handle_living_entity(mob/target, mob/user, list/nosmeltore)
/obj/effect/proc_holder/spell/invoked/heatmetal/proc/handle_living_entity(mob/target, mob/user, list/nosmeltore)
var/obj/item/targeteditem = get_targeted_item(user, target)
if (!targeteditem || targeteditem.smeltresult == /obj/item/ash || target.anti_magic_check(TRUE,TRUE))
show_visible_message(user, "After their incantation, [user] points at [target] but it seems to have no effect.", "After your incantation, you point at [target] but it seems to have no effect.")
Expand All @@ -128,14 +128,14 @@ proc/handle_living_entity(mob/target, mob/user, list/nosmeltore)
else
handle_heating_equipped(target, targeteditem, user)

/proc/get_targeted_item(mob/user, mob/target)
/obj/effect/proc_holder/spell/invoked/heatmetal/proc/get_targeted_item(mob/user, mob/target)
var/target_item
switch(user.zone_selected)
if (BODY_ZONE_PRECISE_R_HAND)
target_item = target.held_items[2]
if (BODY_ZONE_PRECISE_L_HAND)
target_item = target.held_items[1]
if (BODY_ZONE_HEAD || BODY_ZONE_PRECISE_EARS)
if (BODY_ZONE_HEAD, BODY_ZONE_PRECISE_EARS)
target_item = target.get_item_by_slot(SLOT_HEAD)
if (BODY_ZONE_CHEST)
if(target.get_item_by_slot(SLOT_ARMOR))
Expand All @@ -144,27 +144,27 @@ proc/handle_living_entity(mob/target, mob/user, list/nosmeltore)
target_item = target.get_item_by_slot(SLOT_SHIRT)
if (BODY_ZONE_PRECISE_NECK)
target_item = target.get_item_by_slot(SLOT_NECK)
if (BODY_ZONE_PRECISE_R_EYE || BODY_ZONE_PRECISE_L_EYE || BODY_ZONE_PRECISE_NOSE)
if (BODY_ZONE_PRECISE_R_EYE, BODY_ZONE_PRECISE_L_EYE, BODY_ZONE_PRECISE_NOSE)
target_item = target.get_item_by_slot(ITEM_SLOT_MASK)
if (BODY_ZONE_PRECISE_MOUTH)
target_item = target.get_item_by_slot(ITEM_SLOT_MOUTH)
if (BODY_ZONE_L_ARM || BODY_ZONE_R_ARM)
if (BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
target_item = target.get_item_by_slot(ITEM_SLOT_WRISTS)
if (BODY_ZONE_L_LEG || BODY_ZONE_R_LEG || BODY_ZONE_PRECISE_GROIN)
if (BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)
target_item = target.get_item_by_slot(ITEM_SLOT_PANTS)
if (BODY_ZONE_PRECISE_R_FOOT || BODY_ZONE_PRECISE_L_FOOT)
if (BODY_ZONE_PRECISE_R_FOOT, BODY_ZONE_PRECISE_L_FOOT)
target_item = target.get_item_by_slot(ITEM_SLOT_SHOES)
return target_item

proc/handle_tongs(obj/item/rogueweapon/tongs/T, mob/user) //Stole the code from smithing.
/obj/effect/proc_holder/spell/invoked/heatmetal/proc/handle_tongs(obj/item/rogueweapon/tongs/T, mob/user) //Stole the code from smithing.
if (!T.hingot) return
var/tyme = world.time
T.hott = tyme
addtimer(CALLBACK(T, TYPE_PROC_REF(/obj/item/rogueweapon/tongs, make_unhot), tyme), 100)
T.update_icon()
show_visible_message(user, "After [user]'s incantation, the ingot inside [T] starts glowing.", "After your incantation, the ingot inside [T] starts glowing.")

proc/handle_heating_in_hand(mob/living/carbon/target, obj/item/targeteditem, mob/user)
/obj/effect/proc_holder/spell/invoked/heatmetal/proc/handle_heating_in_hand(mob/living/carbon/target, obj/item/targeteditem, mob/user)
var/datum/effect_system/spark_spread/sparks = new()
apply_damage_to_hands(target, user)
target.dropItemToGround(targeteditem)
Expand All @@ -174,10 +174,10 @@ proc/handle_heating_in_hand(mob/living/carbon/target, obj/item/targeteditem, mob
sparks.set_up(1, 1, target.loc)
sparks.start()

proc/should_heat_in_hand(mob/user, mob/target, obj/item/targeteditem, list/nosmeltore)
/obj/effect/proc_holder/spell/invoked/heatmetal/proc/should_heat_in_hand(mob/user, mob/target, obj/item/targeteditem, list/nosmeltore)
return ((user.zone_selected == BODY_ZONE_PRECISE_L_HAND && target.held_items[1]) || (user.zone_selected == BODY_ZONE_PRECISE_R_HAND && target.held_items[2])) && !(targeteditem in nosmeltore) && targeteditem.smeltresult

proc/apply_damage_to_hands(mob/living/carbon/target, mob/user)
/obj/effect/proc_holder/spell/invoked/heatmetal/proc/apply_damage_to_hands(mob/living/carbon/target, mob/user)
var/obj/item/bodypart/affecting
var/const/adth_damage_to_apply = 10 //How much damage should burning your hand before dropping the item do.
if (user.zone_selected == BODY_ZONE_PRECISE_R_HAND)
Expand All @@ -186,7 +186,7 @@ proc/apply_damage_to_hands(mob/living/carbon/target, mob/user)
affecting = target.get_bodypart(BODY_ZONE_L_ARM)
affecting.receive_damage(0, adth_damage_to_apply)

proc/handle_heating_equipped(mob/living/carbon/target, obj/item/clothing/targeteditem, mob/user)
/obj/effect/proc_holder/spell/invoked/heatmetal/proc/handle_heating_equipped(mob/living/carbon/target, obj/item/clothing/targeteditem, mob/user)
var/obj/item/armor = target.get_item_by_slot(SLOT_ARMOR)
var/obj/item/shirt = target.get_item_by_slot(SLOT_SHIRT)
var/armor_can_heat = armor && armor.smeltresult && armor.smeltresult != /obj/item/ash
Expand All @@ -206,7 +206,7 @@ proc/handle_heating_equipped(mob/living/carbon/target, obj/item/clothing/targete
show_visible_message(target, "[target]'s [targeteditem.name] glows brightly, searing their flesh.", "My [targeteditem.name] glows brightly, It burns!")
playsound(target.loc, 'sound/misc/frying.ogg', 100, FALSE, -1)

proc/apply_damage_if_covered(mob/living/carbon/target, list/body_zones, obj/item/clothing/targeteditem, mask, damage)
/obj/effect/proc_holder/spell/invoked/heatmetal/proc/apply_damage_if_covered(mob/living/carbon/target, list/body_zones, obj/item/clothing/targeteditem, mask, damage)
var/datum/effect_system/spark_spread/sparks = new()
var/obj/item/bodypart/affecting = null
for (var/zone in body_zones)
Expand Down Expand Up @@ -244,7 +244,7 @@ proc/apply_damage_if_covered(mob/living/carbon/target, list/body_zones, obj/item
if (istype(targets[1], /turf/closed))
return
if (!istype(targets[1], /turf/open))
altar = targets[1].loc
altar = targets[1]
else
altar = targets[1]
for (var/obj/item/sacrifice in altar.contents)
Expand Down Expand Up @@ -285,7 +285,7 @@ proc/apply_damage_if_covered(mob/living/carbon/target, list/body_zones, obj/item
show_visible_message(usr, "A wave of heat washes over the pile as [user] speaks Malum's name. The pile of valuables crumble into dust, only for the dust to reform into an item as if reborn from the flames. Malum has accepted the offering.", "A wave of heat washes over the pile as you speak Malum's name. The pile of valuables crumble into dust, only for the dust to reform into an item as if reborn from the flames. Malum has accepted the offering.")

var/global/list/anvil_recipe_prices[][]
proc/add_recipe_to_global(var/datum/anvil_recipe/recipe)
/obj/effect/proc_holder/spell/invoked/craftercovenant/proc/add_recipe_to_global(var/datum/anvil_recipe/recipe)
var/total_sellprice = 0
var/obj/item/ingot/bar = recipe.req_bar
var/obj/item/itemtosend = null
Expand All @@ -304,7 +304,7 @@ proc/add_recipe_to_global(var/datum/anvil_recipe/recipe)
if (total_sellprice > 0)
global.anvil_recipe_prices += list(list(itemtosend, total_sellprice))

proc/initialize_anvil_recipe_prices()
/obj/effect/proc_holder/spell/invoked/craftercovenant/proc/initialize_anvil_recipe_prices()
for (var/datum/anvil_recipe/armor/recipe)
{
add_recipe_to_global(recipe)
Expand All @@ -327,7 +327,7 @@ proc/initialize_anvil_recipe_prices()
global.anvil_recipe_prices += list(list(new /obj/item/dmusicbox, 500))
// Add any other recipe types if needed

world/New()
/obj/effect/proc_holder/spell/invoked/craftercovenant/world/New()
..()
initialize_anvil_recipe_prices() // Precompute recipe prices on startup

Expand All @@ -345,7 +345,7 @@ world/New()
show_visible_message(usr, "[usr] raises their arm, conjuring a hammer wreathed in molten fire. As they hurl it toward the ground, the earth trembles under its impact, shaking its very foundations!", "You raise your arm, conjuring a hammer wreathed in molten fire. As you hurl it toward the ground, the earth trembles under its impact, shaking its very foundations!")
fallzone = targets[1]
else
fallzone = targets[1].loc
fallzone = targets[1]
for (var/turf/open/visual in view(radius, fallzone))
var/obj/effect/temp_visual/lavastaff/Lava = new /obj/effect/temp_visual/lavastaff(visual)
animate(Lava, alpha = 255, time = 5)
Expand Down Expand Up @@ -389,7 +389,7 @@ world/New()
miracle = TRUE
devotion_cost = 15

obj/effect/proc_holder/spell/invoked/malum_flame_rogue/cast(list/targets, mob/user = usr)
/obj/effect/proc_holder/spell/invoked/malum_flame_rogue/cast(list/targets, mob/user = usr)
. = ..()
if(isliving(targets[1]))
var/mob/living/L = targets[1]
Expand Down
18 changes: 12 additions & 6 deletions modular_causticcove/code/__DEFINES/status_effects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@
/*************************************************************
*********************** POTIONS ****************************
*************************************************************/
#define STATUS_EFFECT_FORTITUDE /datum/status_effect/fortitude //Grants people 1 CON and 2 END for the duration.
#define STATUS_EFFECT_FORTITUDE /datum/status_effect/buff/fortitude //Grants people 1 CON and 2 END for the duration.

#define STATUS_EFFECT_SWIFTNESS /datum/status_effect/swiftness //Grants people 1 END and 3 SPD for the duration.
#define STATUS_EFFECT_SWIFTNESS /datum/status_effect/buff/swiftness //Grants people 1 END and 3 SPD for the duration.

#define STATUS_EFFECT_INTELLECT /datum/status_effect/intellect //Grants people 3 INT and 3 PER for the duration.
#define STATUS_EFFECT_INTELLECT /datum/status_effect/buff/intellect //Grants people 3 INT and 3 PER for the duration.

#define STATUS_EFFECT_VIRILITY /datum/status_effect/virility //\SHOULD\ grant people the ability to have infinite orgasms for the duration.
#define STATUS_EFFECT_VIRILITY /datum/status_effect/buff/virility //\SHOULD\ grant people the ability to have infinite orgasms for the duration.

#define STATUS_EFFECT_RAVOX_BREW /datum/status_effect/ravoxbrew // Gives a buff at cost of poison to self
#define STATUS_EFFECT_RAVOX_BREW /datum/status_effect/buff/ravoxbrew // Gives a buff at cost of poison to self

#define STATUS_EFFECT_ABYSSORS_BREW /datum/status_effect/abyssorbrew // Free water movement at cost of speed, and strength, and untouched stam drain over water
#define STATUS_EFFECT_ABYSSORS_BREW /datum/status_effect/buff/abyssorbrew // Free water movement at cost of speed, and strength, and untouched stam drain over water

/*************************************************************
*********************** MOBS *******************************
*************************************************************/

#define STATUS_EFFECT_INDUCED_INSANITY /datum/status_effect/buff/induced_insanity //Momentarily experiencing maniac levels of insanity.
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
////////////////
//EFFECT BUFFS//
////////////////


/datum/status_effect/buff/induced_insanity //What is... happening!?
id = "inducedinsanity"
alert_type = /atom/movable/screen/alert/status_effect/buff/induced_insanity
effectedstats = list("strength" = -2, "perception" = -2, "constitution" = -1, "endurance" = -1, "speed" = -6, "fortune" = -6)
duration = 1 MINUTES

/atom/movable/screen/alert/status_effect/buff/induced_insanity
name = "##^%$*%!!?"
desc = "WWHAAAT IS HAAAPENNIINGG!? AAHAHHAHAAA!!!"
icon_state = "status"

/datum/status_effect/buff/induced_insanity/process()
. = ..()
var/mob/living/carbon/human/C = owner
var/atom/movable/screen/fullscreen/maniac/hallucinations
//Check if it's null to prevent runtiming.
if(C == null)
return
hallucinations = owner.overlay_fullscreen("maniac", /atom/movable/screen/fullscreen/maniac)
if(istype(C, /mob/living/carbon/human))
handle_maniac_visions(C, hallucinations)
handle_maniac_hallucinations(C)
handle_maniac_floors(C)
handle_maniac_walls(C)
Loading

0 comments on commit 00dc8b9

Please sign in to comment.