From daa951c2abc29ec8a55c835bfbddff618033d484 Mon Sep 17 00:00:00 2001 From: Lance Date: Tue, 21 Nov 2023 19:29:59 -0500 Subject: [PATCH] ^ This is a combination of 2 commits. ^ This is the 1st commit message: Initial Commit Had to Clear things Base Implementation Comment Update Abnormalities and Ordeals Stat calc fix? Update hostile.dm ^ This is the commit message #2: Had to Clear things Base Implementation Comment Update Abnormalities and Ordeals Stat calc fix? Update hostile.dm --- .../simple_animal/abnormality/_abnormality.dm | 29 +++++++++++ .../abnormality/aleph/army_in_black.dm | 3 ++ .../abnormality/aleph/censored.dm | 3 ++ .../abnormality/aleph/melting_love.dm | 6 +++ .../abnormality/aleph/white_night.dm | 1 + .../simple_animal/abnormality/he/red_shoes.dm | 5 ++ .../abnormality/he/you_strong.dm | 4 ++ .../simple_animal/abnormality/waw/babayaga.dm | 2 + .../simple_animal/abnormality/waw/generalb.dm | 6 +++ .../abnormality/waw/judgement_bird.dm | 3 ++ .../abnormality/waw/little_prince.dm | 3 ++ .../abnormality/waw/naked_nest.dm | 3 ++ .../abnormality/waw/nosferatu.dm | 3 ++ .../abnormality/waw/queen_bee.dm | 3 ++ .../abnormality/waw/screenwriter.dm | 3 ++ .../simple_animal/abnormality/waw/shrimp.dm | 9 +++- .../abnormality/waw/thunder_bird.dm | 5 ++ .../abnormality/waw/wrath_servant.dm | 2 +- .../living/simple_animal/hostile/hostile.dm | 49 ++++++++++++++++--- .../simple_animal/hostile/ordeal/amber.dm | 7 +++ .../simple_animal/hostile/ordeal/crimson.dm | 12 +++++ .../simple_animal/hostile/ordeal/gold.dm | 27 ++++++++++ .../simple_animal/hostile/ordeal/green.dm | 8 +++ .../simple_animal/hostile/ordeal/indigo.dm | 14 ++++++ .../simple_animal/hostile/ordeal/misc.dm | 3 ++ .../simple_animal/hostile/ordeal/steel.dm | 10 ++++ .../simple_animal/hostile/ordeal/violet.dm | 11 +++++ .../simple_animal/hostile/ordeal/white.dm | 12 +++++ 28 files changed, 237 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/simple_animal/abnormality/_abnormality.dm b/code/modules/mob/living/simple_animal/abnormality/_abnormality.dm index 4f07d7cc0975..0ccad5eac208 100644 --- a/code/modules/mob/living/simple_animal/abnormality/_abnormality.dm +++ b/code/modules/mob/living/simple_animal/abnormality/_abnormality.dm @@ -20,6 +20,7 @@ blood_volume = BLOOD_VOLUME_NORMAL // THERE WILL BE BLOOD. SHED. simple_mob_flags = SILENCE_RANGED_MESSAGE can_patrol = TRUE + exp = FALSE // Manually set later /// Can this abnormality spawn normally during the round? var/can_spawn = TRUE /// Reference to the datum we use @@ -112,6 +113,34 @@ gift_chance = 1 else gift_chance = 0 + switch(threat_level) // Gives EXP = (max_level/20)-1. Reduced to discourage abnormality breach farming. At this level it is inefficient. + if(TETH_LEVEL) + max_level = 60 + exp = 2 + if(HE_LEVEL) + max_level = 80 + exp = 3 + if(WAW_LEVEL) + max_level = 100 + exp = 4 + if(ALEPH_LEVEL) + max_level = 130 + exp = 5 + else + max_level = 40 + exp = 1 + var/highest_rate = 0 + for(var/work_rate in work_chances) + if(!(work_rate in work_attribute_types)) + continue + var/rate = 0 + if(islist(work_chances[work_rate])) + rate = work_chances[work_rate][threat_level] + else + rate = work_chances[work_rate] + if((rate > highest_rate) || (rate == highest_rate && prob(50))) + highest_rate = rate + exp_attribute = work_attribute_types[work_rate] if(isnull(gift_message)) gift_message = "You are granted a gift by [src]!" else diff --git a/code/modules/mob/living/simple_animal/abnormality/aleph/army_in_black.dm b/code/modules/mob/living/simple_animal/abnormality/aleph/army_in_black.dm index 6c47bfc766f5..f25022c1db2a 100644 --- a/code/modules/mob/living/simple_animal/abnormality/aleph/army_in_black.dm +++ b/code/modules/mob/living/simple_animal/abnormality/aleph/army_in_black.dm @@ -202,6 +202,9 @@ GLOBAL_LIST_EMPTY(army) del_on_death = FALSE density = FALSE is_flying_animal = TRUE + exp = 4 + max_level = 130 + exp_attribute = JUSTICE_ATTRIBUTE var/list/fear_affected = list() var/shot_cooldown var/shot_cooldown_time = 5 SECONDS diff --git a/code/modules/mob/living/simple_animal/abnormality/aleph/censored.dm b/code/modules/mob/living/simple_animal/abnormality/aleph/censored.dm index 3939150c23d9..fb11edbb79a6 100644 --- a/code/modules/mob/living/simple_animal/abnormality/aleph/censored.dm +++ b/code/modules/mob/living/simple_animal/abnormality/aleph/censored.dm @@ -249,6 +249,9 @@ stat_attack = HARD_CRIT del_on_death = TRUE density = FALSE + exp = 3 + max_level = 130 + exp_attribute = PRUDENCE_ATTRIBUTE var/list/breach_affected = list() /mob/living/simple_animal/hostile/mini_censored/Initialize() diff --git a/code/modules/mob/living/simple_animal/abnormality/aleph/melting_love.dm b/code/modules/mob/living/simple_animal/abnormality/aleph/melting_love.dm index bcd682bfbd52..fd5daced5981 100644 --- a/code/modules/mob/living/simple_animal/abnormality/aleph/melting_love.dm +++ b/code/modules/mob/living/simple_animal/abnormality/aleph/melting_love.dm @@ -242,6 +242,9 @@ rapid_melee = 2 speed = 2 move_to_delay = 2.5 + exp = 3 + max_level = 80 + exp_attribute = TEMPERANCE_ATTRIBUTE /* Sounds */ deathsound = 'sound/abnormalities/meltinglove/pawn_death.ogg' attack_sound = 'sound/abnormalities/meltinglove/pawn_attack.ogg' @@ -297,3 +300,6 @@ melee_damage_lower = 35 melee_damage_upper = 40 spawn_sound = 'sound/abnormalities/meltinglove/pawn_big_convert.ogg' + exp = 4 + max_level = 100 + exp_attribute = TEMPERANCE_ATTRIBUTE diff --git a/code/modules/mob/living/simple_animal/abnormality/aleph/white_night.dm b/code/modules/mob/living/simple_animal/abnormality/aleph/white_night.dm index 9772f029b1a6..47fc60f5c905 100644 --- a/code/modules/mob/living/simple_animal/abnormality/aleph/white_night.dm +++ b/code/modules/mob/living/simple_animal/abnormality/aleph/white_night.dm @@ -257,6 +257,7 @@ GLOBAL_LIST_EMPTY(apostles) mob_size = MOB_SIZE_HUGE blood_volume = BLOOD_VOLUME_NORMAL can_patrol = TRUE // You have legs, use them. + exp = FALSE var/can_act = TRUE var/death_counter = 0 diff --git a/code/modules/mob/living/simple_animal/abnormality/he/red_shoes.dm b/code/modules/mob/living/simple_animal/abnormality/he/red_shoes.dm index a3aa2ab98419..66ab640dd231 100644 --- a/code/modules/mob/living/simple_animal/abnormality/he/red_shoes.dm +++ b/code/modules/mob/living/simple_animal/abnormality/he/red_shoes.dm @@ -370,6 +370,11 @@ melee_damage_type = RED_DAMAGE speed = 1 move_to_delay = 3 + + max_level = 80 + exp = 3 + exp_attribute = FORTITUDE_ATTRIBUTE + var/steppy = 0 /mob/living/simple_animal/hostile/red_shoe/AttackingTarget() diff --git a/code/modules/mob/living/simple_animal/abnormality/he/you_strong.dm b/code/modules/mob/living/simple_animal/abnormality/he/you_strong.dm index 7d2b6eb0c2b6..2e428b7bc8fe 100644 --- a/code/modules/mob/living/simple_animal/abnormality/he/you_strong.dm +++ b/code/modules/mob/living/simple_animal/abnormality/he/you_strong.dm @@ -231,6 +231,10 @@ del_on_death = FALSE + max_level = 80 + exp = 3 + exp_attribute = FORTITUDE_ATTRIBUTE + var/gear = 2 COOLDOWN_DECLARE(gear_shift) var/gear_cooldown = 1 MINUTES diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/babayaga.dm b/code/modules/mob/living/simple_animal/abnormality/waw/babayaga.dm index eac532ce331f..ab767ea60d72 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/babayaga.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/babayaga.dm @@ -187,6 +187,8 @@ attack_verb_simple = "slash" attack_sound = 'sound/abnormalities/babayaga/attack.ogg' speak_emote = list("whispers") + max_level = 60 + exp_attribute = PRUDENCE_ATTRIBUTE /obj/effect/temp_visual/giantwarning name = "giant warning" diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/generalb.dm b/code/modules/mob/living/simple_animal/abnormality/waw/generalb.dm index f4e2501f76d5..5bf311fabea9 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/generalb.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/generalb.dm @@ -177,6 +177,9 @@ attack_verb_simple = "bite" attack_sound = 'sound/weapons/bite.ogg' speak_emote = list("buzzes") + exp = 1 + max_level = 100 + exp_attribute = JUSTICE_ATTRIBUTE /* Artillery bees */ /mob/living/simple_animal/hostile/artillery_bee @@ -197,6 +200,9 @@ del_on_death = TRUE deathsound = 'sound/abnormalities/bee/death.ogg' speak_emote = list("buzzes") + exp = 3 + max_level = 100 + exp_attribute = JUSTICE_ATTRIBUTE var/fire_cooldown_time = 10 SECONDS var/fire_cooldown diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/judgement_bird.dm b/code/modules/mob/living/simple_animal/abnormality/waw/judgement_bird.dm index b0ddc59f20cc..de889e840fc5 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/judgement_bird.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/judgement_bird.dm @@ -173,6 +173,9 @@ ranged = 1 retreat_distance = 3 minimum_distance = 1 + max_level = 80 + exp = 2 // On one hand, agony. On the other, 2 dollar fortnite gift card. + exp_attribute = JUSTICE_ATTRIBUTE /mob/living/simple_animal/hostile/runawaybird/AttackingTarget() . = ..() diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/little_prince.dm b/code/modules/mob/living/simple_animal/abnormality/waw/little_prince.dm index c720d5fbf1a2..d1a8ccc9aece 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/little_prince.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/little_prince.dm @@ -188,6 +188,9 @@ attack_sound = 'sound/abnormalities/littleprince/Prince_Attack.ogg' deathmessage = "shakes violently." can_patrol = TRUE + max_level = 100 + exp = 3 + exp_attribute = PRUDENCE_ATTRIBUTE /mob/living/simple_animal/hostile/little_prince_1/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/naked_nest.dm b/code/modules/mob/living/simple_animal/abnormality/waw/naked_nest.dm index 0a814a41f1e7..cb3fe76ee715 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/naked_nest.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/naked_nest.dm @@ -168,6 +168,9 @@ del_on_death = 1 vision_range = 18 //two screens away minbodytemp = INHOSPITABLE_FOR_NESTING + exp = 0.5 + max_level = 100 + exp_attribute = FORTITUDE_ATTRIBUTE var/panic_timer = 0 var/mob/living/simple_animal/hostile/abnormality/naked_nest/origin_nest diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/nosferatu.dm b/code/modules/mob/living/simple_animal/abnormality/waw/nosferatu.dm index d956cf8ac63c..a0cb25ed8742 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/nosferatu.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/nosferatu.dm @@ -248,6 +248,9 @@ ranged = 1 retreat_distance = 3 minimum_distance = 1 + exp = 1 + max_level = 100 + exp_attribute = FORTITUDE_ATTRIBUTE /mob/living/simple_animal/hostile/nosferatu_mob/AttackingTarget() //they spawn blood on hit if(ishuman(target)) diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/queen_bee.dm b/code/modules/mob/living/simple_animal/abnormality/waw/queen_bee.dm index 0c22ae2ca50d..f6b15564187f 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/queen_bee.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/queen_bee.dm @@ -101,6 +101,9 @@ attack_verb_simple = "bite" attack_sound = 'sound/weapons/bite.ogg' speak_emote = list("buzzes") + exp = 1 + max_level = 100 + exp_attribute = FORTITUDE_ATTRIBUTE /mob/living/simple_animal/hostile/worker_bee/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/screenwriter.dm b/code/modules/mob/living/simple_animal/abnormality/waw/screenwriter.dm index 04d4a9b47ffb..00d025a12ad6 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/screenwriter.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/screenwriter.dm @@ -256,6 +256,9 @@ Defeating the murderer also surpresses the abnormality. attack_sound = 'sound/effects/ordeals/white/pale_knife.ogg' del_on_death = FALSE can_patrol = TRUE + exp = 4 + exp_attribute = PRUDENCE_ATTRIBUTE + max_level = 100 /mob/living/simple_animal/hostile/actor/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/shrimp.dm b/code/modules/mob/living/simple_animal/abnormality/waw/shrimp.dm index 8fe7787b17ed..692cd2f7f942 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/shrimp.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/shrimp.dm @@ -155,6 +155,9 @@ attack_verb_simple = "punches" attack_sound = 'sound/weapons/bite.ogg' speak_emote = list("burbles") + exp = 1 + max_level = 100 + exp_attribute = FORTITUDE_ATTRIBUTE //You can put these guys about to guard an area. /mob/living/simple_animal/hostile/shrimp_soldier @@ -165,7 +168,7 @@ icon_living = "wellcheers_bad" faction = list("shrimp") health = 500 //They're here to help - maxHealth = 500 + maxHealth = 500 // THEY ARE NOT melee_damage_type = RED_DAMAGE damage_coeff = list(RED_DAMAGE = 0.6, WHITE_DAMAGE = 0.7, BLACK_DAMAGE = 1.2, PALE_DAMAGE = 2) melee_damage_lower = 14 @@ -182,12 +185,16 @@ minimum_distance = 3 casingtype = /obj/item/ammo_casing/caseless/ego_shrimpsoldier projectilesound = 'sound/weapons/gun/pistol/shot_alt.ogg' + exp = 2 + max_level = 100 + exp_attribute = JUSTICE_ATTRIBUTE /mob/living/simple_animal/hostile/shrimp_soldier/friendly name = "wellcheers corp assault officer" icon_state = "wellcheers_soldier" icon_living = "wellcheers_soldier" faction = list("neutral", "shrimp") + exp = FALSE /obj/item/grenade/spawnergrenade/shrimp name = "instant shrimp task force grenade" diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/thunder_bird.dm b/code/modules/mob/living/simple_animal/abnormality/waw/thunder_bird.dm index 4e27151745b1..2a9fa618a464 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/thunder_bird.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/thunder_bird.dm @@ -345,6 +345,11 @@ del_on_death = FALSE density = TRUE guaranteed_butcher_results = list(/obj/item/food/badrecipe = 1) + + exp = 2 + max_level = 80 + exp_attribute = FORTITUDE_ATTRIBUTE + var/list/breach_affected = list() var/can_act = TRUE var/mob/living/simple_animal/hostile/abnormality/thunder_bird/master diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/wrath_servant.dm b/code/modules/mob/living/simple_animal/abnormality/waw/wrath_servant.dm index ed2e136425f7..b6f7b289d36d 100644 --- a/code/modules/mob/living/simple_animal/abnormality/waw/wrath_servant.dm +++ b/code/modules/mob/living/simple_animal/abnormality/waw/wrath_servant.dm @@ -525,7 +525,7 @@ say("I've... failed. S-Sorry...") SLEEP_CHECK_DEATH(1 SECONDS) Teleport(src.datum_reference.landmark) - breach_affected = list() + breach_affected.Cut() toggle_ai(AI_OFF) adjustBruteLoss(-maxHealth) can_act = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index af8ed5d1d487..28fc7a4c5920 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -73,9 +73,22 @@ var/patrol_tries = 0 //max of 5 var/patrol_move_timer = null + // Suppression Rewards + /// Associative List of those who have attacked the mob, EXP is gained up to 100% of "exp" based on damage dealt, multiple people can gain 100% exp. + var/list/attackers = list() + /// Highest amount EXP from this mob can get someone to + var/max_level = 40 + /// Maximum Attainable EXP from this mob per person, if TRUE/1: defaults to max_level/20 + var/exp = TRUE + /// Attribute that gains EXP + var/exp_attribute = FORTITUDE_ATTRIBUTE + /mob/living/simple_animal/hostile/Initialize() . = ..() + if(exp == TRUE) + exp = round(max_level/20, 0.1) + if(!targets_from) targets_from = src /*Update Speed overrides set speed and sets it @@ -166,16 +179,31 @@ face_atom(target) //Looks better if they keep looking at you when dodging /mob/living/simple_animal/hostile/attacked_by(obj/item/I, mob/living/user) - if(stat == CONSCIOUS && !target && AIStatus != AI_OFF && !client && user) - FindTarget(list(user), 1) + if(stat == CONSCIOUS && user) + if(!target && AIStatus != AI_OFF && !client) + FindTarget(list(user), 1) + if(ishuman(user) && exp) + var/dam = max(damage_coeff.getCoeff(I.damtype)*(1+(get_attribute_level(user, JUSTICE_ATTRIBUTE)/100))*I.force, 0) + dam = round(dam/(maxHealth*0.25), 0.01) + if(user in attackers) + attackers[user] = clamp(attackers[user] + dam, 0, 1) + else + attackers[user] = clamp(0.5 + dam, 0, 1) return ..() /mob/living/simple_animal/hostile/bullet_act(obj/projectile/P) - if(stat == CONSCIOUS && !target && AIStatus != AI_OFF && !client) - if(P.firer && get_dist(src, P.firer) <= aggro_vision_range) - FindTarget(list(P.firer), 1) - Goto(P.starting, move_to_delay, 3) - + if(stat == CONSCIOUS) + if(!target && AIStatus != AI_OFF && !client) + if(P.firer && get_dist(src, P.firer) <= aggro_vision_range) + FindTarget(list(P.firer), 1) + Goto(P.starting, move_to_delay, 3) + if(ishuman(P.firer) && exp) + var/dam = max(damage_coeff.getCoeff(P.damtype)*P.damage, 0) + dam = round(dam/(maxHealth*0.25), 0.01) + if(P.firer in attackers) + attackers[P.firer] = clamp(attackers[P.firer] + dam, 0, 1) + else + attackers[P.firer] = clamp(0.25 + dam, 0, 1) . = ..() DamageEffect(P.damage, P.damage_type) @@ -471,6 +499,13 @@ /mob/living/simple_animal/hostile/death(gibbed) LoseTarget() + for(var/mob/living/carbon/human/H in attackers) + if(!(H.job in GLOB.security_positions)) + continue + var/exp_grant = attackers[H] * exp + if(exp_grant + get_raw_level(H, exp_attribute) > max_level) + exp_grant = max(max_level - get_raw_level(H, exp_attribute), 0) + H.adjust_attribute_level(exp_attribute, exp_grant) ..(gibbed) /mob/living/simple_animal/hostile/proc/summon_backup(distance, exact_faction_match) diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/amber.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/amber.dm index cd59e53bd1df..537345d97e91 100644 --- a/code/modules/mob/living/simple_animal/hostile/ordeal/amber.dm +++ b/code/modules/mob/living/simple_animal/hostile/ordeal/amber.dm @@ -57,6 +57,7 @@ /mob/living/simple_animal/hostile/ordeal/amber_bug/spawned butcher_results = list() guaranteed_butcher_results = list() + exp = FALSE /mob/living/simple_animal/hostile/ordeal/amber_bug/spawned/death(gibbed) density = FALSE @@ -94,6 +95,8 @@ alpha = 0 // It burrows in on spawn density = FALSE + max_level = 100 + /// This cooldown responds for both the burrowing and spawning in the dawns var/burrow_cooldown var/burrow_cooldown_time = 18 SECONDS @@ -190,6 +193,8 @@ /mob/living/simple_animal/hostile/ordeal/amber_dusk/spawned butcher_results = list() guaranteed_butcher_results = list() + max_level = 80 // If you're somehow below level 4 at midnight... this is a pitty bonus. + exp = 2 /mob/living/simple_animal/hostile/ordeal/amber_dusk/spawned/death(gibbed) animate(src, alpha = 0, time = 5 SECONDS) @@ -223,6 +228,8 @@ blood_volume = BLOOD_VOLUME_NORMAL deathsound = 'sound/effects/ordeals/amber/midnight_dead.ogg' + max_level = 130 + var/burrowing = FALSE var/burrow_cooldown var/burrow_cooldown_time = 20 SECONDS diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/crimson.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/crimson.dm index aec178a451db..0af1a75ef5cb 100644 --- a/code/modules/mob/living/simple_animal/hostile/ordeal/crimson.dm +++ b/code/modules/mob/living/simple_animal/hostile/ordeal/crimson.dm @@ -16,6 +16,8 @@ damage_coeff = list(RED_DAMAGE = 0.8, WHITE_DAMAGE = 1.2, BLACK_DAMAGE = 1.3, PALE_DAMAGE = 2) blood_volume = BLOOD_VOLUME_NORMAL + exp_attribute = TEMPERANCE_ATTRIBUTE + /// When it hits console 12 times - reduce qliphoth and teleport var/console_attack_counter = 0 var/teleporting = FALSE @@ -117,6 +119,9 @@ blood_volume = BLOOD_VOLUME_NORMAL ordeal_remove_ondeath = FALSE + max_level = 60 + exp_attribute = TEMPERANCE_ATTRIBUTE + /// How many mobs we spawn on death var/mob_spawn_amount = 3 @@ -171,6 +176,9 @@ damage_coeff = list(RED_DAMAGE = 0.4, WHITE_DAMAGE = 1.2, BLACK_DAMAGE = 1.2, PALE_DAMAGE = 1.5) mob_spawn_amount = 2 + max_level = 100 + exp_attribute = TEMPERANCE_ATTRIBUTE + var/roll_num = 36 var/roll_cooldown var/roll_cooldown_time = 10 SECONDS @@ -532,6 +540,7 @@ name = "a cacophony of smiles" maxHealth = 50 health = 50 + exp = FALSE /mob/living/simple_animal/hostile/ordeal/crimson_clown/spawned/Initialize() //this should effectively limit how many are active at a time . = ..() @@ -554,6 +563,7 @@ maxHealth = 650 health = 650 mob_spawn_amount = 1 + exp = FALSE /mob/living/simple_animal/hostile/ordeal/crimson_noon/spawned/Initialize() . = ..() @@ -593,6 +603,8 @@ name = "summit of trepidation" maxHealth = 500 health = 500 + max_level = 80 + exp = 2 /mob/living/simple_animal/hostile/ordeal/crimson_noon/crimson_dusk/spawned/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/gold.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/gold.dm index d51fe639ce66..f261f6520434 100644 --- a/code/modules/mob/living/simple_animal/hostile/ordeal/gold.dm +++ b/code/modules/mob/living/simple_animal/hostile/ordeal/gold.dm @@ -29,6 +29,9 @@ projectiletype = /obj/projectile/ego_bullet/ego_nightshade/healing //no friendly fire, baby! projectilesound = 'sound/weapons/bowfire.ogg' + max_level = 60 + exp_attribute = PRUDENCE_ATTRIBUTE + /mob/living/simple_animal/hostile/ordeal/sin_sloth name = "Peccatulum Acediae" desc = "It resembles a rock." @@ -50,6 +53,9 @@ butcher_results = list(/obj/item/food/meat/slab/human/mutant/golem = 1) guaranteed_butcher_results = list(/obj/item/food/meat/slab/human/mutant/golem = 1) ranged = TRUE + + exp_attribute = PRUDENCE_ATTRIBUTE + var/list/movement_path = list() var/list/been_hit = list() var/charging = FALSE @@ -214,6 +220,8 @@ guaranteed_butcher_results = list(/obj/item/food/meat/slab/human/mutant/plant = 1) stat_attack = DEAD + exp_attribute = PRUDENCE_ATTRIBUTE + /mob/living/simple_animal/hostile/ordeal/sin_gluttony/AttackingTarget() . = ..() if(. && isliving(target)) @@ -269,6 +277,9 @@ speed = 3 move_to_delay = 3 + max_level = 80 + exp_attribute = PRUDENCE_ATTRIBUTE + var/can_act = TRUE var/slash_width = 1 var/slash_length = 3 @@ -463,6 +474,9 @@ projectiletype = /obj/projectile/beam/water_jet projectilesound = 'sound/effects/ordeals/gold/flea_attack.ogg' + max_level = 60 + exp_attribute = PRUDENCE_ATTRIBUTE + /mob/living/simple_animal/hostile/ordeal/sin_gloom/MeleeAction() if(health <= maxHealth*0.5 && stat != DEAD) walk_to(src, 0) @@ -511,6 +525,9 @@ var/dash_cooldown_time = 6 SECONDS var/list/been_hit = list() // Don't get hit twice. + max_level = 80 + exp_attribute = PRUDENCE_ATTRIBUTE + /mob/living/simple_animal/hostile/ordeal/sin_pride/Move() if(charging) return FALSE @@ -626,6 +643,10 @@ ranged = TRUE projectiletype = /obj/projectile/thunder_tomahawk projectilesound = 'sound/abnormalities/thunderbird/tbird_peck.ogg' + + max_level = 80 + exp_attribute = PRUDENCE_ATTRIBUTE + var/charged = FALSE var/list/spawned_mobs = list() @@ -687,6 +708,10 @@ butcher_results = list(/obj/item/food/meat/slab/robot = 1, /obj/item/food/meat/slab/human = 1) guaranteed_butcher_results = list(/obj/item/food/meat/slab/human = 1) move_to_delay = 4 + + max_level = 100 + exp_attribute = PRUDENCE_ATTRIBUTE + var/pulse_cooldown var/pulse_cooldown_time = 4 SECONDS @@ -748,6 +773,8 @@ damage_coeff = list(RED_DAMAGE = 0.3, WHITE_DAMAGE = 0.7, BLACK_DAMAGE = 0.7, PALE_DAMAGE = 1.5) butcher_results = list(/obj/item/food/carpmeat/icantbeliveitsnotcarp = 1) guaranteed_butcher_results = list(/obj/item/food/carpmeat/icantbeliveitsnotcarp = 1) //should make its own kind of meat when I get around to it + max_level = 100 + exp_attribute = PRUDENCE_ATTRIBUTE /mob/living/simple_animal/hostile/ordeal/sin_wrath/AttackingTarget(atom/attacked_target) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/green.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/green.dm index 039998f521d1..da02865c1d9e 100644 --- a/code/modules/mob/living/simple_animal/hostile/ordeal/green.dm +++ b/code/modules/mob/living/simple_animal/hostile/ordeal/green.dm @@ -226,6 +226,10 @@ /obj/item/stack/sheet/silk/green_advanced = 2, /obj/item/stack/sheet/silk/green_simple = 4) deathsound = 'sound/effects/ordeals/green/dusk_dead.ogg' + + max_level = 100 + exp_attribute = FORTITUDE_ATTRIBUTE + var/spawn_progress = 18 //spawn ready to produce robots var/list/spawned_mobs = list() var/producing = FALSE @@ -344,6 +348,10 @@ guaranteed_butcher_results = list(/obj/item/food/meat/slab/robot = 16) deathsound = 'sound/effects/ordeals/green/midnight_dead.ogg' + max_level = 130 + exp = 13 // Only one of these spawns... RIGHT? + exp_attribute = FORTITUDE_ATTRIBUTE + var/laser_cooldown var/laser_cooldown_time = 20 SECONDS var/obj/effect/greenmidnight_shell/left_shell diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/indigo.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/indigo.dm index e5da425d8a5d..80f97ae57d64 100644 --- a/code/modules/mob/living/simple_animal/hostile/ordeal/indigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/ordeal/indigo.dm @@ -24,6 +24,8 @@ blood_volume = BLOOD_VOLUME_NORMAL silk_results = list(/obj/item/stack/sheet/silk/indigo_simple = 1) + exp_attribute = FORTITUDE_ATTRIBUTE + /mob/living/simple_animal/hostile/ordeal/indigo_dawn/AttackingTarget() . = ..() if(. && isliving(target)) @@ -74,6 +76,10 @@ blood_volume = BLOOD_VOLUME_NORMAL silk_results = list(/obj/item/stack/sheet/silk/indigo_advanced = 1, /obj/item/stack/sheet/silk/indigo_simple = 2) + + max_level = 60 + exp_attribute = FORTITUDE_ATTRIBUTE + var/leader //used by indigo dusk to recruit sweepers /mob/living/simple_animal/hostile/ordeal/indigo_noon/Initialize() @@ -161,6 +167,7 @@ attack_sound = 'sound/effects/ordeals/indigo/stab_1.ogg' blood_volume = BLOOD_VOLUME_NORMAL can_patrol = TRUE + max_level = 100 var/order_cooldown = 0 var/list/troops = list() @@ -175,6 +182,7 @@ melee_damage_lower = 42 melee_damage_upper = 55 damage_coeff = list(RED_DAMAGE = 0.7, WHITE_DAMAGE = 0.5, BLACK_DAMAGE = 1.5, PALE_DAMAGE = 0.7) + exp_attribute = PRUDENCE_ATTRIBUTE /mob/living/simple_animal/hostile/ordeal/indigo_dusk/white/CanAttack(atom/the_target) if(ishuman(the_target)) @@ -192,6 +200,7 @@ melee_damage_lower = 42 melee_damage_upper = 55 damage_coeff = list(RED_DAMAGE = 0.7, WHITE_DAMAGE = 0.7, BLACK_DAMAGE = 0.5, PALE_DAMAGE = 1.5) + exp_attribute = TEMPERANCE_ATTRIBUTE /mob/living/simple_animal/hostile/ordeal/indigo_dusk/red name = "\proper Commander Jacques" @@ -201,6 +210,7 @@ rapid_melee = 4 melee_damage_type = RED_DAMAGE damage_coeff = list(RED_DAMAGE = 0.5, WHITE_DAMAGE = 1.5, BLACK_DAMAGE = 0.7, PALE_DAMAGE = 0.7) + exp_attribute = FORTITUDE_ATTRIBUTE /mob/living/simple_animal/hostile/ordeal/indigo_dusk/pale name = "\proper Commander Silvina" @@ -210,6 +220,7 @@ rapid_melee = 2 melee_damage_type = PALE_DAMAGE damage_coeff = list(RED_DAMAGE = 1.5, WHITE_DAMAGE = 0.7, BLACK_DAMAGE = 0.7, PALE_DAMAGE = 0.5) + exp_attribute = JUSTICE_ATTRIBUTE /mob/living/simple_animal/hostile/ordeal/indigo_dusk/Found(atom/A) //every time she finds a sweeper that sweeper is compelled to follow her as family @@ -314,6 +325,9 @@ simple_mob_flags = SILENCE_RANGED_MESSAGE can_patrol = TRUE + max_level = 130 + exp_attribute = FORTITUDE_ATTRIBUTE + //How many people has she eaten var/belly = 0 //How mad is she? diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/misc.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/misc.dm index f31c290febfe..e30d432918a0 100644 --- a/code/modules/mob/living/simple_animal/hostile/ordeal/misc.dm +++ b/code/modules/mob/living/simple_animal/hostile/ordeal/misc.dm @@ -18,6 +18,9 @@ attack_verb_simple = "bashes" damage_coeff = list(RED_DAMAGE = 1, WHITE_DAMAGE = 1, BLACK_DAMAGE = 1, PALE_DAMAGE = 1) + max_level = 130 + exp_attribute = JUSTICE_ATTRIBUTE + var/list/blacklist = list(/mob/living/simple_animal/hostile/abnormality/melting_love, /mob/living/simple_animal/hostile/abnormality/distortedform, /mob/living/simple_animal/hostile/abnormality/white_night, diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/steel.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/steel.dm index 95271547c7ee..50137170740e 100644 --- a/code/modules/mob/living/simple_animal/hostile/ordeal/steel.dm +++ b/code/modules/mob/living/simple_animal/hostile/ordeal/steel.dm @@ -26,6 +26,9 @@ damage_coeff = list(RED_DAMAGE = 0.8, WHITE_DAMAGE = 1.2, BLACK_DAMAGE = 1, PALE_DAMAGE = 1) butcher_results = list(/obj/item/food/meat/slab/human = 2, /obj/item/food/meat/slab/human/mutant/moth = 1) silk_results = list(/obj/item/stack/sheet/silk/steel_simple = 1) + + exp_attribute = JUSTICE_ATTRIBUTE + var/leader /mob/living/simple_animal/hostile/ordeal/steel_dawn/Initialize() @@ -71,6 +74,9 @@ deathsound = 'sound/voice/mook_death.ogg' butcher_results = list(/obj/item/food/meat/slab/human = 1, /obj/item/food/meat/slab/human/mutant/moth = 2) + max_level = 60 + exp_attribute = JUSTICE_ATTRIBUTE + /mob/living/simple_animal/hostile/ordeal/steel_dawn/steel_noon/MeleeAction() health+=10 if(health <= maxHealth*0.15 && stat != DEAD && prob(75)) @@ -216,6 +222,10 @@ possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_HARM) deathsound = 'sound/voice/hiss5.ogg' butcher_results = list(/obj/item/food/meat/slab/human = 2, /obj/item/food/meat/slab/human/mutant/moth = 1) + + max_level = 100 + exp_attribute = JUSTICE_ATTRIBUTE + var/turf/fob var/last_command = 0 var/chargecommand_cooldown = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/violet.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/violet.dm index f33e522b24dd..ca5829fe0f90 100644 --- a/code/modules/mob/living/simple_animal/hostile/ordeal/violet.dm +++ b/code/modules/mob/living/simple_animal/hostile/ordeal/violet.dm @@ -19,6 +19,8 @@ blood_volume = BLOOD_VOLUME_NORMAL var/list/enemies = list() //copying retaliate code cause i dont know how else to inherit it + exp_attribute = PRUDENCE_ATTRIBUTE + /mob/living/simple_animal/hostile/ordeal/violet_fruit/Initialize() . = ..() addtimer(CALLBACK(src, .proc/ReleaseDeathGas), rand(60 SECONDS, 65 SECONDS)) @@ -111,6 +113,9 @@ health = 1400 damage_coeff = list(RED_DAMAGE = 0.8, WHITE_DAMAGE = 2, BLACK_DAMAGE = 0.8, PALE_DAMAGE = 1) + max_level = 60 + exp_attribute = PRUDENCE_ATTRIBUTE + var/next_pulse = INFINITY /mob/living/simple_animal/hostile/ordeal/violet_monolith/Initialize() @@ -201,6 +206,8 @@ deathsound = 'sound/effects/ordeals/violet/midnight_dead.ogg' stat_attack = HARD_CRIT + max_level = 130 + var/ability_cooldown var/ability_cooldown_time = 14 SECONDS var/retaliation_health = 10 // Initialized later @@ -287,6 +294,7 @@ /mob/living/simple_animal/hostile/ordeal/violet_midnight/red damage_coeff = list(RED_DAMAGE = -1, WHITE_DAMAGE = 0.7, BLACK_DAMAGE = 1.2, PALE_DAMAGE = 1) + exp_attribute = FORTITUDE_ATTRIBUTE var/attack_damage = 220 // Dealt once if hit var/list/been_hit = list() @@ -363,6 +371,7 @@ icon_living = "violet_midnightw" icon_dead = "violet_midnightw_dead" damage_coeff = list(RED_DAMAGE = 1, WHITE_DAMAGE = -1, BLACK_DAMAGE = 0.7, PALE_DAMAGE = 1.2) + exp_attribute = PRUDENCE_ATTRIBUTE var/attack_damage = 150 var/list/been_hit = list() @@ -447,6 +456,7 @@ icon_living = "violet_midnightb" icon_dead = "violet_midnightb_dead" damage_coeff = list(RED_DAMAGE = 1.2, WHITE_DAMAGE = 1, BLACK_DAMAGE = -1, PALE_DAMAGE = 0.7) + exp_attribute = TEMPERANCE_ATTRIBUTE var/attack_damage = 220 var/list/been_hit = list() @@ -531,6 +541,7 @@ icon_living = "violet_midnightp" icon_dead = "violet_midnightp_dead" damage_coeff = list(RED_DAMAGE = 0.7, WHITE_DAMAGE = 1.2, BLACK_DAMAGE = 1, PALE_DAMAGE = -1) + exp_attribute = JUSTICE_ATTRIBUTE var/obj/effect/pale_eye/eye = null var/pulsating = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/white.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/white.dm index 22d43c7ab0f3..a20267eece8e 100644 --- a/code/modules/mob/living/simple_animal/hostile/ordeal/white.dm +++ b/code/modules/mob/living/simple_animal/hostile/ordeal/white.dm @@ -24,6 +24,9 @@ del_on_death = TRUE can_patrol = TRUE + max_level = 200 // If you have an expanded cap and got this far, OH BOY. + exp_attribute = TEMPERANCE_ATTRIBUTE + var/busy = FALSE var/pulse_cooldown var/pulse_cooldown_time = 20 SECONDS @@ -154,6 +157,9 @@ del_on_death = TRUE can_patrol = TRUE + max_level = 200 // If you have an expanded cap and got this far, OH BOY. + exp_attribute = PRUDENCE_ATTRIBUTE + var/can_act = TRUE /// When this reaches 480 - begins reflecting damage var/damage_taken = 0 @@ -363,6 +369,9 @@ del_on_death = TRUE can_patrol = TRUE + max_level = 200 // If you have an expanded cap and got this far, OH BOY. + exp_attribute = FORTITUDE_ATTRIBUTE + var/busy = FALSE var/multislash_cooldown var/multislash_cooldown_time = 4 SECONDS @@ -504,6 +513,9 @@ attack_sound = 'sound/effects/ordeals/white/pale_knife.ogg' del_on_death = TRUE + max_level = 200 // If you have an expanded cap and got this far, OH BOY. + exp_attribute = JUSTICE_ATTRIBUTE + var/can_act = TRUE var/multislash_cooldown var/multislash_cooldown_time = 5 SECONDS