diff --git a/code/__DEFINES/items_clothing.dm b/code/__DEFINES/items_clothing.dm index 60a6e90d7c0..3e0f08e50ed 100644 --- a/code/__DEFINES/items_clothing.dm +++ b/code/__DEFINES/items_clothing.dm @@ -239,3 +239,12 @@ #define MEDIUM_OBSCURATION 3 #define HEAVY_OBSCURATION 5 +//RIG ablation +#define ABLATION_CERAMIC 3 +#define ABLATION_SOFT 5 +#define ABLATION_STANDARD 10 +#define ABLATION_RESILIENT 15 +#define ABLATION_DURABLE 20 +#define ABLATION_EVERLASTING 30 + +//Style amount diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 8b282b16387..ae2d82df871 100755 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -181,8 +181,10 @@ // Special return values from bullet_act(). Positive return values are already used to indicate the blocked level of the projectile. -#define PROJECTILE_CONTINUE -1 //if the projectile should continue flying after calling bullet_act() -#define PROJECTILE_FORCE_MISS -2 //if the projectile should treat the attack as a miss (suppresses attack and admin logs) - only applies to mobs. +#define PROJECTILE_STOP 1 //if the projectile should stop flying after calling bullet_act() +#define PROJECTILE_CONTINUE -1 //if the projectile should continue flying after calling bullet_act() +#define PROJECTILE_FORCE_MISS -2 //if the projectile should treat the attack as a miss (suppresses attack and admin logs) - only applies to mobs. +#define PROJECTILE_FORCE_MISS_SILENCED -2.5 //if the projectile should do the same thing as above, but not give the miss message //Camera capture modes #define CAPTURE_MODE_REGULAR 0 //Regular polaroid camera mode diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index ab4aa3d8600..35adebef6a6 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -89,7 +89,7 @@ #define DEFAULT_ATTACK_COOLDOWN 8 //Default timeout for aggressive actions #define DEFAULT_QUICK_COOLDOWN 4 -#define FAST_WEAPON_COOLDOWN 3 +#define FAST_WEAPON_COOLDOWN -2 #define DEFAULT_WEAPON_COOLDOWN 5 #define SLOW_WEAPON_COOLDOWN 7 @@ -112,6 +112,32 @@ #define MOB_TINY 5 #define MOB_MINISCULE 1 +// Defines mob health modifier, all mobs of a subtype will have their health modified by this. Mobs may have multiple types, attached to a max() operator. +// Mobs may have multiple types, attached to a max() operator. this is mostly because some 'miscelaneous' mobs are grouped more generally. +// If you don't see something here that seems to fit what you want, it may very well not have a define. +#define ROACH_HEALTH_MOD 1 //all roaches other than kaisers./ +#define SPIDER_HEALTH_MOD 0.5 //all spiders other than reapers./ +#define TERMITE_HEALTH_MOD 0.5 //all termites./ +#define CAVEMOB_HEALTH_MOD 0.70 //wurms, Sargoyle./ +#define AMGOLEM_HEALTH_MOD 0.70 //ameridien golems./ +#define CHURCHMOB_HEALTH_MOD 1 //Rooks and other church related mobs. +#define XENOMORPH_HEALTH_MOD 1 //Xenos, duh. includes queens. +#define REPUBLICON_HEALTH_MOD 1 //preppers bots, including seekers and drones. +#define GREYSONWEAK_HEALTH_MOD 0.8 //Weak greyson bots +#define GREYSONROBUST_HEALTH_MOD 0.70 //Strong greyson bots +#define CARP_HEALTH_MOD 1 //All space carp./ +#define VOIDWOLF_HEALTH_MOD 0.75 //all voidwolves other than reavers. +#define MEGAFAUNA_HEALTH_MOD 1 //all megafauna other than levaiathans. Renders, mukwah, nightmare stalkers. +#define VOXBIRD_HEALTH_MOD 1 //all the tribal birds./ +#define EXCELSIOR_HEALTH_MOD 0.7 //all the excelsior mobs, including mindslaves, and bears. +#define LEVIATHAN_HEALTH_MOD 1 //leviathans; Kaiser, Reaper, Patriarch, etc./ +#define PSIMOB_HEALTH_MOD 0.5 //Deepmaints mobs other than bosses./ +#define DVEY_HEALTH_MOD 0.6 //'corrupted beings', I.E Daskvey and their pets./ +#define PSIBOSS_HEALTH_MOD 1 //deepmaints bosses, be careful with this one. it's generally preferable to manually tweak them because they're...yknow, uniques./ + + + + // Defines how strong the species is compared to humans. Think like strength in D&D #define STR_VHIGH 2 #define STR_HIGH 1 @@ -366,10 +392,10 @@ // Termite defines -#define TERMITE_HEALTH_LOW 20 -#define TERMITE_HEALTH_MED 45 -#define TERMITE_HEALTH_HIGH 70 -#define TERMITE_HEALTH_ULTRA 100 +#define TERMITE_HEALTH_LOW 20 * TERMITE_HEALTH_MOD +#define TERMITE_HEALTH_MED 45 * TERMITE_HEALTH_MOD +#define TERMITE_HEALTH_HIGH 70 * TERMITE_HEALTH_MOD +#define TERMITE_HEALTH_ULTRA 100 * TERMITE_HEALTH_MOD #define TERMITE_DMG_LOW 15 #define TERMITE_DMG_MED 25 diff --git a/code/__DEFINES/weapons.dm b/code/__DEFINES/weapons.dm index 2d038689f0d..0c8e4b4b0cd 100644 --- a/code/__DEFINES/weapons.dm +++ b/code/__DEFINES/weapons.dm @@ -12,13 +12,14 @@ #define WEAPON_FORCE_GODLIKE 88 // currently only used by the energy axe, which can only be obtained via admin verbs //Armor Penetration: Ignores a certain amount of armor for the purposes of inflicting damage. -#define ARMOR_PEN_GRAZING 5 -#define ARMOR_PEN_SHALLOW 10 -#define ARMOR_PEN_MODERATE 15 -#define ARMOR_PEN_DEEP 20 -#define ARMOR_PEN_EXTREME 25 -#define ARMOR_PEN_MASSIVE 30 -#define ARMOR_PEN_HALF 50 +#define ARMOR_PEN_GRAZING 1.2 +#define ARMOR_PEN_SHALLOW 1.4 +#define ARMOR_PEN_MODERATE 1.6 +#define ARMOR_PEN_DEEP 1.8 +#define ARMOR_PEN_HALF 2 +#define ARMOR_PEN_EXTREME 2.5 +#define ARMOR_PEN_MASSIVE 3 +#define ARMOR_PEN_MAX 10 //Wounding Multiplier: Increases damage taken, applied after armor. #define WOUNDING_HARMLESS 0.25 @@ -28,7 +29,13 @@ #define WOUNDING_SERIOUS 1.25 #define WOUNDING_WIDE 1.5 #define WOUNDING_EXTREME 1.75 -#define WOUNDING_DEVESTATIING 2 +#define WOUNDING_DEVESTATING 2 + +//Injury Type: Degrades specific wounding multipliers depending on sharpness and edge + +#define INJURY_TYPE_LIVING "living" // Anything with soft organs +#define INJURY_TYPE_UNLIVING "unliving" // Things with hard vital parts, but not a proper organism, such as robots. TODO: FBPs into their own species - all robotic limbs possessing the defined species regardless of torso +#define INJURY_TYPE_HOMOGENOUS "homogenous" // Solid objects, such as walls, slimes (they contain a slime core, but otherwise are a single "cell", with no distinct organs), golems //Resistance values, used on floors, windows, airlocks, girders, and similar hard targets. //Resistance value is also used on simple animals. @@ -77,10 +84,10 @@ Fire delay 15 = 40 rounds per minute */ //Quick defines for fire modes -#define FULL_AUTO_150 list(mode_name = "full auto", mode_desc = "150 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 4 , icon="auto", damage_mult_add = -0.2) -#define FULL_AUTO_200 list(mode_name = "full auto", mode_desc = "200 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 3 , icon="auto", damage_mult_add = -0.2) -#define FULL_AUTO_300 list(mode_name = "full auto", mode_desc = "300 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 2 , icon="auto", damage_mult_add = -0.2) -#define FULL_AUTO_600 list(mode_name = "fuller auto", mode_desc = "600 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 1 , icon="fuller", damage_mult_add = -0.2) +#define FULL_AUTO_150 list(mode_name = "full auto", mode_desc = "150 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 4 , icon="auto") +#define FULL_AUTO_200 list(mode_name = "full auto", mode_desc = "200 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 3 , icon="auto") +#define FULL_AUTO_300 list(mode_name = "full auto", mode_desc = "300 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 2 , icon="auto") +#define FULL_AUTO_600 list(mode_name = "fuller auto", mode_desc = "600 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 1 , icon="fuller") #define FULL_AUTO_150_NOLOSS list(mode_name = "full auto", mode_desc = "150 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 4 , icon="auto") #define FULL_AUTO_200_NOLOSS list(mode_name = "full auto", mode_desc = "200 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 3 , icon="auto") diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 9266d5ea897..bdefd7c523e 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -156,12 +156,16 @@ // A is a turf or is on a turf, or in something on a turf (pen in a box); but not something in something on a turf (pen in a box in a backpack) sdepth = A.storage_depth_turf() if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) - if(A.Adjacent(src)) // see adjacent.dm + var/adjacent = A.Adjacent(src) + if(adjacent) // see adjacent.dm if(W) // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) - var/resolved = (LEGACY_SEND_SIGNAL(W, COMSIG_IATTACK, A, src, params)) || (LEGACY_SEND_SIGNAL(A, COMSIG_ATTACKBY, W, src, params)) || W.resolve_attackby(A, src, params) + var/resolved = (LEGACY_SEND_SIGNAL(W, COMSIG_IATTACK, A, src, params)) || (LEGACY_SEND_SIGNAL(A, COMSIG_ATTACKBY, W, src, params)) if(!resolved && A && W) - W.afterattack(A, src, 1, params) // 1: clicking something Adjacent + if(W.double_tact(src, A, adjacent)) + resolved = W.resolve_attackby(A, src, params) + if(!resolved) + W.afterattack(A, src, 1, params) // 1: clicking something Adjacent else if(ismob(A)) // No instant mob attacking setClickCooldown(DEFAULT_ATTACK_COOLDOWN) @@ -169,7 +173,8 @@ return else // non-adjacent click if(W) - W.afterattack(A, src, 0, params) // 0: not Adjacent + if(W.double_tact(src, A)) + W.afterattack(A, src, 0, params) // 0: not Adjacent else setClickCooldown(DEFAULT_ATTACK_COOLDOWN) // no ranged spam RangedAttack(A, params) diff --git a/code/_onclick/hud/screen_objects/base_screen_objects.dm b/code/_onclick/hud/screen_objects/base_screen_objects.dm index 197383c15da..40e37f423f3 100644 --- a/code/_onclick/hud/screen_objects/base_screen_objects.dm +++ b/code/_onclick/hud/screen_objects/base_screen_objects.dm @@ -979,6 +979,32 @@ obj/screen/fire/DEADelize() icon_state = "act_throw_off" //-----------------------throw END------------------------------ +//-----------------------block------------------------------ +/obj/screen/block + name = "block" + icon_state = "block_off" + screen_loc = "15:-16,3" + layer = HUD_LAYER + plane = HUD_PLANE + +/obj/screen/block/New() + ..() + update_icon() + +/obj/screen/block/Click() + if(usr.client) + usr.client.blocking() + update_icon() + +/obj/screen/block/update_icon() + if(ishuman(parentmob))//always true, but just in case + var/mob/living/carbon/human/H = parentmob + if(H.blocking) + icon_state = "block_on" + else + icon_state = "block_off" +//-----------------------block END------------------------------ + //-----------------------drop------------------------------ /obj/screen/drop name = "drop" diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 5c623bf9d37..960c25c4600 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -36,9 +36,115 @@ avoid code duplication. This includes items that may sometimes act as a standard if (pre_attack(A, user, params)) return 1 //Returning 1 passes an abort signal upstream add_fingerprint(user) + if(ishuman(user))//monkeys can use items, unfortunately + var/mob/living/carbon/human/H = user + if(H.blocking) + H.stop_blocking() + if(ishuman(user) && !(user == A) && !(user.loc == A) && (w_class >= ITEM_SIZE_NORMAL) && wielded && user.a_intent == I_HURT && !istype(src, /obj/item/gun) && !istype(A, /obj/structure) && !istype(A, /turf/simulated/wall) && A.loc != user && !no_swing) + swing_attack(A, user, params) + if(istype(A, /turf/simulated/floor)) // shitty hack so you can attack floors while wielding a large weapon + return A.attackby(src, user, params) + return 1 //Swinging calls its own attacks return A.attackby(src, user, params) -// No comment +//Returns TRUE if attack is to be carried out, FALSE otherwise. +/obj/item/proc/double_tact(mob/user, atom/atom_target, adjacent) + if(atom_target.loc == user)//putting stuff in your backpack, or something else on your person? + return TRUE //regular bags won't even be able to hold items this big, but who knows + if((w_class >= ITEM_SIZE_HUGE /*|| (w_class == ITEM_SIZE_HUGE && !wielded)*/) && !abstract && !istype(src, /obj/item/gun) && !no_double_tact)//grabs have colossal w_class. You can't raise something that does not exist. + if(!adjacent || istype(atom_target, /turf) || istype(atom_target, /mob) || user.a_intent == I_HURT)//guns have the point blank privilege + if(!ready) + user.visible_message(SPAN_DANGER("[user] raises [src]!")) + ready = TRUE + var/obj/effect/effect/melee/alert/A = new() + user.vis_contents += A + qdel(A) + var/unready_time = world.time + (10 SECONDS) + while(world.time < unready_time) + sleep(1) + if(!(ready)) + user.vis_contents -= A + return FALSE + if(!(is_equipped())) + ready = FALSE + user.vis_contents -= A + return FALSE + user.visible_message(SPAN_NOTICE("[user] lowers \his [src].")) + ready = FALSE + user.vis_contents -= A + return FALSE + else + ready = FALSE + return TRUE + else + return TRUE + else + return TRUE + + +/obj/item/proc/swing_attack(atom/A, mob/user, params) + var/holdinghand = user.get_inventory_slot(src) + if(params && islist(params) && params["mech"]) + holdinghand = params["mech_hand"] + var/turf/R + var/turf/C + var/turf/L + if(A.x == 0 && A.y == 0 && A.z == 0) //Attacking equipped items results in them getting forwarded + C = get_turf(user) + else + C = get_turf(A) + var/_dir + if(C == get_turf(user)) //If turf matches with user, move the attack towards where the user is facing + _dir = user.dir + C = get_step(C, _dir) + else + _dir = get_dir(user, A) + switch(_dir) + if(NORTH) + R = get_step(C, EAST) + L = get_step(C, WEST) + if(SOUTH) + R = get_step(C, WEST) + L = get_step(C, EAST) + if(EAST) + R = get_step(C, SOUTH) + L = get_step(C, NORTH) + if(WEST) + R = get_step(C, NORTH) + L = get_step(C, SOUTH) + if(NORTHEAST) + R = get_step(C, SOUTH) + L = get_step(C, WEST) + if(NORTHWEST) + R = get_step(C, EAST) + L = get_step(C, SOUTH) + if(SOUTHEAST) + R = get_step(C, WEST) + L = get_step(C, NORTH) + if(SOUTHWEST) + R = get_step(C, NORTH) + L = get_step(C, EAST) + var/obj/effect/effect/melee/swing/S = new(get_turf(user)) + S.dir = _dir + user.visible_message(SPAN_DANGER("[user] swings \his [src]")) + playsound(loc, 'sound/effects/swoosh.ogg', 50, 1, -1) + switch(holdinghand) + if(slot_l_hand) + flick("left_swing", S) + var/dmg_modifier = 1 + dmg_modifier = tileattack(user, L, modifier = 1) + dmg_modifier = tileattack(user, C, modifier = dmg_modifier, original_target = A) + tileattack(user, R, modifier = dmg_modifier) + QDEL_IN(S, 2 SECONDS) + if(slot_r_hand) + flick("right_swing", S) + var/dmg_modifier = 1 + dmg_modifier = tileattack(user, R, modifier = 1) + dmg_modifier = tileattack(user, C, modifier = dmg_modifier, original_target = A) + tileattack(user, L, modifier = dmg_modifier) + QDEL_IN(S, 2 SECONDS) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + /atom/proc/attackby(obj/item/W, mob/user, params) return @@ -53,6 +159,7 @@ avoid code duplication. This includes items that may sometimes act as a standard visible_message(SPAN_DANGER("[src] has been hit by [user] with [I].")) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + /obj/proc/nt_sword_attack(obj/item/I, mob/living/user)//for sword of truth . = FALSE if(!istype(I, /obj/item/tool/sword/nt_sword)) @@ -78,13 +185,86 @@ avoid code duplication. This includes items that may sometimes act as a standard /mob/living/attackby(obj/item/I, mob/living/user, var/params) if(!ismob(user)) return FALSE - if(can_operate(src, user) && do_surgery(src, user, I)) //Surgery + var/surgery_check = can_operate(src, user) + if(surgery_check && do_surgery(src, user, I, surgery_check)) //Surgery return TRUE - return I.attack(src, user, user.targeted_organ) + else + return I.attack(src, user, user.targeted_organ) + +//Used by Area of effect attacks, if it returns FALSE, it failed +/obj/item/proc/attack_with_multiplier(mob/living/user, var/atom/target, var/modifier = 1) + if(!wielded && modifier > 0) + return FALSE + var/original_force = force + var/original_unwielded_force = force_wielded_multiplier ? force / force_wielded_multiplier : force / 1.3 + force *= modifier + target.attackby(src, user) + force = wielded ? original_force : round(original_unwielded_force, 1) + return TRUE + +//Same as above but for mobs +/obj/item/proc/attack_with_multiplier_mob(mob/living/user, var/mob/living/target, var/modifier = 1) + if(!wielded && modifier > 0) + return FALSE + var/original_force = force + var/original_unwielded_force = force_wielded_multiplier ? force / force_wielded_multiplier : force / 1.3 + force *= modifier + attack(target, user, user.targeted_organ) + force = wielded ? original_force : round(original_unwielded_force, 1) + return TRUE + +//Area of effect attacks (swinging), return remaining damage +/obj/item/proc/tileattack(mob/living/user, turf/targetarea, var/modifier = 1, var/swing_degradation = 0.2, var/original_target) + if(istype(targetarea, /turf/simulated/wall)) + var/turf/simulated/W = targetarea + if(attack_with_multiplier(user, W, modifier)) + return (modifier - swing_degradation) // We hit a static object, prevents hitting anything underneath + var/successful_hit = FALSE + for(var/obj/S in targetarea) + if ((S.density || istype(S, /obj/effect/plant)) && !istype(S, /obj/structure/table) && !istype(S, /obj/machinery/disposal) && !istype(S, /obj/structure/closet)) + if(attack_with_multiplier(user, S, modifier)) + successful_hit = TRUE // Livings or targeted mobs can still be hit + if(successful_hit) + modifier -= swing_degradation // Only deduct damage once for dense objects + var/list/living_mobs = new/list() + var/list/dead_mobs = new/list() + for(var/mob/living/M in targetarea) + if(M != user) + if(M.stat == DEAD) + dead_mobs.Add(M) + else + living_mobs.Add(M) + var/mob/living/target + if(original_target && istype(original_target, /mob/living)) // Check if original target is a mob + if(LAZYFIND(living_mobs, original_target) || LAZYFIND(dead_mobs, original_target)) // Check if original target is a mob on this tile + target = original_target + if(attack_with_multiplier_mob(user, target, modifier)) + modifier -= swing_degradation + if(target.density) // If the original target was dense, the rest of the mobs are shielded + return modifier + + while(living_mobs.len && modifier > 0) + target = pick_n_take(living_mobs) + if(attack_with_multiplier_mob(user, target, modifier)) + modifier -= swing_degradation + successful_hit = TRUE + if(target.density) // If we hit a dense target, the rest of the mobs are shielded + return modifier + if(!successful_hit && dead_mobs.len) // If we hit nothing, try to hit dead mobs + target = pick(dead_mobs) + if(attack_with_multiplier_mob(user, target, modifier)) + modifier -= swing_degradation + return modifier // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. -/obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, params) +/obj/item/proc/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity, params) + if((!proximity && !ismob(A)) || !wielded || !extended_reach)//extended reach is only for mobs when you wield the spear + return + if(get_dist(user.loc, A.loc) < 3)//okay, we are in reach, now we need to check if there is anything dense in our path + var/turf/T = get_step(user.loc, get_dir(user, A)) + if(T.Enter(user)) + resolve_attackby(A, user, params) return //I would prefer to rename this attack_as_weapon(), but that would involve touching hundreds of files. @@ -128,6 +308,8 @@ avoid code duplication. This includes items that may sometimes act as a standard var/obj/item/organ/external/current_hand = H.organs_by_name[H.hand ? BP_L_ARM : BP_R_ARM] power = power + ((current_hand.limb_efficiency - 100) / 10) //Organ damage in the arms reduces melee damage, Improved efficiency increases melee damage. Slap Harder. power *= H.damage_multiplier + if(H.holding_back) + power /= 2 if(HULK in user.mutations) power *= 2 if(target.faction in effective_faction) // Is the mob's in our list of factions we're effective against? diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index f6220e2bf87..e63c580078a 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -66,6 +66,7 @@ var/const/tk_maxrange = 7 //Do not increase further - stops abusing of TK mechan icon = 'icons/obj/magic.dmi'//Needs sprites icon_state = "2" flags = NOBLUDGEON + no_double_tact = TRUE //item_state = null w_class = ITEM_SIZE_COLOSSAL layer = ABOVE_HUD_LAYER diff --git a/code/datums/armor.dm b/code/datums/armor.dm index 3fb525921a6..4b5b4c483cd 100644 --- a/code/datums/armor.dm +++ b/code/datums/armor.dm @@ -1,8 +1,9 @@ + #define ARMORID "armor-[melee]-[bullet]-[energy]-[bomb]-[bio]-[rad]" /proc/getArmor(melee = 0, bullet = 0, energy = 0, bomb = 0, bio = 0, rad = 0) . = locate(ARMORID) - if (!.) + if(!.) . = new /datum/armor(melee, bullet, energy, bomb, bio, rad) /datum/armor @@ -20,8 +21,7 @@ src.bomb = bomb src.bio = bio src.rad = rad - tag = rand(1, 10000) //Soj Edit, having this set to armor ID causes an error with our armor mods, this will show up as null when VV'd in game, but it will prevent - //armor mods from applying globally to all armor with the same ArmorID ERIS made. -Kaz + tag = ARMORID /datum/armor/proc/modifyRating(melee = 0, bullet = 0, energy = 0, bomb = 0, bio = 0, rad = 0) return getArmor(src.melee+melee, src.bullet+bullet, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad) @@ -41,7 +41,7 @@ return vars[rating] /datum/armor/proc/getList() - return list("melee" = melee, "bullet" = bullet, "energy" = energy, "bomb" = bomb, "bio" = bio, "rad" = rad) + return list(ARMOR_MELEE = melee, ARMOR_BULLET = bullet, ARMOR_ENERGY = energy, ARMOR_BOMB = bomb, ARMOR_BIO = bio, ARMOR_RAD = rad) /datum/armor/proc/attachArmor(datum/armor/AA) return getArmor(melee+AA.melee, bullet+AA.bullet, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad) diff --git a/code/datums/datum_hud.dm b/code/datums/datum_hud.dm index f2886ac4a23..12a735e6539 100755 --- a/code/datums/datum_hud.dm +++ b/code/datums/datum_hud.dm @@ -115,6 +115,8 @@ "glassesoverlay" = list("type" = /obj/screen/glasses_overlay, "loc" = "1,1:-32", "icon_state" = "blank"), ) + /* !!!! IF YOU WANT TO ADD A VERB TO THIS - ADD ITS NAME TO code\modules\mob\living\carbon\human\species\species_hud.dm + PLEASE DON'T REPEAT MY MISTAKES, I'VE WASTED HOURS OF MY LIFE ON THIS - Kegdo 2022*/ HUDneed = list( //status "nutrition" = list("type" = /obj/screen/nutrition, "loc" = "EAST+1:1,BOTTOM+3:25", "minloc" = "RIGHT:1,5:26", "background" = "back17"), @@ -128,13 +130,14 @@ "toxin" = list("type" = /obj/screen/toxin, "loc" = "EAST+1:16,BOTTOM+7:15", "minloc" = "RIGHT:16,9:12", "background" = "back18"), "internal" = list("type" = /obj/screen/internal, "loc" = "EAST+1,BOTTOM+8:-2", "minloc" = "RIGHT,10:-5", "background" = "back15"), //corner buttons - "jump" = list("type" = /obj/screen/jump, "loc" = "EAST+1,BOTTOM+1:-6", "minloc" = "RIGHT,3:-6", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + //"jump" = list("type" = /obj/screen/jump, "loc" = "EAST+1,BOTTOM+1:-6", "minloc" = "RIGHT,3:-6", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), "look up" = list("type" = /obj/screen/look_up, "loc" = "EAST,BOTTOM+1:13", "minloc" = "RIGHT-1,2:13", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), "throw" = list("type" = /obj/screen/HUDthrow, "loc" = "EAST+1,BOTTOM+1:13", "minloc" = "RIGHT,2:13", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), "pull" = list("type" = /obj/screen/pull, "loc" = "EAST-1,BOTTOM+1:13", "minloc" = "RIGHT-2,2:13", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), "drop" = list("type" = /obj/screen/drop, "loc" = "EAST+1,BOTTOM+1", "minloc" = "RIGHT,2", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), "resist" = list("type" = /obj/screen/resist, "loc" = "EAST-1,BOTTOM+1", "minloc" = "RIGHT-2,2", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), "rest" = list("type" = /obj/screen/rest, "loc" = "EAST,BOTTOM+1", "minloc" = "RIGHT-1,2", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), + "block" = list("type" = /obj/screen/block, "loc" = "EAST+1,BOTTOM+1:26", "minloc" = "RIGHT,3:-6", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back17-1"), "move intent" = list("type" = /obj/screen/mov_intent, "loc" = "EAST,BOTTOM", "minloc" = "RIGHT-1,1", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back1"), "implant bionics" = list("type" = /obj/screen/implant_bionics, "loc" = "EAST-2,BOTTOM-1", "minloc" = "12,1", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back13"), "craft menu" = list("type" = /obj/screen/craft_menu, "loc" = "EAST-2:16,BOTTOM", "minloc" = "12:16,1", "hideflag" = TOGGLE_BOTTOM_FLAG, "background" = "back13"), diff --git a/code/datums/stat_modifiers/mob_modifiers.dm b/code/datums/stat_modifiers/mob_modifiers.dm index 673e4a45e6c..ad1627c2657 100644 --- a/code/datums/stat_modifiers/mob_modifiers.dm +++ b/code/datums/stat_modifiers/mob_modifiers.dm @@ -21,9 +21,9 @@ var/inherent_projectile_increment_adjustment /// Any projectiles fired by the holder will have their armor penetration increased by this much, added after the mult - var/projectile_armor_penetration_adjustment + var/projectile_armor_divisor_adjustment /// Any projectiles fired by the holder will have their armor penetration multiplied by this much, added first - var/projectile_armor_penetration_mult_increment + var/projectile_armor_divisor_mult_increment /// Inverted, lower = higher speed var/projectile_speed_increment_adjustment @@ -66,10 +66,10 @@ for (var/entry in projectile_damage_mult) livingholder.projectile_damage_mult[entry] = ZERO_OR_MORE((livingholder.projectile_damage_mult[entry] - projectile_damage_mult[entry])) - if (projectile_armor_penetration_adjustment) - livingholder.projectile_armor_penetration_adjustment = ZERO_OR_MORE((livingholder.projectile_armor_penetration_adjustment - projectile_armor_penetration_adjustment)) - if (projectile_armor_penetration_mult_increment) - livingholder.projectile_armor_penetration_mult = ZERO_OR_MORE((livingholder.projectile_armor_penetration_mult - projectile_armor_penetration_mult_increment)) + if (projectile_armor_divisor_adjustment) + livingholder.projectile_armor_divisor_adjustment = ZERO_OR_MORE((livingholder.projectile_armor_divisor_adjustment - projectile_armor_divisor_adjustment)) + if (projectile_armor_divisor_mult_increment) + livingholder.projectile_armor_divisor_mult = ZERO_OR_MORE((livingholder.projectile_armor_divisor_mult - projectile_armor_divisor_mult_increment)) if (projectile_speed_increment_adjustment) livingholder.projectile_speed_increment = ZERO_OR_MORE((livingholder.projectile_speed_increment - projectile_speed_increment_adjustment)) @@ -110,10 +110,10 @@ for (var/entry in projectile_damage_mult) livingtarget.projectile_damage_mult[entry] = ZERO_OR_MORE((livingtarget.projectile_damage_mult[entry] + projectile_damage_mult[entry])) - if (projectile_armor_penetration_adjustment) - livingtarget.projectile_armor_penetration_adjustment = ZERO_OR_MORE((livingtarget.projectile_armor_penetration_adjustment + projectile_armor_penetration_adjustment)) - if (projectile_armor_penetration_mult_increment) - livingtarget.projectile_armor_penetration_mult = ZERO_OR_MORE((livingtarget.projectile_armor_penetration_mult + projectile_armor_penetration_mult_increment)) + if (projectile_armor_divisor_adjustment) + livingtarget.projectile_armor_divisor_adjustment = ZERO_OR_MORE((livingtarget.projectile_armor_divisor_adjustment + projectile_armor_divisor_adjustment)) + if (projectile_armor_divisor_mult_increment) + livingtarget.projectile_armor_divisor_mult = ZERO_OR_MORE((livingtarget.projectile_armor_divisor_mult + projectile_armor_divisor_mult_increment)) if (projectile_speed_increment_adjustment) livingtarget.projectile_speed_increment = ZERO_OR_MORE((livingtarget.projectile_speed_increment + projectile_speed_increment_adjustment)) diff --git a/code/datums/stat_modifiers/modifiers/mob/superior/armor.dm b/code/datums/stat_modifiers/modifiers/mob/superior/armor.dm index d84862ea26c..7725e10bd4d 100644 --- a/code/datums/stat_modifiers/modifiers/mob/superior/armor.dm +++ b/code/datums/stat_modifiers/modifiers/mob/superior/armor.dm @@ -92,9 +92,9 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/armor/flat/positive/low armor_adjustment = list( - melee = 10, - bullet = 10, - energy = 10, + melee = 2, + bullet = 2, + energy = 2, bomb = 10, bio = 10, rad = 10, @@ -103,9 +103,9 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/armor/flat/positive/medium armor_adjustment = list( - melee = 20, - bullet = 20, - energy = 20, + melee = 3, + bullet = 3, + energy = 3, bomb = 20, bio = 20, rad = 20, @@ -114,9 +114,9 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/armor/flat/positive/high armor_adjustment = list( - melee = 30, - bullet = 30, - energy = 30, + melee = 4, + bullet = 4, + energy = 4, bomb = 30, bio = 30, rad = 30, @@ -161,9 +161,9 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/armor/flat/negative/low armor_adjustment = list( - melee = -10, - bullet = -10, - energy = -10, + melee = -2, + bullet = -2, + energy = -2, bomb = -10, bio = -10, rad = -10, @@ -172,9 +172,9 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/armor/flat/negative/medium armor_adjustment = list( - melee = -20, - bullet = -20, - energy = -20, + melee = -5, + bullet = -5, + energy = -5, bomb = -20, bio = -20, rad = -20, @@ -183,9 +183,9 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/armor/flat/negative/high armor_adjustment = list( - melee = -30, - bullet = -30, - energy = -30, + melee = -7, + bullet = -7, + energy = -7, bomb = -30, bio = -30, rad = -30, diff --git a/code/datums/stat_modifiers/modifiers/mob/superior/ranged/ranged_modifiers.dm b/code/datums/stat_modifiers/modifiers/mob/superior/ranged/ranged_modifiers.dm index e03a219a4ef..37c63363d0a 100644 --- a/code/datums/stat_modifiers/modifiers/mob/superior/ranged/ranged_modifiers.dm +++ b/code/datums/stat_modifiers/modifiers/mob/superior/ranged/ranged_modifiers.dm @@ -1,7 +1,7 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/deadeye inherent_projectile_mult_increment = 1 //a little more dps, but more easily avoided - projectile_armor_penetration_mult_increment = 0.25 + projectile_armor_divisor_mult_increment = 1.25 delay_for_range_mult = 1.4 delay_for_rapid_range_mult = 1.4 @@ -34,7 +34,7 @@ rapid_fire_shooting_amount_mult = 2 //pretty noticable damage increase delay_for_rapid_range_mult = 0.5 //half the delay - projectile_armor_penetration_mult_increment = -0.5 //significantly worse armor penetration because they're just shooting whatever part of you they can + projectile_armor_divisor_mult_increment = -0.5 //significantly worse armor penetration because they're just shooting whatever part of you they can inherent_projectile_mult_increment = -0.3 // but still with higher DPS because theyre shooting you twice as much for 70% damage diff --git a/code/datums/stat_modifiers/modifiers/mob/superior/roach_modifiers.dm b/code/datums/stat_modifiers/modifiers/mob/superior/roach_modifiers.dm index e5d04830dee..23b745fcb38 100644 --- a/code/datums/stat_modifiers/modifiers/mob/superior/roach_modifiers.dm +++ b/code/datums/stat_modifiers/modifiers/mob/superior/roach_modifiers.dm @@ -1,13 +1,13 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/biosilicified armor_adjustment = list( - melee = 10, - bullet = 5, + melee = 2, + bullet = 1, bomb = 10, agony = 15 //Rubbers deal way less to us! ) - armor_penetration_increment = 15 + armor_divisor_increment = 1.5 stattags = DEFENSE_STATTAG | MELEE_STATTAG @@ -18,12 +18,12 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/lambertian armor_adjustment = list( - energy = 10, - agony = 10 + energy = 2, + agony = 1 ) flash_resistances_increment = 2 - armor_penetration_increment = 5 + armor_divisor_increment = 1.15 stattags = DEFENSE_STATTAG diff --git a/code/datums/stat_modifiers/modifiers/mob/superior/special/special_modifiers.dm b/code/datums/stat_modifiers/modifiers/mob/superior/special/special_modifiers.dm index 4fde5debc55..5ead6829508 100644 --- a/code/datums/stat_modifiers/modifiers/mob/superior/special/special_modifiers.dm +++ b/code/datums/stat_modifiers/modifiers/mob/superior/special/special_modifiers.dm @@ -29,20 +29,20 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/aggressive/savage armor_adjustment = list( - melee = -40, - bullet = -35, - energy = -35, + melee = -10, + bullet = -8, + energy = -8, bomb = -40, - agony = 50 //it doesnt care, it just wants you dead + agony = 12 //it doesnt care, it just wants you dead ) maxHealth_mult = 0.8 //80% hp move_to_delay_increment = -1.3 // fast - projectile_armor_penetration_mult_increment = 0.5 - armor_penetration_mult = 1.5 - armor_penetration_zeroth = 0.1 + projectile_armor_divisor_mult_increment = 0.5 + armor_divisor_mult = 1.5 + armor_divisor_zeroth = 0.1 melee_damage_lower_mult = 1.5 melee_damage_upper_mult = 1.5 diff --git a/code/datums/stat_modifiers/modifiers/mob/superior/spider_modifiers.dm b/code/datums/stat_modifiers/modifiers/mob/superior/spider_modifiers.dm index f4eecca5d52..e5aa299adbc 100644 --- a/code/datums/stat_modifiers/modifiers/mob/superior/spider_modifiers.dm +++ b/code/datums/stat_modifiers/modifiers/mob/superior/spider_modifiers.dm @@ -5,7 +5,7 @@ ) flash_resistances_increment = 2 - armor_penetration_increment = 15 + armor_divisor_increment = 1.25 prefix = "Lustrous" @@ -16,13 +16,13 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/durable/spider armor_adjustment = list( - melee = 5, - bullet = 5, + melee = 1, + bullet = 1, bomb = 15, - agony = 30 + agony = 7 ) - armor_penetration_increment = 5 + armor_divisor_increment = 1.1 flash_resistances_increment = 1 maxHealth_increment = 20 @@ -33,10 +33,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/young/spider armor_adjustment = list( - melee = -5, - bullet = -5, - energy = -5, - agony = -5 + melee = -1, + bullet = -1, + energy = -1, + agony = -1 ) maxHealth_increment = -10 @@ -51,10 +51,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/old/spider armor_adjustment = list( - melee = 5, - bullet = 5, + melee = 1, + bullet = 1, bomb = 10, - agony = 20 //just cant feel it + agony = 5 //just cant feel it ) maxHealth_increment = 20 //life already seen them by @@ -71,7 +71,7 @@ bomb = 5, bio = 15, rad = 15, - agony = 10 + agony = 2 ) stattags = DEFENSE_STATTAG | MELEE_STATTAG diff --git a/code/datums/stat_modifiers/modifiers/mob/superior/superior_modifiers.dm b/code/datums/stat_modifiers/modifiers/mob/superior/superior_modifiers.dm index 712ca2eec2a..35d5eedd8f7 100644 --- a/code/datums/stat_modifiers/modifiers/mob/superior/superior_modifiers.dm +++ b/code/datums/stat_modifiers/modifiers/mob/superior/superior_modifiers.dm @@ -1,10 +1,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/durable armor_adjustment = list( - melee = 5, - bullet = 5, - bomb = 15, - agony = 30 + melee = 1, + bullet = 1, + bomb = 3, + agony = 7 ) flash_resistances_increment = 1 @@ -18,22 +18,22 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/brutish armor_adjustment = list( - melee = 5, - bullet = 5, - energy = -5, + melee = 1, + bullet = 1, + energy = -1, bomb = 5, - agony = 15 + agony = 1 ) melee_damage_lower_increment = 2 melee_damage_upper_increment = 2 maxHealth_increment = 5 - armor_penetration_increment = 2 + armor_divisor_increment = 1.25 stattags = DEFENSE_STATTAG | MELEE_STATTAG inherent_projectile_mult_increment = 0.1 - projectile_armor_penetration_adjustment = 2 + projectile_armor_divisor_adjustment = 2 description = "This one is noticably muscular. It looks like it might hit harder than others." @@ -42,10 +42,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/padded armor_adjustment = list( - melee = 10, - bullet = 5, + melee = 2, + bullet = 1, bomb = 10, - agony = 15 //Rubbers deal way less to us! + agony = 3 //Rubbers deal way less to us! ) stattags = DEFENSE_STATTAG @@ -59,10 +59,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/old armor_adjustment = list( - melee = 5, - bullet = 5, + melee = 1, + bullet = 1, bomb = 10, - agony = 20 //just cant feel it + agony = 5 //just cant feel it ) maxHealth_increment = 20 //life already seen them by @@ -79,10 +79,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/young armor_adjustment = list( - melee = -5, - bullet = -5, - energy = -5, - agony = -5 + melee = -1, + bullet = -1, + energy = -1, + agony = -1 ) maxHealth_increment = -10 @@ -101,10 +101,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/brutal armor_adjustment = list( - melee = 15, - bullet = 5, + melee = 3, + bullet = 1, bomb = 15, - agony = 30 + agony = 7 ) flash_resistances_increment = 4 diff --git a/code/datums/stat_modifiers/modifiers/mob/superior/xeno_modifers.dm b/code/datums/stat_modifiers/modifiers/mob/superior/xeno_modifers.dm index 0466e48e1df..ba980746d8e 100644 --- a/code/datums/stat_modifiers/modifiers/mob/superior/xeno_modifers.dm +++ b/code/datums/stat_modifiers/modifiers/mob/superior/xeno_modifers.dm @@ -1,10 +1,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/durable/xeno armor_adjustment = list( - melee = 15, - bullet = 15, - bomb = 15, - agony = 30 + melee = 3, + bullet = 3, + bomb = 3, + agony = 7 ) flash_resistances_increment = 2 @@ -15,17 +15,17 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/brutish/xeno armor_adjustment = list( - melee = 10, - bullet = 10, + melee = 2, + bullet = 2, energy = 0, bomb = 5, - agony = 15 + agony = 3 ) melee_damage_lower_increment = 5 melee_damage_upper_increment = 5 maxHealth_increment = 25 - armor_penetration_increment = 15 + armor_divisor_increment = 1.25 description = "This one is noticably tougher with sharp claws. It looks like it might hit harder than others." @@ -34,10 +34,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/padded/xeno armor_adjustment = list( - melee = 20, - bullet = 15, + melee = 5, + bullet = 3, bomb = 20, - agony = 35 //Rubbers deal way less to us! + agony = 8 //Rubbers deal way less to us! ) stattags = DEFENSE_STATTAG @@ -51,10 +51,10 @@ /datum/stat_modifier/mob/living/carbon/superior_animal/old/xeno armor_adjustment = list( - melee = -15, - bullet = 35, + melee = -3, + bullet = 2, bomb = -10, - agony = 60 //just cant feel it + agony = 30 //just cant feel it ) maxHealth_increment = 60 //life already seen them by diff --git a/code/datums/stat_modifiers/superior_modifier_defines.dm b/code/datums/stat_modifiers/superior_modifier_defines.dm index c1b2eceebd9..276d66a239d 100644 --- a/code/datums/stat_modifiers/superior_modifier_defines.dm +++ b/code/datums/stat_modifiers/superior_modifier_defines.dm @@ -24,9 +24,9 @@ var/flash_resistances_mult var/flash_resistances_zeroth = 0.5 - var/armor_penetration_increment - var/armor_penetration_mult - var/armor_penetration_zeroth = 0 + var/armor_divisor_increment + var/armor_divisor_mult + var/armor_divisor_zeroth = 1 var/rapid_fire_shooting_amount_increment var/rapid_fire_shooting_amount_mult @@ -78,10 +78,10 @@ if (flash_resistances_mult) superior_holder.flash_resistances = ZERO_OR_MORE(round(superior_holder.flash_resistances / flash_resistances_mult)) - if (armor_penetration_increment) - superior_holder.armor_penetration = ZERO_OR_MORE(superior_holder.armor_penetration - armor_penetration_increment) - if (armor_penetration_mult) - superior_holder.armor_penetration = ZERO_OR_MORE(superior_holder.armor_penetration / armor_penetration_mult) + if (armor_divisor_increment) + superior_holder.armor_divisor = ZERO_OR_MORE(superior_holder.armor_divisor - armor_divisor_increment) + if (armor_divisor_mult) + superior_holder.armor_divisor = ZERO_OR_MORE(superior_holder.armor_divisor / armor_divisor_mult) if (fire_delay_increment) superior_holder.fire_delay = ZERO_OR_MORE(superior_holder.fire_delay - fire_delay_increment) @@ -153,10 +153,10 @@ if (flash_resistances_increment) superior_target.flash_resistances = ZERO_OR_MORE(superior_target.flash_resistances + flash_resistances_increment) - if (armor_penetration_mult) - superior_target.armor_penetration = (SAFEMULT(superior_target.armor_penetration, armor_penetration_mult, armor_penetration_zeroth)) - if (armor_penetration_increment) - superior_target.armor_penetration = (superior_target.armor_penetration + armor_penetration_increment) + if (armor_divisor_mult) + superior_target.armor_divisor = (SAFEMULT(superior_target.armor_divisor, armor_divisor_mult, armor_divisor_zeroth)) + if (armor_divisor_increment) + superior_target.armor_divisor = (superior_target.armor_divisor + armor_divisor_increment) if (fire_delay_mult) superior_target.fire_delay_initial = ZERO_OR_MORE(round(SAFEMULT(superior_target.fire_delay_initial, fire_delay_mult, fire_delay_zeroth))) diff --git a/code/game/machinery/autolathe/artist_bench.dm b/code/game/machinery/autolathe/artist_bench.dm index 19792e20b7c..e8da7a71b4c 100644 --- a/code/game/machinery/autolathe/artist_bench.dm +++ b/code/game/machinery/autolathe/artist_bench.dm @@ -206,7 +206,7 @@ if("shotgun") //From bull.dm, Arbitrary values R.caliber = CAL_SHOTGUN R.damage_multiplier = 0.8 + rand(-2,2)/10 - R.penetration_multiplier = 0.75 + rand(-3,3)/10 + R.penetration_multiplier = -0.25 + rand(-3,3)/10 R.bulletinsert_sound = 'sound/weapons/guns/interact/shotgun_insert.ogg' R.fire_sound = 'sound/weapons/guns/fire/shotgunp_fire.ogg' R.max_shells = rand(3,9) diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index 025bf032364..14c5f9b8c25 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -12,7 +12,7 @@ energy_drain = 10 price_tag = 150 force = 30 - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP structure_damage_factor = STRUCTURE_DAMAGE_HEAVY tool_qualities = list(QUALITY_DIGGING = 60) required_type = list(/obj/mecha/working, /obj/mecha/combat, /obj/mecha/medical) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 00ad6814695..42d6cbc6ad1 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -6,7 +6,7 @@ * /obj/item/mecha_parts/mecha_equipment/tool/extinguisher * /obj/item/mecha_parts/mecha_equipment/tool/rcd * /obj/item/mecha_parts/mecha_equipment/tool/cable_layer - * + * */ /obj/item/mecha_parts/mecha_equipment/tool @@ -19,7 +19,7 @@ energy_drain = 10 tool_qualities = list(QUALITY_CLAMPING = 5, QUALITY_HAMMERING = 30, QUALITY_PRYING = 30, QUALITY_BOLT_TURNING = 20, QUALITY_EXCAVATION = 20, QUALITY_SHOVELING = 30) // This is a literal industrial clamp force = 20 - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW var/obj/mecha/cargo_holder var/can_load_living = FALSE @@ -83,7 +83,7 @@ name = "\improper KILL CLAMP" energy_drain = 0 force = 90 //Lmao, the mech sword deals 60 - armor_penetration = ARMOR_PEN_EXTREME //This thing is hilarious, I'm just adding to it + armor_divisor = ARMOR_PEN_EXTREME //This thing is hilarious, I'm just adding to it can_load_living = TRUE /obj/item/mecha_parts/mecha_equipment/tool/extinguisher diff --git a/code/game/mecha/equipment/weapons/melee.dm b/code/game/mecha/equipment/weapons/melee.dm index fa66837156a..1fff4d38126 100644 --- a/code/game/mecha/equipment/weapons/melee.dm +++ b/code/game/mecha/equipment/weapons/melee.dm @@ -17,7 +17,7 @@ sharp = TRUE edge = TRUE tool_qualities = list(QUALITY_CUTTING = 35, QUALITY_SAWING = 20) // It's a literal mech sized blade - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP structure_damage_factor = STRUCTURE_DAMAGE_HEAVY hitsound = 'sound/weapons/bladeslice.ogg' var/icon/melee_overlay @@ -41,7 +41,7 @@ tool_qualities = list(QUALITY_CUTTING = 30, QUALITY_WIRE_CUTTING = 20) //Same as E-cutlasses origin_tech = list(TECH_MAGNET = 5, TECH_POWER = 6, TECH_COMBAT = 3) //Same as E-cutlasses matter = list(MATERIAL_STEEL = 15, MATERIAL_SILVER = 1, MATERIAL_GOLD = 1) //WAY LESS then normal E-cutlasses do to the only being 5 more damage - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP structure_damage_factor = STRUCTURE_DAMAGE_HEAVY hitsound = 'sound/weapons/bladeslice.ogg' var/icon/melee_overlay diff --git a/code/game/objects/effects/melee.dm b/code/game/objects/effects/melee.dm new file mode 100644 index 00000000000..dd25d6ac022 --- /dev/null +++ b/code/game/objects/effects/melee.dm @@ -0,0 +1,14 @@ +obj/effect/effect/melee/swing + name = "swing" + icon = 'icons/effects/meleeeffects.dmi' + pixel_x = -32 + pixel_y = -32 + anchored = TRUE + layer = ABOVE_ALL_MOB_LAYER + +obj/effect/effect/melee/alert + name = "READY TO STRIKE" //Making this REALLY OBVIOUS + icon = 'icons/effects/alerts.dmi' + icon_state = "ready" + pixel_y = 4 + layer = ABOVE_ALL_MOB_LAYER diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 26143a1a0de..e56542011ab 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -16,6 +16,17 @@ var/no_attack_log = 0 //If it's an item we don't want to log attack_logs with, set this to 1 pass_flags = PASSTABLE + //The cool stuff for melee + var/screen_shake = FALSE //If a weapon can shake the victim's camera on hit. + var/forced_broad_strike = FALSE //If a weapon is forced to always perform broad strikes. + var/extended_reach = FALSE //Wielded spears can hit alive things one tile further. + var/ready = FALSE //All weapons that are ITEM_SIZE_BULKY or bigger have double tact, meaning you have to click twice. + var/no_double_tact = FALSE //for when you, for some inconceivable reason, want a huge item to not have double tact + var/no_swing = FALSE //for when you do not want an item to swing-attack + var/push_attack = FALSE //Hammers and spears can push the victim away on hit when you aim groin. + //Why are we using vars instead of defines or anything else? + //Because we need them to be shown in the tool info UI. + var/obj/item/master = null var/list/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/list/attack_verb = null //Used in attackby() to say how something was attacked "[x] has been [LAZYPICK(z.attack_verb) || "attacked"] by [y] with [z]" @@ -81,7 +92,6 @@ var/embed_mult = 1 //Multiplier for the chance of embedding in mobs. Set to zero to completely disable embedding var/structure_damage_factor = STRUCTURE_DAMAGE_NORMAL //Multiplier applied to the damage when attacking structures and machinery - var/post_penetration_dammult = 1 //how much damage do we do post-armor-penetation //Does not affect damage dealt to mobs //var/attack_distance = 1 @@ -673,7 +683,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. /obj/item/proc/refresh_upgrades() damtype = initial(damtype) force = initial(force) - armor_penetration = initial(armor_penetration) + armor_divisor = initial(armor_divisor) item_flags = initial(item_flags) name = initial(name) max_upgrades = initial(max_upgrades) @@ -721,7 +731,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. /obj/item/proc/alt_mode_activeate_two() damtype = alt_mode_damagetype force = force *= alt_mode_lossrate - armor_penetration = armor_penetration *= alt_mode_lossrate + armor_divisor= armor_divisor *= alt_mode_lossrate attack_verb = LAZYCOPY(alt_mode_verbs) sharp = alt_mode_sharp flags |= NOBLOODY diff --git a/code/game/objects/items/devices/organ_module/active/armblades.dm b/code/game/objects/items/devices/organ_module/active/armblades.dm index 0e97f06129a..8f894d766c8 100644 --- a/code/game/objects/items/devices/organ_module/active/armblades.dm +++ b/code/game/objects/items/devices/organ_module/active/armblades.dm @@ -6,11 +6,14 @@ item_state = null worksound = WORKSOUND_HARD_SLASH hitsound = 'sound/weapons/heavyslash.ogg' - force = WEAPON_FORCE_DANGEROUS + force = WEAPON_FORCE_BRUTAL + sharp = TRUE + edge = TRUE + clickdelay_offset = FAST_WEAPON_COOLDOWN throwforce = WEAPON_FORCE_WEAK w_class = ITEM_SIZE_SMALL attack_verb = list("stabbed", "chopped", "cut") - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE tool_qualities = list(QUALITY_CUTTING = 20) /obj/item/organ_module/active/simple/proc/get_scanner_name() @@ -31,6 +34,7 @@ icon_state = "wolverine" name = "claws" desc = "A set of claws deployed from the tips of your fingers. Great for cutting people into ribbons." + clickdelay_offset = 0 //No bonus speed. /obj/item/organ_module/active/simple/wolverine name = "embedded claws" @@ -93,7 +97,7 @@ worksound = WORKSOUND_HARD_SLASH force = WEAPON_FORCE_ROBUST throwforce = WEAPON_FORCE_WEAK - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE w_class = ITEM_SIZE_SMALL attack_verb = list("stabbed", "chopped", "cut", "sliced", "reaped") tool_qualities = list(QUALITY_CUTTING = 30) @@ -119,7 +123,7 @@ worksound = WORKSOUND_HARD_SLASH force = WEAPON_FORCE_ROBUST throwforce = WEAPON_FORCE_WEAK - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE w_class = ITEM_SIZE_SMALL attack_verb = list("stabbed", "chopped", "cut", "sliced", "reaped") tool_qualities = list(QUALITY_CUTTING = 30) diff --git a/code/game/objects/items/devices/organ_module/active/armshields.dm b/code/game/objects/items/devices/organ_module/active/armshields.dm index c3b02afa154..e81739bc24b 100644 --- a/code/game/objects/items/devices/organ_module/active/armshields.dm +++ b/code/game/objects/items/devices/organ_module/active/armshields.dm @@ -3,7 +3,7 @@ desc = "An embedded shield adept at blocking objects from connecting with the torso of the shield wielder." icon_state = "marine_shield" item_state = "marine_shield" - armor_list = list(melee = 15, bullet = 15, energy = 15, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 3, bullet = 3, energy = 3, bomb = 0, bio = 0, rad = 0) attack_verb = list("bashed") base_block_chance = 50 diff --git a/code/game/objects/items/oddities.dm b/code/game/objects/items/oddities.dm index 1925658ba7e..f8503da5eea 100644 --- a/code/game/objects/items/oddities.dm +++ b/code/game/objects/items/oddities.dm @@ -908,7 +908,7 @@ slot_flags = SLOT_BELT sharp = TRUE edge = TRUE - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW oddity_stats = list( STAT_ROB = 7 diff --git a/code/game/objects/items/stacks/matter_synth.dm b/code/game/objects/items/stacks/matter_synth.dm index b18cd330aca..59e416a2c90 100644 --- a/code/game/objects/items/stacks/matter_synth.dm +++ b/code/game/objects/items/stacks/matter_synth.dm @@ -57,5 +57,5 @@ /datum/matter_synth/wire name = "Wire Synthesizer" - max_energy = 50 - recharge_rate = 2 \ No newline at end of file + max_energy = 12 + recharge_rate = 2 diff --git a/code/game/objects/items/stacks/throwing.dm b/code/game/objects/items/stacks/throwing.dm index 55af1aaae1e..4feaf15e91c 100644 --- a/code/game/objects/items/stacks/throwing.dm +++ b/code/game/objects/items/stacks/throwing.dm @@ -21,7 +21,7 @@ w_class = ITEM_SIZE_SMALL force = WEAPON_FORCE_NORMAL throwforce = WEAPON_FORCE_WEAK - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW slot_flags = SLOT_BELT /obj/item/stack/thrown/update_icon() @@ -73,7 +73,7 @@ w_class = ITEM_SIZE_SMALL force = WEAPON_FORCE_NORMAL throwforce = WEAPON_FORCE_NORMAL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW slot_flags = SLOT_BELT /obj/item/stack/thrown/throwing_knife/launchAt(atom/target, mob/living/carbon/C) diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 5220b353c77..ae3cb48cdbe 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -82,13 +82,13 @@ RSF used_energy = 10 if(2) product = new /obj/item/reagent_containers/food/drinks/drinkingglass() - used_energy = 50 + used_energy = 12 if(3) product = new /obj/item/paper() used_energy = 10 if(4) product = new /obj/item/pen() - used_energy = 50 + used_energy = 12 if(5) product = new /obj/item/storage/pill_bottle/dice() used_energy = 200 diff --git a/code/game/objects/items/weapons/grenades/heatwave.dm b/code/game/objects/items/weapons/grenades/heatwave.dm index 48cec64820c..fc7669d6ddc 100644 --- a/code/game/objects/items/weapons/grenades/heatwave.dm +++ b/code/game/objects/items/weapons/grenades/heatwave.dm @@ -9,7 +9,7 @@ var/flash_range = 10 var/heat_damage = 40 var/fire_stacks = TRUE - var/penetration = 0 + var/penetration = 1 /obj/item/grenade/heatwave/prime() diff --git a/code/game/objects/items/weapons/hydrogen_melee.dm b/code/game/objects/items/weapons/hydrogen_melee.dm index 4e749ca8e9b..47e5cf52c5f 100644 --- a/code/game/objects/items/weapons/hydrogen_melee.dm +++ b/code/game/objects/items/weapons/hydrogen_melee.dm @@ -11,6 +11,7 @@ throwforce = WEAPON_FORCE_WEAK throw_speed = 3 throw_range = 5 + no_double_tact = TRUE //for now. w_class = ITEM_SIZE_SMALL switched_on_qualities = list(QUALITY_WELDING = 5, QUALITY_CAUTERIZING = 25, QUALITY_CUTTING = 50) worksound = WORKSOUND_WELDING @@ -47,7 +48,7 @@ active = TRUE force = active_force throwforce = active_throwforce - armor_penetration = active_ap + armor_divisor = active_ap sharp = TRUE edge = TRUE w_class = active_w_class @@ -62,7 +63,7 @@ active = FALSE force = initial(force) throwforce = initial(throwforce) - armor_penetration = initial(armor_penetration) + armor_divisor = initial(armor_divisor) sharp = initial(sharp) edge = initial(edge) w_class = initial(w_class) diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index b9513ba8f8a..8c79587664a 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -4,6 +4,7 @@ icon_state = "butterflyknife" item_state = null hitsound = null + clickdelay_offset = FAST_WEAPON_COOLDOWN var/active = 0 var/backstab_damage = 10 w_class = ITEM_SIZE_SMALL diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index 1a13ed3a47c..e420bc04a29 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -5,6 +5,6 @@ desc = "Tharr she blows!" icon_state = "harpoon" item_state = "harpoon" - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE force_divisor = 0.3 // 18 with hardness 60 (steel) - attack_verb = list("jabbed","stabbed","ripped") \ No newline at end of file + attack_verb = list("jabbed","stabbed","ripped") diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm index 1dd895548b9..2dea10273c6 100644 --- a/code/game/objects/items/weapons/material/swords.dm +++ b/code/game/objects/items/weapons/material/swords.dm @@ -7,7 +7,7 @@ icon_state = "claymore" item_state = "claymore" slot_flags = SLOT_BELT - armor_penetration = ARMOR_PEN_EXTREME + armor_divisor = ARMOR_PEN_EXTREME force_divisor = 0.7 // 42 when wielded with hardnes 60 (steel) thrown_force_divisor = 0.5 // 10 when thrown with weight 20 (steel) sharp = 1 diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 8ed298f91d6..15fb73509b5 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -5,7 +5,7 @@ var/active_w_class sharp = 0 edge = 0 - armor_penetration = ARMOR_PEN_MASSIVE + armor_divisor = ARMOR_PEN_MASSIVE flags = NOBLOODY structure_damage_factor = STRUCTURE_DAMAGE_HEAVY heat = 3800 @@ -95,11 +95,12 @@ desc = "May the Force be with you." icon_state = "sword0" icon = 'icons/obj/weapons.dmi' - active_force = WEAPON_FORCE_BRUTAL // Go forth and slay, padawan - active_throwforce = WEAPON_FORCE_BRUTAL + active_force = WEAPON_FORCE_LETHAL // Go forth and slay, padawan + active_throwforce = WEAPON_FORCE_LETHAL active_w_class = ITEM_SIZE_BULKY force = WEAPON_FORCE_HARMLESS throwforce = WEAPON_FORCE_HARMLESS + no_double_tact = TRUE throw_speed = 1 throw_range = 5 w_class = ITEM_SIZE_SMALL @@ -170,6 +171,8 @@ name = "energy cutlass" desc = "Arrrr matey." icon_state = "cutlass0" + active_force = WEAPON_FORCE_ROBUST + active_throwforce = WEAPON_FORCE_ROBUST /obj/item/melee/energy/sword/sabre name = "laser saber" @@ -182,7 +185,8 @@ blade_color = "green" name = "laser dagger" desc = "A much smaller but still useful energy based short blade." - armor_penetration = ARMOR_PEN_EXTREME + clickdelay_offset = FAST_WEAPON_COOLDOWN + armor_divisor = ARMOR_PEN_EXTREME active_force = WEAPON_FORCE_DANGEROUS active_throwforce = WEAPON_FORCE_DANGEROUS icon_state = "dagger0" @@ -212,6 +216,7 @@ throwforce = WEAPON_FORCE_PAINFUL // Not gonna matter since it will turn off on throwing, thank you psions can't have shit in Nadezhda throw_speed = 3 // Same as normal spear throw_range = 7 + extended_reach = TRUE w_class = ITEM_SIZE_HUGE // It's a long spear slot_flags = SLOT_BACK flags = CONDUCT // It's a metal pole, you're a literal lightning rod while holding it @@ -257,7 +262,7 @@ desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." icon_state = "blade" icon = 'icons/obj/weapons.dmi' - armor_penetration = 30 + armor_divisor = 2 sharp = 1 edge = 1 force = WEAPON_FORCE_BRUTAL @@ -265,7 +270,7 @@ throwforce = 1 //Throwing or dropping the item deletes it. throw_speed = 1 throw_range = 1 - w_class = ITEM_SIZE_BULKY//So you can't hide it in your pocket or some such. + w_class = ITEM_SIZE_NORMAL flags = NOBLOODY attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") tool_qualities = list(QUALITY_CUTTING = 30, QUALITY_WIRE_CUTTING = 20, QUALITY_LASER_CUTTING = 20, QUALITY_WELDING = 10, QUALITY_CAUTERIZING = 10) diff --git a/code/game/objects/items/weapons/nt_melee.dm b/code/game/objects/items/weapons/nt_melee.dm index bcb9a3b07a4..1233387b2f2 100644 --- a/code/game/objects/items/weapons/nt_melee.dm +++ b/code/game/objects/items/weapons/nt_melee.dm @@ -6,9 +6,11 @@ icon = 'icons/obj/nt_melee.dmi' icon_state = "nt_shortsword" item_state = "nt_shortsword" + w_class = ITEM_SIZE_NORMAL + extra_bulk = 3 //a little more size, it's awkward to store out of a sheath. force = WEAPON_FORCE_DANGEROUS throwforce = WEAPON_FORCE_WEAK - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP price_tag = 300 matter = list(MATERIAL_BIOMATTER = 25, MATERIAL_STEEL = 5) @@ -28,7 +30,7 @@ item_state = "nt_shortsword" force = WEAPON_FORCE_DANGEROUS throwforce = WEAPON_FORCE_WEAK - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP price_tag = 300 matter = list(MATERIAL_BIOMATTER = 25, MATERIAL_STEEL = 5) @@ -38,8 +40,8 @@ It bears a tau cross marking it as produced by the Church of Absolute's New Testament weapons division." icon_state = "nt_longsword" item_state = "nt_longsword" - force = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_EXTREME + force = WEAPON_FORCE_ROBUST + 4 + armor_divisor = ARMOR_PEN_HALF w_class = ITEM_SIZE_BULKY price_tag = 500 matter = list(MATERIAL_BIOMATTER = 50, MATERIAL_STEEL = 10, MATERIAL_PLASTEEL = 5) @@ -52,7 +54,7 @@ icon_state = "nt_dagger" item_state = "nt_dagger" force = WEAPON_FORCE_PAINFUL - armor_penetration = ARMOR_PEN_MASSIVE + armor_divisor = ARMOR_PEN_MASSIVE price_tag = 120 matter = list(MATERIAL_BIOMATTER = 5, MATERIAL_STEEL = 1) @@ -65,8 +67,13 @@ icon_state = "nt_halberd" item_state = "nt_halberd" wielded_icon = "nt_halberd_wielded" - force = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_MASSIVE + force = WEAPON_FORCE_BRUTAL + 5 + armor_divisor = ARMOR_PEN_MODERATE + max_upgrades = 3 + w_class = ITEM_SIZE_HUGE + slot_flags = SLOT_BACK + extended_reach = TRUE + forced_broad_strike = TRUE price_tag = 600 matter = list(MATERIAL_BIOMATTER = 60, MATERIAL_STEEL = 8, MATERIAL_WOOD = 10, MATERIAL_PLASTEEL = 2) @@ -78,8 +85,8 @@ item_state = "nt_scourge" force = WEAPON_FORCE_ROBUST var/force_extended = WEAPON_FORCE_PAINFUL - armor_penetration = ARMOR_PEN_MASSIVE - var/armor_penetration_extended = ARMOR_PEN_HALF + armor_divisor = 1 + var/armor_divisor_extended = 0.5 var/extended = FALSE var/agony = 20 var/agony_extended = 45 //Church harmbaton! This is legit better then a normal baton as it can be upgraded AND has base 15 damage @@ -98,7 +105,7 @@ /obj/item/tool/sword/nt/scourge/proc/extend() extended = TRUE force += (force_extended - initial(force)) - armor_penetration += (armor_penetration_extended - initial(armor_penetration)) + armor_divisor += (armor_divisor_extended - initial(armor_divisor)) agony += (agony_extended - initial(agony)) slot_flags = null w_class = ITEM_SIZE_HUGE @@ -110,7 +117,7 @@ w_class = initial(w_class) agony = initial(agony) slot_flags = initial(slot_flags) - armor_penetration = initial(armor_penetration) + armor_divisor = initial(armor_divisor) refresh_upgrades() //it's also sets all to default update_icon() @@ -140,9 +147,12 @@ w_class = ITEM_SIZE_HUGE slot_flags = SLOT_BACK | SLOT_BELT throwforce = WEAPON_FORCE_LETHAL * 1.5 - armor_penetration = ARMOR_PEN_MASSIVE + armor_divisor = ARMOR_PEN_MASSIVE throw_speed = 3 - price_tag = 150 + price_tag = 450 + allow_spin = FALSE + extended_reach = TRUE + push_attack = TRUE matter = list(MATERIAL_BIOMATTER = 20, MATERIAL_PLASTEEL = 10) // More expensive, high-end spear /obj/item/tool/sword/nt/spear/equipped(mob/living/W) @@ -179,7 +189,7 @@ icon_state = "nt_flanged" item_state = "nt_flanged" force = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_MASSIVE + armor_divisor = ARMOR_PEN_HALF w_class = ITEM_SIZE_BULKY price_tag = 800 matter = list(MATERIAL_BIOMATTER = 30, MATERIAL_STEEL = 5, MATERIAL_PLASTEEL = 5, MATERIAL_SILVER = 3) @@ -229,9 +239,9 @@ icon_state = "nt_warhammer" item_state = "nt_warhammer" wielded_icon = "nt_warhammer_wielded" - force = WEAPON_FORCE_DANGEROUS //Naturally weaker do to knockbacking are targets (can stun lock) + force = WEAPON_FORCE_BRUTAL - 3 //Naturally weaker do to knockbacking are targets (can stun lock) structure_damage_factor = STRUCTURE_DAMAGE_BREACHING - armor_penetration = ARMOR_PEN_EXTREME + armor_divisor = ARMOR_PEN_MODERATE w_class = ITEM_SIZE_BULKY price_tag = 800 matter = list(MATERIAL_BIOMATTER = 30, MATERIAL_STEEL = 5, MATERIAL_PLASTEEL = 8) @@ -258,8 +268,10 @@ switched_on_icon_state = "nt_force_on" switched_on_item_state = "nt_force_on" force = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE w_class = ITEM_SIZE_BULKY + no_swing = TRUE + f matter = list(MATERIAL_BIOMATTER = 50, MATERIAL_STEEL = 10, MATERIAL_PLASTEEL = 6, MATERIAL_GOLD = 3) toggleable = TRUE heat = 3800 @@ -313,7 +325,7 @@ icon_state = "nt_shield" item_state = "nt_shield" force = WEAPON_FORCE_DANGEROUS - armor_list = list(melee = 20, bullet = 20, energy = 10, bomb = 15, bio = 0, rad = 0) + armor_list = list(melee = 5, bullet = 5, energy = 2, bomb = 15, bio = 0, rad = 0) matter = list(MATERIAL_BIOMATTER = 35, MATERIAL_STEEL = 10, MATERIAL_PLASTEEL = 5, MATERIAL_GOLD = 3) price_tag = 1000 base_block_chance = 60 @@ -445,7 +457,7 @@ icon_state = "crusader" item_state = "crusader" force = WEAPON_FORCE_LETHAL - armor_penetration = ARMOR_PEN_HALF + armor_divisor = ARMOR_PEN_HALF matter = list(MATERIAL_DURASTEEL = 25, MATERIAL_GOLD = 3) price_tag = 10000 @@ -458,7 +470,7 @@ item_state = "nt_shortsword" force = WEAPON_FORCE_DANGEROUS throwforce = WEAPON_FORCE_WEAK - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_SHALLOW price_tag = 300 matter = list(MATERIAL_BIOMATTER = 25, MATERIAL_STEEL = 5) @@ -482,7 +494,7 @@ w_class = ITEM_SIZE_HUGE slot_flags = SLOT_BACK | SLOT_BELT throwforce = WEAPON_FORCE_LETHAL - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP throw_speed = 3 price_tag = 150 allow_spin = FALSE diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 479a7245879..4deda492e7b 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -33,7 +33,7 @@ name = "shield" var/base_block_chance = 35 var/slowdown_time = 1 - armor_list = list(melee = 10, bullet = 10, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 2, energy = 1, bomb = 0, bio = 0, rad = 0) var/max_durability = 200 //So we can brake and need healing time to time var/durability = 200 var/can_block_proj = TRUE @@ -206,7 +206,7 @@ throw_range = 6 w_class = ITEM_SIZE_BULKY origin_tech = list(TECH_MATERIAL = 2) - armor_list = list(melee = 20, bullet = 25, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 5, bullet = 6, energy = 2, bomb = 0, bio = 0, rad = 0) matter = list(MATERIAL_GLASS = 5, MATERIAL_STEEL = 5, MATERIAL_PLASTEEL = 12) price_tag = 100 attack_verb = list("shoved", "bashed") @@ -256,7 +256,7 @@ flags = null throw_speed = 2 throw_range = 6 - armor_list = list(melee = 30, bullet = 15, energy = 20, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 7, bullet = 2, energy = 3, bomb = 10, bio = 0, rad = 0) base_block_chance = 60 matter = list(MATERIAL_GLASS = 5, MATERIAL_STEEL = 8, MATERIAL_PLASTEEL = 15) max_durability = 300 //Strong so that we can protect folks from quote a few shots @@ -298,7 +298,7 @@ price_tag = 230 base_block_chance = 60 attack_verb = list("shoved", "bashed") - armor_list = list(melee = 15, bullet = 35, energy = 10, bomb = 20, bio = 0, rad = 0) + armor_list = list(melee = 3, bullet = 8, energy = 2, bomb = 20, bio = 0, rad = 0) var/cooldown = 0 //shield bash cooldown. based on world.time var/picked_by_human = FALSE var/mob/living/carbon/human/picking_human @@ -439,7 +439,7 @@ price_tag = 0 base_block_chance = 70 attack_verb = list("smashed", "bashed") - armor_list = list(melee = 15, bullet = 20, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 3, bullet = 5, energy = 2, bomb = 0, bio = 0, rad = 0) max_durability = 250 //So we can brake and need healing time to time durability = 250 var/cooldown = 0 //shield bash cooldown. based on world.time @@ -517,7 +517,7 @@ throw_range = 6 matter = list(MATERIAL_STEEL = 6) base_block_chance = 40 - armor_list = list(melee = 15, bullet = 2, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 3, bullet = 2, energy = 2, bomb = 0, bio = 0, rad = 0) max_durability = 100 //So we can brake and need healing time to time durability = 100 @@ -539,7 +539,7 @@ flags = null throw_speed = 2 throw_range = 6 - armor_list = list(melee = 30, bullet = 15, energy = 20, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 7, bullet = 3, energy = 5, bomb = 10, bio = 0, rad = 0) matter = list(MATERIAL_BONE = 6) base_block_chance = 50 max_durability = 130 //So we can brake and need healing time to time @@ -557,7 +557,7 @@ base_block_chance = 50 max_durability = 90 //So we can brake and need healing time to time durability = 90 - armor_list = list(melee = 20, bullet = 10, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 5, bullet = 2, energy = 1, bomb = 0, bio = 0, rad = 0) /obj/item/shield/riot/tray/get_protected_area(mob/user) var/list/p_area = list(BP_CHEST, BP_HEAD, BP_L_ARM, BP_R_ARM, BP_GROIN) @@ -580,7 +580,7 @@ price_tag = 2000 max_durability = 500 //Well clearly made to last it should require some repair post crusade durability = 500 - armor_list = list(melee = 30, bullet = 35, energy = 25, bomb = 15, bio = 0, rad = 0) + armor_list = list(melee = 7, bullet = 8, energy = 6, bomb = 15, bio = 0, rad = 0) matter = list(MATERIAL_GLASS = 3, MATERIAL_STEEL = 10, MATERIAL_DURASTEEL = 20) item_icons = list( slot_back_str = 'icons/inventory/back/mob.dmi') diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 370756220ab..c18bf326cad 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -16,7 +16,7 @@ hitsound = 'sound/effects/woodhit.ogg' slot_flags = SLOT_BELT damtype = BRUTE - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW force = WEAPON_FORCE_ROBUST structure_damage_factor = STRUCTURE_DAMAGE_BLUNT @@ -24,12 +24,12 @@ if(user.a_intent == I_HELP) damtype = HALLOSS force = WEAPON_FORCE_PAINFUL - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE if(user.a_intent == I_DISARM) damtype = HALLOSS force = WEAPON_FORCE_PAINFUL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW if(user.a_intent == I_HURT) damtype = BRUTE @@ -111,12 +111,12 @@ if(user.a_intent == I_HELP) damtype = HALLOSS force = WEAPON_FORCE_PAINFUL - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE if(user.a_intent == I_DISARM) damtype = HALLOSS force = 18 //3 more then help but not as good as a wooden classic - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW if(user.a_intent == I_HURT) damtype = BRUTE diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index e9ebae00538..6e6f0226097 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -256,14 +256,15 @@ Frequency: icon_state = "telespear" item_state = "telespear" slot_flags = SLOT_BACK - var/entropy_value = 1 price_tag = 350 - item_icons = list( slot_back_str = 'icons/inventory/back/mob.dmi') item_state_slots = list( slot_back_str = "telespear_back" ) + extended_reach = TRUE + push_attack = TRUE + var/entropy_value = 1 //for bluespace entropy /obj/item/tele_spear/attack(mob/living/carbon/human/M, mob/living/carbon/user) playsound(src.loc, 'sound/effects/EMPulse.ogg', 65, 1) diff --git a/code/game/objects/items/weapons/tools/_tools.dm b/code/game/objects/items/weapons/tools/_tools.dm old mode 100755 new mode 100644 index dd8fbb4f878..98e68536f73 --- a/code/game/objects/items/weapons/tools/_tools.dm +++ b/code/game/objects/items/weapons/tools/_tools.dm @@ -224,7 +224,7 @@ item_stats += list(list( "name" = "Damage", "type" = "ProgressBar", "value" = force, "max" = initial(force) * 10 )) if (extra_bulk) item_stats += list(list( "name" = "Extra Volume", "type" = "AnimatedNumber", "value" = extra_bulk )) - item_stats += list(list( "name" = "Armor Penetration", "type" = "AnimatedNumber", "value" = armor_penetration )) + item_stats += list(list( "name" = "Armor Divisor", "type" = "AnimatedNumber", "value" = armor_divisor, "max" = 10)) stats["Item Stats"] = item_stats @@ -263,7 +263,7 @@ "type" = "ProgressBar", "value" = cell.percent(), "unit" = "%", - "max" = 100, + "max" = 100, "ranges" = list( "good" = list(100, 100), "average" = list(25, 100), @@ -286,7 +286,7 @@ data["stats"] = stats data["max_upgrades"] = max_upgrades - + var/list/attachments = list() for(var/atom/A in item_upgrades) var/datum/asset/spritesheet_batched/tool_upgrades/T = get_asset_datum(/datum/asset/spritesheet_batched/tool_upgrades) @@ -795,7 +795,7 @@ if(switched_on_forcemult) force *= switched_on_forcemult if(switched_on_penmult) - armor_penetration *= switched_on_penmult + armor_divisor *= switched_on_penmult if(glow_color) set_light(l_range = 1.7, l_power = 1.3, l_color = glow_color) if(switched_on_icon_state) @@ -821,7 +821,7 @@ if(switched_on_forcemult) force /= switched_on_forcemult if(switched_on_penmult) - armor_penetration /= switched_on_penmult + armor_divisor /= switched_on_penmult if(glow_color) set_light(l_range = 0, l_power = 0, l_color = glow_color) if(switched_on_icon_state) @@ -946,7 +946,7 @@ use_fuel_cost = initial(use_fuel_cost) use_power_cost = initial(use_power_cost) force = initial(force) - armor_penetration = initial(armor_penetration) + armor_divisor = initial(armor_divisor) damtype = initial(damtype) force_upgrade_mults = initial(force_upgrade_mults) force_upgrade_mods = initial(force_upgrade_mods) diff --git a/code/game/objects/items/weapons/tools/hammer.dm b/code/game/objects/items/weapons/tools/hammer.dm index 765d038d01f..16673ca7d23 100644 --- a/code/game/objects/items/weapons/tools/hammer.dm +++ b/code/game/objects/items/weapons/tools/hammer.dm @@ -7,6 +7,7 @@ force = WEAPON_FORCE_PAINFUL worksound = WORKSOUND_HAMMER w_class = ITEM_SIZE_SMALL + push_attack = TRUE origin_tech = list(TECH_ENGINEERING = 1) matter = list(MATERIAL_STEEL = 4, MATERIAL_WOOD = 2) price_tag = 30 @@ -15,6 +16,7 @@ effective_faction = list("spider") // Spiders are weak to crushing. damage_mult = 2 hitsound = 'sound/weapons/smash.ogg' + blacklist_upgrades = list(/obj/item/tool_upgrade/productivity/whetstone = TRUE, /obj/item/tool_upgrade/productivity/diamond_blade = TRUE) //it's hammers. has_alt_mode = TRUE alt_mode_damagetype = HALLOSS @@ -50,7 +52,7 @@ switched_on_qualities = list(QUALITY_HAMMERING = 45) switched_off_qualities = list(QUALITY_HAMMERING = 30) toggleable = TRUE - armor_penetration = ARMOR_PEN_EXTREME // Retains AP when turned off - it's a hammer. + armor_divisor = ARMOR_PEN_EXTREME // Retains AP when turned off - it's a hammer. degradation = 0.7 use_power_cost = 2 suitable_cell = /obj/item/cell/medium @@ -85,7 +87,7 @@ item_state = "onehammer" wielded_icon = "onehammer_on" switched_on_forcemult = 2.6 // 39 total - armor_penetration = ARMOR_PEN_EXTREME // Retains AP when turned off - it's a hammer. + armor_divisor = ARMOR_PEN_EXTREME // Retains AP when turned off - it's a hammer. structure_damage_factor = STRUCTURE_DAMAGE_DESTRUCTIVE matter = list(MATERIAL_STEEL = 4, MATERIAL_PLATINUM = 3, MATERIAL_DIAMOND = 3) price_tag = 860 @@ -107,7 +109,7 @@ wielded_icon = "sledgehammer1" force = WEAPON_FORCE_LETHAL slot_flags = SLOT_BELT|SLOT_BACK - armor_penetration = ARMOR_PEN_EXTREME + armor_divisor = ARMOR_PEN_EXTREME throwforce = WEAPON_FORCE_LETHAL matter = list(MATERIAL_PLASTEEL = 30, MATERIAL_PLASTIC = 5) throw_speed = 1 @@ -126,7 +128,7 @@ icon_state = "homewrecker" item_state = "homewrecker0" wielded_icon = "homewrecker1" - armor_penetration = ARMOR_PEN_EXTREME + armor_divisor = ARMOR_PEN_EXTREME w_class = ITEM_SIZE_BULKY slot_flags = SLOT_BELT|SLOT_BACK force = WEAPON_FORCE_ROBUST @@ -144,7 +146,7 @@ item_state = "iron_hammer" wielded_icon = "iron_hammer_wielded" w_class = ITEM_SIZE_HUGE - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP slot_flags = SLOT_BELT|SLOT_BACK force = WEAPON_FORCE_LETHAL structure_damage_factor = STRUCTURE_DAMAGE_BORING @@ -161,7 +163,7 @@ item_state = "excelsior_hammer" wielded_icon = "excelsior_hammer_wielded" w_class = ITEM_SIZE_HUGE - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP slot_flags = SLOT_BELT force = WEAPON_FORCE_BRUTAL structure_damage_factor = STRUCTURE_DAMAGE_BORING + 2 @@ -178,7 +180,7 @@ matter = list(MATERIAL_STEEL = 10) price_tag = 30 - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP force = WEAPON_FORCE_DANGEROUS tool_qualities = list(QUALITY_HAMMERING = 20) @@ -206,7 +208,7 @@ tool_qualities = list(QUALITY_HAMMERING = 5) matter = list(MATERIAL_STEEL = 3) max_upgrades = 3 - armor_penetration = ARMOR_PEN_GRAZING + armor_divisor = ARMOR_PEN_GRAZING force = WEAPON_FORCE_PAINFUL w_class = ITEM_SIZE_HUGE @@ -227,7 +229,7 @@ item_state = "chargehammer0" w_class = ITEM_SIZE_HUGE switched_on_forcemult = 2.2 - armor_penetration = ARMOR_PEN_EXTREME // Retains AP when turned off - it's a hammer. + armor_divisor = ARMOR_PEN_EXTREME // Retains AP when turned off - it's a hammer. structure_damage_factor = STRUCTURE_DAMAGE_BREACHING switched_on_qualities = list(QUALITY_HAMMERING = 60) switched_off_qualities = list(QUALITY_HAMMERING = 35) diff --git a/code/game/objects/items/weapons/tools/karl.dm b/code/game/objects/items/weapons/tools/karl.dm index 652d5e05bc7..6de31d6eb41 100644 --- a/code/game/objects/items/weapons/tools/karl.dm +++ b/code/game/objects/items/weapons/tools/karl.dm @@ -17,7 +17,7 @@ // Damage related force = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_EXTREME + armor_divisor = ARMOR_PEN_EXTREME throwforce = WEAPON_FORCE_NORMAL sharp = TRUE structure_damage_factor = STRUCTURE_DAMAGE_DESTRUCTIVE // Drills and picks are made for getting through hard materials diff --git a/code/game/objects/items/weapons/tools/knifes_daggers.dm b/code/game/objects/items/weapons/tools/knifes_daggers.dm index e94bb296169..0b09c61e99a 100644 --- a/code/game/objects/items/weapons/tools/knifes_daggers.dm +++ b/code/game/objects/items/weapons/tools/knifes_daggers.dm @@ -13,7 +13,8 @@ w_class = ITEM_SIZE_SMALL force = WEAPON_FORCE_NORMAL throwforce = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW + clickdelay_offset = FAST_WEAPON_COOLDOWN //small, but quicker to use. max_upgrades = 2 tool_qualities = list(QUALITY_CUTTING = 20, QUALITY_WIRE_CUTTING = 10, QUALITY_SCREW_DRIVING = 5) matter = list(MATERIAL_STEEL = 3, MATERIAL_PLASTIC = 1) @@ -73,7 +74,7 @@ matter = list(MATERIAL_PLASTEEL = 3, MATERIAL_PLASTIC = 2) tool_qualities = list(QUALITY_CUTTING = 20, QUALITY_WIRE_CUTTING = 10, QUALITY_SCREW_DRIVING = 5, QUALITY_SAWING = 1) force = WEAPON_FORCE_DANGEROUS // Serrated teeth - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE throwforce = WEAPON_FORCE_LETHAL price_tag = 35 @@ -85,7 +86,7 @@ matter = list(MATERIAL_PLASTEEL = 5, MATERIAL_PLASTIC = 2) force = WEAPON_FORCE_DANGEROUS backstab_damage = 8 - armor_penetration = ARMOR_PEN_EXTREME //Should be countered be embedding + armor_divisor = ARMOR_PEN_EXTREME //Should be countered be embedding embed_mult = 1.5 //This is designed for embedding /obj/item/tool/knife/ritual @@ -94,7 +95,7 @@ icon = 'icons/obj/wizard.dmi' icon_state = "render" force = WEAPON_FORCE_PAINFUL - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE max_upgrades = 3 backstab_damage = 14 price_tag = 7 @@ -106,7 +107,7 @@ icon_state = "render_awakened" hitsound = 'sound/weapons/renderslash.ogg' force = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP max_upgrades = 2 hitsound = 'sound/weapons/renderslash.ogg' backstab_damage = 8 // Not so much for stabbing as it is for cutting. @@ -121,7 +122,7 @@ force = WEAPON_FORCE_DANGEROUS throwforce = WEAPON_FORCE_DANGEROUS+2 backstab_damage = 8 - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") matter = list(MATERIAL_STEEL = 5, MATERIAL_PLASTIC = 1) tool_qualities = list(QUALITY_CUTTING = 20, QUALITY_WIRE_CUTTING = 15) @@ -157,7 +158,7 @@ matter = list(MATERIAL_PLASTEEL = 3, MATERIAL_PLASTIC = 2) force = WEAPON_FORCE_DANGEROUS // Serrated combat knife tool_qualities = list(QUALITY_CUTTING = 20, QUALITY_WIRE_CUTTING = 10, QUALITY_SCREW_DRIVING = 5, QUALITY_SAWING = 5) - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE throwforce = WEAPON_FORCE_LETHAL max_upgrades = 3 embed_mult = 0.6 @@ -175,7 +176,7 @@ matter = list(MATERIAL_PLASTEEL = 3, MATERIAL_PLASTIC = 2) force = 13 backstab_damage = 15 - armor_penetration = ARMOR_PEN_HALF + armor_divisor = ARMOR_PEN_HALF throwforce = WEAPON_FORCE_ROBUST price_tag = 21 @@ -186,7 +187,7 @@ icon = 'icons/obj/weapons.dmi' icon_state = "skinning" item_state = "skinning" - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP tool_qualities = list(QUALITY_CUTTING = 50) matter = list(MATERIAL_PLASTEEL = 8, MATERIAL_WOOD = 2, MATERIAL_DIAMOND = 3) // 5 plasteel + 2 wood, then +3 plasteel +3 diamond from whetstone. price_tag = 500 // Takes diamond to make and very rare. @@ -212,7 +213,7 @@ price_tag = 50 // Fancy expensive heirloom.... it is not exactly meant to be upgradable nor sold but the value that it holds is somehow more symbolic than material. force = WEAPON_FORCE_WEAK throwforce = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_GRAZING + armor_divisor = ARMOR_PEN_GRAZING tool_qualities = list(QUALITY_CUTTING = 35) //Can't be upgraded. Round start knife. Damage is bad not really good to selling either. Only fair give a good status to cutting things. backstab_damage = 9 diff --git a/code/game/objects/items/weapons/tools/misc.dm b/code/game/objects/items/weapons/tools/misc.dm index 4062efad1d1..09647e3972b 100644 --- a/code/game/objects/items/weapons/tools/misc.dm +++ b/code/game/objects/items/weapons/tools/misc.dm @@ -254,6 +254,7 @@ sanctified = TRUE //Isn't affected by the general Absolutist speed penalty, still has its slow workspseed flags = CONDUCT tool_qualities = list(QUALITY_SCREW_DRIVING = 30, QUALITY_BOLT_TURNING = 30, QUALITY_DRILLING = 30, QUALITY_WELDING = 30, QUALITY_PRYING = 30, QUALITY_DIGGING = 30, QUALITY_PULSING = 30, QUALITY_WIRE_CUTTING = 30, QUALITY_HAMMERING = 30, QUALITY_SHOVELING = 30, QUALITY_EXCAVATION = 30, QUALITY_SAWING = 30, QUALITY_CUTTING = 30) + no_double_tact = TRUE degradation = 0 workspeed = 0.8 max_upgrades = 0 // Can't upgrade it diff --git a/code/game/objects/items/weapons/tools/mods/_upgrades.dm b/code/game/objects/items/weapons/tools/mods/_upgrades.dm index bfd80f107a8..e149b0f7bfe 100644 --- a/code/game/objects/items/weapons/tools/mods/_upgrades.dm +++ b/code/game/objects/items/weapons/tools/mods/_upgrades.dm @@ -607,15 +607,18 @@ to_chat(user, SPAN_WARNING("Decreases projectile agony damage by [abs(amount*100)]%")) if(weapon_upgrades[GUN_UPGRADE_PEN_MULT]) - var/amount = weapon_upgrades[GUN_UPGRADE_PEN_MULT]-1 + var/amount = weapon_upgrades[GUN_UPGRADE_PEN_MULT] if(amount > 0) to_chat(user, SPAN_NOTICE("Increases projectile penetration by [amount*100]%")) else to_chat(user, SPAN_WARNING("Decreases projectile penetration by [abs(amount*100)]%")) if(weapon_upgrades[GUN_UPGRADE_PEN_BASE]) - to_chat(user, SPAN_NOTICE("Increases projectile penetration multiplier by [weapon_upgrades[GUN_UPGRADE_PEN_BASE]]")) - + var/amount = weapon_upgrades[GUN_UPGRADE_PEN_BASE] + if(amount > 0) + to_chat(user, SPAN_NOTICE("Increases projectile penetration multiplier by [weapon_upgrades[GUN_UPGRADE_PEN_BASE]]")) + else + to_chat(user, SPAN_WARNING("Decreases projectile penetration multiplier by [weapon_upgrades[GUN_UPGRADE_PEN_BASE]]")) if(weapon_upgrades[GUN_UPGRADE_PIERC_MULT]) var/amount = weapon_upgrades[GUN_UPGRADE_PIERC_MULT] diff --git a/code/game/objects/items/weapons/tools/mods/armor_mods.dm b/code/game/objects/items/weapons/tools/mods/armor_mods.dm index 6692dde848c..c89c0265889 100644 --- a/code/game/objects/items/weapons/tools/mods/armor_mods.dm +++ b/code/game/objects/items/weapons/tools/mods/armor_mods.dm @@ -11,7 +11,7 @@ ..() var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.tool_upgrades = list( - UPGRADE_MELEE_ARMOR = 20 + UPGRADE_MELEE_ARMOR = 5 ) I.prefix = "reinforced" I.required_qualities = list(QUALITY_ARMOR) @@ -27,7 +27,7 @@ ..() var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.tool_upgrades = list( - UPGRADE_BALLISTIC_ARMOR = 20 + UPGRADE_BALLISTIC_ARMOR = 5 ) I.prefix = "kevlar-plated" I.required_qualities = list(QUALITY_ARMOR) @@ -43,7 +43,7 @@ ..() var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.tool_upgrades = list( - UPGRADE_ENERGY_ARMOR = 20 + UPGRADE_ENERGY_ARMOR = 5 ) I.prefix = "ablative-plated" I.required_qualities = list(QUALITY_ARMOR) @@ -59,7 +59,7 @@ ..() var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.tool_upgrades = list( - UPGRADE_BOMB_ARMOR = 40 + UPGRADE_BOMB_ARMOR = 10 ) I.prefix = "bomb-proofed" I.required_qualities = list(QUALITY_ARMOR) diff --git a/code/game/objects/items/weapons/tools/mods/mod_types.dm b/code/game/objects/items/weapons/tools/mods/mod_types.dm old mode 100755 new mode 100644 index 8ed4f015984..873d805d5cb --- a/code/game/objects/items/weapons/tools/mods/mod_types.dm +++ b/code/game/objects/items/weapons/tools/mods/mod_types.dm @@ -246,8 +246,8 @@ ) I.req_gun_tags = list(GUN_BAYONET) I.gun_loc_tag = GUN_KNIFE - I.required_qualities = list(QUALITY_CUTTING, QUALITY_SHOVELING, QUALITY_SAWING, QUALITY_WIRE_CUTTING, QUALITY_PRYING, QUALITY_SHOVELING, QUALITY_DIGGING) - I.negative_qualities = list(QUALITY_WELDING, QUALITY_LASER_CUTTING) + I.required_qualities = list(QUALITY_CUTTING, QUALITY_SHOVELING, QUALITY_SAWING, QUALITY_WIRE_CUTTING, QUALITY_SHOVELING, QUALITY_DIGGING, QUALITY_PRYING) + I.negative_qualities = list(QUALITY_WELDING, QUALITY_LASER_CUTTING, QUALITY_HAMMERING) I.prefix = "diamond-edged" /obj/item/tool_upgrade/productivity/oxyjet @@ -726,7 +726,7 @@ var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.tool_upgrades = list( UPGRADE_SANCTIFY = TRUE, - UPGRADE_FORCE_MOD = 8, + UPGRADE_FORCE_MULT = 1.25, UPGRADE_PRECISION = 10, UPGRADE_DEGRADATION_MULT = 0.8, UPGRADE_WORKSPEED = -0.5 @@ -783,7 +783,7 @@ var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.tool_upgrades = list( UPGRADE_SANCTIFY = TRUE, - UPGRADE_FORCE_MOD = 8, + UPGRADE_FORCE_MULT = 1.3, UPGRADE_PRECISION = 10, UPGRADE_DEGRADATION_MULT = 0.8, UPGRADE_WORKSPEED = -0.5 diff --git a/code/game/objects/items/weapons/tools/pickaxe.dm b/code/game/objects/items/weapons/tools/pickaxe.dm index e57b807a42f..4f89b97c386 100644 --- a/code/game/objects/items/weapons/tools/pickaxe.dm +++ b/code/game/objects/items/weapons/tools/pickaxe.dm @@ -4,7 +4,7 @@ flags = CONDUCT slot_flags = SLOT_BELT force = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_EXTREME // It's a pickaxe. It's destined to poke holes in things, even armor. + armor_divisor = ARMOR_PEN_EXTREME // It's a pickaxe. It's destined to poke holes in things, even armor. throwforce = WEAPON_FORCE_NORMAL worksound = WORKSOUND_PICKAXE icon_state = "pickaxe" diff --git a/code/game/objects/items/weapons/tools/saws.dm b/code/game/objects/items/weapons/tools/saws.dm index 965f159a02f..5de29ca6038 100644 --- a/code/game/objects/items/weapons/tools/saws.dm +++ b/code/game/objects/items/weapons/tools/saws.dm @@ -13,6 +13,7 @@ edge = TRUE tool_qualities = list(QUALITY_SAWING = 35, QUALITY_CUTTING = 20, QUALITY_WIRE_CUTTING = 20) price_tag = 20 + forced_broad_strike = TRUE embed_mult = 1 //Serrated blades catch on bone more easily /obj/item/tool/saw/bs @@ -50,7 +51,7 @@ hitsound = WORKSOUND_CIRCULAR_SAW worksound = WORKSOUND_CIRCULAR_SAW force = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE matter = list(MATERIAL_STEEL = 5, MATERIAL_PLASTIC = 2) tool_qualities = list(QUALITY_SAWING = 45, QUALITY_CUTTING = 30, QUALITY_WIRE_CUTTING = 30) price_tag = 240 @@ -77,7 +78,7 @@ name = "advanced circular saw" desc = "You think you can cut anything with it. More power efficient than a regular circular saw." icon_state = "advanced_saw" - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP matter = list(MATERIAL_STEEL = 6, MATERIAL_PLASTEEL = 1, MATERIAL_PLASTIC = 2) tool_qualities = list(QUALITY_SAWING = 50, QUALITY_CUTTING = 40, QUALITY_WIRE_CUTTING = 40) degradation = 0.7 @@ -91,10 +92,10 @@ icon_state = "chainsaw" hitsound = WORKSOUND_CHAINSAW worksound = WORKSOUND_CHAINSAW - force = WEAPON_FORCE_WEAK - switched_on_forcemult = 4 //28 total + force = WEAPON_FORCE_PAINFUL + switched_on_forcemult = 2 //30 total w_class = ITEM_SIZE_NORMAL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW matter = list(MATERIAL_STEEL = 3, MATERIAL_PLASTEEL = 10, MATERIAL_PLASTIC = 2) tool_qualities = list(QUALITY_SAWING = 5, QUALITY_CUTTING = 5, QUALITY_WIRE_CUTTING = 5) //barely usable when off, but allows mods to be applied switched_off_qualities = list(QUALITY_CUTTING = 5) @@ -126,10 +127,10 @@ wielded_icon = "hypersaw_on" hitsound = WORKSOUND_CHAINSAW worksound = WORKSOUND_CHAINSAW - force = WEAPON_FORCE_WEAK - switched_on_forcemult = 4 //28 total + force = 14 + switched_on_forcemult = 2 //30 total w_class = ITEM_SIZE_NORMAL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW matter = list(MATERIAL_SILVER = 2, MATERIAL_PLASTEEL = 10, MATERIAL_PLASTIC = 3) tool_qualities = list(QUALITY_SAWING = 5, QUALITY_CUTTING = 5, QUALITY_WIRE_CUTTING = 5) //barely usable when off, but allows mods to be applied switched_off_qualities = list(QUALITY_CUTTING = 5) diff --git a/code/game/objects/items/weapons/tools/scalpels.dm b/code/game/objects/items/weapons/tools/scalpels.dm index bd33d7af0f7..efeb3cd8561 100644 --- a/code/game/objects/items/weapons/tools/scalpels.dm +++ b/code/game/objects/items/weapons/tools/scalpels.dm @@ -4,7 +4,7 @@ icon_state = "scalpel_t3" flags = CONDUCT force = WEAPON_FORCE_PAINFUL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW sharp = TRUE edge = TRUE w_class = ITEM_SIZE_TINY @@ -37,7 +37,7 @@ icon_state = "scalpel_t5" damtype = BURN force = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE matter = list(MATERIAL_PLASTEEL = 1, MATERIAL_PLASTIC = 2, MATERIAL_SILVER = 1) tool_qualities = list(QUALITY_CUTTING = 60, QUALITY_WIRE_CUTTING = 20, QUALITY_LASER_CUTTING = 60, QUALITY_CAUTERIZING = 20) degradation = 0.11 diff --git a/code/game/objects/items/weapons/tools/shovel.dm b/code/game/objects/items/weapons/tools/shovel.dm index df94b82dfef..7571617e79d 100644 --- a/code/game/objects/items/weapons/tools/shovel.dm +++ b/code/game/objects/items/weapons/tools/shovel.dm @@ -44,7 +44,7 @@ force = WEAPON_FORCE_DANGEROUS throwforce = WEAPON_FORCE_DANGEROUS w_class = ITEM_SIZE_SMALL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW matter = list(MATERIAL_STEEL = 6, MATERIAL_PLASTEEL = 6) tool_qualities = list(QUALITY_SHOVELING = 45, QUALITY_DIGGING = 45, QUALITY_PRYING = 30, QUALITY_CUTTING = 10, QUALITY_SAWING = 5) workspeed = 1.2 @@ -57,7 +57,7 @@ force = WEAPON_FORCE_DANGEROUS throwforce = WEAPON_FORCE_DANGEROUS w_class = ITEM_SIZE_SMALL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW matter = list(MATERIAL_STEEL = 6, MATERIAL_PLASTEEL = 6) tool_qualities = list(QUALITY_SHOVELING = 85, QUALITY_DIGGING = 85, QUALITY_PRYING = 70, QUALITY_CUTTING = 30, QUALITY_SAWING = 45) workspeed = 1.5 diff --git a/code/game/objects/items/weapons/tools/simple_weapons.dm b/code/game/objects/items/weapons/tools/simple_weapons.dm index 073cedce577..2c0e90acdd4 100644 --- a/code/game/objects/items/weapons/tools/simple_weapons.dm +++ b/code/game/objects/items/weapons/tools/simple_weapons.dm @@ -46,7 +46,7 @@ w_class = ITEM_SIZE_SMALL sharp = TRUE edge = TRUE - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) attack_verb = list("chopped", "torn", "cut") tool_qualities = list(QUALITY_CUTTING = 20, QUALITY_SAWING = 15) @@ -64,7 +64,7 @@ wielded_icon = "fireaxe1" sharp = TRUE edge = TRUE - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP tool_qualities = list(QUALITY_CUTTING = 10, QUALITY_PRYING = 20, QUALITY_SAWING = 15) w_class = ITEM_SIZE_HUGE slot_flags = SLOT_BACK @@ -127,7 +127,7 @@ matter = list(MATERIAL_STEEL = 3, MATERIAL_PLASTEEL = 3) force = WEAPON_FORCE_DANGEROUS throwforce = WEAPON_FORCE_NORMAL - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE w_class = ITEM_SIZE_NORMAL attack_verb = list("chopped", "torn", "cut", "cleaved", "slashed") tool_qualities = list(QUALITY_CUTTING = 10) @@ -240,11 +240,11 @@ matter = list(MATERIAL_PLASTEEL = 15, MATERIAL_PLASTIC = 5) sharp = TRUE edge = TRUE - w_class = ITEM_SIZE_NORMAL + w_class = ITEM_SIZE_BULKY slot_flags = SLOT_BELT worksound = WORKSOUND_HARD_SLASH force = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP throwforce = WEAPON_FORCE_NORMAL attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") @@ -270,7 +270,7 @@ matter = list(MATERIAL_PLASTEEL = 10, MATERIAL_STEEL = 5, MATERIAL_DIAMOND = 1) //sharpened using diamond dust or whatever slot_flags = SLOT_BELT | SLOT_BACK force = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW item_icons = list( slot_back_str = 'icons/inventory/back/mob.dmi') item_state_slots = list( @@ -285,7 +285,7 @@ matter = list(MATERIAL_STEEL = 6, MATERIAL_PLASTIC = 2) //twice the value of a kitche knife slot_flags = SLOT_BELT|SLOT_BACK force = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW price_tag = 40 /obj/item/tool/sword/katana/nano @@ -395,7 +395,7 @@ icon = 'icons/obj/weapons-blades.dmi' icon_state = "saber" item_state = "saber" - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW price_tag = 400 has_alt_mode = TRUE alt_mode_damagetype = HALLOSS @@ -419,7 +419,7 @@ icon = 'icons/obj/weapons-blades.dmi' icon_state = "saber" item_state = "saber" - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW price_tag = 350 /obj/item/tool/sword/saber/militiasergeant @@ -427,7 +427,7 @@ desc = "An Saber made for the Senior Enlisted of Blackshield, Usually used for Ceremonial usage but can also be used in combat, Preferably used by a maniac who likes to charge into battle without helmet or armour." icon_state = "cutlass" item_state = "cutlass" - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW price_tag = 325 /obj/item/tool/sword/saber/deconstuctive_rapier @@ -437,7 +437,7 @@ icon_state = "rapier_cro" //Sprite by Gidgit item_state = "rapiersci" force = WEAPON_FORCE_PAINFUL - 5 //10 base - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE price_tag = 1600 has_alt_mode = TRUE attack_verb = list("stabbed", "slashed", "pierces") @@ -487,7 +487,7 @@ icon_state = "rapier_cbo" item_state = "rapiermed" force = WEAPON_FORCE_PAINFUL - 5 //10 base - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE price_tag = 1600 has_alt_mode = TRUE attack_verb = list("stabbed", "slashed", "pierces") @@ -530,7 +530,7 @@ modifier += min(30,H.stats.getStat(STAT_ROB)) reagent_modifier = CLAMP(round(H.stats.getStat(STAT_BIO)/10), 1, 5) var/mob/living/L = target - if(prob(min(100,((100+armor_penetration)-L.getarmor(user.targeted_organ, ARMOR_MELEE))+modifier))) + if(prob(min(100,((100 / armor_divisor)-L.getarmor(user.targeted_organ, ARMOR_MELEE))+modifier))) var/trans = reagents.trans_to_mob(target, rand(1,3)*reagent_modifier, CHEM_BLOOD) admin_inject_log(user, target, src, reagents.log_list(), trans) to_chat(user, SPAN_NOTICE("You inject [trans] units of the solution. [src] now contains [src.reagents.total_volume] units.")) @@ -542,7 +542,7 @@ item_state = "msword" slot_flags = SLOT_BELT|SLOT_BACK matter = list(MATERIAL_PLASTEEL = 5, MATERIAL_STEEL = 2) // 2 rods, 5 plasteel - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE tool_qualities = list(QUALITY_CUTTING = 15, QUALITY_SAWING = 5) degradation = 1.5 // Crappily made max_upgrades = 5 // Handmade nature @@ -559,7 +559,7 @@ item_state = "renderslayer" force = WEAPON_FORCE_BRUTAL + 2 // 35 damage slot_flags = SLOT_BELT|SLOT_BACK - armor_penetration = ARMOR_PEN_MASSIVE // Sharp edge + armor_divisor = ARMOR_PEN_MASSIVE // Sharp edge effective_faction = list("deathclaw") // Called like this for a reason damage_mult = 2 matter = list(MATERIAL_PLASTEEL = 30, MATERIAL_STEEL = 5) @@ -580,7 +580,7 @@ icon_state = "crayon_blade" matter = list(MATERIAL_PLASTEEL = 15, MATERIAL_STEEL = 2, MATERIAL_DIAMOND = 1) force = WEAPON_FORCE_ROBUST + 4 // 30 damage - armor_penetration = ARMOR_PEN_MASSIVE // More balanced than psi weapons with psi mania perk. + armor_divisor = ARMOR_PEN_MASSIVE // More balanced than psi weapons with psi mania perk. w_class = ITEM_SIZE_BULKY max_upgrades = 2 slot_flags = SLOT_BELT|SLOT_BACK @@ -611,7 +611,7 @@ item_state = "cleaver_back" tool_qualities = list(QUALITY_CUTTING = 30) force = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW w_class = ITEM_SIZE_BULKY effective_faction = list("tengo", "tengolo_berserker", "xenomorph") // Which faction the cleaver is effective against. damage_mult = 2.5 // The damage multiplier the cleaver get when attacking that faction. @@ -633,7 +633,7 @@ slot_flags = SLOT_BELT | SLOT_BACK tool_qualities = list(QUALITY_CUTTING = 20, QUALITY_SAWING = 20) //Very sharp blade, serrated back force = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_DEEP // same as other, cheaper swords. + armor_divisor = ARMOR_PEN_DEEP // same as other, cheaper swords. effective_faction = list("wurm", "roach", "spider", "vox_tribe", "russian", "tengo", "tengolo_berserker", "xenomorph", "stalker") // This is the janky solution but works. damage_mult = 2 //We are better for hunting, worse for "real fights" w_class = ITEM_SIZE_NORMAL @@ -646,7 +646,7 @@ icon_state = "gauntlet" tool_qualities = list(QUALITY_CUTTING = 20, QUALITY_SAWING = 20) //Cuts people down just like trees. force = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_HALF //same pen as a dagger. This is a fairly rare weapon that require fighting on of the more dangerous mobs. + armor_divisor = ARMOR_PEN_HALF //same pen as a dagger. This is a fairly rare weapon that require fighting on of the more dangerous mobs. w_class = ITEM_SIZE_NORMAL origin_tech = list(TECH_COMBAT = 5) attack_verb = list("clawed", "scratched", "lacerated", "slashed") @@ -661,7 +661,7 @@ toggleable = TRUE worksound = WORKSOUND_HAMMER switched_on_forcemult = 3.3 //33 - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE w_class = ITEM_SIZE_NORMAL origin_tech = list(TECH_COMBAT = 7) attack_verb = list("punched", "decked", "haymakered", "uppercut") @@ -709,6 +709,7 @@ throw_speed = 3 edge = TRUE sharp = TRUE + extended_reach = TRUE tool_qualities = list(QUALITY_CUTTING = 10) origin_tech = list(TECH_COMBAT = 1) hitsound = 'sound/weapons/slice.ogg' // Sounds more like a stab than a cut. @@ -720,7 +721,7 @@ force = WEAPON_FORCE_PAINFUL throwforce = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE throw_speed = 3 max_upgrades = 5 @@ -747,7 +748,7 @@ wielded_icon = "spear_steel_wielded" force = WEAPON_FORCE_DANGEROUS throwforce = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP tool_qualities = list(QUALITY_CUTTING = 10, QUALITY_WIRE_CUTTING = 5, QUALITY_SCREW_DRIVING = 5) matter = list(MATERIAL_STEEL = 3) structure_damage_factor = STRUCTURE_DAMAGE_WEAK @@ -760,7 +761,7 @@ wielded_icon = "spear_plasteel_wielded" force = WEAPON_FORCE_ROBUST throwforce = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP tool_qualities = list(QUALITY_CUTTING = 15, QUALITY_WIRE_CUTTING = 10, QUALITY_SCREW_DRIVING = 10) matter = list(MATERIAL_STEEL = 1, MATERIAL_PLASTEEL = 2) structure_damage_factor = STRUCTURE_DAMAGE_NORMAL @@ -773,7 +774,7 @@ wielded_icon = "spear_uranium_wielded" force = WEAPON_FORCE_DANGEROUS throwforce = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP tool_qualities = list(QUALITY_CUTTING = 10, QUALITY_WIRE_CUTTING = 5, QUALITY_SCREW_DRIVING = 5) matter = list(MATERIAL_STEEL = 3, MATERIAL_URANIUM = 1) @@ -790,7 +791,7 @@ wielded_icon = "makeshift_halberd_wielded" force = WEAPON_FORCE_ROBUST throwforce = WEAPON_FORCE_NORMAL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW tool_qualities = list(QUALITY_CUTTING = 10) matter = list(MATERIAL_STEEL = 5) @@ -802,7 +803,7 @@ item_state = "hunter_halberd" wielded_icon = "hunter_halberd_wielded" force = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP effective_faction = list("wurm", "roach", "spider", "vox_tribe", "russian", "tengo", "tengolo_berserker", "xenomorph", "stalker") // This is the janky solution but works. damage_mult = 2 //We are better for hunting, worse for "real fights" price_tag = 500 @@ -822,7 +823,7 @@ slot_flags = SLOT_BELT worksound = WORKSOUND_HARD_SLASH force = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP throwforce = WEAPON_FORCE_NORMAL attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") @@ -853,7 +854,7 @@ icon_state = "katana_old" item_state = "katana" force = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_EXTREME + armor_divisor = ARMOR_PEN_EXTREME /obj/item/tool/cheap/spear name = "cheap spear" diff --git a/code/game/objects/items/weapons/tools/surgicaldrills.dm b/code/game/objects/items/weapons/tools/surgicaldrills.dm index d4b02ce0955..c8f830ac192 100644 --- a/code/game/objects/items/weapons/tools/surgicaldrills.dm +++ b/code/game/objects/items/weapons/tools/surgicaldrills.dm @@ -7,7 +7,7 @@ matter = list(MATERIAL_STEEL = 4, MATERIAL_PLASTIC = 2) flags = CONDUCT force = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE w_class = ITEM_SIZE_NORMAL origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) attack_verb = list("drilled") @@ -22,7 +22,7 @@ desc = "A handheld drill with a longer and more durable drill, for precision drilling." icon_state = "longdrill" force = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_DEEP //Diamond tip! + armor_divisor = ARMOR_PEN_DEEP //Diamond tip! matter = list(MATERIAL_STEEL = 6, MATERIAL_PLASTIC = 2, MATERIAL_DIAMOND = 1) tool_qualities = list(QUALITY_DRILLING = 60) use_power_cost = 0.60 @@ -31,5 +31,5 @@ /obj/item/tool/surgicaldrill/adv/si icon_state = "drill_SI" matter = list(MATERIAL_STEEL = 8, MATERIAL_PLASTIC = 4, MATERIAL_PLASTEEL = 1) //we use a plasteel tip rather then diamond, thus less AP - armor_penetration = ARMOR_PEN_MODERATE - price_tag = 450 \ No newline at end of file + armor_divisor = ARMOR_PEN_MODERATE + price_tag = 450 diff --git a/code/game/objects/items/weapons/vacuum.dm b/code/game/objects/items/weapons/vacuum.dm index 9f30ca20a39..383fd826fe3 100644 --- a/code/game/objects/items/weapons/vacuum.dm +++ b/code/game/objects/items/weapons/vacuum.dm @@ -7,6 +7,7 @@ throwforce = WEAPON_FORCE_WEAK throw_speed = 5 throw_range = 3 + no_double_tact = TRUE sanctified = TRUE //Already struggles to compete with mop, let's not make it slower in the hands of those who use it most w_class = ITEM_SIZE_BULKY attack_verb = list("bashed", "bludgeoned", "whacked") diff --git a/code/game/objects/items/wielding.dm b/code/game/objects/items/wielding.dm index 769c1f31729..304a5e1180b 100644 --- a/code/game/objects/items/wielding.dm +++ b/code/game/objects/items/wielding.dm @@ -7,22 +7,29 @@ var/wielded_icon = null //The item state used when it's weilded. Guns are snowflakey and have their own shit for this. This is for non guns. var/force_unwielded = 0 //If you have a specific force for it being weilded. var/force_wielded = 0 //If you have a specific force for it being unwielded. If for whatever reason you don't want to use the original force of the weapon. + var/force_wielded_multiplier = 0 //If you have a specific force for it being unwielded. If for whatever reason you don't want to use the original force of the weapon. /mob/living/proc/do_wield()//The proc we actually care about. var/obj/item/I = get_active_hand() + var/obj/item/O = get_inactive_hand() if(!I) - return - I.attempt_wield(src) + if(!O) + return + swap_hand() + O.attempt_wield(src) + else + I.attempt_wield(src) /obj/item/proc/unwield(mob/living/user) if(!wielded || !user) return wielded = FALSE - if(force_unwielded) - force = force_unwielded + if(force_wielded_multiplier) + force = (force / force_wielded_multiplier) else force = (force / 1.3) + var/sf = findtext(name," (Wielded)") if(sf) name = copytext(name,1,sf) @@ -47,12 +54,15 @@ return if(!is_held_twohanded(user)) return - if(user.get_inactive_hand()) - to_chat(user, SPAN_WARNING("You need your other hand to be empty!")) - return + var/obj/item/X = user.get_inactive_hand() + if(X) + if(!X.canremove) + return + user.drop_offhand() + to_chat(user, SPAN_WARNING("You dropped \the [X].")) wielded = TRUE - if(force_wielded) - force = force_wielded + if(force_wielded_multiplier) + force = force * force_wielded_multiplier else //This will give items wielded 30% more damage. This is balanced by the fact you cannot use your other hand. force = (force * 1.3) //Items that do 0 damage will still do 0 damage though. var/original_name = name //Else using [initial(name)] for the name of object returns compile-time name without any changes that've happened to the object's name @@ -78,7 +88,6 @@ /obj/item/proc/update_unwield_icon()//That way it doesn't interupt any other special icon_states. if(!wielded && wielded_icon) item_state = "[initial(item_state)]" - //For general weapons. /obj/item/proc/attempt_wield(mob/user) if(wielded) //Trying to unwield it diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 3b8ac742ddc..ec041559553 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -10,7 +10,7 @@ var/edge = 0 // whether this object is more likely to dismember var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! var/damtype = BRUTE - var/armor_penetration = 0 + var/armor_divisor = 1 var/corporation = null var/heat = 0 //soj edit @@ -256,8 +256,8 @@ throwforce = initial(throwforce) * newmult //Same for AP -/obj/proc/multiply_projectile_penetration(newmult) - armor_penetration = initial(armor_penetration) * newmult +/obj/proc/add_projectile_penetration(newmult) + armor_divisor = initial(armor_divisor) + newmult /obj/proc/multiply_pierce_penetration(newmult) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index b966839341c..c554e506b2a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -645,9 +645,9 @@ //pistols new /obj/item/gun/projectile/automatic/slaught_o_matic(src) //has silver eye new /obj/item/gun/projectile/silvereye(src) - new /obj/item/ammo_magazine/kurtz_50/hv(src) - new /obj/item/ammo_magazine/kurtz_50/hv(src) - new /obj/item/ammo_magazine/kurtz_50/hv(src) + new /obj/item/ammo_magazine/kurtz_50(src) + new /obj/item/ammo_magazine/kurtz_50(src) + new /obj/item/ammo_magazine/kurtz_50(src) new /obj/item/ammo_magazine/ammobox/kurtz_50/hv(src) //melee @@ -698,9 +698,10 @@ /obj/structure/closet/secure_closet/reinforced/foreman/fence/populate_contents() new /obj/item/clothing/suit/storage/scavengerarmor(src) new /obj/item/clothing/head/helmet/handmade/scavengerhelmet(src) - new /obj/item/gun/projectile/shotgun/bull/bison(src) - new /obj/item/ammo_magazine/ammobox/shotgun/buckshot(src) - new /obj/item/ammo_magazine/speed_loader_shotgun/empty(src) + new /obj/item/gun/projectile/automatic/vector(src) + new /obj/item/ammo_magazine/smg_magnum_40(src) + new /obj/item/ammo_magazine/smg_magnum_40(src) + new /obj/item/ammo_magazine/smg_magnum_40/lethal(src) new /obj/item/gun/projectile/automatic/slaught_o_matic(src) new /obj/item/gun/projectile/ladon/sa(src) new /obj/item/ammo_magazine/magnum_40(src) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index ba6974c34d2..fdd727fadac 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -121,99 +121,100 @@ usable_qualities.Add(QUALITY_WIRE_CUTTING) var/tool_type = I.get_tool_type(user, usable_qualities, src) - switch(tool_type) - - if(QUALITY_BOLT_TURNING) - if(construction_stage == 2) - to_chat(user, SPAN_NOTICE("You begin removing the bolts anchoring the support rods...")) - if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - construction_stage = 1 - update_icon() - to_chat(user, SPAN_NOTICE("You remove the bolts anchoring the support rods.")) - return - return - - if(QUALITY_WELDING) - if(locate(/obj/effect/overlay/wallrot) in src) - if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - to_chat(user, SPAN_NOTICE("You burn away the fungi with \the [I].")) - for(var/obj/effect/overlay/wallrot/WR in src) - qdel(WR) - return - if(thermite) - if(I.use_tool(user, src, WORKTIME_INSTANT,tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - to_chat(user, SPAN_NOTICE("You ignite the termit with the [I]!")) - thermitemelt(user) - return - if(damage) - if(I.use_tool(user, src, WORKTIME_NORMAL, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - to_chat(user, SPAN_NOTICE("You repair the damage to [src].")) - clear_bulletholes() - take_damage(-damage) - return - if(isnull(construction_stage) || !reinf_material) - to_chat(user, SPAN_NOTICE("You begin removing the outer plating...")) - if(I.use_tool(user, src, WORKTIME_LONG, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - to_chat(user, SPAN_NOTICE("You remove the outer plating.")) - dismantle_wall(user) - user.visible_message(SPAN_WARNING("The wall was torn open by [user]!")) - return - if(construction_stage == 4) - to_chat(user, SPAN_NOTICE("You begin removing the outer plating...")) - if(I.use_tool(user, src, WORKTIME_NORMAL, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - construction_stage = 3 - update_icon() - to_chat(user, SPAN_NOTICE("You press firmly on the cover, dislodging it.")) - return - if(construction_stage == 1) - to_chat(user, SPAN_NOTICE("You begin removing the support rods...")) - if(I.use_tool(user, src, WORKTIME_NORMAL, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - construction_stage = 0 - update_icon() - new /obj/item/stack/rods(user.loc) - to_chat(user, SPAN_NOTICE("The support rods drop out as you cut them loose from the frame.")) - return - return - - if(QUALITY_PRYING) - if(construction_stage == 3) - to_chat(user, SPAN_NOTICE("You begin to prying off the cover...")) - if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - construction_stage = 2 - update_icon() - to_chat(user, SPAN_NOTICE("You pry off the cover.")) - return - if(construction_stage == 0) - to_chat(user, SPAN_NOTICE("You struggle to pry off the outer sheath...")) - if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - to_chat(user, SPAN_NOTICE("You pry off the outer sheath.")) - dismantle_wall(user) - return - return - - if(QUALITY_WIRE_CUTTING) - if(construction_stage == 6) - to_chat(user, SPAN_NOTICE("You begin removing the outer grille...")) - if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - construction_stage = 5 - new /obj/item/stack/rods(user.loc) - to_chat(user, SPAN_NOTICE("You removing the outer grille.")) - update_icon() - return - return - - if(QUALITY_SCREW_DRIVING) - if(construction_stage == 5) - to_chat(user, SPAN_NOTICE("You begin removing the support lines...")) - if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) - construction_stage = 4 - update_icon() - to_chat(user, SPAN_NOTICE("You remove the support lines.")) - return - return - - if(ABORT_CHECK) - return + if (user.a_intent != I_HURT)//we don't wanna do tool stuff if we're on harm intent. + switch(tool_type) + + if(QUALITY_BOLT_TURNING) + if(construction_stage == 2) + to_chat(user, SPAN_NOTICE("You begin removing the bolts anchoring the support rods...")) + if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + construction_stage = 1 + update_icon() + to_chat(user, SPAN_NOTICE("You remove the bolts anchoring the support rods.")) + return + return + + if(QUALITY_WELDING) + if(locate(/obj/effect/overlay/wallrot) in src) + if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + to_chat(user, SPAN_NOTICE("You burn away the fungi with \the [I].")) + for(var/obj/effect/overlay/wallrot/WR in src) + qdel(WR) + return + if(thermite) + if(I.use_tool(user, src, WORKTIME_INSTANT,tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + to_chat(user, SPAN_NOTICE("You ignite the termit with the [I]!")) + thermitemelt(user) + return + if(damage) + if(I.use_tool(user, src, WORKTIME_NORMAL, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + to_chat(user, SPAN_NOTICE("You repair the damage to [src].")) + clear_bulletholes() + take_damage(-damage) + return + if(isnull(construction_stage) || !reinf_material) + to_chat(user, SPAN_NOTICE("You begin removing the outer plating...")) + if(I.use_tool(user, src, WORKTIME_LONG, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + to_chat(user, SPAN_NOTICE("You remove the outer plating.")) + dismantle_wall(user) + user.visible_message(SPAN_WARNING("The wall was torn open by [user]!")) + return + if(construction_stage == 4) + to_chat(user, SPAN_NOTICE("You begin removing the outer plating...")) + if(I.use_tool(user, src, WORKTIME_NORMAL, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + construction_stage = 3 + update_icon() + to_chat(user, SPAN_NOTICE("You press firmly on the cover, dislodging it.")) + return + if(construction_stage == 1) + to_chat(user, SPAN_NOTICE("You begin removing the support rods...")) + if(I.use_tool(user, src, WORKTIME_NORMAL, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + construction_stage = 0 + update_icon() + new /obj/item/stack/rods(user.loc) + to_chat(user, SPAN_NOTICE("The support rods drop out as you cut them loose from the frame.")) + return + return + + if(QUALITY_PRYING) + if(construction_stage == 3) + to_chat(user, SPAN_NOTICE("You begin to prying off the cover...")) + if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + construction_stage = 2 + update_icon() + to_chat(user, SPAN_NOTICE("You pry off the cover.")) + return + if(construction_stage == 0) + to_chat(user, SPAN_NOTICE("You struggle to pry off the outer sheath...")) + if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + to_chat(user, SPAN_NOTICE("You pry off the outer sheath.")) + dismantle_wall(user) + return + return + + if(QUALITY_WIRE_CUTTING) + if(construction_stage == 6) + to_chat(user, SPAN_NOTICE("You begin removing the outer grille...")) + if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + construction_stage = 5 + new /obj/item/stack/rods(user.loc) + to_chat(user, SPAN_NOTICE("You removing the outer grille.")) + update_icon() + return + return + + if(QUALITY_SCREW_DRIVING) + if(construction_stage == 5) + to_chat(user, SPAN_NOTICE("You begin removing the support lines...")) + if(I.use_tool(user, src, WORKTIME_FAST, tool_type, FAILCHANCE_NORMAL, required_stat = STAT_MEC)) + construction_stage = 4 + update_icon() + to_chat(user, SPAN_NOTICE("You remove the support lines.")) + return + return + + if(ABORT_CHECK) + return if(istype(I, /obj/item/stack/rods)) if(construction_stage == 5) @@ -251,3 +252,4 @@ visible_message(SPAN_DANGER("\The [user] attacks \the [src] with \the [I], but it bounces off!")) user.do_attack_animation(src) return + diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index c375b20d358..0c005d4357f 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -210,7 +210,7 @@ return PROJECTILE_CONTINUE src.ricochet_id = 0 var/proj_damage = Proj.get_structure_damage() - var/ricochet_mult = Proj.get_ricochet_modifier() +// var/ricochet_mult = Proj.get_//ricochet_modifier() if(istype(Proj,/obj/item/projectile/beam)) if (!(Proj.testing)) burn(500)//TODO : fucking write these two procs not only for plasma (see plasma in materials.dm:283) ~ @@ -222,7 +222,7 @@ var/ricochetchance = 1 if(proj_damage <= 60) ricochetchance = 2 + round((60 - proj_damage) / 5) - ricochetchance = min(ricochetchance * ricochetchance * ricochet_mult, 100) +// ricochetchance = min(ricochetchance * ricochetchance * ricochet_mult, 100) // here it is multiplied by 1/2 temporally, changes will be required when new wall system gets implemented ricochetchance = round(ricochetchance * projectile_reflection(Proj, TRUE) / 2) ricochetchance = min(max(ricochetchance, 0), 100) diff --git a/code/modules/clothing/cloak/hooded.dm b/code/modules/clothing/cloak/hooded.dm index bae55b79abb..d65ddff2296 100644 --- a/code/modules/clothing/cloak/hooded.dm +++ b/code/modules/clothing/cloak/hooded.dm @@ -128,7 +128,7 @@ desc = "A heavy premier's jacket designed for cold environments. Hidden armor plating is sewn into it." icon_state = "coatcaptain" item_state_slots = list(slot_r_hand_str = "coatcaptain", slot_l_hand_str = "coatcaptain") - armor_list = list(melee = 20, bullet = 15, energy = 10, bomb = 15, bio = 0, rad = 0) + armor_list = list(melee = 5, bullet = 3, energy = 2, bomb = 15, bio = 0, rad = 0) //hoodtype = /obj/item/clothing/head/hood/winter/captain /obj/item/clothing/suit/hooded/wintercoat/security @@ -136,7 +136,7 @@ desc = "A heavy security jacket designed for cold environments. Armor plating has been sewn into it." icon_state = "coatsecurity" item_state_slots = list(slot_r_hand_str = "coatsecurity", slot_l_hand_str = "coatsecurity") - armor_list = list(melee = 25, bullet = 20, energy = 15, bomb = 20, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 5, energy = 3, bomb = 20, bio = 0, rad = 0) //hoodtype = /obj/item/clothing/head/hood/winter/security /obj/item/clothing/suit/hooded/wintercoat/medical @@ -189,7 +189,7 @@ desc = "A heavy mining jacket designed for cold environments. The leather is quite tough and provides a small amount of protection." icon_state = "coatminer" item_state_slots = list(slot_r_hand_str = "coatminer", slot_l_hand_str = "coatminer") - armor_list = list(melee = 10, bullet = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 0, energy = 0, bomb = 0, bio = 0, rad = 0) //hoodtype = /obj/item/clothing/head/hood/winter/cargo/miner /obj/item/clothing/suit/hooded/costume/techpriest @@ -204,7 +204,7 @@ desc = "For larping as the other techno cult. This time with armor, the metal platings provided decent protection, roughly on par with a hand made vest." icon_state = "explorator" item_state = "explorator" - armor_list = list(melee = 30, bullet = 20, energy = 15, bomb = 10, bio = 15, rad = 5) + armor_list = list(melee = 7, bullet = 5, energy = 3, bomb = 10, bio = 15, rad = 5) hoodtype = /obj/item/clothing/head/hood/techpriest /obj/item/clothing/suit/hooded/absolutecloak diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 8886ee81baf..2cddc12eadc 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -144,9 +144,9 @@ "type" = "ProgressBar", "name" = capitalize(i) + " armor", "value" = armorlist[i], - "max" = 100, + "max" = 25, "color" = armorlist[i] > 25 ? (armorlist[i] > 50 ? "good" : "average") : "bad", - "unit" = "%" + "unit" = "" )) stats["Armor Stats"] = armor_stats @@ -358,7 +358,7 @@ BLIND // can't see anything var/wired = 0 var/clipped = 0 body_parts_covered = ARMS - armor_list = list(melee = 10, bullet = 0, energy = 15, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 0, energy = 3, bomb = 0, bio = 0, rad = 0) slot_flags = SLOT_GLOVES attack_verb = list("challenged") @@ -509,7 +509,7 @@ BLIND // can't see anything var/noslip = 0 var/module_inside = 0 - armor_list = list(melee = 10, bullet = 0, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 0, energy = 2, bomb = 0, bio = 0, rad = 0) permeability_coefficient = 0.50 slowdown = SHOES_SLOWDOWN force = 2 diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index 0dec0972891..13d677d550a 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -3,7 +3,7 @@ desc = "Because you really needed another excuse to punch your crewmates." icon_state = "boxing" item_state = "boxing" - armor_list = list(melee = 25, bullet = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/gloves/boxing/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/tool/wirecutters) || istype(W, /obj/item/tool/scalpel)) diff --git a/code/modules/clothing/gloves/knuckledusters.dm b/code/modules/clothing/gloves/knuckledusters.dm index 28b9ea6a835..b0816267678 100644 --- a/code/modules/clothing/gloves/knuckledusters.dm +++ b/code/modules/clothing/gloves/knuckledusters.dm @@ -25,8 +25,8 @@ item_state = "dusters_plasteel" punch_increase = 10 armor = list( - melee = 15, //Just a litttttle bit of armor so your not defenceless - bullet = 5, + melee = 3, //Just a litttttle bit of armor so your not defenceless + bullet = 1, energy = 0, bomb = 0, bio = 0, @@ -43,9 +43,9 @@ item_state = "scav_gloves" punch_increase = 8 //Armored so this should be weaker then the plasteel dust armor_list = list( - melee = 35, // 10 more than combat, Plasteel reinforced - bullet = 15, - energy = 20, // No ablative materials means energy protection stays the same + melee = 8, // 10 more than combat, Plasteel reinforced + bullet = 3, + energy = 5, // No ablative materials means energy protection stays the same bomb = 10, // Plasteel protects a little bit against bombs bio = 0, rad = 0 @@ -100,8 +100,8 @@ item_state = "knuckles" punch_increase = 10 armor = list( - melee = 10, //Just a litttttle bit of armor so your not defenceless - bullet = 5, + melee = 2, //Just a litttttle bit of armor so your not defenceless + bullet = 1, energy = 0, bomb = 0, bio = 0, diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 6d1d955707f..fb3d98e0692 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -3,7 +3,7 @@ name = "premier's gloves" //Sprites from Eris icon_state = "captain" item_state = "captain" - armor_list = list(melee = 25, bullet = 10, energy = 25, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 2, energy = 6, bomb = 0, bio = 0, rad = 0) price_tag = 250 /obj/item/clothing/gloves/runed @@ -25,7 +25,7 @@ name = "insulated gloves" icon_state = "yellow" item_state = "yellow" - armor_list = list(melee = 0, bullet = 0, energy = 15, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 0, bullet = 0, energy = 3, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0 permeability_coefficient = 0.05 price_tag = 200 @@ -35,7 +35,7 @@ desc = "A pare of insulated gloves woven into a thicker fire restant pare." icon_state = "guild_yellow" item_state = "guild_yellow" - armor_list = list(melee = 20, bullet = 15, energy = 15, bomb = 10, bio = 100, rad = 100) + armor_list = list(melee = 5, bullet = 3, energy = 3, bomb = 10, bio = 100, rad = 100) siemens_coefficient = 0 permeability_coefficient = 0.05 price_tag = 500 @@ -62,7 +62,7 @@ name = "thick gloves" icon_state = "black" item_state = "black" - armor_list = list(melee = 20, bullet = 0, energy = 20, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 5, bullet = 0, energy = 5, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.5 permeability_coefficient = 0.05 price_tag = 100 @@ -83,7 +83,7 @@ desc = "A pair of modified work gloves with some steel." icon_state = "hm_combat" item_state = "hm_combat" - armor_list = list(melee = 25, bullet = 5, energy = 20, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 1, energy = 5, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.6 price_tag = 150 @@ -92,7 +92,7 @@ name = "combat gloves" icon_state = "ihscombat" item_state = "ihscombat" - armor_list = list(melee = 25, bullet = 20, energy = 20, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) price_tag = 150 /obj/item/clothing/gloves/thick/swat/insulated @@ -101,7 +101,7 @@ These have added insulated gloves sacerficing some of its protection to be better suited to deal with eletrical work under less then ideal cases." icon_state = "combat_yellow" item_state = "combat_yellow" - armor_list = list(melee = 15, bullet = 15, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 3, bullet = 3, energy = 2, bomb = 0, bio = 0, rad = 0) price_tag = 350 siemens_coefficient = 0 @@ -109,7 +109,7 @@ /obj/item/clothing/gloves/thick/ablasive name = "ablative gloves" desc = "A thick pair of gloves that excel at protecting the wearer against energy projectiles." - armor_list = list(melee = 10, bullet = 10, energy = 70, bomb = 30, bio = 10, rad = 0) + armor_list = list(melee = 2, bullet = 2, energy = 17, bomb = 30, bio = 10, rad = 0) icon_state = "ihscombat" item_state = "ihscombat" price_tag = 150 @@ -118,7 +118,7 @@ /obj/item/clothing/gloves/thick/ablasive/militia name = "militia ablative gloves" desc = "A thick pair of gloves that excel at protecting the wearer against energy projectiles." - armor_list = list(melee = 10, bullet = 10, energy = 60, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 2, energy = 3, bomb = 10, bio = 0, rad = 0) icon_state = "bs_ablative" item_state = "ihscombat" @@ -131,14 +131,14 @@ desc = "A pair of heavy duty gauntlets designed with high-grade bulletproof materials." icon_state = "bs_bulletproof" item_state = "ihscombat" - armor_list = list(melee = 10, bullet = 60, energy = 10, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 15, energy = 2, bomb = 10, bio = 0, rad = 0) /obj/item/clothing/gloves/thick/swat/blackshield_corpsman name = "corpsman combat gloves" desc = "A pair of fire and impact-resistant corpsman combat gloves." // No lying, it's not anti-germs. icon_state = "corpsman_base_gloves" item_state = "corpsman_base_gloves" - armor_list = list(melee = 25, bullet = 20, energy = 20, bomb = 0, bio = 15, rad = 0) + armor_list = list(melee = 6, bullet = 5, energy = 5, bomb = 0, bio = 15, rad = 0) siemens_coefficient = 0 price_tag = 250 @@ -174,7 +174,7 @@ name = "blackshield combat gloves" icon_state = "bs_base_gloves" item_state = "bs_base_gloves" - armor_list = list(melee = 25, bullet = 20, energy = 20, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0 price_tag = 250 @@ -211,7 +211,7 @@ name = "combat gloves" icon_state = "black" item_state = "black" - armor_list = list(melee = 25, bullet = 20, energy = 20, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0 price_tag = 250 @@ -221,7 +221,7 @@ name = "hunter gloves" icon_state = "huntergloves" item_state = "huntergloves" - armor_list = list(melee = 30, bullet = 10, energy = 20, bomb = 10, bio = 5, rad = 0) + armor_list = list(melee = 7, bullet = 2, energy = 5, bomb = 10, bio = 5, rad = 0) siemens_coefficient = 0.5 price_tag = 200 @@ -230,7 +230,7 @@ desc = "Gloves with additional reinforcment on the knuckles." icon_state = "knuckles" item_state = "knuckles" - armor_list = list(melee = 20, bullet = 5, energy = 0, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 5, bullet = 1, energy = 0, bomb = 0, bio = 0, rad = 0) price_tag = 50 /obj/item/clothing/gloves/evening @@ -328,7 +328,7 @@ desc = "Heavy gloves to keep your hands intact for future experiments." icon_state = "science" item_state = "science" - armor_list = list(melee = 25, bullet = 5, energy = 20, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 1, energy = 5, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.5 permeability_coefficient = 0.05 price_tag = 50 diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm index 207565f51a6..a169fe3c2c3 100755 --- a/code/modules/clothing/gloves/stungloves.dm +++ b/code/modules/clothing/gloves/stungloves.dm @@ -3,7 +3,7 @@ desc = "Seinemetall Defense GmbH solution for police operations. Punch criminals right in the face instead of prodding them with some feeble rod." icon_state = "powerglove" item_state = "powerglove" - armor_list = list(melee = 25, bullet = 10, energy = 20, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 2, energy = 5, bomb = 0, bio = 0, rad = 0) action_button_name = "Toggle Power Glove" price_tag = 250 var/stunforce = 0 @@ -123,7 +123,7 @@ icon_state = "sipowerglove" item_state = "sipowerglove" permeability_coefficient = 0.01 - armor_list = list(melee = 15, bullet = 0, energy = 10, bomb = 0, bio = 100, rad = 0) //same armor values as jackboots + bio protection. + armor_list = list(melee = 3, bullet = 0, energy = 2, bomb = 0, bio = 100, rad = 0) //same armor values as jackboots + bio protection. action_button_name = "Toggle placeholder Glove" price_tag = 500 //rarer and harder to find. agonyforce = 40 //same as the stun baton, these are slightly better than the Marshal version thusly. @@ -133,4 +133,4 @@ icon_state = "sipowerglove_active" else icon_state = "sipowerglove" - update_wear_icon() \ No newline at end of file + update_wear_icon() diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index f1e24d45f9b..026f5462666 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -7,9 +7,9 @@ brightness_on = 4 //luminosity when on light_overlay = "hardhat_light" armor_list = list( - melee = 10, - bullet = 10, - energy = 10, + melee = 2, + bullet = 2, + energy = 2, bomb = 10, bio = 10, rad = 25 @@ -56,9 +56,9 @@ brightness_on = 6 //luminosity when on light_overlay = "hardhat_light" armor_list = list( - melee = 30, - bullet = 20, - energy = 20, + melee = 7, + bullet = 5, + energy = 5, bomb = 35, bio = 10, rad = 25 @@ -78,13 +78,13 @@ brightness_on = 8 //luminosity when on light_overlay = "hardhat_light" armor_list = list( - melee = 40, - bullet = 60, - energy = 50, + melee = 10, + bullet = 15, + energy = 12, bomb = 75, bio = 80, rad = 100 ) siemens_coefficient = 0.8 w_class = ITEM_SIZE_NORMAL - price_tag = 100 \ No newline at end of file + price_tag = 100 diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 95495bbd703..f8b78dfe4d2 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -14,9 +14,9 @@ item_flags = THICKMATERIAL body_parts_covered = HEAD | EARS armor_list = list( - melee = 35, - bullet = 25, - energy = 20, + melee = 8, + bullet = 6, + energy = 5, bomb = 25, bio = 0, rad = 0 @@ -41,8 +41,8 @@ siemens_coefficient = 1 price_tag = 160 armor_list = list( - melee = 15, - bullet = 15, + melee = 3, + bullet = 3, energy = 0, bomb = 0, bio = 0, @@ -83,9 +83,9 @@ flags_inv = HIDEEARS|BLOCKHAIR|HIDEEYES|BLOCKFACEHAIR|HIDEFACE //Speaking with one on should be muffled price_tag = 150 armor_list = list( - melee = 20, - bullet = 10, - energy = 5, + melee = 5, + bullet = 2, + energy = 1, bomb = 15, // Shock-absorbent bio = 0, rad = 0 @@ -126,9 +126,9 @@ desc = "It looks like it was made from a bucket and some steel. Uncomfortable and heavy but better than nothing." icon_state = "hm_helmet" armor_list = list( - melee = 25, - bullet = 10, - energy = 20, + melee = 6, + bullet = 2, + energy = 5, bomb = 10, bio = 0, rad = 0 @@ -140,7 +140,7 @@ name = "bucket-helm" desc = "A bucket with two holes for eyes and some smaller ones for ventilation, with steel added to gain some protection. One may say, 'Situla Vult!'." icon_state = "hm_greathelm" - armor_list = list(melee = 27, bullet = 15,energy = 25, bomb = 12, bio = 1, rad = 0) // Only difference with handmade combat helmet is 2 sheets of metal, shouldn't be that far superior. + armor_list = list(melee = 6, bullet = 3,energy = 6, bomb = 12, bio = 1, rad = 0) // Only difference with handmade combat helmet is 2 sheets of metal, shouldn't be that far superior. flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS|EYES siemens_coefficient = 0.6 @@ -152,9 +152,9 @@ desc = "Ave, Imperator, morituri te salutant." icon_state = "gladiator" armor_list = list( - melee = 20, - bullet = 10, - energy = 10, + melee = 5, + bullet = 2, + energy = 2, bomb = 10, bio = 0, rad = 0 @@ -167,7 +167,7 @@ name = "steelpot helmet" desc = "A titanium helmet of serbian origin. Still widely used despite being discontinued." icon_state = "steelpot" - armor_list = list(melee = 35, bullet = 30, energy = 0, bomb = 30, bio = 0, rad = 0) // slightly buffed IHS helmet minus energy resistance + armor_list = list(melee = 8, bullet = 7, energy = 0, bomb = 30, bio = 0, rad = 0) // slightly buffed IHS helmet minus energy resistance flags_inv = BLOCKHEADHAIR|HIDEEARS body_parts_covered = HEAD|EARS siemens_coefficient = 1 @@ -180,9 +180,9 @@ flags_inv = HIDEEARS|HIDEEYES|BLOCKHAIR siemens_coefficient = 0.9 //More conductive than most helmets armor_list = list( - melee = 5, - bullet = 20, - energy = 10, + melee = 1, + bullet = 5, + energy = 2, bomb = 0, bio = 0, rad = 0 @@ -192,9 +192,9 @@ name = "\improper Type-34 Semi-Enclosed Headwear" desc = "Armored helmet used by certain law enforcement agencies. It's hard to believe there's someone somewhere behind that." armor_list = list( - melee = 30, - bullet = 30, - energy = 30, + melee = 7, + bullet = 7, + energy = 7, bomb = 20, bio = 0, rad = 0 @@ -204,14 +204,14 @@ name = "mercenary helmet" desc = "What happens when someone combines ablative, melee, and bullet plating in the form of a fetching tan and visor. Not as singularly powerful as each individually but the best all round protection one can get." icon_state = "merchelm" - armor_list = list(melee = 55, bullet = 55, energy = 55, bomb = 45, bio = 0, rad = 0) // best what you can get + armor_list = list(melee = 13, bullet = 13, energy = 13, bomb = 45, bio = 0, rad = 0) // best what you can get obscuration = LIGHT_OBSCURATION /obj/item/clothing/head/helmet/generic_full name = "full helmet" desc = "A generic non-branded full cover helmet with decent all round protection." icon_state = "helmet_full" - armor_list = list(melee = 30, bullet = 30, energy = 30, bomb = 25, bio = 10, rad = 10) + armor_list = list(melee = 7, bullet = 7, energy = 7, bomb = 25, bio = 10, rad = 10) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS obscuration = LIGHT_OBSCURATION @@ -220,7 +220,7 @@ name = "\improper SWAT helmet" desc = "An oldie but a goodie. This helmet was often the last thing seen by those so foolish as to draw the attention of the Solarian Frontier enforcement corps. Judging by the dents, it didn't save its last wearer, but perhaps you'll fare better?" icon_state = "swathelm" - armor_list = list(melee = 55, bullet = 55, energy = 55, bomb = 55, bio = 0, rad = 0) + armor_list = list(melee = 13, bullet = 13, energy = 13, bomb = 55, bio = 0, rad = 0) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE @@ -231,7 +231,7 @@ name = "ballistic helmet" desc = "Standard military gear. Protects the head from impacts and shrapnel." icon_state = "helmet_mil" - armor_list = list(melee = 30, bullet = 40, energy = 20, bomb = 30, bio = 0, rad = 0) + armor_list = list(melee = 7, bullet = 10, energy = 5, bomb = 30, bio = 0, rad = 0) /obj/item/clothing/head/helmet/ballistic/verb/toggle_style() set name = "Adjust Style" @@ -379,7 +379,7 @@ name = "corpsman full helm" desc = "Standard military gear. A full-faced variant of the common ballistic helmet. This one bears a few\ key upgrades, including sterile materials and contaminant resistant sealing." - armor_list = list(melee = 30, bullet = 40, energy = 20, bomb = 30, bio = 75, rad = 0) + armor_list = list(melee = 7, bullet = 10, energy = 5, bomb = 30, bio = 75, rad = 0) action_button_name = "Toggle Headlamp" brightness_on = 4 light_overlay = "corpsmanfullhelm_light" @@ -396,7 +396,7 @@ action_button_name = "Toggle Headlamp" brightness_on = 5 light_overlay = "bsfullhelm_light" - armor_list = list(melee = 35, bullet = 50, energy = 40, bomb = 50, bio = 0, rad = 0) + armor_list = list(melee = 9, bullet = 12, energy = 10, bomb = 50, bio = 0, rad = 0) /obj/item/clothing/head/helmet/ballistic/militia/full/co/toggle_style() set name = "Adjust Style" @@ -435,7 +435,7 @@ desc = "Standard operator gear. Protects the head from impacts. Painted in marshal colors." icon_state = "helmet" icon_state = "helmet" - armor_list = list(melee = 30, bullet = 30,energy = 25, bomb = 25, bio = 70, rad = 0) + armor_list = list(melee =7, bullet = 7, energy = 6, bomb = 25, bio = 70, rad = 0) body_parts_covered = HEAD|EARS /obj/item/clothing/head/helmet/marshal/verb/toggle_style() @@ -468,7 +468,7 @@ desc = "A full helmet with a built in glow visor. While a weak light its better than nothing and the full cover design makes it ideal for general protection." icon_state = "ironhammer_full" item_state = "ironhammer_full" - armor_list = list(melee = 30, bullet = 30,energy = 25, bomb = 25, bio = 70, rad = 0) + armor_list = list(melee =7, bullet = 7,energy = 6, bomb = 25, bio = 70, rad = 0) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS action_button_name = "Toggle Headlamp" @@ -523,7 +523,7 @@ action_button_name = "Toggle Headlamp" //Excellent job forgetting the verb, Friend. brightness_on = 6 light_overlay = "m_fullhelm" - armor_list = list(melee = 50, bullet = 50, energy = 30, bomb = 10, bio = 100, rad = 0) + armor_list = list(melee = 12, bullet = 12, energy = 7, bomb = 10, bio = 100, rad = 0) /obj/item/clothing/head/helmet/warrant_officer/update_icon() if(on) @@ -543,7 +543,7 @@ action_button_name = "Toggle Helmet Light" light_overlay = "helmet_light" brightness_on = 4 - armor_list = list(melee = 30, bullet = 20, energy = 20, bomb = 25, bio = 100, rad = 80) + armor_list = list(melee =7, bullet = 5, energy = 5, bomb = 25, bio = 100, rad = 80) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS obscuration = LIGHT_OBSCURATION @@ -580,7 +580,7 @@ action_button_name = "Toggle Helmet Light" light_overlay = "helmet_light" brightness_on = 4 - armor_list = list(melee = 30, bullet = 20, energy = 20, bomb = 25, bio = 100, rad = 80) + armor_list = list(melee =7, bullet = 5, energy = 5, bomb = 25, bio = 100, rad = 80) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS obscuration = LIGHT_OBSCURATION @@ -620,7 +620,7 @@ action_button_name = "Toggle Helmet Light" light_overlay = "helmet_light" brightness_on = 4 - armor_list = list(melee = 30, bullet = 20, energy = 20, bomb = 25, bio = 100, rad = 80) + armor_list = list(melee =7, bullet = 5, energy = 5, bomb = 25, bio = 100, rad = 80) body_parts_covered = HEAD|EARS obscuration = LIGHT_OBSCURATION @@ -777,7 +777,7 @@ action_button_name = "Toggle Helmet Light" light_overlay = "helmet_light" brightness_on = 4 - armor_list = list(melee = 30, bullet = 30, energy = 30, bomb = 50, bio = 100, rad = 100) + armor_list = list(melee =7, bullet = 7, energy = 7, bomb = 50, bio = 100, rad = 100) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS matter = list(MATERIAL_PLASTEEL = 5, MATERIAL_PLASTIC = 2, MATERIAL_GLASS = 3, MATERIAL_GOLD = 2) @@ -812,7 +812,7 @@ action_button_name = "Toggle Helmet Light" light_overlay = "helmet_light" brightness_on = 4 - armor_list = list(melee = 30, bullet = 30, energy = 30, bomb = 50, bio = 100, rad = 100) + armor_list = list(melee =7, bullet = 7, energy = 7, bomb = 50, bio = 100, rad = 100) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS matter = list(MATERIAL_PLASTEEL = 10, MATERIAL_PLASTIC = 4, MATERIAL_GLASS = 5, MATERIAL_GOLD = 5) @@ -855,7 +855,7 @@ action_button_name = "Toggle Helmet Light" light_overlay = "helmet_light" brightness_on = 4 - armor_list = list(melee = 30, bullet = 20, energy = 20, bomb = 25, bio = 100, rad = 80) + armor_list = list(melee =7, bullet = 5, energy = 5, bomb = 25, bio = 100, rad = 80) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS obscuration = LIGHT_OBSCURATION @@ -893,9 +893,9 @@ item_state = "huntmaster_helmet" icon_state = "huntmaster_helmet" armor_list = list( - melee = 60, - bullet = 20, - energy = 15, + melee = 15, + bullet = 5, + energy = 3, bomb = 15, bio = 15, rad = 0 @@ -934,9 +934,9 @@ item_state = "hunter_helmet" icon_state = "hunter_helmet" armor_list = list( - melee = 60, - bullet = 10, - energy = 5, + melee = 15, + bullet = 2, + energy = 1, bomb = 0, bio = 10, rad = 0 @@ -979,7 +979,7 @@ name = "'Mark V' environmental protection helmet" desc = "You feel like this helmet is rare, for some reason." icon_state = "technohelmet" - armor_list = list(melee = 40, bullet = 40, energy = 40, bomb = 60, bio = 100, rad = 100) + armor_list = list(melee = 10, bullet = 10, energy = 10, bomb = 60, bio = 100, rad = 100) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS flash_protection = FLASH_PROTECTION_MODERATE @@ -1018,7 +1018,7 @@ name = "'Mark II' environmental protection helmet" desc = "You feel like this helmet is cheap, for some reason." icon_state = "armor_engineering" - armor_list = list(melee = 15, bullet = 15, energy = 25, bomb = 35, bio = 50, rad = 50) + armor_list = list(melee = 3, bullet = 3, energy = 6, bomb = 35, bio = 50, rad = 50) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS matter = list(MATERIAL_STEEL = 20) @@ -1036,9 +1036,9 @@ matter = list(MATERIAL_PLASTEEL = 12, MATERIAL_PLASTIC = 10, MATERIAL_STEEL = 30, MATERIAL_SILVER = 12) //worth stealing price_tag = 1200 armor_list = list( - melee = 40, - bullet = 30, - energy = 30, + melee = 10, + bullet = 7, + energy = 7, bomb = 65, bio = 100, rad = 0 @@ -1080,7 +1080,7 @@ name = "scavenger helmet" desc = "A sturdy, handcrafted helmet. It's well balanced and sits low on your head, with padding on the inside." icon_state = "scav_helmet" - armor_list = list(melee = 35, bullet = 20, energy = 25, bomb = 25, bio = 0, rad = 0) + armor_list = list(melee =8, bullet = 5, energy = 6, bomb = 25, bio = 0, rad = 0) price_tag = 200 max_upgrades = 1 // Good baseline already @@ -1111,7 +1111,7 @@ name = "scavenger plate helmet" desc = "A heavy helmet equipped with layers of metal and a reinforced glass visor, ideal for protection and headbutts. It even protects your eyes from welding flares!" icon_state = "scav_heavy" - armor_list = list(melee = 40, bullet = 20, energy = 15, bomb = 35, bio = 0, rad = 0) + armor_list = list(melee = 10, bullet = 5, energy = 3, bomb = 35, bio = 0, rad = 0) item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION flash_protection = FLASH_PROTECTION_MODERATE price_tag = 150 @@ -1151,8 +1151,8 @@ icon_state = "helmet_kriosanpenace" flags_inv = BLOCKHAIR armor_list = list( - melee = 15, - bullet = 15, + melee = 3, + bullet = 3, energy = 0, bomb = 10, bio = 0, @@ -1165,9 +1165,9 @@ icon_state = "helmet_frog" flags_inv = BLOCKHAIR armor_list = list( - melee = 20, - bullet = 20, - energy = 5, + melee = 5, + bullet = 5, + energy = 1, bomb = 10, bio = 0, rad = 0 @@ -1208,9 +1208,9 @@ body_parts_covered = HEAD | EARS | FACE flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR armor_list = list( - melee = 25, - bullet = 60, - energy = 25, + melee = 6, + bullet = 15, + energy = 6, bomb = 10, bio = 0, rad = 0 @@ -1224,7 +1224,7 @@ This one bears the IFF stripes of the Blackshield." flags_inv = HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS - armor_list = list(melee = 25, bullet = 60, energy = 25, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 15, energy = 6, bomb = 10, bio = 0, rad = 0) action_button_name = "Toggle Headlamp" brightness_on = 4 light_overlay = "bs_bulletproof" @@ -1234,7 +1234,7 @@ name = "ablative helmet" desc = "A helmet that excels in protecting the wearer against energy projectiles." icon_state = "ablative" - armor_list = list(melee = 30, bullet = 30, energy = 75, bomb = 50, bio = 10, rad = 0) + armor_list = list(melee =7, bullet = 7, energy = 18, bomb = 50, bio = 10, rad = 0) flags_inv = HIDEEARS|HIDEEYES body_parts_covered = HEAD|EYES|EARS cold_protection = HEAD @@ -1254,7 +1254,7 @@ local forces so often outfitted with it." flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS - armor_list = list(melee = 25, bullet = 25, energy = 60, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 6, energy = 15, bomb = 10, bio = 0, rad = 0) action_button_name = "Toggle Headlamp" brightness_on = 4 light_overlay = "bs_ablative" @@ -1263,7 +1263,7 @@ name = "outdated ablative helmet" desc = "A \"Iron Lock Security\" helmet that excels in protecting the wearer against energy projectiles this even after all these years still is the base of ablative helmet design. Produced by Greyson Positronic" icon_state = "ablative" - armor_list = list(melee = 20, bullet = 20, energy = 70, bomb = 50, bio = 10, rad = 0) + armor_list = list(melee = 5, bullet = 5, energy = 17, bomb = 50, bio = 10, rad = 0) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD matter = list(MATERIAL_STEEL = 5, MATERIAL_PLASTIC = 10, MATERIAL_PLATINUM = 2) //cheaper @@ -1292,9 +1292,9 @@ flags_inv = HIDEEARS|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS armor_list = list( - melee = 60, - bullet = 25, - energy = 25, + melee = 15, + bullet = 6, + energy = 6, bomb = 25, bio = 0, rad = 0 @@ -1545,8 +1545,8 @@ name = "riot helmet" desc = "It's a outdated helmet specifically designed to protect against close range attacks." icon_state = "riot" - armor_up = list(melee = 35, bullet = 25, energy = 25, bomb = 20, bio = 0, rad = 0) - armor_list = list(melee = 40, bullet = 40, energy = 30, bomb = 35, bio = 0, rad = 0) + armor_up = list(melee =8, bullet = 6, energy = 6, bomb = 20, bio = 0, rad = 0) + armor_list = list(melee = 10, bullet = 10, energy = 7, bomb = 35, bio = 0, rad = 0) item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION price_tag = 150 @@ -1660,7 +1660,7 @@ desc = "A titanium helmet of serbian origin. Still widely used despite being discontinued." icon_state = "altyn" armor_up = list(melee = 20, bullet = 15, energy = 0, bomb = 15, bio = 0, rad = 0) - armor_list = list(melee = 40, bullet = 45, energy = 10, bomb = 35, bio = 0, rad = 0) + armor_list = list(melee = 10, bullet = 11, energy = 2, bomb = 35, bio = 0, rad = 0) siemens_coefficient = 1 up = TRUE @@ -1704,7 +1704,7 @@ name = "maska helmet" desc = "\"I do not know who I am, I don\'t know why I\'m here. All I know is that I must kill.\"" icon_state = "maska" - armor_list = list(melee = 55, bullet = 55, energy = 0, bomb = 45, bio = 0, rad = 0) // best what you can get, unless you face lasers + armor_list = list(melee = 13, bullet = 13, energy = 0, bomb = 45, bio = 0, rad = 0) // best what you can get, unless you face lasers /obj/item/clothing/head/helmet/faceshield/altyn/mardinat_yunan desc = "\"Human rights are not only violated by terrorism, repression or assassination, but also by unfair economic structures that create huge inequalities.\" An Altyn-pattern helmet commonly found throughout the frontier. This example has been painted up in the national colours of Mardinat-Yunan and comes with a copy of the tenets of a galaxy's economic manifesto held against the helmet by a strap." @@ -1794,8 +1794,8 @@ MATERIAL_PLASTIC = 5, MATERIAL_PLATINUM = 2 ) - armor_up = list(melee = 5, bullet = 20, energy = 10, bomb = 10, bio = 100, rad = 50) - armor_list = list(melee = 25, bullet = 25, energy = 25, bomb = 20, bio = 100, rad = 50) + armor_up = list(melee = 1, bullet = 5, energy = 2, bomb = 10, bio = 100, rad = 50) + armor_list = list(melee = 6, bullet = 6, energy = 6, bomb = 20, bio = 100, rad = 50) up = TRUE var/speaker_enabled = TRUE var/scan_scheduled = FALSE diff --git a/code/modules/clothing/head/hood.dm b/code/modules/clothing/head/hood.dm index 6ab1e62d6ea..8b94fa4ec9f 100644 --- a/code/modules/clothing/head/hood.dm +++ b/code/modules/clothing/head/hood.dm @@ -20,7 +20,7 @@ /obj/item/clothing/head/hood/winter/security name = "security winter hood" - armor_list = list(melee = 25, bullet = 20, energy = 15, bomb = 20, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 20, energy = 3, bomb = 20, bio = 0, rad = 0) /obj/item/clothing/head/hood/winter/medical name = "medical winter hood" @@ -55,7 +55,7 @@ flags = THICKMATERIAL min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 - armor_list = list(melee = 20, bullet = 20, energy = 20, bomb = 35, bio = 75, rad = 35) + armor_list = list(melee = 5, bullet = 5, energy = 5, bomb = 35, bio = 75, rad = 35) // Costumes /obj/item/clothing/head/hood/carp_hood diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index cbd1854940f..2e0856bbb5d 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -524,13 +524,13 @@ obj/item/clothing/head/beret/syndicate/verb/toggle_style() /obj/item/clothing/head/rank/solfedmed name = "Solarian beret" desc = "an old grey-green beret bearing the markings of the Solar Federations fleet, you can almost make out a caduceus against a near worn-off badge." - armor_list = list(melee = 10, bullet = 0, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 0, energy = 2, bomb = 0, bio = 0, rad = 0) icon_state = "beret-grey" item_state = "beret-grey" /obj/item/clothing/head/rank/solfedrecon name = "green utility cover" desc = "A green camo cover, fit for a soldier. This one appears particularly worn down and bears an illegible patch of what seemed to be the Solar Federations armed forces." - armor_list = list(melee = 10, bullet = 0, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 0, energy = 2, bomb = 0, bio = 0, rad = 0) icon_state = "greenutility" item_state = "greenutility" diff --git a/code/modules/clothing/head/mindreader.dm b/code/modules/clothing/head/mindreader.dm index 67155121fbb..b75edaec675 100644 --- a/code/modules/clothing/head/mindreader.dm +++ b/code/modules/clothing/head/mindreader.dm @@ -9,9 +9,9 @@ var/last_use = 0 w_class = ITEM_SIZE_NORMAL armor = list( - melee = 10, - bullet = 10, - energy = 10, + melee = 2, + bullet = 2, + energy = 2, bomb = 0, bio = 0, rad = 0 @@ -48,4 +48,4 @@ output += "[A.print_objectives(FALSE)]" new /obj/item/paper(drop_location(), output, "[H.real_name]'s Memory") - H.visible_message(SPAN_NOTICE("[src] printed a paper with writed [H] memory.")) \ No newline at end of file + H.visible_message(SPAN_NOTICE("[src] printed a paper with writed [H] memory.")) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index ae80673edb5..c7185596a5d 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -320,9 +320,9 @@ obj/item/clothing/head/ribbon/red icon_state = "field_numerical_hat" desc = "A tall hat for followers of the faith. Can be turned inside out to turn from red to purple or vice versa" armor_list = list( //same as the garb - melee = 10, + melee = 2, bullet = 0, - energy = 10, + energy = 2, bomb = 5, bio = 100, rad = 0 @@ -384,7 +384,7 @@ obj/item/clothing/head/ribbon/red name = "jingasa" desc = "A sturdy metal cap designed to protect the head from weather and falling objects." icon_state = "jingasa" - armor_list = list(melee = 5, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 1, bullet = 1, energy = 1, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/head/headband name = "headband" @@ -456,7 +456,7 @@ obj/item/clothing/head/sunhat/verb/toggle_style() name = "kin voidhelm" desc = "An old, battered voidhelmet. Its original source unknown and its seals long since worn out - still, it makes for a decent helmet, if nothing else is available." icon_state = "kin_voidhelm" - armor_list = list(melee = 15, bullet = 15, energy = 15, bomb = 0, bio = 0, rad = 0) //if the absolute greatcoat can have these stats, so can this. + armor_list = list(melee = 3, bullet = 3, energy = 3, bomb = 0, bio = 0, rad = 0) //if the absolute greatcoat can have these stats, so can this. item_flags = THICKMATERIAL flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR body_parts_covered = HEAD|FACE|EARS @@ -495,9 +495,9 @@ obj/item/clothing/head/sunhat/verb/toggle_style() siemens_coefficient = 1 price_tag = 600 armor_list = list( - melee = 20, - bullet = 15, - energy = 10, + melee = 5, + bullet = 3, + energy = 2, bomb = 0, bio = 20, rad = 25 @@ -509,7 +509,7 @@ obj/item/clothing/head/sunhat/verb/toggle_style() icon_state = "os_cap" item_state = "os_cap" armor_list = list( - melee = 5, + melee = 1, bullet = 0, energy = 0, bomb = 0, @@ -525,7 +525,7 @@ obj/item/clothing/head/sunhat/verb/toggle_style() armor_list = list( melee = 0, bullet = 0, - energy = 5, + energy = 1, bomb = 0, bio = 5, rad = 5 @@ -560,7 +560,7 @@ obj/item/clothing/head/sunhat/verb/toggle_style() icon_state = "ragged_hood" item_state = "ragged_hood" flags_inv = HIDEEARS|BLOCKHAIR - armor_list = list(melee = 5, bullet = 0, energy = 10, bomb = 0, bio = 5, rad = 5) + armor_list = list(melee = 1, bullet = 0, energy = 2, bomb = 0, bio = 5, rad = 5) // hoods for the tacticool ponchos. diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index fc4cb2abeed..16e2399cf13 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -12,9 +12,9 @@ matter = list(MATERIAL_STEEL = 4, MATERIAL_GLASS = 2) var/up = 0 armor_list = list( - melee = 20, - bullet = 5, - energy = 10, + melee = 5, + bullet = 1, + energy = 2, bomb = 5, bio = 0, rad = 0 @@ -178,4 +178,4 @@ is none other than the Matriarch of the Hunting Lodge." icon_state = "matriarch_cape" item_state = "matriarch_cape" - armor_list = list(melee = 45, bullet = 25, energy = 25, bomb = 25, bio = 20, rad = 15) + armor_list = list(melee = 11, bullet = 6, energy = 6, bomb = 25, bio = 20, rad = 15) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 677859ebf1d..7f5c407204d 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -338,7 +338,7 @@ desc = "A newly advanced gas synthesizer is used commonly by opifex to filter oxygen from their lungs, being able to feed and eat any moment they wish with their beak exposed. They'll slowly die without wearing this, as will any other race that uses this device." icon_state = "gas_mask_free_beak" item_state = "gas_mask_free_beak" - armor_list = list(melee = 2, bullet = 2, energy = 7, bomb = 5, bio = 0, rad = 15) + armor_list = list(melee = 0, bullet = 0, energy = 1, bomb = 5, bio = 0, rad = 15) var/list/filtered_gases = list("plasma", "sleeping_agent", "oxygen") var/gas_filter_strength = 1 //For gas mask filters item_flags = AIRTIGHT @@ -391,4 +391,4 @@ /obj/item/clothing/mask/gas/bigguy/sleekpurpleguy name = "sleek purple rebreather" desc = "A small, Soteria-brand rebreather designed to regulate the flux of gasses fed to its user. This one is purple and has a Soteria Research marking." - icon_state = "srebreath_purple" \ No newline at end of file + icon_state = "srebreath_purple" diff --git a/code/modules/clothing/shoes/jobs.dm b/code/modules/clothing/shoes/jobs.dm index 649a081beb7..89c5a1eb84d 100644 --- a/code/modules/clothing/shoes/jobs.dm +++ b/code/modules/clothing/shoes/jobs.dm @@ -14,7 +14,7 @@ icon_state = "jackboots" item_state = "jackboots" force = WEAPON_FORCE_HARMLESS - armor_list = list(melee = 15, bullet = 0, energy = 10, bomb = 0, bio = 25, rad = 0) + armor_list = list(melee = 3, bullet = 0, energy = 2, bomb = 0, bio = 25, rad = 0) siemens_coefficient = 0.6 can_hold_knife = TRUE @@ -27,7 +27,7 @@ name = "duty jackboots" desc = "A pair of standard-issue police steel-toed boots. For when you really need to remind the criminals what the law is." icon_state = "duty" - armor_list = list(melee = 15, bullet = 10, energy = 10, bomb = 0, bio = 25, rad = 0) + armor_list = list(melee = 3, bullet = 2, energy = 2, bomb = 0, bio = 25, rad = 0) siemens_coefficient = 0.8 can_hold_knife = TRUE @@ -69,7 +69,7 @@ desc = "A pair of metallic boots designed for industrial environments." icon_state = "reinforced" item_state = "reinforced" - armor_list = list(melee = 15, bullet = 0, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 3, bullet = 0, energy = 2, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.5 /obj/item/clothing/shoes/reinforced/medical @@ -83,7 +83,7 @@ desc = "A pair of steel-toed utility workboots." icon_state = "workboots" item_state = "workboots" - armor_list = list(melee = 10, bullet = 0, energy = 10, bomb = 0, bio = 0, rad = 0) //Worse than jackboots and reinforced boots due to granting shock immunity to legs + armor_list = list(melee = 2, bullet = 0, energy = 2, bomb = 0, bio = 0, rad = 0) //Worse than jackboots and reinforced boots due to granting shock immunity to legs siemens_coefficient = 0 can_hold_knife = 1 @@ -133,7 +133,7 @@ icon_state = "hunterboots" item_state = "hunterboots" force = WEAPON_FORCE_HARMLESS - armor_list = list(melee = 20, bullet = 5, energy = 10, bomb = 5, bio = 25, rad = 5) + armor_list = list(melee = 5, bullet = 1, energy = 2, bomb = 5, bio = 25, rad = 5) siemens_coefficient = 0.6 price_tag = 200 can_hold_knife = 1 diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 90414b37102..edb5ce2da3b 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -10,9 +10,9 @@ var/icon_base = "magboots" action_button_name = "Toggle Magboots" armor_list = list( - melee = 20, - bullet = 10, - energy = 20, + melee = 5, + bullet = 2, + energy = 5, bomb = 25, bio = 100, rad = 90 diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 73316cde799..bb9f425170f 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -18,7 +18,7 @@ /obj/item/clothing/shoes/ablasive name = "ablative jackboots" desc = "A thick pair of boots that excels in protecting the wearer against energy projectiles." - armor_list = list(melee = 10, bullet = 10, energy = 70, bomb = 30, bio = 10, rad = 0) + armor_list = list(melee = 2, bullet = 2, energy = 3, bomb = 30, bio = 10, rad = 0) icon_state = "swat" force = WEAPON_FORCE_WEAK siemens_coefficient = 0.6 @@ -34,7 +34,7 @@ desc = "When you want to turn up the heat." icon_state = "swat" force = WEAPON_FORCE_WEAK - armor_list = list(melee = 20, bullet = 10, energy = 25, bomb = 10, bio = 10, rad = 0) + armor_list = list(melee = 5, bullet = 2, energy = 6, bomb = 10, bio = 10, rad = 0) item_flags = NOSLIP siemens_coefficient = 0.6 @@ -43,7 +43,7 @@ desc = "When you REALLY want to turn up the heat." icon_state = "swat" force = WEAPON_FORCE_WEAK - armor_list = list(melee = 20, bullet = 10, energy = 25, bomb = 10, bio = 10, rad = 0) + armor_list = list(melee = 5, bullet = 2, energy = 6, bomb = 10, bio = 10, rad = 0) item_flags = NOSLIP siemens_coefficient = 0.4 can_hold_knife = 1 @@ -159,7 +159,7 @@ name = "lizardskin shoes" desc = "A green pair of shoes made of lizardskin, likely a young render..." icon_state = "lizardskin_shoes" - armor_list = list(melee = 20, bullet = 15, energy = 10, bomb = 10, bio = 10, rad = 0) + armor_list = list(melee = 5, bullet = 3, energy = 2, bomb = 10, bio = 10, rad = 0) /obj/item/clothing/shoes/church_blacksilk_boots name = "blacksilk boots" @@ -383,7 +383,7 @@ desc = "A pair of reinforced winter boots with a security design." icon_state = "winterboots_sec" can_hold_knife = TRUE - armor_list = list(melee = 10, bullet = 0, energy = 15, bomb = 20, bio = 0, rad = 0) //Laser? + armor_list = list(melee = 2, bullet = 0, energy = 3, bomb = 20, bio = 0, rad = 0) //Laser? /obj/item/clothing/shoes/winter/science name = "science winter boots" @@ -438,4 +438,4 @@ desc = "A pair of rugged boots designed for hazardous environment exploration." icon_state = "explorer" can_hold_knife = TRUE - armor_list = list(melee = 10, bullet = 0, energy = 15, bomb = 20, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 0, energy = 3, bomb = 20, bio = 0, rad = 0) diff --git a/code/modules/clothing/spacesuits/bomb.dm b/code/modules/clothing/spacesuits/bomb.dm index f27dec0cbcc..a383a9ef9a2 100644 --- a/code/modules/clothing/spacesuits/bomb.dm +++ b/code/modules/clothing/spacesuits/bomb.dm @@ -6,9 +6,9 @@ desc = "A protective helmet designed for safety when handling explosives, biological problems, and radiation." icon_state = "bombsuit" armor_list = list( - melee = 20, - bullet = 20, - energy = 30, + melee = 5, + bullet = 5, + energy = 7, bomb = 100, bio = 100, rad = 90 @@ -28,9 +28,9 @@ permeability_coefficient = 0.01 slowdown = 1 armor_list = list( - melee = 20, - bullet = 20, - energy = 30, + melee = 5, + bullet = 5, + energy = 7, bomb = 100, bio = 100, rad = 90 @@ -49,9 +49,9 @@ equip_delay = 16 SECONDS slowdown = 1.25 //so with full suit is 3.5 or 4.5 armor_list = list( - melee = 60, - bullet = 60, - energy = 60, + melee = 15, + bullet = 15, + energy = 15, bomb = 100, bio = 100, rad = 90 @@ -64,9 +64,9 @@ slowdown = 2.25 equip_delay = 16 SECONDS armor_list = list( - melee = 60, - bullet = 60, - energy = 60, + melee = 15, + bullet = 15, + energy = 15, bomb = 100, bio = 100, rad = 90 diff --git a/code/modules/clothing/spacesuits/captain.dm b/code/modules/clothing/spacesuits/captain.dm index a69e82f9352..1476871d350 100644 --- a/code/modules/clothing/spacesuits/captain.dm +++ b/code/modules/clothing/spacesuits/captain.dm @@ -5,9 +5,9 @@ item_state = "capspace" desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of figureheads." armor_list = list( - melee = 40, - bullet = 30, - energy = 40, + melee = 10, + bullet = 7, + energy = 10, bomb = 50, bio = 100, rad = 50 @@ -20,9 +20,9 @@ icon_state = "caparmor" item_state = "capspacesuit" armor_list = list( - melee = 40, - bullet = 30, - energy = 50, + melee = 10, + bullet = 7, + energy = 12, bomb = 50, bio = 100, rad = 50 @@ -37,9 +37,9 @@ item_state = "skrell_helmet_white" desc = "A well padded helmet, fitted with a heads up display on its visor, keeping its occupant well aware of the surroundings with a small built in light." armor_list = list( - melee = 40, - bullet = 30, - energy = 40, + melee = 10, + bullet = 7, + energy = 10, bomb = 50, bio = 100, rad = 50 @@ -53,9 +53,9 @@ icon_state = "skrell_suit_white" item_state = "skrell_suit_white" armor_list = list( - melee = 40, - bullet = 30, - energy = 50, + melee = 10, + bullet = 7, + energy = 12, bomb = 50, bio = 100, rad = 50 diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 1b0b44ebd26..433118b37ca 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -7,7 +7,7 @@ slot_l_hand_str = "syndicate-helm-black-red", slot_r_hand_str = "syndicate-helm-black-red", ) - armor_list = list(melee = 65, bullet = 55, energy = 45, bomb = 30, bio = 100, rad = 60) + armor_list = list(melee = 16, bullet = 13, energy = 11, bomb = 30, bio = 100, rad = 60) item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL flags_inv = BLOCKHAIR siemens_coefficient = 0.6 diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index ec8e5a6db3d..7f6ad0668eb 100755 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -21,12 +21,13 @@ req_access = null w_class = ITEM_SIZE_BULKY item_flags = DRAG_AND_DROP_UNEQUIP|EQUIP_SOUNDS + price_tag = 600 // These values are passed on to all component pieces. armor = list( - melee = 30, - bullet = 20, - energy = 20, + melee = 7, + bullet = 5, + energy = 5, bomb = 25, bio = 100, rad = 50 @@ -39,6 +40,9 @@ slowdown = 0 stiffness = LIGHT_STIFFNESS obscuration = LIGHT_OBSCURATION + var/ablative_armor = 0 + var/ablative_max = 0 + var/ablation = ABLATION_STANDARD tool_qualities = list(QUALITY_ARMOR = 100) max_upgrades = 1 blacklist_upgrades = list( @@ -154,6 +158,20 @@ to_chat(usr, "The maintenance panel is [open ? "open" : "closed"].") to_chat(usr, "Hardsuit systems are [offline ? "offline" : "online"].") + if(ablative_max) // If ablative armor is replaced with a module system, this should be called as a proc on the module + var/ablative_ratio = ablative_armor / ablative_max + switch(ablative_ratio) + if(1) // First we get this over with + to_chat(usr, "The armor system reports pristine condition.") + if(-INFINITY to 0.1) + to_chat(usr, "The armor system reports system error. Repairs mandatory.") + if(0.1 to 0.5) + to_chat(usr, "The armor system reports critical failure! Repairs mandatory.") + if(0.5 to 0.8) + to_chat(usr, "The armor system reports heavy damage. Repairs required.") + if(0.8 to 1) + to_chat(usr, "The armor system reports insignificant damage. Repairs advised.") + /obj/item/rig/Initialize() . = ..() @@ -219,6 +237,7 @@ piece.unacidable = unacidable if(armor) piece.armor = armor + ablative_armor = ablative_max update_icon(1) /obj/item/rig/proc/updateArmor() @@ -746,6 +765,30 @@ return TRUE return FALSE +/obj/item/rig/block_bullet(mob/user, var/obj/item/projectile/P, def_zone) + if(!active || !ablative_armor) + return FALSE + + var/ablative_stack = ablative_armor // Follow-up attacks drain this + + for(var/damage_type in P.damage_types) + if(damage_type in list(BRUTE, BURN)) // Ablative armor affects both brute and burn damage + var/damage = P.damage_types[damage_type] + P.damage_types[damage_type] -= ablative_stack / armor_divisor + + ablative_stack = max(ablative_stack - damage, 0) + else if(damage_type == HALLOSS) + P.damage_types[damage_type] -= ablative_stack / armor_divisor + + if(P.damage_types[damage_type] <= 0) + P.damage_types -= damage_type + + ablative_armor -= max(-(ablative_stack - ablative_armor) / ablation - armor.getRating(P.check_armour), 0) // Damage blocked (not halloss) reduces ablative armor, base armor protects ablative armor + + if(!P.damage_types.len) + return TRUE + return FALSE + /obj/item/rig/proc/take_hit(damage, source, is_emp=0) if(!installed_modules.len) diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index a40f1e1c9da..d928feb60e7 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -142,16 +142,23 @@ if(QUALITY_WELDING) //Cutting through the cover lock. This allows access to the wires inside so you can disable access requirements //Ridiculously difficult to do, hijacking a rig will take a long time if you don't have good mechanical training - if(locked == 1) + if(locked == 1 && user.a_intent == I_HURT) to_chat(user, SPAN_NOTICE("You start cutting through the access panel's cover lock. This is a delicate task.")) if(I.use_tool(user, src, WORKTIME_EXTREMELY_LONG, tool_type, FAILCHANCE_VERY_HARD, required_stat = STAT_MEC)) locked = -1 //Broken, it can never be locked again to_chat(user, SPAN_NOTICE("Success! The tension in the panel loosens with a dull click")) playsound(src.loc, 'sound/weapons/guns/interact/pistol_magin.ogg', 75, 1) return - else + else if (user.a_intent == I_HURT) to_chat(user, "\The [src] access panel is not locked, there's no need to cut it.") //No return here, incase they're trying to repair + if (ablative_max <= ablative_armor) + to_chat(user, SPAN_WARNING("There is no damage on \the [src]'s armor layers to repair.")) + + else if(I.use_tool(user, src, WORKTIME_LONG, QUALITY_WELDING, FAILCHANCE_HARD, required_stat = STAT_MEC, instant_finish_tier = INFINITY)) // no instant repairs + ablative_armor = min(ablative_armor + 2, ablative_max) + to_chat(user, SPAN_NOTICE("You repair the damage on the [src]'s armor layers.")) + return if(ABORT_CHECK) return diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm index 586c17609f7..0478f5949c5 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm @@ -56,23 +56,6 @@ max_upgrades = 0 //RIG modules are upgraded, not the rig pieces matter = list(MATERIAL_STEEL = 1) -/obj/item/clothing/suit/space/rig/handle_shield(mob/user, damage, atom/damage_source = null, mob/attacker = null, def_zone = null, attack_text = "the attack") - if(istype(damage_source, /obj/item/projectile/bullet)) - var/obj/item/projectile/bullet/B = damage_source - - var/chance = max(round(armor.getRating(ARMOR_BULLET) - B.armor_penetration), 0) - if(!(def_zone in list(BP_CHEST, BP_GROIN))) - chance *= 1.5 - if(B.starting && prob(chance)) - visible_message(SPAN_DANGER("\The [attack_text] ricochets off [user]\'s [name]!")) - var/multiplier = round(10 / get_dist(B.starting, user)) - var/turf/sourceloc = get_turf_away_from_target_complex(user, B.starting, multiplier) - var/distance = get_dist(sourceloc, user) - var/new_x = sourceloc.x + ( rand(0, distance) * prob(50) ? -1 : 1 ) - var/new_y = sourceloc.y + ( rand(0, distance) * prob(50) ? -1 : 1 ) - B.redirect(new_x, new_y, get_turf(user), user) - return PROJECTILE_CONTINUE // complete projectile permutation - //TODO: move this to modules /obj/item/clothing/head/helmet/space/rig/proc/prevent_track() return FALSE diff --git a/code/modules/clothing/spacesuits/rig/suits/ameridian_knight.dm b/code/modules/clothing/spacesuits/rig/suits/ameridian_knight.dm index e257d03f754..a3714653785 100644 --- a/code/modules/clothing/spacesuits/rig/suits/ameridian_knight.dm +++ b/code/modules/clothing/spacesuits/rig/suits/ameridian_knight.dm @@ -4,7 +4,7 @@ suit_type = "ameridian knight" desc = "An armored, knight-like suit designed by Soteria's best roboticists and powered by an ameridian core." icon_state = "ameridian_knight_rig" - armor_list = list(melee = 80, bullet = 80, energy = 80, bomb = 70, bio = 100, rad = 100) + armor_list = list(melee = 20, bullet = 20, energy = 20, bomb = 70, bio = 100, rad = 100) slowdown = 0 // Lot of stuff used in its construction that justify not having any slowdown while active offline_slowdown = 5 // Very heavy and the suit isn't helping while offline offline_vision_restriction = 2 diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm index 902f51538cf..59436ef023b 100644 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm @@ -7,17 +7,21 @@ icon_state = "security_rig" suit_type = "combat hardsuit" armor_list = list( - melee = 50, - bullet = 45, - energy = 30, + melee = 12, + bullet = 11, + energy = 7, bomb = 50, bio = 100, rad = 100 ) + price_tag = 1500 slowdown = 0.3 drain = 4 offline_slowdown = 3 offline_vision_restriction = 1 + ablative_armor = 8 + ablative_max = 8 + ablation = ABLATION_RESILIENT stiffness = 0 obscuration = 0 max_upgrades = 1 @@ -62,9 +66,9 @@ icon_state = "blackshield_rig" suit_type = "blackshield hardsuit" armor_list = list( - melee = 60, - bullet = 55, - energy = 40, + melee = 15, + bullet = 13, + energy = 10, bomb = 50, bio = 100, rad = 100 @@ -106,9 +110,9 @@ icon_state = "hussar_rig" //Rig modula by Gundam Tanaka#9565 suit_type = "hussar hardsuit" armor_list = list( - melee = 50, - bullet = 45, - energy = 30, + melee = 12, + bullet = 11, + energy = 7, bomb = 50, bio = 100, rad = 100 @@ -118,6 +122,8 @@ offline_slowdown = 3 offline_vision_restriction = 1 max_upgrades = 1 + ablative_max = 5 + ablation = ABLATION_CERAMIC //lots of gold and filigree chest_type = /obj/item/clothing/suit/space/rig/combat/knight helm_type = /obj/item/clothing/head/helmet/space/rig/combat/knight boot_type = /obj/item/clothing/shoes/magboots/rig/combat/knight @@ -141,9 +147,9 @@ desc = "One's spirit is generally the greatest shield." light_overlay = "helmet_light_dual" armor_list = list( - melee = 50, - bullet = 40, - energy = 30, + melee = 12, + bullet = 10, + energy = 7, bomb = 50, bio = 100, rad = 100 @@ -157,13 +163,16 @@ suit_type = "tactical armored hardsuit" req_access = list(access_hos) armor_list = list( - melee = 50, - bullet = 65, - energy = 65, + melee = 12, + bullet = 16, + energy = 16, bomb = 50, bio = 100, rad = 100 ) + ablative_armor = 12 + ablative_max = 12 + ablation = ABLATION_EVERLASTING slowdown = 0.4 //Heavy ass armor. This isn't for rapid deployment. It is for slapping the shit out of a threat to the colony that has been foolish enough to stay in one place. drain = 12 offline_slowdown = 3 @@ -202,13 +211,16 @@ icon_state = "ert_rig" suit_type = "blackshield tactical hardsuit" armor_list = list( - melee = 60, - bullet = 55, - energy = 40, + melee = 15, + bullet = 13, + energy = 10, bomb = 50, bio = 100, rad = 100 ) + ablative_armor = 8 + ablative_max = 8 + ablation = ABLATION_RESILIENT slowdown = 0.5 //Heavy ass armor. This isn't for rapid deployment. It is for slapping the shit out of a threat to the colony that has been foolish enough to stay in one place. drain = 25 offline_slowdown = 3 @@ -237,9 +249,9 @@ suit_type = "marshal tactical" req_access = list(access_hos) armor_list = list( - melee = 50, - bullet = 45, - energy = 30, + melee = 12, + bullet = 11, + energy = 7, bomb = 50, bio = 100, rad = 100 @@ -248,6 +260,9 @@ drain = 4 offline_slowdown = 3 offline_vision_restriction = 1 + ablative_armor = 8 + ablative_max = 8 + ablation = ABLATION_RESILIENT stiffness = 0 obscuration = 0 max_upgrades = 1 @@ -273,9 +288,9 @@ icon_state = "military_rig" suit_type = "Pathfinder hardsuit advanced armored" armor_list = list( - melee = 60, - bullet = 70, - energy = 70, + melee = 15, + bullet = 17, + energy = 17, bomb = 60, bio = 100, rad = 100 @@ -284,6 +299,9 @@ drain = 2 offline_slowdown = 4 // aalso fucking heavy. offline_vision_restriction = 1 + ablative_armor = 15 + ablative_max = 15 + ablation = ABLATION_EVERLASTING stiffness = 0 obscuration = 0 max_upgrades = 0 diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index 860ec3b5ad4..4f80495feb7 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -5,9 +5,9 @@ icon_state = "ninja_rig" suit_type = "light suit" armor_list = list( - melee = 25, - bullet = 20, - energy = 20, + melee = 6, + bullet = 5, + energy = 5, bomb = 25, bio = 100, rad = 100 @@ -44,13 +44,15 @@ icon_state = "hacker_rig" suit_type = "SI 'Spacer" armor_list = list( - melee = 10, - bullet = 5, + melee = 2, + bullet = 1, energy = 0, bomb = 25, bio = 100, rad = 45 ) + ablative_max = 12 + ablation = ABLATION_SOFT airtight = 0 seal_delay = 5 slowdown = -0.2 //We speed up the user at cost of horrable armor @@ -78,9 +80,9 @@ desc = "A Soteria Institute modification of the traditional light rig built for equal parts utility and defense." suit_type = "SI 'retainer" armor_list = list( - melee = 30, - bullet = 25, - energy = 30, + melee =7, + bullet = 6, + energy = 7, bomb = 30, bio = 100, rad = 80 @@ -109,9 +111,9 @@ desc = "An advanced powered armour suit with many cyberwarfare enhancements. Comes with built-in insulated gloves for safely tampering with electronics." icon_state = "hacker_rig" armor_list = list( - melee = 25, - bullet = 20, - energy = 20, + melee = 6, + bullet = 5, + energy = 5, bomb = 25, bio = 100, rad = 80 @@ -165,8 +167,8 @@ desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for assassins." icon_state = "ninja_rig" armor_list = list( - melee = 30, - bullet = 30, + melee = 7, + bullet = 7, energy = 20, bomb = 25, bio = 100, @@ -175,6 +177,7 @@ seal_delay = 15 emp_protection = 40 //change this to 30 if too high. slowdown = 0 + price_tag = 1000 //rare but ultimately not much to write home about other than its modules. chest_type = /obj/item/clothing/suit/space/rig/light/ninja glove_type = /obj/item/clothing/gloves/rig/light/ninja diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm index c0775969d8a..43d7f892565 100644 --- a/code/modules/clothing/spacesuits/rig/suits/merc.dm +++ b/code/modules/clothing/spacesuits/rig/suits/merc.dm @@ -5,23 +5,26 @@ /obj/item/rig/merc name = "crimson hardsuit control module" - desc = "A blood-red hardsuit featuring some fairly advanced technology." + desc = "A blood-red hardsuit featuring some fairly advanced technology. Advanced armor plating can last through extended firefights." icon_state = "merc_rig" suit_type = "crimson hardsuit" armor_list = list( - melee = 40, - bullet = 40, - energy = 30, + melee = 10, + bullet = 10, + energy = 7, bomb = 75, bio = 100, rad = 50 ) + ablative_max = 12 + ablation = ABLATION_DURABLE slowdown = 0.3 drain = 3.5 offline_slowdown = 3 offline_vision_restriction = 1 stiffness = 0 obscuration = 0 + price_tag = 2000 helm_type = /obj/item/clothing/head/helmet/space/rig/merc @@ -43,4 +46,4 @@ initial_modules = list( /obj/item/rig_module/ai_container, /obj/item/rig_module/electrowarfare_suite, //might as well - ) \ No newline at end of file + ) diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index 90a354a7667..83f1fa9ed3b 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -32,16 +32,18 @@ /obj/item/rig/industrial name = "industrial suit control module" suit_type = "industrial hardsuit" //Credit for sprites go to Près de l'oiseau over at Eris - desc = "A heavy, powerful rig used by construction crews and mining corporations." + desc = "A heavy, powerful rig used by construction crews and mining corporations. The soft plating can protect the wearer from unexpected hazards, but is not reliable in prolonged combat." icon_state = "engineering_rig" armor_list = list( - melee = 40, - bullet = 30, - energy = 10, + melee = 10, + bullet = 7, + energy = 2, bomb = 25, bio = 100, rad = 100 ) + ablative_max = 8 + ablation = ABLATION_SOFT slowdown = 0.3 drain = 3 offline_slowdown = 10 @@ -81,9 +83,9 @@ desc = "A light RIG for performing minute repairs and maintenance on low-pressure environments." icon_state = "eva_rig" armor_list = list( - melee = 20, - bullet = 10, - energy = 10, + melee = 5, + bullet = 2, + energy = 2, bomb = 10, bio = 100, rad = 100 @@ -125,13 +127,15 @@ Advanced Voidsuit: Guild Master desc = "An advanced hardsuit that protects against hazardous, low pressure environments. Shines with a high polish." icon_state = "ce_rig" armor_list = list( - melee = 40, - bullet = 40, - energy = 40, + melee = 10, + bullet = 10, + energy = 10, bomb = 50, bio = 100, rad = 100 ) + ablative_max = 10 + ablation = ABLATION_RESILIENT seal_delay = 15 slowdown = 0 stiffness = 0 @@ -186,14 +190,15 @@ Technomancer RIG desc = "An advanced RIG suit that protects against hazardous, low pressure and high temperature environments." icon_state = "techno_rig" armor_list = list( - melee = 30, - bullet = 30, - energy = 30, + melee =7, + bullet = 7, + energy = 7, bomb = 50, bio = 100, rad = 100 ) - slowdown = 0.3 + ablative_max = 10 + ablation = ABLATION_DURABLE drain = 3 offline_slowdown = 3 offline_vision_restriction = 0 @@ -239,13 +244,15 @@ Technomancer RIG desc = "An Anomalous Material Interaction hardsuit that protects against the strangest energies the universe can throw at it." icon_state = "science_rig" armor_list = list( - melee = 30, - bullet = 20, - energy = 40, + melee =7, + bullet = 5, + energy = 10, bomb = 90, bio = 100, rad = 100 ) + ablative_max = 12 + ablation = ABLATION_EVERLASTING slowdown = 0.3 drain = 3 offline_vision_restriction = 1 @@ -290,9 +297,9 @@ Technomancer RIG This advanced verson is made with speed in mind as well better armor plates at the cost of power." icon_state = "science_ami_rig" armor_list = list( - melee = 35, - bullet = 30, - energy = 40, + melee =8, + bullet = 7, + energy = 10, bomb = 90, bio = 100, rad = 100 @@ -339,16 +346,18 @@ Technomancer RIG /obj/item/rig/medical name = "rescue suit control module" suit_type = "rescue hardsuit" - desc = "A relatively lightweight and durable RIG suit designed for medical rescue in hazardous locations." + desc = "A relatively lightweight and ceramic RIG suit designed for medical rescue in hazardous locations." icon_state = "medical_rig" armor_list = list( - melee = 20, - bullet = 10, - energy = 10, + melee = 5, + bullet = 2, + energy = 2, bomb = 50, bio = 100, rad = 100 ) + ablative_max = 10 + ablation = ABLATION_CERAMIC slowdown = 0 offline_vision_restriction = 1 stiffness = MEDIUM_STIFFNESS @@ -380,10 +389,10 @@ Technomancer RIG It is best suited for surviving and combating wild life, but has reasonably decent kevlar plating and impact pads to absorb bullets and energy blasts." icon_state = "response_team" armor_list = list( - melee = 60, - bullet = 15, - energy = 10, - bomb = 30, + melee = 15, + bullet = 4, + energy = 2, + bomb = 7, bio = 100, rad = 100 ) @@ -449,13 +458,16 @@ Technomancer RIG desc = "A security hardsuit designed for prolonged EVA in dangerous environments." icon_state = "hazard_rig" armor_list = list( - melee = 40, - bullet = 40, - energy = 40, + melee = 10, + bullet = 10, + energy = 10, bomb = 90, bio = 100, rad = 100 ) + price_tag = 1500 + ablative_max = 8 + ablation = ABLATION_DURABLE // Lasts longer than most rigs slowdown = 0.3 drain = 3.5 offline_slowdown = 3 @@ -480,9 +492,9 @@ Technomancer RIG icon_state = "security_rig" suit_type = "stewards hardsuit" armor_list = list( - melee = 40, - bullet = 40, - energy = 40, + melee = 10, + bullet = 10, + energy = 10, bomb = 90, bio = 100, rad = 100 diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 92ece9efcc3..04e227a081a 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -13,9 +13,9 @@ ) permeability_coefficient = 0.01 armor_list = list( - melee = 10, - bullet = 10, - energy = 10, + melee = 2, + bullet = 2, + energy = 2, bomb = 0, bio = 100, rad = 50 @@ -77,9 +77,9 @@ matter = list(MATERIAL_PLASTIC = 30, MATERIAL_STEEL = 10) slowdown = 3 //Bro WHAT armor_list = list( - melee = 10, - bullet = 10, - energy = 10, + melee = 2, + bullet = 2, + energy = 2, bomb = 0, bio = 100, rad = 50 diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 051852df589..cf821a5c102 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -5,9 +5,9 @@ item_state = "syndicate" desc = "A crimson helmet sporting clean lines and durable plating. Engineered to look menacing." armor_list = list( - melee = 30, - bullet = 30, - energy = 30, + melee =7, + bullet = 7, + energy = 7, bomb = 25, bio = 100, rad = 25 @@ -22,9 +22,9 @@ w_class = ITEM_SIZE_NORMAL slowdown = 1 armor_list = list( - melee = 30, - bullet = 30, - energy = 30, + melee =7, + bullet = 7, + energy = 7, bomb = 25, bio = 100, rad = 25 diff --git a/code/modules/clothing/spacesuits/void/excelsior.dm b/code/modules/clothing/spacesuits/void/excelsior.dm index bfce369a9a7..19fa4d6a50b 100644 --- a/code/modules/clothing/spacesuits/void/excelsior.dm +++ b/code/modules/clothing/spacesuits/void/excelsior.dm @@ -17,9 +17,9 @@ ) armor_list = list( - melee = 45, // Excel Not made for Close range combat, Melee armor reflects this - bullet = 55, - energy = 70, + melee = 11, // Excel Not made for Close range combat, Melee armor reflects this + bullet = 13, + energy = 17, bomb = 80, bio = 90, rad = 25 @@ -41,9 +41,9 @@ //Decent all around, but less ballistic resistance stiffness = MEDIUM_STIFFNESS armor_list = list( - melee = 45, // Excel Not made for Close range combat, Melee armor reflects this - bullet = 55, - energy = 70, + melee = 11, // Excel Not made for Close range combat, Melee armor reflects this + bullet = 13, + energy = 17, bomb = 80, bio = 90, rad = 25 @@ -64,9 +64,9 @@ desc = "An ancient space suit design. Provides good protection, especially against energy discharges. This one appears to be an older, less advanced model that is notably free of techno-communist corruption." slowdown = 0.6 //slightly less slowdown, slightly less armor. armor_list = list( - melee = 40, - bullet = 50, - energy = 60, + melee = 10, + bullet = 12, + energy = 15, bomb = 70, bio = 90, rad = 25 @@ -92,10 +92,10 @@ ) armor_list = list( - melee = 40, - bullet = 50, - energy = 60, + melee = 10, + bullet = 12, + energy = 15, bomb = 70, bio = 90, rad = 25 - ) \ No newline at end of file + ) diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm index 5dcccd44cf7..9362aee5823 100644 --- a/code/modules/clothing/spacesuits/void/merc.dm +++ b/code/modules/clothing/spacesuits/void/merc.dm @@ -4,9 +4,9 @@ icon_state = "scaf" item_state = "scaf" armor_list = list( - melee = 60, - bullet = 55, - energy = 50, + melee = 15, + bullet = 13, + energy = 12, bomb = 75, bio = 100, rad = 25 @@ -51,9 +51,9 @@ slowdown = 1.3 flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL armor_list = list( - melee = 60, - bullet = 55, - energy = 50, + melee = 15, + bullet = 13, + energy = 12, bomb = 75, bio = 100, rad = 25 @@ -147,9 +147,9 @@ icon_state = "syndiehelm" item_state = "syndiehelm" armor_list = list( - melee = 50, - bullet = 40, - energy = 30, + melee = 12, + bullet = 10, + energy = 7, bomb = 50, bio = 100, rad = 75 @@ -175,9 +175,9 @@ item_state = "syndie_voidsuit" slowdown = 0.5 //decent armor, decent slowdown armor_list = list( - melee = 50, - bullet = 40, - energy = 30, + melee = 12, + bullet = 10, + energy = 7, bomb = 50, bio = 100, rad = 75 @@ -211,9 +211,9 @@ icon_state = "peking" item_state = "peking" armor_list = list( - melee = 45, - bullet = 40, - energy = 40, + melee = 11, + bullet = 10, + energy = 10, bomb = 25, bio = 100, rad = 50 @@ -232,9 +232,9 @@ slowdown = 0.35 flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL armor_list = list( - melee = 55, - bullet = 45, - energy = 40, + melee = 13, + bullet = 11, + energy = 10, bomb = 50, bio = 100, rad = 50 @@ -249,9 +249,9 @@ icon_state = "ronin" item_state = "ronin" armor_list = list( - melee = 66, - bullet = 60, - energy = 45, + melee = 16, + bullet = 15, + energy = 11, bomb = 45, bio = 100, rad = 75 @@ -272,9 +272,9 @@ slowdown = 0.45 flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDESHOES armor_list = list( - melee = 66, - bullet = 60, - energy = 45, + melee = 16, + bullet = 15, + energy = 11, bomb = 45, bio = 100, rad = 75 @@ -300,9 +300,9 @@ flash_protection = FLASH_PROTECTION_MODERATE tint = TINT_NONE armor_list = list( - melee = 30, - bullet = 30, - energy = 30, + melee =7, + bullet = 7, + energy = 7, bomb = 25, bio = 100, rad = 100 @@ -317,9 +317,9 @@ w_class = ITEM_SIZE_NORMAL slowdown = 0 armor_list = list( - melee = 30, - bullet = 30, - energy = 30, + melee =7, + bullet = 7, + energy = 7, bomb = 25, bio = 100, rad = 100 @@ -335,9 +335,9 @@ flash_protection = FLASH_PROTECTION_MINOR tint = TINT_NONE armor_list = list( // nerf the value compared to the original - melee = 10, - bullet = 5, - energy = 15, + melee = 2, + bullet = 1, + energy = 3, bomb = 5, bio = 100, rad = 50 @@ -352,9 +352,9 @@ w_class = ITEM_SIZE_NORMAL slowdown = 0 armor_list = list( - melee = 5, - bullet = 5, - energy = 15, + melee = 1, + bullet = 1, + energy = 3, bomb = 0, bio = 100, rad = 50 @@ -371,9 +371,9 @@ flash_protection = FLASH_PROTECTION_MODERATE tint = TINT_NONE armor_list = list( - melee = 40, - bullet = 45, - energy = 45, + melee = 10, + bullet = 11, + energy = 11, bomb = 45, bio = 100, rad = 25 @@ -389,9 +389,9 @@ slowdown = 0 helmet = /obj/item/clothing/head/helmet/space/void/greyson armor_list = list( - melee = 40, - bullet = 50, - energy = 50, + melee = 10, + bullet = 12, + energy = 12, bomb = 45, bio = 100, rad = 25 diff --git a/code/modules/clothing/spacesuits/void/neotheology.dm b/code/modules/clothing/spacesuits/void/neotheology.dm index e647fda38c7..a9b302b2542 100644 --- a/code/modules/clothing/spacesuits/void/neotheology.dm +++ b/code/modules/clothing/spacesuits/void/neotheology.dm @@ -4,9 +4,9 @@ icon_state = "acolyte" item_state = "acolyte" armor_list = list( - melee = 25, - bullet = 25, - energy = 25, + melee = 6, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 75 @@ -20,9 +20,9 @@ slowdown = 0.15 matter = list(MATERIAL_PLASTIC = 15, MATERIAL_STEEL = 15, MATERIAL_BIOMATTER = 20) armor_list = list( - melee = 25, - bullet = 25, - energy = 25, + melee = 6, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 75 @@ -35,9 +35,9 @@ icon_state = "botanist" item_state = "botanist" armor_list = list( - melee = 25, - bullet = 25, - energy = 25, + melee = 6, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 75 @@ -51,9 +51,9 @@ slowdown = 0 matter = list(MATERIAL_PLASTIC = 30, MATERIAL_STEEL = 15, MATERIAL_BIOMATTER = 30) armor_list = list( - melee = 25, - bullet = 25, - energy = 25, + melee = 6, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 75 @@ -66,9 +66,9 @@ icon_state = "custodian" item_state = "custodian" armor_list = list( - melee = 25, - bullet = 25, - energy = 25, + melee = 6, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 90 @@ -83,9 +83,9 @@ slowdown = 0.05 matter = list(MATERIAL_PLASTIC = 15, MATERIAL_STEEL = 10, MATERIAL_BIOMATTER = 30) armor_list = list( - melee = 25, - bullet = 25, - energy = 25, + melee = 6, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 90 @@ -102,9 +102,9 @@ brightness_on = 4 //luminosity when on light_color = COLOR_LIGHTING_NEOTHEOLOGY_BRIGHT //Holyer then thou! armor_list = list( - melee = 40, - bullet = 30, - energy = 30, + melee = 10, + bullet = 7, + energy = 7, bomb = 30, bio = 100, rad = 50 @@ -120,9 +120,9 @@ matter = list(MATERIAL_PLASTEEL = 5, MATERIAL_STEEL = 10, MATERIAL_BIOMATTER = 25) slowdown = 0.15 armor_list = list( - melee = 40, - bullet = 30, - energy = 30, + melee = 10, + bullet = 7, + energy = 7, bomb = 30, bio = 100, rad = 50 @@ -149,9 +149,9 @@ icon_state = "inqarmor_hood" item_state = "inqarmor_hood" armor_list = list( - melee = 65, - bullet = 65, - energy = 65, + melee = 16, + bullet = 16, + energy = 16, bomb = 70, bio = 100, rad = 100 @@ -197,9 +197,9 @@ slowdown = 0 flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL armor_list = list( - melee = 65, - bullet = 65, - energy = 65, + melee = 16, + bullet = 16, + energy = 16, bomb = 70, bio = 100, rad = 100 diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index a59115693d7..4580bc8b737 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -16,8 +16,8 @@ slot_r_hand_str = "eng_helm", ) armor_list = list( - melee = 35, - bullet = 30, + melee = 8, + bullet = 7, energy =30, bomb = 40, bio = 100, @@ -56,9 +56,9 @@ icon_state = "technosuit_void" item_state = "technosuit_void" armor_list = list( - melee = 35, - bullet = 30, - energy = 30, + melee = 8, + bullet = 7, + energy = 7, bomb = 40, bio = 100, rad = 100 @@ -89,9 +89,9 @@ matter = list(MATERIAL_STEEL = 6, MATERIAL_GLASS = 4, MATERIAL_PLASTIC = 3) armor_list = list( - melee = 25, - bullet = 20, - energy = 20, + melee = 6, + bullet = 5, + energy = 5, bomb = 25, bio = 100, rad = 0 @@ -131,9 +131,9 @@ item_state = "makeshift_void" siemens_coefficient = 0.4 armor_list = list( - melee = 30, - bullet = 20, - energy = 20, + melee = 7, + bullet = 5, + energy = 5, bomb = 25, bio = 100, rad = 0 @@ -164,9 +164,9 @@ slot_r_hand_str = "mining_helm", ) armor_list = list( - melee = 50, - bullet = 25, - energy = 25, + melee = 12, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 75 @@ -180,9 +180,9 @@ icon_state = "miner_suit" slowdown = 0.35 armor_list = list( - melee = 50, - bullet = 25, - energy = 25, + melee = 12, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 75 @@ -202,9 +202,9 @@ slot_r_hand_str = "goldilocks_helm", ) armor_list = list( - melee = 50, - bullet = 25, - energy = 25, + melee = 12, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 75 @@ -219,9 +219,9 @@ icon_state = "goldilocks_suit" slowdown = 0 armor_list = list( - melee = 50, - bullet = 25, - energy = 25, + melee = 12, + bullet = 6, + energy = 6, bomb = 25, bio = 100, rad = 75 @@ -242,9 +242,9 @@ slot_r_hand_str = "medical_helm", ) armor_list = list( - melee = 20, // It's a literal glass cube - bullet = 10, - energy = 35, + melee = 5, // It's a literal glass cube + bullet = 2, + energy = 8, bomb = 25, bio = 100, rad = 75 @@ -264,9 +264,9 @@ /obj/item/roller ) armor_list = list( - melee = 35, - bullet = 10, - energy = 35, + melee = 8, + bullet = 2, + energy = 8, bomb = 25, bio = 100, rad = 75 @@ -289,9 +289,9 @@ obscuration = MEDIUM_OBSCURATION armor_list = list( - melee = 50, - bullet = 40, - energy = 40, + melee = 12, + bullet = 10, + energy = 10, bomb = 40, bio = 100, rad = 75 @@ -307,9 +307,9 @@ item_state = "ihvoidsuit" slowdown = 1 armor_list = list( - melee = 50, - bullet = 40, - energy = 40, + melee = 12, + bullet = 10, + energy = 10, bomb = 40, bio = 100, rad = 75 @@ -337,9 +337,9 @@ ) armor_list = list( - melee = 50, - bullet = 40, - energy = 40, + melee = 12, + bullet = 10, + energy = 10, bomb = 40, bio = 100, rad = 75 @@ -355,9 +355,9 @@ item_state = "odst" slowdown = 1 armor_list = list( - melee = 50, - bullet = 40, - energy = 40, + melee = 12, + bullet = 10, + energy = 10, bomb = 40, bio = 100, rad = 75 @@ -453,9 +453,9 @@ slot_r_hand_str = "atmos_helm", ) armor_list = list( - melee = 30, - bullet = 10, - energy = 10, + melee = 7, + bullet = 2, + energy = 2, bomb = 25, bio = 100, rad = 75 @@ -470,9 +470,9 @@ name = "atmos voidsuit" item_state = "atmos_voidsuit" armor_list = list( - melee = 30, - bullet = 10, - energy = 10, + melee = 7, + bullet = 2, + energy = 2, bomb = 25, bio = 100, rad = 75 @@ -502,9 +502,9 @@ obscuration = MEDIUM_OBSCURATION armor_list = list( - melee = 40, - bullet = 65, - energy = 50, + melee = 10, + bullet = 16, + energy = 12, bomb = 70, bio = 75, rad = 50 @@ -559,7 +559,7 @@ obscuration = MEDIUM_OBSCURATION armor_list = list( - melee = 40, + melee = 10, bullet = 65, energy = 50, bomb = 70, @@ -576,9 +576,9 @@ desc = "Void Wolves prey on Kriosan trade ships and frontier colonies all the time, in rare circumstances they engage military ships, with skilled and ballsy Void Wolf Reavers succeeding \ and making off with expensive loot, such as this assault armor given a Void Wolf paint job." armor_list = list( - melee = 50, - bullet = 75, - energy = 60, + melee = 12, + bullet = 18, + energy = 15, bomb = 80, bio = 100, rad = 50 @@ -595,9 +595,9 @@ given its sturdy craftmenship and reinforced armor layers." item_state = "assaultsuit" armor_list = list( - melee = 50, - bullet = 75, - energy = 60, + melee = 12, + bullet = 18, + energy = 15, bomb = 80, bio = 100, rad = 50 @@ -627,9 +627,9 @@ ) armor_list = list( - melee = 25, - bullet = 30, - energy = 40, + melee = 6, + bullet = 7, + energy = 10, bomb = 35, bio = 100, rad = 90 @@ -645,9 +645,9 @@ desc = "A suit of all purpose soteria medical void armor. Used for operations where oxygen is a rarity and protection is needed." item_state = "armor_medical" armor_list = list( - melee = 35, - bullet = 35, - energy = 55, + melee = 8, + bullet = 8, + energy = 13, bomb = 40, bio = 100, rad = 90 @@ -685,9 +685,9 @@ desc = "A standard issue helmet of Mar'Qua make, relatively lightly armored compared to other issue gear but made of advanced materials." icon_state = "marquahelm" armor_list = list( - melee = 25, - bullet = 40, - energy = 40, + melee = 6, + bullet = 10, + energy = 10, bomb = 20, bio = 100, rad = 75 @@ -706,9 +706,9 @@ slowdown = 0 stiffness = LIGHT_STIFFNESS armor_list = list( - melee = 25, - bullet = 40, - energy = 40, + melee = 6, + bullet = 10, + energy = 10, bomb = 20, bio = 100, rad = 75 diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index 0f54e0125a3..1eb1ad61b56 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -6,9 +6,9 @@ heat_protection = HEAD armor_list = list( - melee = 30, - bullet = 20, - energy = 10, + melee = 7, + bullet = 5, + energy = 2, bomb = 25, bio = 100, rad = 75 @@ -24,9 +24,9 @@ desc = "A high-tech dark red space suit." //not that high tech apparently. This is legacy stuff so should be avoided being messed with too slowdown = 1 armor_list = list( - melee = 30, - bullet = 20, - energy = 10, + melee = 7, + bullet = 5, + energy = 2, bomb = 25, bio = 100, rad = 75 diff --git a/code/modules/clothing/spacesuits/void/wizard.dm b/code/modules/clothing/spacesuits/void/wizard.dm index 192abf1f743..c6d9a5fbfaf 100644 --- a/code/modules/clothing/spacesuits/void/wizard.dm +++ b/code/modules/clothing/spacesuits/void/wizard.dm @@ -9,9 +9,9 @@ ) unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles! armor_list = list( - melee = 40, - bullet = 40, - energy = 20, + melee = 10, + bullet = 10, + energy = 5, bomb = 25, bio = 100, rad = 90 @@ -27,13 +27,13 @@ slowdown = 1 unacidable = 1 armor_list = list( - melee = 40, - bullet = 40, - energy = 20, + melee = 10, + bullet = 10, + energy = 5, bomb = 25, bio = 100, rad = 90 ) siemens_coefficient = 0.7 price_tag = 500 - helmet = /obj/item/clothing/head/helmet/space/void/wizard \ No newline at end of file + helmet = /obj/item/clothing/head/helmet/space/void/wizard diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index fe03f024596..28bd0619081 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -33,9 +33,9 @@ item_state = "armor" blood_overlay_type = "armor" armor_list = list( - melee = 35, - bullet = 35, - energy = 35, + melee = 8, + bullet = 8, + energy = 8, bomb = 10, bio = 0, rad = 0 @@ -79,9 +79,9 @@ desc = "An armored vest of dubious quality. Provides decent protection against physical damage, for a piece of crap." icon_state = "armor_handmade" armor_list = list( - melee = 30, - bullet = 20, - energy = 15, + melee = 7, + bullet = 5, + energy = 4, bomb = 10, bio = 0, rad = 0 @@ -119,9 +119,9 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS stiffness = LIGHT_STIFFNESS armor_list = list( - melee = 30, - bullet = 20, - energy = 15, + melee =7, + bullet = 4, + energy = 3, bomb = 10, bio = 0, rad = 0 @@ -187,7 +187,7 @@ icon_state = "botanist" item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor_list = list(melee = 30, bullet = 30, energy = 25, bomb = 20, bio = 100, rad = 80) + armor_list = list(melee =7, bullet = 7, energy = 6, bomb = 20, bio = 100, rad = 80) flags_inv = HIDEJUMPSUIT /obj/item/clothing/suit/armor/vest/botanist/verb/toggle_style() @@ -219,7 +219,7 @@ icon_state = "acolyte" item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor_list = list(melee = 30, bullet = 30, energy = 25, bomb = 25, bio = 100, rad = 80) + armor_list = list(melee =7, bullet = 7, energy = 6, bomb = 25, bio = 100, rad = 80) flags_inv = HIDEJUMPSUIT /obj/item/clothing/suit/armor/vest/acolyte/verb/toggle_style() @@ -261,7 +261,7 @@ icon_state = "vinculum_cassock" item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor_list = list(melee = 30, bullet = 30, energy = 25, bomb = 25, bio = 100, rad = 80) + armor_list = list(melee =7, bullet = 7, energy = 6, bomb = 25, bio = 100, rad = 80) flags_inv = HIDEJUMPSUIT /obj/item/clothing/suit/armor/vest/path/divisor @@ -410,7 +410,7 @@ icon_state = "rosaria_armor" item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor_list = list(melee = 40, bullet = 40, energy = 40, bomb = 50, bio = 100, rad = 100) + armor_list = list(melee = 10, bullet = 10, energy = 10, bomb = 50, bio = 100, rad = 100) flags_inv = HIDEJUMPSUIT matter = list(MATERIAL_PLASTEEL = 40, MATERIAL_PLASTIC = 5, MATERIAL_SILVER = 5, MATERIAL_GOLD = 5) @@ -444,7 +444,7 @@ icon_state = "custodian" item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor_list = list(melee = 30, bullet = 30, energy = 25, bomb = 25, bio = 100, rad = 80) + armor_list = list(melee =7, bullet = 7, energy = 6, bomb = 25, bio = 100, rad = 80) flags_inv = HIDEJUMPSUIT /obj/item/clothing/suit/armor/vest/custodian/verb/toggle_style() @@ -476,7 +476,7 @@ icon_state = "prime" item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor_list = list(melee = 40, bullet = 40, energy = 40, bomb = 50, bio = 100, rad = 100) + armor_list = list(melee = 10, bullet = 10, energy = 10, bomb = 50, bio = 100, rad = 100) flags_inv = HIDEJUMPSUIT matter = list(MATERIAL_PLASTEEL = 40, MATERIAL_PLASTIC = 5, MATERIAL_SILVER = 5, MATERIAL_GOLD = 5) @@ -513,7 +513,7 @@ icon_state = "technosuit" item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor_list = list(melee = 40, bullet = 40, energy = 40, bomb = 50, bio = 100, rad = 100) + armor_list = list(melee = 10, bullet = 10, energy = 10, bomb = 50, bio = 100, rad = 100) max_upgrades = 2 extra_allowed = list(/obj/item/extinguisher, /obj/item/tool, @@ -534,7 +534,7 @@ item_flags = THICKMATERIAL | COVER_PREVENT_MANIPULATION body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS max_upgrades = 2 - armor_list = list(melee = 35, bullet = 25, energy = 25, bomb = 30, bio = 50, rad = 50) + armor_list = list(melee =8, bullet = 6, energy = 6, bomb = 30, bio = 50, rad = 50) extra_allowed = list(/obj/item/extinguisher, /obj/item/tool, /obj/item/tool_upgrade, @@ -559,9 +559,9 @@ blood_overlay_type = "armor" slowdown = 0.15 armor_list = list( - melee = 25, - bullet = 60, - energy = 25, + melee = 6, + bullet = 15, + energy = 6, bomb = 10, bio = 0, rad = 0 @@ -602,9 +602,9 @@ icon_state = "northtech" matter = list(MATERIAL_STEEL = 10, MATERIAL_PLASTIC = 20, MATERIAL_PLATINUM = 5) armor_list = list( - melee = 15, - bullet = 15, - energy = 50, + melee = 3, + bullet = 3, + energy = 12, bomb = 0, bio = 0, rad = 0 @@ -616,9 +616,9 @@ icon_state = "northtech" matter = list(MATERIAL_STEEL = 10, MATERIAL_PLASTIC = 20, MATERIAL_PLATINUM = 10) armor_list = list( - melee = 15, - bullet = 15, - energy = 60, + melee = 3, + bullet = 3, + energy = 15, bomb = 0, bio = 0, rad = 0 @@ -637,9 +637,9 @@ blood_overlay_type = "armor" slowdown = 0.2 //it's reflective gear...there's no reason for it to be so heavy. armor_list = list( - melee = 25, - bullet = 25, - energy = 60, + melee = 6, + bullet = 6, + energy = 15, bomb = 0, bio = 0, rad = 0 @@ -673,9 +673,9 @@ icon_state = "ablative_ironhammer" matter = list(MATERIAL_STEEL = 20, MATERIAL_PLASTIC = 20, MATERIAL_PLATINUM = 15) armor_list = list( - melee = 20, - bullet = 20, - energy = 65, + melee = 5, + bullet = 5, + energy = 16, bomb = 0, bio = 0, rad = 0 @@ -692,7 +692,7 @@ icon_state = "ablative_bs" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS slowdown = 0.2 - armor_list = list(melee = 25, bullet = 25, energy = 60, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 6, energy = 15, bomb = 10, bio = 0, rad = 0) //Flak Vests /obj/item/clothing/suit/armor/flakvest @@ -703,7 +703,7 @@ blood_overlay_type = "armor" price_tag = 250 slowdown = 0.2 - armor_list = list(melee = 40, bullet = 40, energy = 20, bomb = 50, bio = 0, rad = 0) + armor_list = list(melee = 10, bullet = 10, energy = 5, bomb = 50, bio = 0, rad = 0) /obj/item/clothing/suit/armor/flakvest/verb/toggle_style() set name = "Adjust Style" @@ -737,7 +737,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS stiffness = LIGHT_STIFFNESS slowdown = 0.3 // Bulkier due to protecting more - armor_list = list(melee = 40, bullet = 40, energy = 20, bomb = 50, bio = 0, rad = 0) // Again, in case it doesn't inherit + armor_list = list(melee = 10, bullet = 10, energy = 5, bomb = 50, bio = 0, rad = 0) // Again, in case it doesn't inherit /obj/item/clothing/suit/armor/flakvest/full/toggle_style() set name = "Adjust Style" @@ -836,7 +836,7 @@ item_state = "flakvest_mil" blood_overlay_type = "armor" slowdown = 0.1 //faster than standard due to being fancier. - armor_list = list(melee = 35, bullet = 50, energy = 40, bomb = 50, bio = 0, rad = 0) + armor_list = list(melee = 9, bullet = 12, energy = 10, bomb = 50, bio = 0, rad = 0) /obj/item/clothing/suit/armor/flakvest/commander/toggle_style() @@ -872,9 +872,9 @@ slowdown = 0.2 // Bulkier due to protecting more stiffness = LIGHT_STIFFNESS armor_list = list( - melee = 45, - bullet = 50, - energy = 30, + melee = 11, + bullet = 12, + energy = 7, bomb = 50, bio = 0, rad = 0 @@ -901,9 +901,9 @@ max_upgrades = 2 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT armor_list = list( - melee = 50, - bullet = 45, - energy = 50, + melee = 12, + bullet = 11, + energy = 12, bomb = 40, bio = 0, rad = 0 @@ -933,9 +933,9 @@ item_state = "swat_suit" flags_inv = HIDEJUMPSUIT armor_list = list( - melee = 60, - bullet = 25, - energy = 25, + melee = 15, + bullet = 6, + energy = 6, bomb = 25, bio = 0, rad = 0 @@ -959,9 +959,9 @@ price_tag = 250 //Normal vest is worth 200, this one is worth 250 because it also has storage space tool_qualities = list(QUALITY_ARMOR = 100) //every armor should have this. Just give it 'no upgrades' if it isnt supposed to have them lol armor_list = list( - melee = 20, - bullet = 30, - energy = 20, + melee = 5, + bullet = 7, + energy = 5, bomb = 25, bio = 0, rad = 0 @@ -982,9 +982,9 @@ icon_state = "webvest_ironhammer" slowdown = 0.1 armor_list = list( - melee = 35, - bullet = 35, - energy = 35, + melee =8, + bullet = 8, + energy = 8, bomb = 10, bio = 0, rad = 0 @@ -1000,9 +1000,9 @@ tool_qualities = list() price_tag = 300 armor_list = list( - melee = 55, - bullet = 55, - energy = 55, + melee = 13, + bullet = 13, + energy = 13, bomb = 45, bio = 0, rad = 0 @@ -1024,9 +1024,9 @@ body_parts_covered = UPPER_TORSO|LEGS|ARMS|LOWER_TORSO cold_protection = UPPER_TORSO|LEGS|ARMS|LOWER_TORSO armor_list = list( - melee = 40, - bullet = 35, - energy = 40, + melee = 10, + bullet = 10, + energy = 10, bomb = 35, bio = 0, rad = 0 @@ -1070,7 +1070,7 @@ icon_state = "platecarrier" item_state = "platecarrier" blood_overlay_type = "armor" - armor_list = list(melee = 35, bullet = 45, energy = 20, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee =8, bullet = 11, energy = 5, bomb = 10, bio = 0, rad = 0) /obj/item/clothing/suit/armor/platecarrier/verb/toggle_style() set name = "Adjust Style" @@ -1204,7 +1204,7 @@ desc = "An armored vest carrying trauma plates and light ballistic meshes, this one is marked with Corpsman livery and has a stain resistant coating." icon_state = "platecarrier_corpsman" item_state = "platecarrier_corpsman" - armor_list = list(melee = 35, bullet = 45, energy = 20, bomb = 10, bio = 20, rad = 0) + armor_list = list(melee =8, bullet = 11, energy = 5, bomb = 10, bio = 20, rad = 0) /obj/item/clothing/suit/armor/platecarrier/corpsman/toggle_style() set name = "Adjust Style" @@ -1236,7 +1236,7 @@ desc = "An armored vest carrying trauma plates and light ballistic meshes, this one is marked with corpsman livery and has a stain resistant coating as well as additional shoulderpads and kneepads for added protection." icon_state = "platecarrier_corpsman_fullbody" item_state = "platecarrier_corpsman_fullbody" - armor_list = list(melee = 35, bullet = 45, energy = 20, bomb = 10, bio = 20, rad = 0) // Just in case it doesn't inherit armor qualities + armor_list = list(melee = 8, bullet = 11, energy = 5, bomb = 10, bio = 20, rad = 0) // Just in case it doesn't inherit armor qualities body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS stiffness = LIGHT_STIFFNESS @@ -1272,7 +1272,7 @@ item_state = "platecarrier_ih" blood_overlay_type = "armor" slowdown = 0.10 - armor_list = list(melee = 50, bullet = 50, energy = 30, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 12, bullet = 12, energy = 7, bomb = 10, bio = 0, rad = 0) /obj/item/clothing/suit/armor/platecarrier/hos/toggle_style() set name = "Adjust Style" @@ -1347,9 +1347,9 @@ item_state = "hos" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS armor_list = list( - melee = 40, - bullet = 40, - energy = 30, + melee = 10, + bullet = 10, + energy = 7, bomb = 25, bio = 0, rad = 0 @@ -1392,7 +1392,7 @@ item_state = "commander" blood_overlay_type = "coat" permeability_coefficient = 0.50 - armor_list = list(melee = 40, bullet = 40, energy = 30, bomb = 25, bio = 0, rad = 0) + armor_list = list(melee = 10, bullet = 10, energy = 7, bomb = 25, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS min_cold_protection_temperature = T0C - 20 @@ -1437,14 +1437,14 @@ /obj/item/clothing/suit/storage/armor/militia_overcoat // Pockets for your hands on the cold. name = "blackshield armored overcoat" desc = "Blackshield greatcoat with kevlar weave and rank epaulettes. Worn in cold environments, guard duty or formal events." - armor_list = list(melee = 30, bullet = 35, energy = 20, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee =7, bullet = 8, energy = 5, bomb = 10, bio = 0, rad = 0) icon_state = "overcoat_bm" item_state = "overcoat_bm" /obj/item/clothing/suit/storage/armor/marshal_coat name = "marshal officers greatcoat" desc = "Marshal Officer greatcoat with armor weave. Part of the formal uniform of the security marshals." - armor_list = list(melee = 35, bullet = 30, energy = 20, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 8, bullet = 7, energy = 5, bomb = 10, bio = 0, rad = 0) icon_state = "marshal_coat" item_state = "marshal_coat" @@ -1476,7 +1476,7 @@ /obj/item/clothing/suit/storage/armor/marshal_coat_ss name = "supply specialist's jacket" desc = "Supply Specialist's jacket with an armored weave. For formality, protection and style." - armor_list = list(melee = 40, bullet = 40, energy = 20, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 10, bullet = 10, energy = 5, bomb = 10, bio = 0, rad = 0) icon_state = "marshal_coat_ss" item_state = "marshal_coat_ss" @@ -1492,9 +1492,9 @@ item_state = "reactiveoff" blood_overlay_type = "armor" armor_list = list( - melee = 20, - bullet = 20, - energy = 20, + melee = 5, + bullet = 5, + energy = 5, bomb = 0, bio = 0, rad = 0 @@ -1543,9 +1543,9 @@ item_state = "hunter_armor" blood_overlay_type = "armor" armor_list = list( - melee = 30, - bullet = 20, - energy = 20, + melee =7, + bullet = 5, + energy = 5, bomb = 10, bio = 0, rad = 0 ) @@ -1560,9 +1560,9 @@ item_state = "hunter_armor_bone" blood_overlay_type = "armor" armor_list = list( - melee = 45, - bullet = 25, - energy = 25, + melee = 11, + bullet = 6, + energy = 6, bomb = 10, bio = 0, rad = 0) @@ -1574,9 +1574,9 @@ item_state = "hunter_armor_reinforced" blood_overlay_type = "armor" armor_list = list( - melee = 30, - bullet = 45, - energy = 25, + melee = 7, + bullet = 11, + energy = 6, bomb = 10, bio = 0, rad = 0) @@ -1589,9 +1589,9 @@ item_state = "hunter_armor_leather" blood_overlay_type = "armor" armor_list = list( - melee = 30, - bullet = 25, - energy = 45, + melee = 7, + bullet = 6, + energy = 11, bomb = 10, bio = 0, rad = 0) @@ -1602,9 +1602,9 @@ icon_state = "hm_woodvest" item_state = "hm_woodvest" armor_list = list( - melee = 25, //It's made of mostly wood and cloth, shittiest armor in the game easily, but does have bio and rad, giving it a rare but still possible boost over handmade. -Kaz - bullet = 15, // Justifying keeping somewhat decent values on bullet just because I changed the recipe to include steel. - Seb - energy = 10, // It's mostly made of wood, it will char easily. + melee = 6, //It's made of mostly wood and cloth, shittiest armor in the game easily, but does have bio and rad, giving it a rare but still possible boost over handmade. -Kaz + bullet = 3, // Justifying keeping somewhat decent values on bullet just because I changed the recipe to include steel. - Seb + energy = 2, // It's mostly made of wood, it will char easily. bomb = 10, bio = 25, rad = 25 @@ -1626,9 +1626,9 @@ MATERIAL_SILVER = 2 ) armor_list = list( - melee = 30, - bullet = 30, - energy = 30, + melee = 7, + bullet = 7, + energy = 7, bomb = 10, bio = 100, rad = 50 @@ -1692,9 +1692,9 @@ max_upgrades = 0 //No upgrading this one tool_qualities = list() armor_list = list( - melee = 55, - bullet = 55, - energy = 55, + melee = 13, + bullet = 13, + energy = 13, bomb = 60, bio = 0, rad = 0 @@ -1711,7 +1711,7 @@ item_state = "platecarrier_sfa" blood_overlay_type = "armor" slowdown = 0.05 - armor_list = list(melee = 50, bullet = 50, energy = 30, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 12, bullet = 12, energy = 7, bomb = 10, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS /obj/item/clothing/suit/armor/platecarrier/solfed/corpsman @@ -1721,5 +1721,5 @@ item_state = "platecarrier_sfc" blood_overlay_type = "armor" slowdown = 0.05 - armor_list = list(melee = 50, bullet = 50, energy = 30, bomb = 10, bio = 40, rad = 0) + armor_list = list(melee = 12, bullet = 12, energy = 7, bomb = 10, bio = 40, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS diff --git a/code/modules/clothing/suits/gorka.dm b/code/modules/clothing/suits/gorka.dm index b87df3c9a98..3904e8a1f0a 100644 --- a/code/modules/clothing/suits/gorka.dm +++ b/code/modules/clothing/suits/gorka.dm @@ -356,7 +356,7 @@ icon_open = "gorka_jacket_ih_open" icon_closed = "gorka_jacket_ih" blood_overlay_type = "coat" - armor_list = list(melee = 25, bullet = 25, energy = 15, bomb = 15, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 6, energy = 3, bomb = 15, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|ARMS cold_protection = UPPER_TORSO|ARMS min_cold_protection_temperature = T0C - 20 @@ -367,7 +367,7 @@ name = "security gorka hood" desc = "A hood from a gorka jacket, oddly robust." icon_state = "gorka_jacket_ih_hood" - armor_list = list(melee = 20, bullet = 15, energy = 10, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 5, bullet = 3, energy = 2, bomb = 10, bio = 0, rad = 0) flags_inv = HIDEEARS|BLOCKHEADHAIR body_parts_covered = HEAD|EARS diff --git a/code/modules/clothing/suits/greatcoat.dm b/code/modules/clothing/suits/greatcoat.dm index 944675d5555..0472dc354bf 100644 --- a/code/modules/clothing/suits/greatcoat.dm +++ b/code/modules/clothing/suits/greatcoat.dm @@ -6,7 +6,7 @@ item_state = "cap_coat" blood_overlay_type = "coat" permeability_coefficient = 0.50 - armor_list = list(melee = 35, bullet = 35, energy = 15, bomb = 5, bio = 0, rad = 0) + armor_list = list(melee =8, bullet = 8, energy = 3, bomb = 5, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS cold_protection = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS min_cold_protection_temperature = T0C - 20 @@ -45,9 +45,9 @@ blood_overlay_type = "coat" permeability_coefficient = 0.50 armor_list = list( - melee = 30, - bullet = 30, - energy = 10, + melee = 7, + bullet = 7, + energy = 2, bomb = 30, bio = 100, rad = 100 @@ -66,9 +66,9 @@ blood_overlay_type = "coat" permeability_coefficient = 0.50 armor_list = list( - melee = 10, - bullet = 10, - energy = 10, + melee = 2, + bullet = 2, + energy = 2, bomb = 10, bio = 100, rad = 100 @@ -87,9 +87,9 @@ permeability_coefficient = 0.50 stiffness = LIGHT_STIFFNESS armor_list = list( //thicker material so +5 boost (from base 10) to armor values, but lower rad/same bomb since not metal lined. Maybe add in minor slowdown if needed -Dongels - melee = 15, - bullet = 15, - energy = 15, + melee = 3, + bullet = 3, + energy = 3, bomb = 10, bio = 100, rad = 50 @@ -208,8 +208,8 @@ blood_overlay_type = "coat" permeability_coefficient = 0.50 armor_list = list( - melee = 10, - bullet = 10, + melee = 2, + bullet = 2, energy = 0, bomb = 10, bio = 0, @@ -222,7 +222,7 @@ icon_state = "os_overcoat" item_state = "os_overcoat" blood_overlay_type = "coat" - armor_list = list(melee = 30, bullet = 10, energy = 25, bomb = 25, bio = 0, rad = 40) + armor_list = list(melee = 7, bullet = 2, energy = 6, bomb = 25, bio = 0, rad = 40) body_parts_covered = UPPER_TORSO|ARMS cold_protection = UPPER_TORSO|ARMS min_cold_protection_temperature = T0C - 20 @@ -235,7 +235,7 @@ icon_state = "os_overcoat" item_state = "os_overcoat" blood_overlay_type = "coat" - armor_list = list(melee = 5, bullet = 5, energy = 15, bomb = 0, bio = 0, rad = 25) + armor_list = list(melee = 1, bullet = 1, energy = 3, bomb = 0, bio = 0, rad = 25) body_parts_covered = UPPER_TORSO|ARMS cold_protection = UPPER_TORSO|ARMS min_cold_protection_temperature = T0C - 20 diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index e3e7333c178..2720b0eb13b 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -11,9 +11,9 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS armor_list = list( - melee = 5, - bullet = 5, - energy = 5, + melee = 1, + bullet = 1, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -28,9 +28,9 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS armor_list = list( - melee = 5, - bullet = 5, - energy = 5, + melee = 1, + bullet = 1, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -44,9 +44,9 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS armor_list = list( - melee = 5, - bullet = 5, - energy = 5, + melee = 1, + bullet = 1, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -61,9 +61,9 @@ extra_allowed = list(/obj/item/tool) body_parts_covered = UPPER_TORSO armor_list = list( - melee = 10, - bullet = 10, - energy = 5, + melee = 2, + bullet = 2, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -105,9 +105,9 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS armor_list = list( - melee = 20, - bullet = 10, - energy = 5, + melee = 5, + bullet = 2, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -150,8 +150,8 @@ blood_overlay_type = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO armor_list = list( - melee = 10, - bullet = 5, + melee = 2, + bullet = 1, energy = 0, bomb = 0, bio = 0, @@ -170,9 +170,9 @@ siemens_coefficient = 0.7 matter = list(MATERIAL_BIOMATTER = 20, MATERIAL_GOLD = 2) armor_list = list( - melee = 20, - bullet = 20, - energy = 10, + melee = 5, + bullet = 5, + energy = 2, bomb = 30, bio = 100, rad = 100 @@ -185,9 +185,9 @@ item_state = "nt_sportsjacket" body_parts_covered = UPPER_TORSO|ARMS armor_list = list( - melee = 15, - bullet = 10, - energy = 5, + melee = 3, + bullet = 2, + energy = 1, bomb = 0, bio = 100, rad = 75 @@ -257,7 +257,7 @@ item_state = "rangercoat" blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS - armor_list = list(melee = 30, bullet = 25, energy = 25, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee =7, bullet = 6, energy = 6, bomb = 0, bio = 0, rad = 0) price_tag = 250 /obj/item/clothing/suit/storage/rank/insp_trench/verb/toggle_style() @@ -330,7 +330,7 @@ body_parts_covered = UPPER_TORSO|ARMS price_tag = 50 armor_list = list( - melee = 10, + melee = 2, bullet = 0, energy = 0, bomb = 0, diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 240a3fbcb97..207014fe956 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -121,9 +121,9 @@ matter = list(MATERIAL_STEEL = 5, MATERIAL_GLASS = 5, MATERIAL_PLASTIC = 20) max_upgrades = 1 armor_list = list( - melee = 25, - bullet = 20, - energy = 25, + melee = 6, + bullet = 5, + energy = 6, bomb = 15, bio = 50, rad = 25 diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index ea01a9cf936..160a4931f2f 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -203,9 +203,9 @@ obj/item/clothing/suit/gownrisque/alt icon_state = "punk_vest" item_state = "punk_vest" armor_list = list( - melee = 5, - bullet = 5, - energy = 5, + melee = 1, + bullet = 1, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -231,8 +231,8 @@ obj/item/clothing/suit/gownrisque/alt icon_state = "punkvest" item_state = "punkvest" armor_list = list( - melee = 5, - bullet = 5, + melee = 1, + bullet = 1, energy = 0, bomb = 0, bio = 0, @@ -250,7 +250,7 @@ obj/item/clothing/suit/gownrisque/alt armor_list = list( melee = 0, bullet = 0, - energy = 5, + energy = 1, bomb = 0, bio = 30, rad = 10 @@ -263,9 +263,9 @@ obj/item/clothing/suit/gownrisque/alt icon_state = "cyberpunk" item_state = "cyberpunk" armor_list = list( - melee = 10, - bullet = 10, - energy = 10, + melee = 2, + bullet = 2, + energy = 2, bomb = 0, bio = 0, rad = 0 @@ -281,9 +281,9 @@ obj/item/clothing/suit/gownrisque/alt stiffness = MEDIUM_STIFFNESS equip_delay = 2 SECONDS armor_list = list( - melee = 30, //Not the best armor, but easily crafted and adds some utility with decent protection all round. - bullet = 20, - energy = 25, + melee = 7, //Not the best armor, but easily crafted and adds some utility with decent protection all round. + bullet = 5, + energy = 6, bomb = 25, bio = 0, rad = 0 @@ -321,9 +321,9 @@ obj/item/clothing/suit/gownrisque/alt icon_state = "scav_heavy" item_state = "scav_heavy" armor_list = list( - melee = 50, //A bit worse than riot armour - bullet = 25, - energy = 25, + melee = 12, //A bit worse than riot armour + bullet = 6, + energy = 6, bomb = 25, bio = 0, rad = 0 @@ -359,9 +359,9 @@ obj/item/clothing/suit/gownrisque/alt icon_state = "triadkillers" item_state = "triadkillers" armor_list = list( - melee = 10, - bullet = 5, - energy = 5, + melee = 2, + bullet = 1, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -376,9 +376,9 @@ obj/item/clothing/suit/gownrisque/alt icon_state = "akira" item_state = "akira" armor_list = list( - melee = 10, - bullet = 10, - energy = 10, + melee = 2, + bullet = 2, + energy = 2, bomb = 0, bio = 0, rad = 0 @@ -392,9 +392,9 @@ obj/item/clothing/suit/gownrisque/alt icon_state = "outcast_cloak" item_state = "outcast_cloak" armor_list = list( - melee = 20, - bullet = 10, - energy = 20, + melee = 5, + bullet = 2, + energy = 5, bomb = 10, bio = 5, rad = 5 @@ -410,9 +410,9 @@ obj/item/clothing/suit/gownrisque/alt icon_state = "field_numerical" item_state = "field_numerical" armor_list = list( - melee = 10, + melee = 2, bullet = 0, //well armored its not going to help a bullet - energy = 10, + energy = 2, bomb = 5, bio = 100, rad = 0 @@ -452,8 +452,8 @@ obj/item/clothing/suit/gownrisque/alt icon_state = "general_priest_cloth" item_state = "general_priest_cloth" armor_list = list( - melee = 10, - bullet = 5, + melee = 2, + bullet = 1, energy = 0, bomb = 0, bio = 0, diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 29fc809b931..e98268e4db1 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -293,7 +293,7 @@ /obj/item/clothing/suit/storage/toggle/miljacket_marshal name = "Marshal jacket" desc = "A Resistant Marshal Coloured jacket with reflective yellow patches on it." - armor_list = list(melee = 15, bullet = 15, energy = 15, bomb = 10, bio = 0, rad = 0) + armor_list = list(melee = 3, bullet = 3, energy = 3, bomb = 10, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS icon_state = "marshal_jacket" item_state = "marshal_jacket" @@ -529,7 +529,7 @@ desc = "A sturdy grey jacket made out of synthetic leather." icon_state = "leather_jacket" item_state = "leather_jacket" - armor_list = list(melee = 5, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 1, bullet = 1, energy = 1, bomb = 0, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS siemens_coefficient = 0.7 @@ -542,7 +542,7 @@ item_state = "midriff_leather" icon_open = "midriff_leather_open" icon_closed = "midriff_leather" - armor_list = list(melee = 5, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 1, bullet = 1, energy = 1, bomb = 0, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/suit/storage/toggle/leather/bikermidriff @@ -550,7 +550,7 @@ desc = "A stylish, midriff jacket made of synthetic leather. Red inner padding and thick layers, it'd be a great jacket for cruising down the road; If not for the length" icon_state = "bikermidriff" item_state = "bikermidriff" - armor_list = list(melee = 5, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 1, bullet = 1, energy = 1, bomb = 0, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/suit/storage/toggle/leather/bikermidriff/verb/toggle_style() @@ -694,9 +694,9 @@ icon_state = "absolutehoodie" item_state = "absolutehoodie" armor_list = list( - melee = 5, - bullet = 5, - energy = 5, + melee = 1, + bullet = 1, + energy = 1, bomb = 0, bio = 100, rad = 0) @@ -795,8 +795,8 @@ obj/item/clothing/suit/storage/toggle/peacoat icon_state = "aerostatic_bomber_jacket" item_state = "aerostatic_bomber_jacket" armor_list = list( - melee = 5, - bullet = 5, + melee = 1, + bullet = 1, energy = 0, bomb = 5, bio = 30, @@ -811,8 +811,8 @@ obj/item/clothing/suit/storage/toggle/peacoat icon_state = "jamrock_blazer" item_state = "jamrock_blazer" armor_list = list( - melee = 5, - bullet = 5, + melee = 1, + bullet = 1, energy = 0, bomb = 5, bio = 30, @@ -827,9 +827,9 @@ obj/item/clothing/suit/storage/toggle/peacoat icon_state = "tojojacket" item_state = "tojojacket" armor_list = list( - melee = 5, - bullet = 5, - energy = 5, + melee = 1, + bullet = 1, + energy = 1, bomb = 0, bio = 0, rad = 0) @@ -913,9 +913,9 @@ obj/item/clothing/suit/sweater/blue icon_state = "mchestrig" item_state = "mchestrig" armor_list = list( - melee = 10, - bullet = 5, - energy = 5, + melee = 2, + bullet = 1, + energy = 1, bomb = 5, bio = 5, rad = 0 @@ -1193,7 +1193,7 @@ obj/item/clothing/suit/sweater/blue desc = "A long and rugged black trenchcoat, the perfect complement for your film noir ensemble. \n All you need now is a smoke, a whiskey, unlimited ammo and a license to kill." // Max Payne reference. icon_state = "black_trench" item_state = "black_trench" - armor_list = list(melee = 5, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 1, bullet = 1, energy = 1, bomb = 0, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/suit/storage/suitjacket/livesey // The word Rum and the word Death should mean the same to you. - Seb @@ -1202,9 +1202,9 @@ obj/item/clothing/suit/sweater/blue icon_state = "livesey" item_state = "livesey" armor_list = list( - melee = 10, - bullet = 5, - energy = 5, + melee = 2, + bullet = 1, + energy = 1, bomb = 0, bio = 10, rad = 0 diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 7cdbc09f107..a01bc0386db 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -20,9 +20,9 @@ extra_allowed = list(/obj/item/extinguisher, /obj/item/storage/toolbox) armor_list = list( - melee = 10, + melee = 2, bullet = 0, - energy = 30, + energy = 1, bomb = 10, bio = 10, rad = 0 @@ -62,7 +62,7 @@ armor_list = list( melee = 0, bullet = 0, - energy = 25, + energy = 6, bomb = 0, bio = 90, rad = 100 @@ -84,7 +84,7 @@ armor_list = list( melee = 0, bullet = 0, - energy = 25, + energy = 6, bomb = 0, bio = 90, rad = 100 diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 359dfe5ed67..9a473d36e79 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -300,7 +300,7 @@ desc = "A jury rugged set of baggy pants with leather reinforcement paddings and other fibers, as comfortable as clothes can get when made by whatever you scavenged off the land." icon_state = "tactical_rags" item_state = "tactical_rags" - armor_list = list(melee = 5, bullet = 0, energy = 10, bomb = 0, bio = 0, rad = 5) + armor_list = list(melee = 1, bullet = 0, energy = 2, bomb = 0, bio = 0, rad = 5) /obj/item/clothing/under/rank/lonestar_gorka name = "lonestar gorka jumpsuit" diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 08b45fad9f5..27fcc76d478 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -96,10 +96,10 @@ icon_state = "engineadv" item_state = "engineadv" armor_list = list( - melee = 20, //if they are not waring any armor over this then we give *something* - bullet = 20, - energy = 25, - bomb = 40, + melee = 5, //if they are not waring any armor over this then we give *something* + bullet = 5, + energy = 6, + bomb = 10, bio = 50, rad = 100 //Rad proof ) @@ -110,9 +110,9 @@ icon_state = "chiefengineeradv" item_state = "chiefengineeradv" armor_list = list( - melee = 30, //if they are not waring any armor over this then we give *something* - bullet = 30, - energy = 45, + melee = 7, //if they are not waring any armor over this then we give *something* + bullet = 7, + energy = 11, bomb = 80, bio = 70, rad = 100 //Rad proof diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 31b688aeb96..415ccdfd9f3 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -141,9 +141,9 @@ item_state = "paramedic" permeability_coefficient = 0.50 armor_list = list( - melee = 10, - bullet = 5, - energy = 5, + melee = 2, + bullet = 1, + energy = 1, bomb = 0, bio = 30, rad = 0 diff --git a/code/modules/clothing/under/jobs/militia.dm b/code/modules/clothing/under/jobs/militia.dm index 8fb0d4b3cd6..8efd70a9bfe 100644 --- a/code/modules/clothing/under/jobs/militia.dm +++ b/code/modules/clothing/under/jobs/militia.dm @@ -428,7 +428,7 @@ name = "tactical turtleneck" desc = "A reinforced military turtleneck, designed to provide moderate combat protection." icon_state = "syndicate" - armor_list = list(melee = 5, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 1, bullet = 1, energy = 1, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 /obj/item/clothing/under/rank/armorer/service @@ -542,4 +542,4 @@ /obj/item/clothing/under/rank/fatigues/camo/solfed name = "camo utility uniform" desc = "A camo utility uniform, bearing worn patches of the Solar armed forces.." - armor_list = list(melee = 10, bullet = 0, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 0, energy = 2, bomb = 0, bio = 0, rad = 0) diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 47c5ad1facd..82079ca5379 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -170,7 +170,7 @@ ) allowed = list(/obj/item/reagent_containers/food/snacks/candy_corn, /obj/item/pen) armor_list = list( - melee = 10, + melee = 2, bullet = 0, energy = 0, bomb = 0, diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index b4af2633282..7029051d0ca 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -771,9 +771,9 @@ item_state = "johnny" price_tag = 60 armor_list = list( - melee = 10, - bullet = 5, - energy = 5, + melee = 2, + bullet = 1, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -786,9 +786,9 @@ item_state = "raider" price_tag = 60 armor_list = list( - melee = 10, - bullet = 5, - energy = 5, + melee = 2, + bullet = 1, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -800,9 +800,9 @@ item_state = "tribalm" price_tag = 50 armor_list = list( - melee = 10, - bullet = 5, - energy = 5, + melee = 2, + bullet = 1, + energy = 1, bomb = 0, bio = 0, rad = 0 @@ -835,7 +835,7 @@ name = "Ashigaru" desc = "A lightly armored apron designed as a homage to jana foot soldiers." icon_state = "ashigaru" - armor_list = list(melee = 5, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 1, bullet = 1, energy = 1, bomb = 0, bio = 0, rad = 0) /*Swimsuit*/ diff --git a/code/modules/genetics/creatures/golden_roach.dm b/code/modules/genetics/creatures/golden_roach.dm index 7e69c6bd82c..10cbf724181 100644 --- a/code/modules/genetics/creatures/golden_roach.dm +++ b/code/modules/genetics/creatures/golden_roach.dm @@ -45,7 +45,7 @@ melee_damage_lower = 2 melee_damage_upper = 3 - armor = list(melee = 5, bullet = 0, energy = 0, bomb = 0, bio = 5, rad = 0, agony = 0) + armor = list(melee = 1, bullet = 0, energy = 0, bomb = 0, bio = 5, rad = 0, agony = 0) meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat meat_amount = 1 diff --git a/code/modules/genetics/creatures/wasonce.dm b/code/modules/genetics/creatures/wasonce.dm index 89105b9e7e2..6d96f747340 100644 --- a/code/modules/genetics/creatures/wasonce.dm +++ b/code/modules/genetics/creatures/wasonce.dm @@ -38,7 +38,7 @@ Has ability of every roach. attacktext = "delivered a crushing blow to" - armor = list(melee = 60, bullet = 30, energy = 0, bomb = 20, bio = 50, rad = 100, agony = 100) + armor = list(melee = 15, bullet = 7, energy = 0, bomb = 20, bio = 50, rad = 100, agony = 100) var/knockdown_odds = 60 //Maybe stay away from it diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 058df970024..2e168a8adc8 100755 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -81,6 +81,10 @@ var/obj/item/I = get_active_hand() unEquip(I, Target, MOVED_DROP) +/mob/proc/drop_offhand(var/atom/Target) + var/obj/item/I = get_inactive_hand() + unEquip(I, Target, MOVED_DROP) + /mob/proc/is_holding(var/obj/item/W) return is_holding_in_active_hand(W) || is_holding_in_inactive_hand(W) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 6255d92b03f..7444c963a5d 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -24,8 +24,8 @@ weapon_sharp = 0 weapon_edge = 0 - hit_impact(effective_force, get_step(user, src)) - damage_through_armor(effective_force, I.damtype, hit_zone, ARMOR_MELEE, armour_pen = I.armor_penetration + (user.stats.getStat(STAT_ROB) * 0.25), used_weapon = I, sharp = weapon_sharp, edge = weapon_edge, post_pen_mult = I.post_penetration_dammult) + hit_impact(effective_force, get_step(user, src), hit_zone) + damage_through_armor(effective_force, I.damtype, hit_zone, ARMOR_MELEE, armor_divisor = I.armor_divisor, used_weapon = I, sharp = weapon_sharp, edge = weapon_edge) /*Its entirely possible that we were gibbed or dusted by the above. Check if we still exist before continuing. Being gibbed or dusted has a 1.5 second delay, during which it sets the transforming var to @@ -89,4 +89,4 @@ true, and the mob is not yet deleted, so we need to check that as well*/ return TRUE else - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2469472e266..e3233e3ae37 100755 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1448,13 +1448,13 @@ var/list/rank_prefix = list(\ return ..() /mob/living/carbon/human/verb/pull_punches() - set name = "Pull Punches" + set name = "Hold your attacks back" set desc = "Try not to hurt them." set category = "IC" if(stat) return - pulling_punches = !pulling_punches - to_chat(src, "You are now [pulling_punches ? "" : "not "]pulling your punches.") + holding_back = !holding_back + to_chat(src, SPAN_NOTICE("You are now [holding_back ? "holding back your attacks" : "not holding back your attacks"].")) return //generates realistic-ish pulse output based on preset levels @@ -1632,4 +1632,92 @@ var/list/rank_prefix = list(\ reset_view(A) reset_view(A) + +/* +/mob/living/carbon/human/proc/resuscitate() + var/obj/item/organ/internal/heart_organ = random_organ_by_process(OP_HEART) + var/obj/item/organ/internal/brain_organ = random_organ_by_process(BP_BRAIN) + + if(!is_asystole() && !(heart_organ && brain_organ) || (heart_organ.is_broken() || brain_organ.is_broken())) + return 0 + + if(world.time >= (timeofdeath + NECROZTIME)) + return 0 + + var/oxyLoss = getOxyLoss() + if(oxyLoss > 20) + setOxyLoss(20) + + if(health <= (HEALTH_THRESHOLD_DEAD - oxyLoss)) + visible_message(SPAN_WARNING("\The [src] twitches a bit, but their body is too damaged to sustain life!")) + timeofdeath = 0 + return 0 + + visible_message(SPAN_NOTICE("\The [src] twitches a bit as their heart restarts!")) + pulse = PULSE_NORM + handle_pulse() + timeofdeath = 0 + stat = UNCONSCIOUS + jitteriness += 3 SECONDS + updatehealth() + switch_from_dead_to_living_mob_list() + if(mind) + for(var/mob/observer/ghost/G in GLOB.player_list) + if(G.can_reenter_corpse && G.mind == mind) + if(alert("Do you want to enter your body?","Resuscitate","OH YES","No, I'm autist") == "OH YES") + G.reenter_corpse() + break + else + break + return 1 + +/mob/living/carbon/human/proc/generate_dna() + if(!b_type) + b_type = pick(GLOB.blood_types) + + if(!isMonkey(src)) + while(dormant_mutations.len < STARTING_MUTATIONS) + var/datum/mutation/M = pickweight(list( + pick(subtypesof(/datum/mutation/t0)) = 45, + pick(subtypesof(/datum/mutation/t1)) = 25, + pick(subtypesof(/datum/mutation/t2)) = 15, + pick(subtypesof(/datum/mutation/t3)) = 10, + pick(subtypesof(/datum/mutation/t4)) = 5)) + dormant_mutations |= new M +*/ +/mob/living/carbon/human/verb/blocking() + set name = "Blocking" + set desc = "Block an incoming melee attack, or lower your guard." + set category = "IC" + + if(stat || restrained()) + return + if(!blocking) + start_blocking() + else + stop_blocking() + +/mob/living/carbon/human/proc/start_blocking() + if(blocking)//already blocking with an item somehow? + return + blocking = TRUE + visible_message(SPAN_WARNING("[src] tenses up, ready to block!")) + if(HUDneed.Find("block")) + var/obj/screen/block/HUD = HUDneed["block"] + HUD.update_icon() + update_block_overlay() + return + +/mob/living/carbon/human/proc/stop_blocking() + if(!blocking)//already blockingn't with an item somehow? + return + blocking = FALSE + visible_message(SPAN_NOTICE("[src] lowers \his guard.")) + if(HUDneed.Find("block")) + var/obj/screen/block/HUD = HUDneed["block"] + HUD.update_icon() + update_block_overlay() + return + + #undef SLIME_TRANSPARENCY diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 1442f0d559e..66cf80c4691 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -1,13 +1,13 @@ /mob/living/carbon/human/proc/get_unarmed_attack(var/mob/living/carbon/human/target, var/hit_zone) if(src.default_attack && src.default_attack.is_usable(src, target, hit_zone)) - if(pulling_punches) + if(holding_back) var/datum/unarmed_attack/soft_type = src.default_attack.get_sparring_variant() if(soft_type) return soft_type return src.default_attack for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks) if(u_attack.is_usable(src, target, hit_zone)) - if(pulling_punches) + if(holding_back) var/datum/unarmed_attack/soft_variant = u_attack.get_sparring_variant() if(soft_variant) return soft_variant @@ -24,6 +24,7 @@ if(!temp || !temp.is_usable()) to_chat(H, "\red You can't use your hand.") return + H.stop_blocking() ..() @@ -151,6 +152,11 @@ H.do_attack_animation(src) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message(SPAN_WARNING("[M] has grabbed [src] passively!")) + //our blocking was compromised! + if(blocking) + visible_message(SPAN_WARNING("[src]'s guard has been broken!"), SPAN_DANGER("Your blocking stance has been pushed through!")) + stop_blocking() + setClickCooldown(2 SECONDS) src.attack_log += "\[[time_stamp()]\] Has been grabbed passively by [M.name] ([M.ckey])" M.attack_log += "\[[time_stamp()]\] Grabbed passively [src.name] ([src.ckey])" msg_admin_attack("[M] grabbed passively a [src].") @@ -180,8 +186,6 @@ else stat_damage = 3 + max(0, (H.stats.getStat(STAT_ROB) / 10)) var/limb_efficiency_multiplier = 1 - var/block = 0 - var/accurate = 0 var/hit_zone = H.targeted_organ var/obj/item/organ/external/affecting = get_organ(hit_zone) var/obj/item/organ/external/current_hand = H.organs_by_name[H.hand ? BP_L_ARM : BP_R_ARM] @@ -193,79 +197,28 @@ to_chat(M, SPAN_DANGER("They are missing that limb!")) return 1 - switch(src.a_intent) - if(I_HELP) - // We didn't see this coming, so we get the full blow - stat_damage = stat_damage + 1 - accurate = 1 - if(I_HURT, I_GRAB) - // We're in a fighting stance, there's a chance we block - if(src.canmove && src!=H && prob(10 + round(src.stats.getStat(STAT_TGH) / 3))) - block = 1 - if (M.grabbed_by.len) // Someone got a good grip on them, they won't be able to do much damage stat_damage = max(1, stat_damage - 2) if(src.grabbed_by.len || src.buckled || !src.canmove || src==H) - accurate = 1 // certain circumstances make it impossible for us to evade punches stat_damage = stat_damage + 2 stat_damage *= limb_efficiency_multiplier - - // Process evasion and blocking - var/miss_type = 0 - var/attack_message - if(!accurate) - /* - This place is kind of convoluted and will need some explaining. - ran_zone() will pick out of 11 zones, thus the chance for hitting - our target where we want to hit them is circa 9.1%. - - Now since we want to statistically hit our target organ a bit more - often than other organs, we add a base chance of 50% for hitting it. - - And after that, we subtract AGI stat from chance to hit different organ. - General miss chance also depends on AGI. - - Note: We don't use get_zone_with_miss_chance() here since the chances - were made for projectiles. - TODO: proc for melee combat miss chances depending on organ? - */ - if(prob(50 - H.stats.getStat(STAT_ROB))) - hit_zone = ran_zone(hit_zone) - if(prob(25 - H.stats.getStat(STAT_ROB)) && hit_zone != BP_CHEST) // Missed! - if(!src.lying) - attack_message = "[H] attempted to strike [src], but missed!" - else - attack_message = "[H] attempted to strike [src], but \he rolled out of the way!" - src.set_dir(pick(cardinal)) - miss_type = 1 - - if(!miss_type && block) - attack_message = "[H] went for [src]'s [affecting.name] but was blocked!" - miss_type = 2 - // See what attack they use var/datum/unarmed_attack/attack = H.get_unarmed_attack(src, hit_zone) if(!attack) return 0 H.do_attack_animation(src) - if(!attack_message) - attack.show_attack(H, src, hit_zone, stat_damage) - else - H.visible_message(SPAN_DANGER("[attack_message]")) + attack.show_attack(H, src, hit_zone, stat_damage) //The stronger you are, the louder you strike! var/attack_volume = 25 + H.stats.getStat(STAT_ROB) - playsound(loc, ((miss_type) ? (miss_type == 1 ? attack.miss_sound : 'sound/weapons/thudswoosh.ogg') : attack.attack_sound), attack_volume, 1, -1) - H.attack_log += text("\[[time_stamp()]\] [miss_type ? (miss_type == 1 ? "Missed" : "Blocked") : "[LAZYPICK(attack.attack_verb) || "attacked"]"] [src.name] ([src.ckey])") - src.attack_log += text("\[[time_stamp()]\] [miss_type ? (miss_type == 1 ? "Was missed by" : "Has blocked") : "Has Been [LAZYPICK(attack.attack_verb) || "attacked"]"] by [H.name] ([H.ckey])") - msg_admin_attack("[key_name(H)] [miss_type ? (miss_type == 1 ? "has missed" : "was blocked by") : "has [LAZYPICK(attack.attack_verb) || "attacked"]"] [key_name(src)]") - - if(miss_type) - return FALSE + playsound(loc, attack.attack_sound, attack_volume, 1, -1) + H.attack_log += text("\[[time_stamp()]\] [LAZYPICK(attack.attack_verb) || "attacked"] [src.name] ([src.ckey])") + src.attack_log += text("\[[time_stamp()]\] Has been [LAZYPICK(attack.attack_verb) || "attacked"] by [H.name] ([H.ckey])") + msg_admin_attack("[key_name(H)] has [LAZYPICK(attack.attack_verb) || "attacked"] [key_name(src)]") var/real_damage = stat_damage real_damage += attack.get_unarmed_damage(H) @@ -277,6 +230,23 @@ stat_damage *= 2 real_damage = max(1, real_damage) + //Try to reduce damage by blocking + if(blocking) + if(istype(get_active_hand(), /obj/item/grab))//we are blocking with a human shield! We redirect the attack. You know, because grab doesn't exist as an item. + var/obj/item/grab/G = get_active_hand() + grab_redirect_attack(M, G) + return + else + stop_blocking() + real_damage = handle_blocking(real_damage) + //Tell everyone about blocking + src.attack_log += text("\[[time_stamp()]\] Blocked attack of [H.name] ([H.ckey])") + H.attack_log += text("\[[time_stamp()]\] Attack has been blocked by [src.name] ([src.ckey])") + visible_message(SPAN_WARNING("[src] blocks the blow!"), SPAN_DANGER("You block the blow!")) + //They farked up + if(real_damage == 0) + visible_message(SPAN_DANGER("The attack has been completely negated!")) + return // Apply additional unarmed effects. attack.apply_effects(H, src, getarmor(affecting, ARMOR_MELEE), stat_damage, hit_zone) @@ -343,10 +313,10 @@ if(!damage || !istype(user)) return - var/penetration = 0 + var/penetration = 1 if(istype(user, /mob/living)) var/mob/living/L = user - penetration = L.armor_penetration + penetration = L.armor_divisor user.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])") src.attack_log += text("\[[time_stamp()]\] was attacked by [user.name] ([user.ckey])") @@ -361,7 +331,8 @@ var/dam_zone = pick(organs_by_name) var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone)) - var/dam = damage_through_armor(damage = damage, damagetype = damagetype, def_zone = affecting, attack_flag = ARMOR_MELEE, armour_pen = penetration, sharp = sharp, edge = sharp) + var/dam = damage_through_armor(damage = damage, damagetype = damagetype, def_zone = affecting, attack_flag = ARMOR_MELEE, armor_divisor = penetration, sharp = sharp, edge = sharp) + // ran_zone might pick a zone that we don't actually have an organ in if(dam > 0 && affecting) affecting.add_autopsy_data("[attack_message] by \a [user]", dam) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 7320fbca994..1b8962b2037 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -355,7 +355,7 @@ This function restores all organs. if(damagetype == PSY) sanity.onPsyDamage(damage) var/obj/item/organ/brain = random_organ_by_process(BP_BRAIN) - brain.take_damage(damage, PSY, (armor_penetration * 0.1), wounding_multiplier) + brain.take_damage(damage, PSY, (armor_divisor * 0.1), wounding_multiplier) return TRUE if(damagetype == TOX && stats.getPerk(PERK_BLOOD_OF_LEAD)) @@ -382,7 +382,7 @@ This function restores all organs. return FALSE damageoverlaytemp = 20 - if(organ.take_damage(damage, damagetype, (armor_penetration * 0.1), wounding_multiplier, sharp, edge, used_weapon)) + if(organ.take_damage(damage, damagetype, armor_divisor, wounding_multiplier, sharp, edge, used_weapon)) UpdateDamageIcon() sanity.onDamage(damage) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 0a4f15e1ada..62dfb6de1c8 100755 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -50,7 +50,7 @@ uniquic_armor_act var/obj/item/newshrap = new P.shrapnel_type(organ) organ.embed(newshrap) -/mob/living/carbon/human/hit_impact(damage, dir) +/mob/living/carbon/human/hit_impact(damage, dir, hit_zone) if(incapacitated(INCAPACITATION_DEFAULT|INCAPACITATION_BUCKLED_PARTIALLY)) return if(damage < stats.getStat(STAT_TGH)) @@ -63,43 +63,10 @@ uniquic_armor_act var/r_dir = reverse_dir[dir] var/hit_dirs = (r_dir in cardinal) ? r_dir : list(r_dir & NORTH|SOUTH, r_dir & EAST|WEST) - var/stumbled = FALSE - - if(prob(60 - stats.getStat(STAT_TGH))) - stumbled = TRUE - step(src, pick(cardinal - hit_dirs)) - - for(var/atom/movable/A in oview(1)) - if(!A.Adjacent(src) || prob(50 + stats.getStat(STAT_TGH))) - continue - - if(istype(A, /obj/structure/table)) - var/obj/structure/table/T = A - if (!T.can_touch(src) || T.flipped != 0 || !T.flip(get_cardinal_dir(src, T))) - continue - if(T.climbable) - T.structure_shaken() - playsound(T,'sound/machines/Table_Fall.ogg',100,1) - - else if(istype(A, /obj/machinery/door)) - var/obj/machinery/door/D = A - D.Bumped(src) - - else if(istype(A, /obj/machinery/button)) - A.attack_hand(src) - - else if(istype(A, /obj/item) || prob(33)) - if(A.anchored) - continue - step(A, pick(cardinal)) - - else - continue - stumbled = TRUE - - if(stumbled) - visible_message(SPAN_WARNING("[src] stumbles around.")) - + if(hit_zone == BP_R_LEG || hit_zone == BP_L_LEG) + if(prob(60 - stats.getStat(STAT_TGH))) + step(src, pick(cardinal - hit_dirs)) + visible_message(SPAN_WARNING("[src] stumbles around.")) /mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) @@ -145,6 +112,24 @@ uniquic_armor_act total += weight return (armorval/max(total, 1)) +/mob/living/carbon/human/getarmorablative(var/def_zone, var/type) + + var/obj/item/rig/R = get_equipped_item(slot_back) + if(istype(R)) + if(R.ablative_armor && (type in list(ARMOR_MELEE, ARMOR_BULLET, ARMOR_ENERGY, ARMOR_BOMB))) + return R.ablative_armor + return FALSE + +//Returns true if the ablative armor successfully took damage +/mob/living/carbon/human/damageablative(var/def_zone, var/damage_taken) + + var/obj/item/rig/R = get_equipped_item(slot_back) + if(istype(R)) + if(R.ablative_armor) + R.ablative_armor = max(R.ablative_armor - damage_taken / R.ablation, 0) + return TRUE + return FALSE + //this proc returns the Siemens coefficient of electrical resistivity for a particular external organ. /mob/living/carbon/human/proc/get_siemens_coefficient_organ(obj/item/organ/external/def_zone) if (!def_zone) @@ -199,6 +184,11 @@ uniquic_armor_act if(!shield) continue . = shield.handle_shield(src, damage, damage_source, attacker, def_zone, attack_text) if(.) return + + if(istype(damage_source, /obj/item/projectile)) + var/obj/item/rig/R = back + if(R) + R.block_bullet(src, damage_source, def_zone) return 0 /mob/living/carbon/human/proc/has_shield() @@ -207,6 +197,43 @@ uniquic_armor_act return shield return FALSE +/mob/living/carbon/human/proc/handle_blocking(var/damage) + var/stat_affect = 0.3 //lowered to 0.2 if we are blocking with an item + var/item_size_affect = 0 //the bigger the thing you hold is, the more damage you can block + var/toughness = max(1, stats.getStat(STAT_TGH)) + //passive blocking with shields is handled differently(code is above this proc) + if(get_active_hand())//are we blocking with an item? + var/obj/item/I = get_active_hand() + if(istype(I)) + item_size_affect = I.w_class * 5 + stat_affect = 0.2 + damage -= (toughness * stat_affect + item_size_affect) + return max(0, damage) + +/mob/living/carbon/human/proc/grab_redirect_attack(var/mob/living/carbon/human/attacker, var/obj/item/grab/G, var/obj/item/I) + var/mob/living/carbon/human/grabbed = G.affecting + visible_message(SPAN_DANGER("[src] redirects the blow at [grabbed]!"), SPAN_DANGER("You redirect the blow at [grabbed]!")) + //check what we are being hit with, a hand(I is null), or an item? + //quickly turn blocking off and on to prevent looping(since we are attacking again) + blocking = FALSE + if(istype(I, /obj/item)) + grabbed.attackby(I, attacker) + else + grabbed.attack_hand(attacker)//and now it's not our problems + blocking = TRUE + //change our block state depending on grab level + if(G.state >= GRAB_NECK) + return //block remains active + else if(G.state >= GRAB_AGGRESSIVE) + stop_blocking() + return //block is turned off + else + stop_blocking() + drop_from_inventory(G) + G.loc = null + qdel(G) + return //block is turned off, grab is GONE + /mob/living/carbon/human/resolve_item_attack(obj/item/I, mob/living/user, var/target_zone) if(check_attack_throat(I, user)) return null @@ -235,12 +262,19 @@ uniquic_armor_act if(!affecting) return FALSE//should be prevented by attacked_with_item() but for sanity. + visible_message("[src] has been [LAZYPICK(I.attack_verb) || "attacked"] in the [affecting.name] with [I.name] by [user]!") var/EF = unique_armor_check(I, user, effective_force) if(EF) effective_force = EF + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.stop_blocking() + + visible_message("[src] has been [I.attack_verb.len? pick(I.attack_verb) : "attacked"] in the [affecting.name] with [I.name] by [user]!") + standard_weapon_hit_effects(I, user, effective_force, hit_zone) return TRUE @@ -250,59 +284,96 @@ uniquic_armor_act if(!affecting) return FALSE - // Handle striking to cripple. - if(user.a_intent == I_DISARM) - effective_force /= 2 //half the effective force - if(!..(I, user, effective_force, hit_zone)) + if(blocking) + if(istype(get_active_hand(), /obj/item/grab))//we are blocking with a human shield! We redirect the attack. You know, because grab doesn't exist as an item. + var/obj/item/grab/G = get_active_hand() + grab_redirect_attack(G, I) return FALSE - - attack_joint(affecting, I) //but can dislocate(strike nerve) joints + else + stop_blocking() + src.attack_log += text("\[[time_stamp()]\] Blocked attack of [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Attack has been blocked by [src.name] ([src.ckey])") + visible_message(SPAN_WARNING("[src] blocks the blow!"), SPAN_WARNING("You block the blow!")) + effective_force = handle_blocking(effective_force) + if(effective_force == 0) + visible_message(SPAN_DANGER("The attack has been completely negated!")) + return FALSE + + //If not blocked, handle broad strike attacks + if(((I.sharp && I.edge && user.a_intent == I_DISARM) || I.forced_broad_strike) && (!istype(I, /obj/item/tool/sword/nt/spear) || !istype(I, /obj/item/tele_spear) || !istype(I, /obj/item/tool/spear))) + var/list/L[] = BP_ALL_LIMBS + effective_force /= 3 + L.Remove(hit_zone) + for(var/i in 1 to 2) + var/temp_zone = pick(L) + L.Remove(temp_zone) + ..(I, user, effective_force, temp_zone) + + //Push attacks + if(hit_zone == BP_GROIN && I.push_attack && user.a_intent == I_DISARM) + step_glide(src, get_dir(user, src), DELAY2GLIDESIZE(0.4 SECONDS)) + visible_message(SPAN_WARNING("[src] is pushed away by the attack!")) else if(!..()) return FALSE - if(effective_force > 10 || effective_force >= 5 && prob(33)) forcesay(hit_appends) //forcesay checks stat already - //Apply blood if(!((I.flags & NOBLOODY)||(I.item_flags & NOBLOODY)) && src.species?.reagent_tag != IS_SYNTHETIC) I.add_blood(src) + //Apply screenshake + if(I.screen_shake && prob(70)) + shake_camera(src, 0.5, 1) + //All this is copypasta'd from projectile code. Basically there's a cool splat animation when someone gets hit by something. + var/splatter_dir = dir + var/turf/target_location = get_turf(src) + splatter_dir = get_dir(user, target_location) + target_location = get_step(target_location, splatter_dir) + var/blood_color = "#C80000" + blood_color = src.species.blood_color + new /obj/effect/overlay/temp/dir_setting/bloodsplatter(src.loc, splatter_dir, blood_color) + target_location.add_blood(src) + + //Intervention attacks + if(prob(max(5, min(30, 30 - stats.getStat(STAT_TGH)/2.5)))) //This is hell. 30% is default chance, 5% is minimum which is met at 80 TGH. + //See if we have any guns that might go off, + for(var/obj/item/gun/W in get_both_hands()) + if(W && prob(40)) + visible_message(SPAN_DANGER("[src]'s [W] goes off during the struggle!")) + W.Fire(target_location, src) + return TRUE + //else do other types of intervention attacks + var/intervention_type = pick("out of breath", "bloodstains") + switch(intervention_type) + if("bloodstains") + var/turf/location = loc + if(istype(location, /turf/simulated)) + location.add_blood(src) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(get_dist(H, src) <= 1) //people with TK won't get smeared with blood + H.bloody_body(src) + H.bloody_hands(src) + + if(prob(40)) + if(wear_mask) + wear_mask.add_blood(src) + update_inv_wear_mask(0) + if(head) + head.add_blood(src) + update_inv_head(0) + if(glasses) + glasses.add_blood(src) + update_inv_glasses(0) + else + bloody_body(src) + visible_message(SPAN_WARNING("Blood stains [src]'s clothes!"), SPAN_DANGER("Blood seeps through your clothes and your heart skips a beat!")) + sanity.changeLevel(-5) + + if("out of breath") + visible_message(SPAN_WARNING("[src] gasps in pain!"), SPAN_DANGER("Pain jolts through your nerves!")) + adjustOxyLoss(10) + adjustHalLoss(5) - if(prob(33 + I.sharp * 10) && src.species?.reagent_tag != IS_SYNTHETIC) - var/turf/location = loc - if(istype(location, /turf/simulated) && I.damtype == BRUTE) - location.add_blood(src) - drip_blood(3) - else - spawn emote("me", 1, "coughs up blood!") - drip_blood(5) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(get_dist(H, src) <= 1) //people with TK won't get smeared with blood - H.bloody_body(src) - H.bloody_hands(src) - - switch(hit_zone) - if(BP_HEAD) - if(wear_mask) - wear_mask.add_blood(src) - update_inv_wear_mask(0) - if(head) - head.add_blood(src) - update_inv_head(0) - if(glasses && prob(33)) - glasses.add_blood(src) - update_inv_glasses(0) - if(BP_CHEST) - bloody_body(src) - //All this is copypasta'd from projectile code. Basically there's a cool splat animation when someone gets hit by something. - var/splatter_dir = dir - var/turf/target_loca = get_turf(src) - splatter_dir = get_dir(user, target_loca) - target_loca = get_step(target_loca, splatter_dir) - var/blood_color = "#C80000" - blood_color = src.form.blood_color - new /obj/effect/overlay/temp/dir_setting/bloodsplatter(src.loc, splatter_dir, blood_color) - target_loca.add_blood(src) return TRUE @@ -549,7 +620,7 @@ uniquic_armor_act if(en_passant) // message_admins("unique_armor_check en_passant ranged") // message_admins("prj ranged [Proj.penetrating]") - Proj.armor_penetration *= 0.5 + Proj.armor_divisor *= 0.5 Proj.check_armour = ARMOR_MELEE //Foolishness Proj.fire_stacks = 0 //No witches here Proj.wounding_mult = 1 //Foolishness! @@ -566,7 +637,7 @@ uniquic_armor_act else // message_admins("unique_armor_check en_passant ranged") // message_admins("prj ranged [Proj.penetrating]") - Proj.armor_penetration *= 2 + Proj.armor_divisor *= 2 if(Proj.damage_types[BRUTE]) // message_admins("prj BRUTE [Proj.damage_types[BRUTE]] Pre") Proj.damage_types[BRUTE] *= 1.5 diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index c9255970943..08763a1b439 100755 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -81,7 +81,9 @@ var/hand_blood_color var/gunshot_residue - var/pulling_punches // Are you trying not to hurt your opponent? + var/holding_back // Are you trying not to hurt your opponent? + var/blocking = FALSE //ready to block melee attacks? + var/dodging = TRUE // are you dodging those shots? mob_bump_flag = HUMAN mob_push_flags = ~HEAVY diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 9b7a9972e31..b58d767683b 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -26,6 +26,8 @@ if(stats.getPerk(PERK_SCUTTLEBUG)) tally -= 0.3 if(stats.getPerk(PERK_REZ_SICKNESS)) + tally -= 0.5 + if(blocking) tally += 1 var/obj/item/implant/core_implant/cruciform/C = get_core_implant(/obj/item/implant/core_implant/cruciform) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 3a8cd0a4ca6..3c6a82e42ec 100755 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -59,6 +59,7 @@ var/radiation_mod = 1 // Radiation modifier var/flash_mod = 1 // Stun from blindness modifier. var/vision_flags = SEE_SELF // Same flags as glasses. + var/injury_type = INJURY_TYPE_LIVING // From _DEFINES/weapons.dm var/list/hair_styles var/list/facial_hair_styles diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm index 2319befa8b0..e34555907a6 100644 --- a/code/modules/mob/living/carbon/human/species/species_attack.dm +++ b/code/modules/mob/living/carbon/human/species/species_attack.dm @@ -53,7 +53,7 @@ attack_verb = list("stabbed", "jabbed", "shanked") attack_noun = list("stab", "jab", "shank") damage = 2 - armor_penetration = 10 + armor_divisor = 1.2 /datum/unarmed_attack/horns deal_halloss = 9 diff --git a/code/modules/mob/living/carbon/human/species/species_hud.dm b/code/modules/mob/living/carbon/human/species/species_hud.dm index 53a18cf2205..deb1e0b0be3 100644 --- a/code/modules/mob/living/carbon/human/species/species_hud.dm +++ b/code/modules/mob/living/carbon/human/species/species_hud.dm @@ -3,7 +3,7 @@ var/list/equip_slots = list() // Checked by mob_can_equip(). var/list/ProcessHUD = list( "health","nutrition","body temperature","pressure","toxin","oxygen","fire","internal","sanity","neural system accumulation", - "throw","pull","resist","drop","look up","rest", "wield", //"jump", + "throw","pull","resist","drop","look up","rest", "wield", "block",//"jump", "move intent","intent","damage zone","craft menu", "equip","swap hand","left arm bionics","right arm bionics","toggle inventory" ) diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 805f0e21358..e91dffa32b8 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -706,6 +706,7 @@ unarmed_types = list(/datum/unarmed_attack/punch, /datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/bite) blurb = "no." reagent_tag = IS_SYNTHETIC + injury_type = INJURY_TYPE_UNLIVING hunger_factor = 0 flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON | NO_MINOR_CUT radiation_mod = 0 @@ -756,6 +757,7 @@ unarmed_types = list(/datum/unarmed_attack/punch, /datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/bite) blurb = "no" reagent_tag = IS_SYNTHETIC + injury_type = INJURY_TYPE_UNLIVING hunger_factor = 0 flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON | NO_MINOR_CUT radiation_mod = 0 @@ -811,6 +813,7 @@ max_age = 110 siemens_coefficient = 2 reagent_tag = IS_SYNTHETIC + injury_type = INJURY_TYPE_UNLIVING hunger_factor = 0 flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON | NO_MINOR_CUT slowdown = 0.3 @@ -875,6 +878,7 @@ max_age = 110 siemens_coefficient = 0 reagent_tag = IS_SYNTHETIC + injury_type = INJURY_TYPE_UNLIVING hunger_factor = 0 flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON | NO_MINOR_CUT radiation_mod = 0 @@ -936,6 +940,7 @@ min_age = 18 max_age = 110 reagent_tag = IS_SYNTHETIC + injury_type = INJURY_TYPE_UNLIVING hunger_factor = 0 flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON | NO_MINOR_CUT radiation_mod = 0 @@ -996,6 +1001,7 @@ min_age = 18 max_age = 110 reagent_tag = IS_SYNTHETIC + injury_type = INJURY_TYPE_UNLIVING hunger_factor = 0 flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON | NO_MINOR_CUT radiation_mod = 0 @@ -1057,6 +1063,7 @@ min_age = 18 max_age = 110 reagent_tag = IS_SYNTHETIC + injury_type = INJURY_TYPE_UNLIVING hunger_factor = 0 flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON | NO_MINOR_CUT radiation_mod = 0 @@ -1119,6 +1126,7 @@ spawn_flags = CAN_JOIN min_age = 18 max_age = 200 + injury_type = INJURY_TYPE_HOMOGENOUS taste_sensitivity = TASTE_SENSITIVE nutrition_mod = 150 //Important for some perks diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index e92ea91ddc9..0f6db1f9080 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -10,7 +10,7 @@ var/global/list/sparring_attack_cache = list() var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent. var/sharp = 0 var/edge = 0 - var/armor_penetration = 0 + var/armor_divisor = 1 var/deal_halloss var/sparring_variant_type = /datum/unarmed_attack/light_strike diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b3b66712589..5ac4c4d374a 100755 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -137,7 +137,8 @@ Please contact me on #coderbus IRC. ~Carn x #define L_HAND_LAYER 29 #define R_HAND_LAYER 30 #define FIRE_LAYER 31 //If you're on fire -#define TOTAL_LAYERS 31 +#define BLOCKING_LAYER 32 +#define TOTAL_LAYERS 32 ////////////////////////////////// /mob/living/carbon/human @@ -1377,6 +1378,13 @@ mob/living/carbon/human/proc/get_wings_image() if(update_icons) update_icons() +/mob/living/carbon/human/proc/update_block_overlay(var/update_icons=1) + overlays_standing[BLOCKING_LAYER] = null + if(blocking) + overlays_standing[BLOCKING_LAYER] = image("icon"='icons/mob/misc_overlays.dmi', "icon_state"="block", "layer"=BLOCKING_LAYER) + + update_icons() + /mob/living/carbon/human/proc/update_surgery(var/update_icons=1) overlays_standing[SURGERY_LAYER] = null var/image/total = null diff --git a/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_behemoth.dm b/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_behemoth.dm index 11ca61d6fdc..c0fd94da649 100644 --- a/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_behemoth.dm +++ b/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_behemoth.dm @@ -3,12 +3,12 @@ name = "ameridian behemoth" desc = "A weird creature made of ameridian. It is bigger, stronger and pack a harder punch than its brethen." icon_state = "golem_ameridian_purple" - health = 200 - maxHealth = 200 + health = 200 * AMGOLEM_HEALTH_MOD + maxHealth = 200 * AMGOLEM_HEALTH_MOD melee_damage_lower = 40 melee_damage_upper = 50 move_to_delay = 5 - armor = list(melee = 70, bullet = 60, energy = 80, bomb = 40, bio = 100, rad = 100) //We want to be gunned down, not lasered + armor = list(melee = 17, bullet = 15, energy = 20, bomb = 40, bio = 100, rad = 100) //We want to be gunned down, not lasered drop_amount = 3 size_factor = 1.25 // 25% bigger diff --git a/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_golem.dm b/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_golem.dm index ff04dd1d522..18e32101bbf 100644 --- a/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_golem.dm +++ b/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_golem.dm @@ -15,15 +15,15 @@ mob_classification = CLASSIFICATION_SYNTHETIC status_flags = CANPUSH // Cannot be stun, weakened or paralyzed - armor = list(melee = 30, bullet = 20, energy = 35, bomb = 30, bio = 100, rad = 100) //We want to be gunned down, not lasered + armor = list(melee = 7, bullet = 4, energy = 8, bomb = 30, bio = 100, rad = 100) //We want to be gunned down, not lasered do_gibs = FALSE attack_sound = 'sound/weapons/heavysmash.ogg' //So we dont make bite sounds deathmessage = "shatters in a pile of rubbles." - health = 60 - maxHealth = 60 + health = 60 * AMGOLEM_HEALTH_MOD + maxHealth = 60 * AMGOLEM_HEALTH_MOD melee_damage_lower = 10 melee_damage_upper = 25 leather_amount = 0 diff --git a/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_runtling.dm b/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_runtling.dm index 83b165ac648..5911b5a2b29 100644 --- a/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_runtling.dm +++ b/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_runtling.dm @@ -3,9 +3,9 @@ name = "ameridian runtling" desc = "A weird creature made of ameridian. It is smaller and weaker, but numerous and fast." icon_state = "golem_ameridian_blue" - health = 30 - maxHealth = 30 + health = 30 * AMGOLEM_HEALTH_MOD + maxHealth = 30 * AMGOLEM_HEALTH_MOD move_to_delay = 3 // Very fast - armor = list(melee = 20, bullet = 10, energy = 25, bomb = 15, bio = 100, rad = 100) //We want to be gunned down, not lasered + armor = list(melee = 4, bullet = 2, energy = 6, bomb = 15, bio = 100, rad = 100) //We want to be gunned down, not lasered drop_amount = 1 size_factor = 0.75 // 25% Smaller diff --git a/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_shooter.dm b/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_shooter.dm index 0cc8265acbc..64b91b8cfaa 100644 --- a/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_shooter.dm +++ b/code/modules/mob/living/carbon/superior_animal/ameridian/ameridian_shooter.dm @@ -2,9 +2,9 @@ /mob/living/carbon/superior_animal/ameridian_golem/ameridian_shooter name = "ameridian shooter" desc = "A weird creature made of ameridian. It is quadruped and seems to shoot ameridian shards." - health = 50 - maxHealth = 50 - armor = list(melee = 10, bullet = 50, energy = 55, bomb = 30, bio = 100, rad = 100) //We want to be rushed in melee, not shot. + health = 50 * AMGOLEM_HEALTH_MOD + maxHealth = 50 * AMGOLEM_HEALTH_MOD + armor = list(melee = 2, bullet = 12, energy = 13, bomb = 30, bio = 100, rad = 100) //We want to be rushed in melee, not shot. ranged = TRUE rapid = TRUE projectiletype = /obj/item/projectile/ameridian_shard/golem diff --git a/code/modules/mob/living/carbon/superior_animal/defense.dm b/code/modules/mob/living/carbon/superior_animal/defense.dm index 2ff4755fc75..8ddb565ab40 100644 --- a/code/modules/mob/living/carbon/superior_animal/defense.dm +++ b/code/modules/mob/living/carbon/superior_animal/defense.dm @@ -396,13 +396,12 @@ if(!damage || !istype(user)) return - var/penetration = 0 + var/penetration = 1 if(istype(user, /mob/living)) var/mob/living/L = user - penetration = L.armor_penetration - - damage_through_armor(damage = damage, damagetype = damagetype, def_zone = null, attack_flag = ARMOR_MELEE, armour_pen = penetration, sharp = sharp, edge = sharp) + penetration = L.armor_divisor + damage_through_armor(damage, BRUTE, attack_flag=ARMOR_MELEE, armor_divisor=penetration) user.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])") src.attack_log += text("\[[time_stamp()]\] was attacked by [user.name] ([user.ckey])") src.visible_message(SPAN_DANGER("[user] has [attack_message] [src]!")) diff --git a/code/modules/mob/living/carbon/superior_animal/drone/handmade_drone.dm b/code/modules/mob/living/carbon/superior_animal/drone/handmade_drone.dm index 05dbe5304ee..9cc4b8767a0 100644 --- a/code/modules/mob/living/carbon/superior_animal/drone/handmade_drone.dm +++ b/code/modules/mob/living/carbon/superior_animal/drone/handmade_drone.dm @@ -8,7 +8,7 @@ see_in_dark = 10 wander = FALSE stop_automated_movement_when_pulled = TRUE - armor = list(melee = 30, bullet = 30, energy = 30, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 7, bullet = 7, energy = 7, bomb = 50, bio = 100, rad = 100) mob_classification = CLASSIFICATION_SYNTHETIC breath_required_type = 0 // Doesn't need to breath breath_poison_type = 0 // Can't be poisoned diff --git a/code/modules/mob/living/carbon/superior_animal/drone/parts/parts.dm b/code/modules/mob/living/carbon/superior_animal/drone/parts/parts.dm index da63ddcbeed..a9a2a699de8 100644 --- a/code/modules/mob/living/carbon/superior_animal/drone/parts/parts.dm +++ b/code/modules/mob/living/carbon/superior_animal/drone/parts/parts.dm @@ -51,9 +51,9 @@ // The total armor it will give to the roomba. var/list/armor_stat = list( - melee = 25, - bullet = 25, - energy = 25, + melee = 6, + bullet = 6, + energy = 6, bomb = 25, bio = 100, // It's a robot, no pain or diseases for you buddy. agony = 100 @@ -65,9 +65,9 @@ icon_state = "roomba_armor_heavy" health_bonus = 200 armor_stat = list( - melee = 50, - bullet = 50, - energy = 50, + melee = 12, + bullet = 12, + energy = 12, bomb = 50, bio = 100, agony = 100 diff --git a/code/modules/mob/living/carbon/superior_animal/drone/types/hammer.dm b/code/modules/mob/living/carbon/superior_animal/drone/types/hammer.dm index 97f13a6fbc7..efcc978ce19 100644 --- a/code/modules/mob/living/carbon/superior_animal/drone/types/hammer.dm +++ b/code/modules/mob/living/carbon/superior_animal/drone/types/hammer.dm @@ -8,7 +8,7 @@ maxHealth = 800 melee_damage_lower = 70 melee_damage_upper = 80 - armor = list(melee = 70, bullet = 70, energy = 70, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 17, bullet = 17, energy = 17, bomb = 50, bio = 100, rad = 100) exam_message = "This one appears to wield a stellar-grade engine shaped into a hammer." /mob/living/carbon/superior_animal/handmade/hammer/UnarmedAttack() diff --git a/code/modules/mob/living/carbon/superior_animal/drone/types/roomba.dm b/code/modules/mob/living/carbon/superior_animal/drone/types/roomba.dm index 32ebb17badf..c1648c1e694 100644 --- a/code/modules/mob/living/carbon/superior_animal/drone/types/roomba.dm +++ b/code/modules/mob/living/carbon/superior_animal/drone/types/roomba.dm @@ -16,10 +16,10 @@ // Default armor values so that we can reference them. var/default_armor = list( - melee = 15, - bullet = 15, - energy = 15, - bomb = 15, + melee = 3, + bullet = 3, + energy = 3, + bomb = 3, bio = 100, // It is a robot, shouldn't be affected by viruses or pain agony = 100 ) diff --git a/code/modules/mob/living/carbon/superior_animal/fungi/types/slime.dm b/code/modules/mob/living/carbon/superior_animal/fungi/types/slime.dm index 9464222825d..ec8c79e4bf4 100644 --- a/code/modules/mob/living/carbon/superior_animal/fungi/types/slime.dm +++ b/code/modules/mob/living/carbon/superior_animal/fungi/types/slime.dm @@ -14,9 +14,9 @@ melee_damage_upper = 45 viewRange = 3 armor = list( - melee = 40, - bullet = 20, - energy = 20, + melee = 10, + bullet = 5, + energy = 5, bomb = 10, bio = 10, rad = 10, @@ -26,4 +26,4 @@ /mob/living/carbon/superior_animal/fungi/slime/New() var/picked_name = "[pick("Obsidian","Rock","Iron","Shield","War","Thunk","Brick","Khan","Cutter","Knuck","Kor","Art","Moch","Krak")]" name = "Mold-Slime [picked_name]" - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm index 1318f01eb42..f2b5994182f 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm @@ -9,18 +9,18 @@ mob_size = MOB_MEDIUM - maxHealth = 100 - health = 100 + maxHealth = 100 * SPIDER_HEALTH_MOD + health = 100 * SPIDER_HEALTH_MOD attack_sound = 'sound/weapons/spiderlunge.ogg' speak_emote = list("chitters") emote_see = list("chitters.", "rubs its legs.") speak_chance = 5 - get_stat_modifier = TRUE //We get randomized addition armor - armor_penetration = 5 + get_stat_modifier = FALSE //We're too baby to get extra mods. + armor_divisor = 1 - armor = list(melee = 5, bullet = 0, energy = 0, bomb = 5, bio = 10, rad = 25) + armor = list(melee = 1, bullet = 0, energy = 0, bomb = 1, bio = 10, rad = 25) allowed_stat_modifiers = list( /datum/stat_modifier/mob/living/carbon/superior_animal/lustrous = 33, diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter/hunter.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter/hunter.dm index c34d07853ea..c938e362746 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter/hunter.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter/hunter.dm @@ -4,8 +4,8 @@ desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes." icon_state = "hunter" icon_living = "hunter" - maxHealth = 70 - health = 70 + maxHealth = 70 * SPIDER_HEALTH_MOD + health = 70 * SPIDER_HEALTH_MOD melee_damage_lower = 10 melee_damage_upper = 20 poison_per_bite = 4 @@ -18,7 +18,7 @@ name = "cloaker spider" desc = "Furry and black, it makes you shudder to look at it. This one has a weaker chameleonic chitin that makes it hard to see." alpha = 50 - armor = list(melee = 5, bullet = 0, energy = 5, bomb = 0, bio = 10, rad = 25, agony = 0) + armor = list(melee = 1, bullet = 0, energy = 0, bomb = 0, bio = 10, rad = 25, agony = 0) /mob/living/carbon/superior_animal/giant_spider/hunter/cloaker/death() //We are now unable to chameleonic chitin do to being dead @@ -30,8 +30,8 @@ desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes and a large red splotch on its abdomen." icon_state = "viper" icon_living = "viper" - maxHealth = 100 - health = 100 + maxHealth = 100 * SPIDER_HEALTH_MOD + health = 100 * SPIDER_HEALTH_MOD melee_damage_lower = 20 melee_damage_upper = 25 @@ -41,8 +41,8 @@ desc = "Furry and black, it makes you shudder to look at it. This one is infused with plasma and has mutated spikes protruding from its chitin." icon_state = "phoron" icon_living = "phoron" - maxHealth = 30 - health = 30 + maxHealth = 30 * SPIDER_HEALTH_MOD + health = 30 * SPIDER_HEALTH_MOD melee_damage_lower = 5 melee_damage_upper = 10 poison_per_bite = 2 @@ -51,7 +51,7 @@ meat_type = /obj/item/reagent_containers/food/snacks/meat/spider/plasma meat_amount = 4 emote_see = list("chitters.","rubs its legs.","vibrates.") - armor_penetration = 50 + armor_divisor = 3 /mob/living/carbon/superior_animal/giant_spider/plasma/UnarmedAttack(var/atom/A, var/proximity) . = ..() @@ -64,13 +64,13 @@ desc = "Furry and black, it makes you shudder to look at it. This one is an absolute unit of chitin, armor, and chittering horror." icon_state = "tarantula" icon_living = "tarantula" - maxHealth = 110 - health = 110 + maxHealth = 110 * SPIDER_HEALTH_MOD + health = 110 * SPIDER_HEALTH_MOD melee_damage_lower = 20 melee_damage_upper = 25 emote_see = list("chitters.","rubs its legs.","thumps its many legs on the ground.") mob_size = MOB_LARGE - armor = list(melee = 15, bullet = 10, energy = 5, bomb = 5, bio = 10, rad = 25, agony = 0) + armor = list(melee = 3, bullet = 1, energy = 0, bomb = 5, bio = 10, rad = 25, agony = 0) /mob/living/carbon/superior_animal/giant_spider/tarantula/UnarmedAttack(var/atom/A, var/proximity) @@ -165,8 +165,8 @@ icon_state = "ogre" icon_living = "ogre" poison_per_bite = 4 - maxHealth = 130 - health = 130 + maxHealth = 130 * SPIDER_HEALTH_MOD + health = 130 * SPIDER_HEALTH_MOD /mob/living/carbon/superior_animal/giant_spider/tarantula/pit name = "pit snapper spider" @@ -184,8 +184,8 @@ icon_state = "burrowing" icon_living = "burrowing" poison_type = "stoxin" - maxHealth = 90 - health = 90 + maxHealth = 90 * SPIDER_HEALTH_MOD + health = 90 * SPIDER_HEALTH_MOD /mob/living/carbon/superior_animal/giant_spider/tarantula/emperor name = "emperor spider" @@ -193,8 +193,8 @@ icon = 'icons/mob/64x64.dmi' icon_state = "spider_emperor" icon_living = "spider_emperor" - maxHealth = 200 - health = 200 + maxHealth = 200 * SPIDER_HEALTH_MOD + health = 200 * SPIDER_HEALTH_MOD move_to_delay = 1 turns_per_move = 7 viewRange = 9 @@ -204,10 +204,10 @@ flash_resistances = 3 //For balance against are speedy fello poison_type = "party drops" meat_type = /obj/item/reagent_containers/food/snacks/meat/spider/emperor - armor = list(melee = 25, bullet = 10, energy = 5, bomb = 25, bio = 10, rad = 25, agony = 0) - armor_penetration = 25 + armor = list(melee = 6, bullet = 6, energy = 2, bomb = 25, bio = 10, rad = 25, agony = 0) + armor_divisor = 2 - get_stat_modifier = FALSE //Were not getting armor + get_stat_modifier = TRUE //Were not getting armor //Yes we are. //Giving the emperor spider his own meat that has party drops. Reducing dropped meat to 3 from 4. meat_amount = 4 //So its more worth killing these @@ -228,8 +228,8 @@ desc = "Furry, white, and black, it makes you shudder to look at it. This one is a massive hulking leviathan capable of striking fear in even the most powerful and stalwart of men." icon_state = "terror_empress" icon_living = "terror_empress" - maxHealth = 750 - health = 750 + maxHealth = 750 * LEVIATHAN_HEALTH_MOD + health = 750 * LEVIATHAN_HEALTH_MOD move_to_delay = 2 turns_per_move = 1 melee_damage_lower = 40 @@ -238,7 +238,7 @@ poison_per_bite = 6 poison_type = "stoxin" meat_type = /obj/item/reagent_containers/food/snacks/meat/spider/reaper_spider - armor_penetration = 30 + armor_divisor = 3 get_stat_modifier = FALSE //Were not getting armor diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm index 3031a0b2029..db93540cba6 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm @@ -9,8 +9,8 @@ desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes." icon_state = "nurse" icon_living = "nurse" - maxHealth = 30 - health = 30 + maxHealth = 30 * SPIDER_HEALTH_MOD + health = 30 * SPIDER_HEALTH_MOD melee_damage_lower = 5 melee_damage_upper = 10 poison_per_bite = 2 @@ -22,7 +22,7 @@ emote_see = list("chitters.","rubs its legs.","trails webs through its hairs.","screeches.") var/web_activity = 30 move_to_delay = 4 //slightly faster than guardians but slower than hunters - armor = list(melee = 0, bullet = 0, energy = 5, bomb = 5, bio = 10, rad = 25, agony = 0) + armor = list(melee = 0, bullet = 0, energy = 0, bomb = 5, bio = 10, rad = 25, agony = 0) var/egg_inject_chance = 0 //AHAHAHAHAHAHAHAAHAHAH, no life_cycles_before_sleep = 3000 //We need more time to eat and web inherent_mutations = list(MUTATION_PROT_MILK, MUTATION_SPIDER_FRIEND, MUTATION_NERVOUSNESS, MUTATION_DEAF) @@ -32,8 +32,8 @@ desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes and purple stripes on the back." icon_state = "midwife" icon_living = "midwife" - maxHealth = 50 - health = 50 + maxHealth = 50 * SPIDER_HEALTH_MOD + health = 50 * SPIDER_HEALTH_MOD melee_damage_lower = 10 melee_damage_upper = 15 poison_per_bite = 4 @@ -45,8 +45,8 @@ desc = "Furry and white, it makes you shudder to look at it. This one has brilliant blue eyes and a pale cold body." icon_state = "nurse_E" icon_living = "nurse_E" - maxHealth = 100 // Slow but tanky - health = 100 + maxHealth = 100 * SPIDER_HEALTH_MOD // Slow but tanky + health = 100 * SPIDER_HEALTH_MOD melee_damage_lower = 10 melee_damage_upper = 15 poison_per_bite = 4 @@ -88,16 +88,16 @@ icon_living = "webslinger" emote_see = list("chitters.","rubs its legs.","trails webs through its hairs.","screeches.","bounces happily in place!") web_activity = 70 - armor = list(melee = 15, bullet = 10, energy = 0, bomb = 5, bio = 10, rad = 25, agony = 0) + armor = list(melee = 3, bullet = 1, energy = 0, bomb = 5, bio = 10, rad = 25, agony = 0) /mob/living/carbon/superior_animal/giant_spider/nurse/recluse name = "recluse spider" desc = "Furry and brown, it makes you shudder to look at it. This one has brilliant green eyes and light brown skin." icon_state = "recluse" icon_living = "recluse" - maxHealth = 15 - health = 15 - poison_per_bite = 1 + maxHealth = 15 * SPIDER_HEALTH_MOD + health = 15 * SPIDER_HEALTH_MOD + poison_per_bite = 1 //1u is all it takes to sleep you, your asleep also dosnt prevet it form attacking you more then once meaning this quit quickly stacks without someones help melee_damage_lower = 3 melee_damage_upper = 5 meat_type = /obj/item/reagent_containers/food/snacks/meat/spider/recluse @@ -106,7 +106,7 @@ move_to_delay = 5 // Very slow do to being 1 hit unfun //Giving the recluse its own special meat that has zombie powder. Reducing the amount of meat made since this is some hard stuff and the recluse is easy to kill. poison_type = "zombiepowder" - armor_penetration = 70 + armor_divisor = 3 /mob/living/carbon/superior_animal/giant_spider/nurse/queen name = "empress spider" @@ -114,8 +114,8 @@ icon = 'icons/mob/64x64.dmi' icon_state = "spider_queen" icon_living = "spider_queen" - maxHealth = 200 - health = 200 + maxHealth = 200 * SPIDER_HEALTH_MOD + health = 200 * SPIDER_HEALTH_MOD melee_damage_lower = 20 melee_damage_upper = 30 poison_per_bite = 4 @@ -126,9 +126,10 @@ egg_inject_chance = 10 //Likely //Giving the queen her own meat type which contains MENACE. mob_size = MOB_LARGE - armor = list(melee = 15, bullet = 0, energy = 0, bomb = 5, bio = 10, rad = 25, agony = 0) + get_stat_modifier = TRUE + armor = list(melee = 3, bullet = 1, energy = 0, bomb = 5, bio = 10, rad = 25, agony = 0) inherent_mutations = list(MUTATION_GIGANTISM, MUTATION_SPIDER_FRIEND, MUTATION_RAND_UNSTABLE, MUTATION_RAND_UNSTABLE, MUTATION_RAND_UNSTABLE) - armor_penetration = 35 + armor_divisor = 2 /mob/living/carbon/superior_animal/giant_spider/nurse/queen/New() ..() diff --git a/code/modules/mob/living/carbon/superior_animal/human/stranger.dm b/code/modules/mob/living/carbon/superior_animal/human/stranger.dm index d1bb68519f8..c75d3a84768 100644 --- a/code/modules/mob/living/carbon/superior_animal/human/stranger.dm +++ b/code/modules/mob/living/carbon/superior_animal/human/stranger.dm @@ -20,7 +20,7 @@ status_flags = CANPUSH ranged = TRUE rapid = TRUE - armor = list(melee = 10, bullet = 35, energy = 40, bomb = 25, bio = 100, rad = 100) //Were in a space suit thing? + armor = list(melee = 6, bullet = 3, energy = 5, bomb = 25, bio = 100, rad = 100) //Were in a space suit thing? projectiletype = /obj/item/projectile/plasma/heavy projectilesound = 'sound/weapons/guns/unknown_spacegun_vaporize.ogg' faction = "bluespace" diff --git a/code/modules/mob/living/carbon/superior_animal/human/subtype/colony/colony.dm b/code/modules/mob/living/carbon/superior_animal/human/subtype/colony/colony.dm index 6af67ad2a6a..23f301b0f68 100644 --- a/code/modules/mob/living/carbon/superior_animal/human/subtype/colony/colony.dm +++ b/code/modules/mob/living/carbon/superior_animal/human/subtype/colony/colony.dm @@ -20,7 +20,7 @@ target_telegraph = "fumbles to ready their weapon, preparing to engage" rush_target_telegraph = "quickly snaps their aim toward" - armor = list(melee = 40, bullet = 40, energy = 30, bomb = 30, bio = 100, rad = 50) + armor = list(melee = 10, bullet = 10, energy = 7, bomb = 30, bio = 100, rad = 50) inherent_mutations = list(MUTATION_HEART, MUTATION_LUNG, MUTATION_LIVER, MUTATION_BLOOD_VESSEL, MUTATION_MUSCLES, MUTATION_NERVES) @@ -120,7 +120,7 @@ melee_damage_upper = 10 egun = TRUE suited_for_space = TRUE - armor = list(melee = 50, bullet = 50, energy = 40, bomb = 30, bio = 100, rad = 50) + armor = list(melee = 12, bullet = 12, energy = 10, bomb = 30, bio = 100, rad = 50) projectiletype = /obj/item/projectile/beam light_range = 5 light_color = COLOR_LIGHTING_BLUE_BRIGHT @@ -150,7 +150,7 @@ egun = TRUE suited_for_space = TRUE projectiletype = /obj/item/projectile/beam - armor = list(melee = 50, bullet = 50, energy = 40, bomb = 30, bio = 100, rad = 50) + armor = list(melee = 12, bullet = 12, energy = 10, bomb = 30, bio = 100, rad = 50) //They are all waring space suits breath_required_type = NONE diff --git a/code/modules/mob/living/carbon/superior_animal/human/subtype/eventwolf/eventwolf.dm b/code/modules/mob/living/carbon/superior_animal/human/subtype/eventwolf/eventwolf.dm index 8c7460a3e23..cb83be8d4ab 100644 --- a/code/modules/mob/living/carbon/superior_animal/human/subtype/eventwolf/eventwolf.dm +++ b/code/modules/mob/living/carbon/superior_animal/human/subtype/eventwolf/eventwolf.dm @@ -9,7 +9,7 @@ maxHealth = 450 ranged = FALSE - armor = list(melee = 35, bullet = 70, energy = 35, bomb = 35, bio = 100, rad = 50) + armor = list(melee = 7, bullet = 17, energy = 7, bomb = 35, bio = 100, rad = 50) faction = "pirate" icon = 'icons/mob/mobs-humanoid.dmi' @@ -40,7 +40,7 @@ stop_automated_movement_when_pulled = 0 melee_damage_lower = 10 melee_damage_upper = 10 - armor = list(melee = 10, bullet = 10, energy = 10, bomb = 0, bio = 100, rad = 50) + armor = list(melee = 2, bullet = 2, energy = 2, bomb = 0, bio = 100, rad = 50) /mob/living/carbon/superior_animal/human/voidwolf/eventwolf/explosive/UnarmedAttack() diff --git a/code/modules/mob/living/carbon/superior_animal/human/subtype/excelsior/excelsior.dm b/code/modules/mob/living/carbon/superior_animal/human/subtype/excelsior/excelsior.dm index 70e6cd51f72..a68d77cbaf9 100644 --- a/code/modules/mob/living/carbon/superior_animal/human/subtype/excelsior/excelsior.dm +++ b/code/modules/mob/living/carbon/superior_animal/human/subtype/excelsior/excelsior.dm @@ -6,17 +6,17 @@ icon_state = "excel_makarov" stop_automated_movement_when_pulled = 1 wander = 0 - maxHealth = 100 - health = 100 + maxHealth = 100 * EXCELSIOR_HEALTH_MOD + health = 100 * EXCELSIOR_HEALTH_MOD - armor = list(melee = 55, bullet = 55, energy = 70, bomb = 80, bio = 90, rad = 25) //Legitmently their armor (melee is higher {45} to account for AI stupidness) + armor = list(melee = 13, bullet = 13, energy = 17, bomb = 80, bio = 90, rad = 25) //Legitmently their armor (melee is higher {45} to account for AI stupidness) //range/ammo stuff ranged = 1 rapid = 1 rapid_fire_shooting_amount = 3 ranged_cooldown = 3 - projectiletype = /obj/item/projectile/bullet/pistol_35/hv + projectiletype = /obj/item/projectile/bullet/pistol_35 projectilesound = 'sound/weapons/guns/fire/9mm_pistol.ogg' limited_ammo = TRUE mag_drop = TRUE @@ -65,7 +65,7 @@ /mob/living/carbon/superior_animal/human/excelsior/excel_ppsh icon_state = "excel_ppsh" - projectiletype = /obj/item/projectile/bullet/pistol_35/hv + projectiletype = /obj/item/projectile/bullet/pistol_35 drop_items = list(/obj/item/gun/projectile/automatic/ppsh) projectilesound = 'sound/weapons/guns/fire/grease_fire.ogg' rounds_left = 71 @@ -74,7 +74,7 @@ /mob/living/carbon/superior_animal/human/excelsior/excel_ak icon_state = "excel_ak" - projectiletype = /obj/item/projectile/bullet/rifle_75/hv + projectiletype = /obj/item/projectile/bullet/rifle_75 drop_items = list(/obj/item/gun/projectile/automatic/ak47) projectilesound = 'sound/weapons/guns/fire/ltrifle_fire.ogg' rounds_left = 20 @@ -84,7 +84,7 @@ /mob/living/carbon/superior_animal/human/excelsior/excel_vintorez icon_state = "excel_vintorez" rapid = 0 //The gun cant rapid fire... - projectiletype = /obj/item/projectile/bullet/rifle_75/hv + projectiletype = /obj/item/projectile/bullet/rifle_75 drop_items = list(/obj/item/gun/projectile/automatic/vintorez) projectilesound = 'sound/weapons/guns/fire/ltrifle_fire.ogg' rounds_left = 10 @@ -93,7 +93,7 @@ /mob/living/carbon/superior_animal/human/excelsior/excel_drozd icon_state = "excel_drozd" - projectiletype = /obj/item/projectile/bullet/magnum_40/hv + projectiletype = /obj/item/projectile/bullet/magnum_40 drop_items = list(/obj/item/gun/projectile/automatic/drozd) projectilesound = 'sound/weapons/guns/fire/smg_fire.ogg' rounds_left = 32 @@ -110,12 +110,12 @@ /mob/living/carbon/superior_animal/human/excelsior/excel_hammer_shield icon_state = "excel_hammer_shield" - maxHealth = 150 //More hp do to shield - health = 150 + maxHealth = 150 * EXCELSIOR_HEALTH_MOD //More hp do to shield + health = 150 * EXCELSIOR_HEALTH_MOD melee_damage_lower = 33 melee_damage_upper = 40 - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP ranged = 0 rapid = 0 diff --git a/code/modules/mob/living/carbon/superior_animal/human/subtype/kriosan/kriosan.dm b/code/modules/mob/living/carbon/superior_animal/human/subtype/kriosan/kriosan.dm index b930586095e..e7bdbca6b91 100644 --- a/code/modules/mob/living/carbon/superior_animal/human/subtype/kriosan/kriosan.dm +++ b/code/modules/mob/living/carbon/superior_animal/human/subtype/kriosan/kriosan.dm @@ -9,7 +9,7 @@ maxHealth = 100 health = 100 - armor = list(melee = 50, bullet = 50, energy = 45, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 12, bullet = 12, energy = 11, bomb = 50, bio = 100, rad = 100) //range/ammo stuff ranged = 1 @@ -54,7 +54,7 @@ icon_state = "kriosan_troop_riot" icon_dead = "kriosan_troop_riot_dead" - armor = list(melee = 60, bullet = 70, energy = 50, bomb = 40, bio = 100, rad = 100) + armor = list(melee = 15, bullet = 17, energy = 12, bomb = 40, bio = 100, rad = 100) //range/ammo stuff rapid = 1 @@ -78,7 +78,7 @@ icon_state = "kriosan_troop_chaingun" icon_dead = "kriosan_troop_chaingun_dead" - armor = list(melee = 70, bullet = 55, energy = 40, bomb = 70, bio = 100, rad = 100) + armor = list(melee = 17, bullet = 13, energy = 10, bomb = 70, bio = 100, rad = 100) rapid = 1 diff --git a/code/modules/mob/living/carbon/superior_animal/human/subtype/prisoners/prisoners.dm b/code/modules/mob/living/carbon/superior_animal/human/subtype/prisoners/prisoners.dm index 0e6f4393d08..3696856789f 100644 --- a/code/modules/mob/living/carbon/superior_animal/human/subtype/prisoners/prisoners.dm +++ b/code/modules/mob/living/carbon/superior_animal/human/subtype/prisoners/prisoners.dm @@ -10,7 +10,7 @@ maxHealth = 75 health = 75 - armor = list(melee = 30, bullet = 30, energy = 20, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 7, bullet = 7, energy = 5, bomb = 30, bio = 100, rad = 100) //range/ammo stuff ranged = TRUE @@ -67,7 +67,7 @@ maxHealth = 100 health = 100 - armor = list(melee = 40, bullet = 40, energy = 25, bomb = 35, bio = 100, rad = 100) + armor = list(melee = 10, bullet = 10, energy = 6, bomb = 35, bio = 100, rad = 100) ranged = FALSE @@ -89,7 +89,7 @@ maxHealth = 125 health = 125 - armor = list(melee = 45, bullet = 45, energy = 30, bomb = 40, bio = 100, rad = 100) + armor = list(melee = 11, bullet = 11, energy = 7, bomb = 40, bio = 100, rad = 100) casingtype = /obj/item/ammo_casing/shotgun/spent diff --git a/code/modules/mob/living/carbon/superior_animal/human/subtype/solgov/marines.dm b/code/modules/mob/living/carbon/superior_animal/human/subtype/solgov/marines.dm index bf5a6be0d47..270e6e46e87 100644 --- a/code/modules/mob/living/carbon/superior_animal/human/subtype/solgov/marines.dm +++ b/code/modules/mob/living/carbon/superior_animal/human/subtype/solgov/marines.dm @@ -9,7 +9,7 @@ maxHealth = 100 health = 100 - armor = list(melee = 50, bullet = 50, energy = 45, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 12, bullet = 12, energy = 11, bomb = 50, bio = 100, rad = 100) casingtype = /obj/item/ammo_casing/heavy_rifle_408/spent @@ -75,7 +75,7 @@ icon_state = "solfed_trooper_shield" icon_dead = "solfed_trooper_shield_dead" - armor = list(melee = 60, bullet = 70, energy = 50, bomb = 40, bio = 100, rad = 100) + armor = list(melee = 15, bullet = 17, energy = 12, bomb = 40, bio = 100, rad = 100) casingtype = /obj/item/ammo_casing/magnum_40/spent @@ -106,7 +106,7 @@ icon_state = "solfed_trooper_shotgun" icon_dead = "solfed_trooper_shotgun_dead" - armor = list(melee = 70, bullet = 55, energy = 40, bomb = 70, bio = 100, rad = 100) + armor = list(melee = 17, bullet = 13, energy = 10, bomb = 70, bio = 100, rad = 100) casingtype = /obj/item/ammo_casing/shotgun/spent @@ -187,7 +187,7 @@ maxHealth = 75 //Less health than a noraml person. health = 75 - armor = list(melee = 25, bullet = 40, energy = 35, bomb = 20, bio = 100, rad = 100) + armor = list(melee = 6, bullet = 10, energy = 8, bomb = 20, bio = 100, rad = 100) casingtype = /obj/item/ammo_casing/heavy_rifle_408/hv/spent diff --git a/code/modules/mob/living/carbon/superior_animal/human/subtype/voidwolf/voidwolf.dm b/code/modules/mob/living/carbon/superior_animal/human/subtype/voidwolf/voidwolf.dm index 892fd478d95..990952824fd 100644 --- a/code/modules/mob/living/carbon/superior_animal/human/subtype/voidwolf/voidwolf.dm +++ b/code/modules/mob/living/carbon/superior_animal/human/subtype/voidwolf/voidwolf.dm @@ -8,13 +8,13 @@ icon_state = "voidwolf_melee" icon_dead = "voidwolf_melee_dead" stop_automated_movement_when_pulled = 0 - maxHealth = 125 - health = 125 + maxHealth = 125 * VOIDWOLF_HEALTH_MOD + health = 125 * VOIDWOLF_HEALTH_MOD melee_damage_lower = 30 melee_damage_upper = 30 melee_sharp = FALSE //Eswords - armor_penetration = 30 + armor_divisor = 3 breath_required_type = 0 // Doesn't need to breath, in a space suit breath_poison_type = 0 // Can't be poisoned @@ -31,7 +31,7 @@ target_telegraph = "fumbles to ready their weapon, preparing to engage" rush_target_telegraph = "quickly snaps their aim toward" - armor = list(melee = 10, bullet = 10, energy = 10, bomb = 0, bio = 100, rad = 50) //Legitmently their armor + armor = list(melee = 2, bullet = 2, energy = 2, bomb = 0, bio = 100, rad = 50) //Legitmently their armor inherent_mutations = list(MUTATION_HEART, MUTATION_LUNG, MUTATION_LIVER, MUTATION_BLOOD_VESSEL, MUTATION_MUSCLES, MUTATION_NERVES) @@ -105,7 +105,7 @@ attack_sound = 'sound/items/Welder.ogg' drop_items = list(/obj/item/tool/weldingtool/advanced) melee_sharp = FALSE - armor_penetration = 0 + armor_divisor = 1 melee_damage_type = BURN /*Ranged Void Wolfs*/ @@ -117,8 +117,8 @@ projectilesound = 'sound/weapons/energy/laser.ogg' melee_damage_lower = 10 //We dont like melee melee_damage_upper = 15 - maxHealth = 75 - health = 75 + maxHealth = 75 * VOIDWOLF_HEALTH_MOD + health = 75 * VOIDWOLF_HEALTH_MOD ranged = TRUE rapid = TRUE rapid_fire_shooting_amount = 3 @@ -131,7 +131,7 @@ mag_type = /obj/item/cell/medium/high/depleted mags_left = 1 melee_sharp = FALSE - armor_penetration = 0 + armor_divisor = 1 /mob/living/carbon/superior_animal/human/voidwolf/ranged/New() ..() @@ -155,7 +155,7 @@ mag_type = /obj/item/cell/small/high/depleted mags_left = 2 melee_sharp = FALSE - armor_penetration = 0 + armor_divisor = 1 melee_damage_type = BURN /mob/living/carbon/superior_animal/human/voidwolf/fieldtech/ranged/New() @@ -175,7 +175,7 @@ projectiletype = /obj/item/projectile/beam drop_items = list(/obj/item/gun/energy/cog) melee_sharp = FALSE - armor_penetration = 0 + armor_divisor = 1 /mob/living/carbon/superior_animal/human/voidwolf/ranged/aerotrooper/New() ..() @@ -188,8 +188,8 @@ icon_dead = "voidwolfcap_dead" melee_damage_lower = 30 melee_damage_upper = 35 - maxHealth = 150 - health = 150 + maxHealth = 150 * VOIDWOLF_HEALTH_MOD + health = 150 * VOIDWOLF_HEALTH_MOD ranged_cooldown = 3 ranged = TRUE rapid = FALSE @@ -201,7 +201,7 @@ mag_type = /obj/item/cell/small/high/depleted mags_left = 1 melee_sharp = TRUE //Eswords - armor_penetration = 30 + armor_divisor = 3 times_to_get_stat_modifiers = 2 //two prefixes @@ -231,8 +231,8 @@ flash_resistances = 20 //no. melee_sharp = TRUE //Eswords - armor_penetration = 30 - armor = list(melee = 60, bullet = 55, energy = 50, bomb = 75, bio = 100, rad = 25) //Legitmently their armor + armor_divisor = 3 + armor = list(melee = 15, bullet = 13, energy = 12, bomb = 75, bio = 100, rad = 25) //Legitmently their armor /mob/living/carbon/superior_animal/human/voidwolf/elite/New() ..() @@ -254,7 +254,7 @@ rapid_fire_shooting_amount = 5 //we're using the burst 5 mode delay_for_rapid_range = 0.22 SECONDS melee_sharp = FALSE - armor_penetration = 0 + armor_divisor = 1 /obj/item/gun/energy/firestorm/reaver_modded @@ -268,18 +268,18 @@ /mob/living/carbon/superior_animal/human/voidwolf/elite/c20r icon_state = "reaver_bulldog" projectilesound = 'sound/weapons/guns/fire/smg_fire.ogg' - projectiletype = /obj/item/projectile/bullet/pistol_35/hv + projectiletype = /obj/item/projectile/bullet/pistol_35 drop_items = list(/obj/item/gun/projectile/automatic/c20r/reaver_modded) rapid_fire_shooting_amount = 8 // WE FIRE REALLY GODDAMN FAST delay_for_rapid_range = 0.15 SECONDS rounds_left = 32 - mag_type = /obj/item/ammo_magazine/smg_35/hv/empty + mag_type = /obj/item/ammo_magazine/smg_35/empty mags_left = 6 //since we fire. FAST - casingtype = /obj/item/ammo_casing/pistol_35/hv/spent + casingtype = /obj/item/ammo_casing/pistol_35/spent melee_sharp = FALSE - armor_penetration = 0 + armor_divisor = 1 /obj/item/gun/projectile/automatic/c20r/reaver_modded @@ -311,7 +311,7 @@ casingtype = /obj/item/ammo_casing/a75/spent melee_sharp = FALSE - armor_penetration = 0 + armor_divisor = 1 /mob/living/carbon/superior_animal/human/voidwolf/elite/gyrojet/New() ..() @@ -330,7 +330,7 @@ drop_items = list(/obj/item/tool/sword/saber/cutlass, /obj/item/shield/buckler/energy/reaver/damaged,/obj/random/cloth/assault/reaver) melee_sharp = TRUE //Eswords - armor_penetration = 30 + armor_divisor = 3 var/block_chance = 65 /mob/living/carbon/superior_animal/human/voidwolf/elite/myrmidon/New() diff --git a/code/modules/mob/living/carbon/superior_animal/human/subtype/xiang jiang/xiang.dm b/code/modules/mob/living/carbon/superior_animal/human/subtype/xiang jiang/xiang.dm index 6c4883a375c..3c0b012e4c1 100644 --- a/code/modules/mob/living/carbon/superior_animal/human/subtype/xiang jiang/xiang.dm +++ b/code/modules/mob/living/carbon/superior_animal/human/subtype/xiang jiang/xiang.dm @@ -10,7 +10,7 @@ maxHealth = 100 health = 100 - armor = list(melee = 30, bullet = 30, energy = 20, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 7, bullet = 7, energy = 5, bomb = 30, bio = 100, rad = 100) //range/ammo stuff ranged = TRUE @@ -73,7 +73,7 @@ maxHealth = 150 health = 150 - armor = list(melee = 70, bullet = 50, energy = 50, bomb = 35, bio = 100, rad = 100) + armor = list(melee = 17, bullet = 12, energy = 12, bomb = 35, bio = 100, rad = 100) ranged = FALSE diff --git a/code/modules/mob/living/carbon/superior_animal/lodge/types/cerberus.dm b/code/modules/mob/living/carbon/superior_animal/lodge/types/cerberus.dm index 426ac1dee5e..ff30b171681 100644 --- a/code/modules/mob/living/carbon/superior_animal/lodge/types/cerberus.dm +++ b/code/modules/mob/living/carbon/superior_animal/lodge/types/cerberus.dm @@ -84,7 +84,7 @@ health = 400 melee_damage_lower = 40 melee_damage_upper = 45 - armor = list(melee = 30, bullet = 30, energy = 20, bomb = 5, bio = 10, rad = 25) + armor = list(melee = 7, bullet = 7, energy = 5, bomb = 5, bio = 10, rad = 25) /mob/living/carbon/superior_animal/lodge/cerberus/chimera/sun name = "Solis" @@ -96,7 +96,7 @@ health = 500 melee_damage_lower = 50 melee_damage_upper = 55 - armor = list(melee = 40, bullet = 40, energy = 30, bomb = 10, bio = 15, rad = 25) + armor = list(melee = 10, bullet = 10, energy = 7, bomb = 10, bio = 15, rad = 25) //Baby cerberus //Grows into a cerberus or chimera. Credit to BigBimmer#2319 for the sprite. diff --git a/code/modules/mob/living/carbon/superior_animal/nanobot/nanobot.dm b/code/modules/mob/living/carbon/superior_animal/nanobot/nanobot.dm index 8f615adc2d7..1b64f65ca67 100644 --- a/code/modules/mob/living/carbon/superior_animal/nanobot/nanobot.dm +++ b/code/modules/mob/living/carbon/superior_animal/nanobot/nanobot.dm @@ -15,7 +15,7 @@ see_in_dark = 10 wander = FALSE stop_automated_movement_when_pulled = TRUE - armor = list(melee = 30, bullet = 30, energy = 30, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 7, bullet = 7, energy = 7, bomb = 50, bio = 100, rad = 100) mob_classification = CLASSIFICATION_SYNTHETIC breath_required_type = 0 // Doesn't need to breath breath_poison_type = 0 // Can't be poisoned diff --git a/code/modules/mob/living/carbon/superior_animal/psi_monsters/psi_monster.dm b/code/modules/mob/living/carbon/superior_animal/psi_monsters/psi_monster.dm index a0cc5e11ba3..89ae99bdeda 100644 --- a/code/modules/mob/living/carbon/superior_animal/psi_monsters/psi_monster.dm +++ b/code/modules/mob/living/carbon/superior_animal/psi_monsters/psi_monster.dm @@ -13,7 +13,7 @@ mob_size = MOB_LARGE viewRange = 8 - armor = list(melee = 20, bullet = 10, energy = 5, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 5, bullet = 2, energy = 1, bomb = 30, bio = 100, rad = 100) cant_be_pulled = TRUE cant_gib = TRUE diff --git a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/Ploge.dm b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/Ploge.dm index c6aaa73579c..cfa7d988ab7 100644 --- a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/Ploge.dm +++ b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/Ploge.dm @@ -13,11 +13,11 @@ phaser = FALSE psionic_respawn = FALSE - maxHealth = 1000 - health = 1000 + maxHealth = 1000 * PSIMOB_HEALTH_MOD + health = 1000 * PSIMOB_HEALTH_MOD //Good stats baseline in case admins dont edit these - armor = list(melee = 60, bullet = 30, energy = 30, bomb = 20, bio = 50, rad = 100, agony = 100) + armor = list(melee = 15, bullet = 7, energy = 7, bomb = 20, bio = 50, rad = 100, agony = 100) ranged = TRUE comfy_range = 8 @@ -29,7 +29,7 @@ can_burrow = FALSE melee_damage_lower = 15 melee_damage_upper = 25 - armor_penetration = 50 + armor_divisor = 3 ranged = TRUE pixel_x = 0 @@ -61,7 +61,7 @@ knockdown_odds = 50 melee_damage_lower = 30 melee_damage_upper = 35 - armor_penetration = 60 + armor_divisor = 4 transform_ed = TRUE projectiletype = /obj/item/projectile/tether/lash for(var/mob/living/target in targets_in_range(in_hear_range = TRUE)) diff --git a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiImpressive.dm b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiImpressive.dm index 185593a9e77..0146516db60 100644 --- a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiImpressive.dm +++ b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiImpressive.dm @@ -5,8 +5,8 @@ icon_state = "vargo" icon_living = "vargo" - maxHealth = 800 - health = 800 + maxHealth = 800 * PSIMOB_HEALTH_MOD + health = 800 * PSIMOB_HEALTH_MOD attack_sound = 'sound/xenomorph/alien_footstep_charge1.ogg' melee_damage_lower = 30 melee_damage_upper = 40 @@ -18,7 +18,7 @@ death_spawn_gift = /obj/random/cluster/psi_monster/maggot_death_gasp death_gasp = "The flesh behemoth heaves as its body crumbles, wriggling pus maggots bursting from its failing rotted bulk!!" drop_items = list(/obj/random/psi/always_spawn, /obj/random/psi/always_spawn) - armor_penetration = 15 + armor_divisor = 1 /mob/living/carbon/superior_animal/psi_monster/mind_gazer name = "mind gazer" @@ -26,8 +26,8 @@ icon_state = "eelo" icon_living = "eelo" - maxHealth = 400 - health = 400 + maxHealth = 400 * PSIMOB_HEALTH_MOD + health = 400 * PSIMOB_HEALTH_MOD melee_damage_lower = 25 melee_damage_upper = 30 emote_see = list("whirls about, its massive singular eye spasming,", "suddenly halts, its singular pupil dilating!", "whistles a small tune...") @@ -35,7 +35,7 @@ healing_factor = 10 attacktext = "rammed" drop_items = list(/obj/random/psi/always_spawn, /obj/random/psi/always_spawn) - armor_penetration = 20 + armor_divisor = 1.2 leach_on_odds = 30 can_leach = TRUE steal_odds = 15 @@ -48,8 +48,8 @@ icon_state = "guardA" icon_living = "guardA" - maxHealth = 600 - health = 600 + maxHealth = 600 * PSIMOB_HEALTH_MOD + health = 600 * PSIMOB_HEALTH_MOD melee_damage_lower = 25 melee_damage_upper = 30 emote_see = list("crackles and pops as its head burns!", "looses a haunting scream!", "claws at its head, trying to put out the flames!") @@ -61,7 +61,7 @@ light_color = COLOR_LIGHTING_RED_BRIGHT attacktext = "clawed" drop_items = list(/obj/random/psi/always_spawn, /obj/random/psi/always_spawn) - armor_penetration = 50 + armor_divisor = 1.5 /mob/living/carbon/superior_animal/psi_monster/cerebral_crusher name = "cerebral crusher" @@ -69,8 +69,8 @@ icon_state = "farartbot" icon_living = "farartbot" life_cycles_before_sleep = 60 - maxHealth = 800 - health = 800 + maxHealth = 800 * PSIMOB_HEALTH_MOD + health = 800 * PSIMOB_HEALTH_MOD attack_sound = 'sound/xenomorph/alien_footstep_charge1.ogg' melee_damage_lower = 30 melee_damage_upper = 40 @@ -80,7 +80,7 @@ healing_factor = 10 attacktext = "slammed" drop_items = list(/obj/random/psi/always_spawn, /obj/random/psi/always_spawn) - armor_penetration = 30 + armor_divisor = 1.3 /mob/living/carbon/superior_animal/psi_monster/wasonce/crimson_jelly name = "crimson jelly" @@ -90,8 +90,8 @@ icon_state = "oormat" icon_living = "oormat" - maxHealth = 800 - health = 800 + maxHealth = 800 * PSIMOB_HEALTH_MOD + health = 800 * PSIMOB_HEALTH_MOD chameleon_skill = 10 healing_factor = 10 pixel_x = 0 @@ -102,9 +102,9 @@ real_mutator = TRUE lethal_to_captive = TRUE //We kill are captives knockdown_odds = 15 - armor = list(melee = 20, bullet = 10, energy = 5, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 5, bullet = 2, energy = 1, bomb = 30, bio = 100, rad = 100) drop_items = list(/obj/random/psi/always_spawn, /obj/random/psi/weapons/always_spawn) - armor_penetration = 50 + armor_divisor = 2.3 /mob/living/carbon/superior_animal/psi_monster/wasonce/crimson_jelly/pitch_horror name = "pitch horror" @@ -113,11 +113,11 @@ icon = 'icons/mob/psi_monsters.dmi' icon_state = "hyper" icon_living = "hyper" - maxHealth = 1250 - health = 1250 + maxHealth = 1250 * PSIMOB_HEALTH_MOD + health = 1250 * PSIMOB_HEALTH_MOD knockdown_odds = 30 drop_items = list(/obj/random/psi/always_spawn, /obj/random/psi/weapons/always_spawn, /obj/random/psi/always_spawn, /obj/random/psi/weapons/always_spawn) - armor_penetration = 70 + armor_divisor = 4 // King's Court. Special named psi mobs with better stats and custom voice lines, they are spawned whenever the king of the hound journey. /mob/living/carbon/superior_animal/psi_monster/flesh_behemoth/baron diff --git a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiMega.dm b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiMega.dm index fd41c85bb02..d37eb7e472f 100644 --- a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiMega.dm +++ b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiMega.dm @@ -6,8 +6,8 @@ icon_state = "crab3" icon_living = "crab3" - maxHealth = 1400 - health = 1400 + maxHealth = 1400 * PSIBOSS_HEALTH_MOD + health = 1400 * PSIBOSS_HEALTH_MOD attack_sound = 'sound/xenomorph/alien_footstep_charge1.ogg' melee_damage_lower = 50 melee_damage_upper = 60 @@ -20,7 +20,7 @@ default_pixel_x = -16 default_pixel_y = 0 size_pixel_offset_x = -16 - armor_penetration = 65 + armor_divisor = 4 momento_mori = /obj/effect/decal/cleanable/psi_ash/king first_teleport_callout = "\the Dreaming King looses a terrible scream before journeying to nowhere, his words bellowing in rage, \"Only the king may wear the crown!\" The answering calls of his court echoing through the realm!" second_teleport_callout = "\the Dreaming King looses an agonized howl before journeying to nowhere, his words bellowing in rage, \"I will never die!\" The strongest of his court heard affirming his call!" diff --git a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiRobust.dm b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiRobust.dm index 04b78bdb9bc..4e39ff7d945 100644 --- a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiRobust.dm +++ b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiRobust.dm @@ -5,15 +5,15 @@ icon_state = "strygh" icon_living = "strygh" - maxHealth = 150 - health = 150 + maxHealth = 150 * PSIMOB_HEALTH_MOD + health = 150 * PSIMOB_HEALTH_MOD melee_damage_lower = 14 melee_damage_upper = 19 emote_see = list("chitters in greeting.", "whispers, \"Let me caress your flesh...\"", "twitches its antennae.") poison_per_bite = 2 turns_per_move = 4 // Slow attacktext = "punched" - armor_penetration = 30 + armor_divisor = 32 /mob/living/carbon/superior_animal/psi_monster/hovering_nightmare name = "hovering nightmare" @@ -22,11 +22,11 @@ icon_state = "regugriator22" icon_living = "regugriator22" - maxHealth = 100 - health = 100 + maxHealth = 100 * PSIMOB_HEALTH_MOD + health = 100 * PSIMOB_HEALTH_MOD melee_damage_lower = 20 melee_damage_upper = 25 - armor_penetration = 25 + armor_divisor = 1.5 emote_see = list("begins to melt, blackened skin sloughing down its form until it pulls taut.", "howls, \"Birth, flesh, death, decay, birth, flesh, death, decay!\"", "howls in agony!") turns_per_move = 10 leach_on_odds = 10 @@ -42,8 +42,8 @@ icon_state = "runner" icon_living = "runner" - maxHealth = 75 - health = 75 + maxHealth = 75 * PSIMOB_HEALTH_MOD + health = 75 * PSIMOB_HEALTH_MOD melee_damage_lower = 14 melee_damage_upper = 18 emote_see = list("extends its tongue to the floor.", "chitters, whipping its tail wildly about!", "hisses with barely contained rage.") @@ -51,7 +51,7 @@ poison_per_bite = 3 poison_type = "xenotoxin" attacktext = "tongued" - armor_penetration = 45 + armor_divisor = 2 /mob/living/carbon/superior_animal/psi_monster/memory name = "memory" @@ -59,14 +59,14 @@ icon_state = "M3" icon_living = "M3" - maxHealth = 140 - health = 140 + maxHealth = 140 * PSIMOB_HEALTH_MOD + health = 140 * PSIMOB_HEALTH_MOD melee_damage_lower = 12 melee_damage_upper = 31 emote_see = list("screams, \"They did this they did this!\"", "howls, \"They could have done something!\"", "whispers, \"I could have done something...\"", "groans, \"Kill me, please...\"", "weeps, \"It will never end.\"") speak_chance = 15 attacktext = "stroked" - armor_penetration = 15 + armor_divisor = 1 leach_on_odds = 70 can_leach = TRUE steal_odds = 5 @@ -80,8 +80,8 @@ icon_state = "floaterx" icon_living = "floaterx" - maxHealth = 100 - health = 100 + maxHealth = 100 * PSIMOB_HEALTH_MOD + health = 100 * PSIMOB_HEALTH_MOD melee_damage_lower = 5 melee_damage_upper = 10 emote_see = list("flexes!", "wriggles lewdly!", "oozes goo.") diff --git a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiTrash.dm b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiTrash.dm index c9b16c74213..e94c8303905 100644 --- a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiTrash.dm +++ b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/PsiTrash.dm @@ -17,7 +17,7 @@ chameleon_skill = 1 speak_chance = 2 attacktext = "clawed" - armor_penetration = 20 + armor_divisor = 1.2 /mob/living/carbon/superior_animal/psi_monster/thought_melter name = "thought melter" @@ -25,15 +25,15 @@ icon_state = "arl" icon_living = "arl" - maxHealth = 75 - health = 75 + maxHealth = 75 * PSIMOB_HEALTH_MOD + health = 75 * PSIMOB_HEALTH_MOD melee_damage_lower = 12 melee_damage_upper = 14 emote_see = list("garbles inane speech.", "howls with laughter!", "growls foul unintelligible words.") speak_chance = 10 poison_per_bite = 1 attacktext = "caressed" - armor_penetration = 30 + armor_divisor = 1.5 /mob/living/carbon/superior_animal/psi_monster/pus_maggot name = "pus maggot" @@ -41,11 +41,11 @@ icon_state = "parasite" icon_living = "parasite" - maxHealth = 110 - health = 110 + maxHealth = 110 * PSIMOB_HEALTH_MOD + health = 110 * PSIMOB_HEALTH_MOD melee_damage_lower = 10 melee_damage_upper = 15 - armor_penetration = 20 + armor_divisor = 1.2 emote_see = list("drools acid onto the floor.", "wriggles in glee!", "rolls over!") var/burn_attack_text = "The pus maggot vomits up some acidic pus all over!" var/burn_attack_sound = 'sound/effects/splat.ogg' diff --git a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/corrupted_beings.dm b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/corrupted_beings.dm index 1b58a813bbb..f3887055c23 100644 --- a/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/corrupted_beings.dm +++ b/code/modules/mob/living/carbon/superior_animal/psi_monsters/types/corrupted_beings.dm @@ -5,8 +5,8 @@ icon_state = "q-hound" icon_living = "q-hound" icon = 'icons/mob/mobs-monster.dmi' - maxHealth = 200 - health = 200 + maxHealth = 200 * DVEY_HEALTH_MOD + health = 200 * DVEY_HEALTH_MOD attack_sound = 'sound/xenomorph/alien_footstep_charge1.ogg' melee_damage_lower = 20 melee_damage_upper = 30 @@ -22,11 +22,11 @@ special_parts = list(/obj/item/animal_part/chimera_fang) - armor_penetration = 25 //Sharp bones + armor_divisor = 2 //Sharp bones //Good stats baseline in case admins dont edit these - armor = list(melee = 45, bullet = 15, energy = 45, bomb = 10, bio = 100, rad = 100, agony = 70) + armor = list(melee = 11, bullet = 3, energy = 11, bomb = 10, bio = 100, rad = 100, agony = 17) /mob/living/carbon/superior_animal/psi_monster/daskvey_follower @@ -35,8 +35,8 @@ icon_state = "psisolder_hm_sword" icon_living = "psisolder_hm_sword" icon = 'icons/mob/mobs-daskvey.dmi' - maxHealth = 250 - health = 250 + maxHealth = 250 * DVEY_HEALTH_MOD + health = 250 * DVEY_HEALTH_MOD attack_sound = 'sound/weapons/slice.ogg' melee_damage_lower = 26 melee_damage_upper = 26 @@ -54,7 +54,7 @@ colony_friend = FALSE friendly_to_colony = FALSE - armor_penetration = 15 + armor_divisor = 1.25 color = "#49D6F2" @@ -63,7 +63,7 @@ can_leave = TRUE //freedom //Same armor that they are warning - armor = list(melee = 35, bullet = 35, energy = 35, bomb = 30, bio = 100, rad = 50) + armor = list(melee = 7, bullet = 7, energy = 7, bomb = 30, bio = 100, rad = 50) /* Note about the deepmaints_bound! @@ -103,7 +103,7 @@ They are soully made and reflavoured to be for PVE. move_to_delay = 1 attacktext = "rends apart" - armor_penetration = 35 + armor_divisor = 2.5 color = null @@ -122,7 +122,7 @@ They are soully made and reflavoured to be for PVE. //Scale armor ref from CDDA //Dragons are weak to melee - source: Dnd //Ive never seen a wizard NOT nuke a dragon with fire ball - armor = list(melee = 40, bullet = 30, energy = 95, bomb = 40, bio = 100, rad = 100) + armor = list(melee = 10, bullet = 17, energy = 23, bomb = 40, bio = 100, rad = 100) /mob/living/carbon/superior_animal/psi_monster/daskvey_follower/daskvey/MiddleClickOn(mob/targetDD as mob) var/mob/living/carbon/superior_animal/psi_monster/daskvey_follower/daskvey/shooter = src //We're the shooter. @@ -188,8 +188,8 @@ They are soully made and reflavoured to be for PVE. desc = "A basic footsoldier of the Hand of Daskvey. Donning the mask of the warrior, the agressive souls of former criminals find themselves too enraged to naught but strike their enemies down with furious rage. Flesh or steel, the axe will smash its way through." icon_state = "psisolder_hm_axe" icon_living = "psisolder_hm_axe" - maxHealth = 250 - health = 250 + maxHealth = 250 * DVEY_HEALTH_MOD + health = 250 * DVEY_HEALTH_MOD melee_damage_lower = 33 melee_damage_upper = 33 emote_see = list("looks left then right.", "breaths heavily.", "adjusts their armour.") @@ -200,7 +200,7 @@ They are soully made and reflavoured to be for PVE. drop_items = list(/obj/item/tool/sword/cleaver/cult/deepmaints) - armor_penetration = 15 + armor_divisor = 1.25 /mob/living/carbon/superior_animal/psi_monster/daskvey_follower/cleaver/deepmaints_bound name = "Wild Daskveyian Wall Breaker" @@ -218,8 +218,8 @@ They are soully made and reflavoured to be for PVE. desc = "Trained warrior of the Hand of Daskvey. Carrying a laser gun enhanced by the wielder's mind, they inflict deadly pain on any that obstruct the freedom of their cult's members. For freedom is never free." icon_state = "psisolder_hm_plasma" icon_living = "psisolder_hm_plasma" - maxHealth = 250 - health = 250 + maxHealth = 250 * DVEY_HEALTH_MOD + health = 250 * DVEY_HEALTH_MOD melee_damage_lower = 8 melee_damage_upper = 10 emote_see = list("looks left then right.", "breaths heavily.", "adjusts their armour.") @@ -236,7 +236,7 @@ They are soully made and reflavoured to be for PVE. comfy_range = 6 projectiletype = /obj/item/projectile/plasma/aoe/heat - armor_penetration = 15 + armor_divisor = 1 /mob/living/carbon/superior_animal/psi_monster/daskvey_follower/plasma/deepmaints_bound name = "Wild Daskveyian Plasma Caster" @@ -252,8 +252,8 @@ They are soully made and reflavoured to be for PVE. desc = "Trained Gunner of the Hand of Daskvey, their hands blessed with a fine laser rifle to burn away that which would threaten them or their fellow followers." icon_state = "psisolder_hm_laser" icon_living = "psisolder_hm_laser" - maxHealth = 250 - health = 250 + maxHealth = 250 * DVEY_HEALTH_MOD + health = 250 * DVEY_HEALTH_MOD melee_damage_lower = 8 melee_damage_upper = 10 emote_see = list("looks left then right.", "breaths heavily.", "adjusts their armour.") @@ -273,7 +273,7 @@ They are soully made and reflavoured to be for PVE. comfy_range = 6 projectiletype = /obj/item/projectile/beam - armor_penetration = 15 + armor_divisor = 1 /mob/living/carbon/superior_animal/psi_monster/daskvey_follower/laser/deepmaints_bound name = "Wild Daskveyian Las-Gunner" @@ -289,8 +289,8 @@ They are soully made and reflavoured to be for PVE. desc = "A basic Gunner of the Hand of Daskvey, fervent and ready to fight, their weapon sprays waves of lead to any that would harm those that they hold dear." icon_state = "psisolder_hm_smg" icon_living = "psisolder_hm_smg" - maxHealth = 250 - health = 250 + maxHealth = 250 * DVEY_HEALTH_MOD + health = 250 * DVEY_HEALTH_MOD melee_damage_lower = 8 melee_damage_upper = 10 emote_see = list("looks left then right.", "breaths heavily.", "adjusts their armour.") @@ -314,7 +314,7 @@ They are soully made and reflavoured to be for PVE. projectiletype = /obj/item/projectile/bullet/pistol_35/scrap mag_type = /obj/item/ammo_magazine/smg_35/empty - armor_penetration = 15 + armor_divisor = 1 /mob/living/carbon/superior_animal/psi_monster/daskvey_follower/smg/Initialize(mapload) . = ..() @@ -337,8 +337,8 @@ They are soully made and reflavoured to be for PVE. icon_state = "psisolder_hm_rifle" icon_living = "psisolder_hm_rifle" - maxHealth = 250 - health = 250 + maxHealth = 250 * DVEY_HEALTH_MOD + health = 250 * DVEY_HEALTH_MOD melee_damage_lower = 8 melee_damage_upper = 10 emote_see = list("looks left then right.", "breaths heavily.", "adjusts their armour.") @@ -361,7 +361,7 @@ They are soully made and reflavoured to be for PVE. projectiletype = /obj/item/projectile/bullet/rifle_75/scrap mag_type = /obj/item/ammo_magazine/rifle_75/empty - armor_penetration = 15 + armor_divisor = 1 /mob/living/carbon/superior_animal/psi_monster/daskvey_follower/rifle/Initialize(mapload) . = ..() @@ -383,8 +383,8 @@ They are soully made and reflavoured to be for PVE. desc = "A soul of strength and integrity, recovered from the ravages laid upon it. Outfitted in heavy armor, it protects those in its shadow with unbending steel, for they are the wall that holds back any that seek to harm their kin." icon_state = "psi_juggernaut_glass_Shield" icon_living = "psi_juggernaut_glass_Shield" - maxHealth = 300 - health = 300 + maxHealth = 300 * DVEY_HEALTH_MOD + health = 300 * DVEY_HEALTH_MOD melee_damage_lower = 20 melee_damage_upper = 25 emote_see = list("looks left then right.", "breaths heavily.", "adjusts their armour.") @@ -394,8 +394,8 @@ They are soully made and reflavoured to be for PVE. drop_items = list() - armor_penetration = 0 - armor = list(melee = 60, bullet = 60, energy = 60, bomb = 100, bio = 100, rad = 90) + armor_divisor = 1 + armor = list(melee = 15, bullet = 15, energy = 3, bomb = 100, bio = 100, rad = 90) var/knockdown_odds = 30 // BUMP! @@ -424,8 +424,8 @@ They are soully made and reflavoured to be for PVE. desc = "A soul of strength and integrity, recovered from the ravages laid upon it. Outfitted in heavy armor, it protects those in its shadow with unwavering confidence, for they know what failure means." icon_state = "psi_juggernaut_glass_halberd" icon_living = "psi_juggernaut_glass_halberd" - maxHealth = 280 - health = 280 + maxHealth = 280 * DVEY_HEALTH_MOD + health = 280 * DVEY_HEALTH_MOD melee_damage_lower = 33 melee_damage_upper = 33 emote_see = list("looks left then right", "breaths heavilly", "adjusts their armour") @@ -435,8 +435,8 @@ They are soully made and reflavoured to be for PVE. drop_items = list() - armor_penetration = 30 - armor = list(melee = 60, bullet = 60, energy = 60, bomb = 100, bio = 100, rad = 90) + armor_divisor = 1.5 + armor = list(melee = 15, bullet = 15, energy = 3, bomb = 100, bio = 100, rad = 90) /mob/living/carbon/superior_animal/psi_monster/daskvey_follower/halberd/deepmaints_bound name = "Wild Daskveyian Halberdier" @@ -452,8 +452,8 @@ They are soully made and reflavoured to be for PVE. desc = "A soul recently uplifted by the Hand of Daskvey, still lost and recovering from its pains, they find themselves lost in a trance of forgotten memories." icon_state = "psion_h" icon_living = "psion_h" - maxHealth = 150 - health = 150 + maxHealth = 150 * DVEY_HEALTH_MOD + health = 150 * DVEY_HEALTH_MOD melee_damage_lower = 15 melee_damage_upper = 15 emote_see = list("looks left then right.", "breathes softly.", "adjusts their robes.") @@ -463,7 +463,7 @@ They are soully made and reflavoured to be for PVE. drop_items = list() - armor_penetration = 0 + armor_divisor = 1 armor = list(melee = 0, bullet = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /mob/living/carbon/superior_animal/psi_monster/daskvey_follower/weakling/deepmaints_bound @@ -480,8 +480,8 @@ They are soully made and reflavoured to be for PVE. desc = "A soul reformed by the Hand of Daskvey, they spend their time occupied with daily routine, trying to fend off the insanity of their own predicament, while better learning their new powers." icon_state = "psion_v" icon_living = "psion_v" - maxHealth = 150 - health = 150 + maxHealth = 150 * DVEY_HEALTH_MOD + health = 150 * DVEY_HEALTH_MOD melee_damage_lower = 15 melee_damage_upper = 15 emote_see = list("looks left then right.", "breathes softly.", "adjusts their robes.") @@ -491,7 +491,7 @@ They are soully made and reflavoured to be for PVE. drop_items = list() - armor_penetration = 0 + armor_divisor = 1 armor = list(melee = 0, bullet = 0, energy = 0, bomb = 0, bio = 0, rad = 0) rounds_per_fire = 1 @@ -529,8 +529,8 @@ They are soully made and reflavoured to be for PVE. desc = "A master of the mind, reformed and guided true by the Hand of Daskvey. The members of the Hands form the parties of preach leaders, and assistants to the acolytes. Their knowledge of psionics is of a scholarly level." icon_state = "psion_v_master" icon_living = "psion_v_master" - maxHealth = 150 - health = 150 + maxHealth = 150 * DVEY_HEALTH_MOD + health = 150 * DVEY_HEALTH_MOD melee_damage_lower = 15 melee_damage_upper = 15 emote_see = list("looks left then right.", "breathes softly.", "adjusts their robes.") @@ -540,7 +540,7 @@ They are soully made and reflavoured to be for PVE. drop_items = list() - armor_penetration = 0 + armor_divisor = 1 armor = list(melee = 0, bullet = 0, energy = 0, bomb = 0, bio = 0, rad = 0) rounds_per_fire = 1 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/roach.dm b/code/modules/mob/living/carbon/superior_animal/roach/roach.dm index b017f4dd846..fa7136f89db 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/roach.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/roach.dm @@ -13,9 +13,9 @@ turns_per_move = 4 turns_since_move = 0 - get_stat_modifier = TRUE //We get randomized addition armor + get_stat_modifier = FALSE//NNNNNOPE, having hoard enemies get these has caused massive issues for balance. These should be limited to actual serious mobs from here on out. - armor = list(melee = 5, bullet = 0, energy = 0, bomb = 5, bio = 20, rad = 100, agony = 0) + armor = list(melee = 2, bullet = 0, energy = 0, bomb = 5, bio = 20, rad = 0, agony = 0) allowed_stat_modifiers = list( /datum/stat_modifier/mob/living/carbon/superior_animal/biosilicified = 26, @@ -29,8 +29,8 @@ leather_amount = 0 bones_amount = 0 - maxHealth = 15 - health = 15 + maxHealth = 15 * ROACH_HEALTH_MOD + health = 15 * ROACH_HEALTH_MOD var/blattedin_revives_left = 3 // how many times blattedin can get us back to life (as num for adminbus fun). //The common roach, gets to live 4 times, same as a roachling. They have so much to live for. diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm index b4058b01e63..804c3e6d32a 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm @@ -3,8 +3,8 @@ desc = "A monstrous, dog-sized cockroach. This one smells like welding fuel. Likely to explode when shot!" icon_state = "boomroach" turns_per_move = 4 - maxHealth = 25 - health = 25 + maxHealth = 25 * ROACH_HEALTH_MOD + health = 25 * ROACH_HEALTH_MOD melee_damage_upper = 3 meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/nitro meat_amount = 3 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm index 1692ff03786..bd769c4aa67 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm @@ -2,8 +2,8 @@ name = "Unbekannt roach" desc = "This shimmering insectoid-like creature greatly resembles a giant cockroach. It flickers in and out of reality, as if it didn't really belong here." icon_state = "bluespaceroach" - maxHealth = 25 - health = 25 + maxHealth = 25 * ROACH_HEALTH_MOD + health = 25 * ROACH_HEALTH_MOD meat_type = /obj/item/bluespace_crystal melee_damage_lower = 3 melee_damage_upper = 10 @@ -15,7 +15,7 @@ */ price_tag = 1500 flash_resistances = 15 //We are the light - armor_penetration = 100 //We teleport past the armor + armor_divisor = 10 //We teleport past the armor //spawn_blacklisted = TRUE var/change_tele_to_mob = 25 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/emp.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/emp.dm index 4ebbd8c6b28..3eed2bdde52 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/emp.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/emp.dm @@ -4,13 +4,13 @@ icon_state = "elektromagnetisch" meat_amount = 2 turns_per_move = 2 - maxHealth = 75 - health = 75 + maxHealth = 75 * ROACH_HEALTH_MOD + health = 75 * ROACH_HEALTH_MOD move_to_delay = 7 deathmessage = "pulses violently as it dies!" melee_damage_lower = 12 melee_damage_upper = 15 //Rare - armor_penetration = 50 + armor_divisor = 4 mob_size = MOB_MEDIUM meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/elektromagnetisch diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm index 4618dbc62ee..3ac2829bda3 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm @@ -5,14 +5,15 @@ icon_state = "fuhrer" turns_per_move = 4 - maxHealth = 125 - health = 125 + maxHealth = 125 * ROACH_HEALTH_MOD + health = 125 * ROACH_HEALTH_MOD knockdown_odds = 5 melee_damage_lower = 15 melee_damage_upper = 30 move_to_delay = 8 mob_size = MOB_MEDIUM + get_stat_modifier = TRUE var/distress_level = 0 var/distress_calls = 1 //Each fuhrer can only call for help once in its life var/retreat_calls = 1 //Can call for retreat once too @@ -21,8 +22,8 @@ flash_resistances = 5 //half stuns by flash, so we can still get up and be in the fight! - armor = list(melee = 10, bullet = 10, energy = 5, bomb = 5, bio = 20, rad = 0, agony = 0) - armor_penetration = 25 + armor = list(melee = 3, bullet = 1, energy = 0, bomb = 5, bio = 20, rad = 0, agony = 0) + armor_divisor = 1.25 meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer meat_amount = 6 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/glowing.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/glowing.dm index 05b4db91248..8ad78115f8e 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/glowing.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/glowing.dm @@ -7,14 +7,14 @@ meat_amount = 2 turns_per_move = 1 - maxHealth = 40 - health = 40 + maxHealth = 40 * ROACH_HEALTH_MOD + health = 40 * ROACH_HEALTH_MOD flash_resistances = 10 //We are the light meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/glowing - armor = list(melee = 5, bullet = 0, energy = 0, bomb = 5, bio = 20, rad = 100, agony = 0) + armor = list(melee = 8, bullet = 1, energy = 1, bomb = 5, bio = 20, rad = 100, agony = 0) contaminant_immunity = TRUE toxin_immune = TRUE @@ -22,7 +22,7 @@ knockdown_odds = 3 //Well we still can knockdown we dont tend to over other affects melee_damage_lower = 5 melee_damage_upper = 7 //Weaker than hunter - armor_penetration = 5 + armor_divisor = 1 /mob/living/carbon/superior_animal/roach/glowing/UnarmedAttack(var/atom/A, var/proximity) . = ..() diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm index 55dbd055546..ec87d6c6bf1 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm @@ -4,8 +4,8 @@ icon_state = "jager" turns_per_move = 3 - maxHealth = 30 - health = 30 + maxHealth = 30 * ROACH_HEALTH_MOD + health = 30 * ROACH_HEALTH_MOD move_to_delay = 3.5 blattedin_revives_left = 2 @@ -16,4 +16,4 @@ meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager meat_amount = 3 - armor_penetration = 15 + armor_divisor = 1.1 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm index 8e7dc499adc..eeaef752873 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm @@ -12,13 +12,14 @@ Has ability of every roach. density = TRUE turns_per_move = 6 - maxHealth = 1000 - health = 1000 + maxHealth = 1000 * LEVIATHAN_HEALTH_MOD + health = 1000 * LEVIATHAN_HEALTH_MOD contaminant_immunity = TRUE + get_stat_modifier = TRUE var/datum/reagents/gas_sac - armor = list(melee = 40, bullet = 35, energy = 25, bomb = 50, bio = 20, rad = 100, agony = 0) + armor = list(melee = 10, bullet = 8, energy = 6, bomb = 50, bio = 20, rad = 100, agony = 0) knockdown_odds = 10 melee_damage_lower = 20 @@ -29,7 +30,7 @@ Has ability of every roach. mouse_opacity = MOUSE_OPACITY_OPAQUE // Easier to click on in melee, they're giant targets anyway flash_resistances = 9.9 // were not fully flash proof but almost... - armor_penetration = 75 + armor_divisor = 4 var/distress_call_stage = 3 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm index 2cc43aa0a69..822d43cbab6 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm @@ -6,8 +6,8 @@ meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk meat_amount = 3 turns_per_move = 1 - maxHealth = 30 - health = 30 + maxHealth = 30 * ROACH_HEALTH_MOD + health = 30 * ROACH_HEALTH_MOD knockdown_odds = 3 melee_damage_lower = 1 @@ -22,7 +22,7 @@ min_air_pressure = 0 min_bodytemperature = 0 - armor_penetration = 50 + armor_divisor = 2 never_stimulate_air = TRUE var/list/nanite_swarms = list() diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/plasmaroach.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/plasmaroach.dm index dc1efbb8597..75f96084afa 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/plasmaroach.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/plasmaroach.dm @@ -6,8 +6,8 @@ meat_amount = 2 turns_per_move = 10 //fast boy - maxHealth = 15 - health = 15 + maxHealth = 15 * ROACH_HEALTH_MOD + health = 15 * ROACH_HEALTH_MOD contaminant_immunity = TRUE @@ -18,4 +18,4 @@ /mob/living/carbon/superior_animal/roach/plasmaroach/UnarmedAttack(atom/A, proximity) . = ..() explosion(loc, 0,1,2) //slightly weaker radius than a plasma spider, still hurts like a bitch - gib() \ No newline at end of file + gib() diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm index 276b1323f1a..242445aeed3 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm @@ -4,15 +4,15 @@ icon_state = "roachling" turns_per_move = 3 - maxHealth = 10 - health = 10 + maxHealth = 10 * ROACH_HEALTH_MOD + health = 10 * ROACH_HEALTH_MOD move_to_delay = 3.5 knockdown_odds = 3 melee_damage_lower = 2 melee_damage_upper = 3 - armor = list(melee = 0, bullet = 0, energy = 0, bomb = 0, bio = 5, rad = 0, agony = 0) + armor = list(melee = 1, bullet = 0, energy = 0, bomb = 0, bio = 5, rad = 0, agony = 0) meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat meat_amount = 1 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm index dbf2b4d036c..81c08fc43ec 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm @@ -3,8 +3,8 @@ desc = "A monstrous, dog-sized cockroach. This one smells like hell and secretes strange vapors." icon_state = "seuche" turns_per_move = 6 - maxHealth = 15 - health = 15 + maxHealth = 15 * ROACH_HEALTH_MOD + health = 15 * ROACH_HEALTH_MOD var/datum/reagents/gas_sac //Stores gas. Can't use the default reagents since that is now bloodstream melee_damage_upper = 3 meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm index 62ea34a2002..53eb5075798 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm @@ -4,16 +4,17 @@ icon_state = "panzer" meat_amount = 4 turns_per_move = 2 - maxHealth = 50 - health = 50 + maxHealth = 50 * ROACH_HEALTH_MOD + health = 50 * ROACH_HEALTH_MOD move_to_delay = 7 mob_size = MOB_MEDIUM density = TRUE meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer knockdown_odds = 3 + get_stat_modifier = TRUE //we're big boys, we get a little mod as a treat. - armor = list(melee = 15, bullet = 10, energy = 10, bomb = 5, bio = 20, rad = 0, agony = 0) - armor_penetration = 15 + armor = list(melee = 3, bullet = 1, energy = 0, bomb = 5, bio = 20, rad = 0, agony = 0) + armor_divisor = 1.2 // Panzers won't slip over on water or soap. /mob/living/carbon/superior_animal/roach/tank/slip(slipped_on,stun_duration=8) diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/tazntz.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/tazntz.dm index bbdaa57d40e..afc8de1ec08 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/tazntz.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/tazntz.dm @@ -4,8 +4,8 @@ icon_state = "tzantz" meat_amount = 2 turns_per_move = 4 - maxHealth = 100 - health = 100 + maxHealth = 100 * ROACH_HEALTH_MOD + health = 100 * ROACH_HEALTH_MOD move_to_delay = 4 mob_size = MOB_MEDIUM density = TRUE @@ -14,8 +14,8 @@ melee_damage_lower = 8 melee_damage_upper = 12 - armor = list(melee = 15, bullet = 10, energy = 5, bomb = 5, bio = 20, rad = 0, agony = 0) - armor_penetration = 35 + armor = list(melee = 3, bullet = 2, energy = 1, bomb = 5, bio = 20, rad = 0, agony = 0) + armor_divisor = 1.3 // frogs dont slip over on water or soap. /mob/living/carbon/superior_animal/roach/tazntz/slip(slipped_on,stun_duration=8) diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/toxic.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/toxic.dm index e7aa9d3be78..ea127e5751e 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/toxic.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/toxic.dm @@ -5,15 +5,15 @@ meat_amount = 3 turns_per_move = 1 - maxHealth = 40 - health = 40 + maxHealth = 40 * ROACH_HEALTH_MOD + health = 40 * ROACH_HEALTH_MOD contaminant_immunity = TRUE knockdown_odds = 3 melee_damage_lower = 3 melee_damage_upper = 7 //Weaker than hunter - armor_penetration = 35 + armor_divisor = 1.3 /mob/living/carbon/superior_animal/roach/toxic/UnarmedAttack(atom/A, proximity) . = ..() diff --git a/code/modules/mob/living/carbon/superior_animal/robots/robot.dm b/code/modules/mob/living/carbon/superior_animal/robots/robot.dm index 84ab81e3f6e..4a42ac04746 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/robot.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/robot.dm @@ -15,7 +15,7 @@ mob_classification = CLASSIFICATION_SYNTHETIC projectiletype = /obj/item/projectile/beam/drone - armor = list(melee = 30, bullet = 20, energy = 35, bomb = 30, bio = 100, rad = 100) //We want to be gunned down, not lasered + armor = list(melee = 7, bullet = 5, energy = 8, bomb = 30, bio = 100, rad = 100) //We want to be gunned down, not lasered do_gibs = FALSE diff --git a/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/bishop.dm b/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/bishop.dm index 29ea5578571..0d0cb236732 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/bishop.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/bishop.dm @@ -21,5 +21,5 @@ projectiletype = /obj/item/projectile/plasma/aoe/heat/strong drop1 = /obj/item/book/ritual/cruciform/priest drop2 = /obj/item/stack/material/gold/random - armor = list(melee = 15, bullet = 15, energy = 10, bomb = 5, bio = 100, rad = 100, agony = 100) + armor = list(melee = 3, bullet = 3, energy = 2, bomb = 5, bio = 100, rad = 100, agony = 100) range_telegraph = "starts to hum ominously while staring at" diff --git a/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/knight.dm b/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/knight.dm index e015111ccd0..eaacfefe88a 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/knight.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/knight.dm @@ -19,4 +19,4 @@ meat_type = /obj/item/stack/material/platinum/random drop1 = /obj/item/tool/sword/nt/longsword drop2 = /obj/item/shield/riot/nt - armor = list(melee = 50, bullet = 50, energy = 10, bomb = 15, bio = 100, rad = 100, agony = 100) + armor = list(melee = 12, bullet = 12, energy = 2, bomb = 15, bio = 100, rad = 100, agony = 100) diff --git a/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/pawn.dm b/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/pawn.dm index ce4b49dbc9d..360a0b5e1b8 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/pawn.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/pawn.dm @@ -18,4 +18,4 @@ meat_type = /obj/item/stack/material/silver/random drop1 = /obj/item/tool/sword/nt/longsword drop2 = /obj/item/tool/sword/nt/shortsword - armor = list(melee = 15, bullet = 15, energy = 10, bomb = 5, bio = 100, rad = 100, agony = 100) + armor = list(melee = 3, bullet = 3, energy = 2, bomb = 5, bio = 100, rad = 100, agony = 100) diff --git a/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/rook.dm b/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/rook.dm index 27dac37cb4d..b4e19ba8a2b 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/rook.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/subtype/church/types/rook.dm @@ -17,5 +17,5 @@ meat_type = /obj/item/stack/material/gold/random drop1 = /obj/item/stack/material/gold/random drop2 = /obj/item/book/ritual/cruciform - armor = list(melee = 75, bullet = 25, energy = 20, bomb = 30, bio = 100, rad = 100, agony = 100) + armor = list(melee = 18, bullet = 6, energy = 5, bomb = 30, bio = 100, rad = 100, agony = 100) target_dummy = TRUE diff --git a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/custodian.dm b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/custodian.dm index eca03becb4c..873bdb40bfc 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/custodian.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/custodian.dm @@ -5,8 +5,8 @@ icon_state = "drone_os" attacktext = "zapped" - health = 40 - maxHealth = 40 + health = 40 * GREYSONWEAK_HEALTH_MOD + maxHealth = 40 * GREYSONWEAK_HEALTH_MOD melee_damage_lower = 5 melee_damage_upper = 13 ranged_cooldown = 5 diff --git a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/mechs.dm b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/mechs.dm index 4ce1d83c31d..b04fbc8fe4a 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/mechs.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/mechs.dm @@ -3,8 +3,8 @@ desc = "An AI controlled autonomous power loading unit equipped with a diamond tipped drill." icon_state = "greyson_ripley" attacktext = "drilled" - health = 250 - maxHealth = 250 + health = 250 * GREYSONROBUST_HEALTH_MOD + maxHealth = 250 * GREYSONROBUST_HEALTH_MOD melee_damage_lower = 40 melee_damage_upper = 45 attack_sound = 'sound/mecha/mechdrill.ogg' @@ -109,12 +109,12 @@ attacktext = "titan-punched" turns_per_move = 8 move_to_delay = 1 - health = 400 - maxHealth = 400 + health = 400 * GREYSONROBUST_HEALTH_MOD + maxHealth = 400 * GREYSONROBUST_HEALTH_MOD melee_damage_lower = 50 melee_damage_upper = 55 attack_sound = 'sound/xenomorph/alien_footstep_charge1.ogg' - armor = list(melee = 30, bullet = 30, energy = 30, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 7, bullet = 7, energy = 7, bomb = 30, bio = 100, rad = 100) /mob/living/carbon/superior_animal/robot/greyson/synthetic/ripley/phazon/Initialize(mapload) diff --git a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/roomba.dm b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/roomba.dm index 3524f39f045..c641ac31bf3 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/roomba.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/roomba.dm @@ -23,8 +23,8 @@ name = "Greyson Positronic RMB-A unit" desc = "A small round drone, usually tasked with carrying out menial tasks. This one seems to have a knife taped to it..?" icon_state = "roomba_knife" - health = 30 - maxHealth = 30 + health = 30 * GREYSONWEAK_HEALTH_MOD + maxHealth = 30 * GREYSONWEAK_HEALTH_MOD melee_damage_lower = 12 melee_damage_upper = 17 drop2 = /obj/item/tool/knife @@ -33,8 +33,8 @@ name = "Greyson Positronic RMB-A unit" desc = "A small round drone, usually tasked with carrying out menial tasks. This one has a baton attached to it..." icon_state = "roomba_batton" - health = 30 - maxHealth = 30 + health = 30 * GREYSONWEAK_HEALTH_MOD + maxHealth = 30 * GREYSONWEAK_HEALTH_MOD move_to_delay = 2 //speedy boy! melee_damage_lower = 7 melee_damage_upper = 12 @@ -57,8 +57,8 @@ name = "Greyson Positronic RMB-SEC unit" desc = "A small blue round drone, usually tasked with carrying out menial tasks. This one has a baton attached to it and seems to have added armor..." icon_state = "roomba_IH_batton" - health = 80 - maxHealth = 80 + health = 80 * GREYSONWEAK_HEALTH_MOD + maxHealth = 80 * GREYSONWEAK_HEALTH_MOD move_to_delay = 2 //speedy boy! melee_damage_lower = 7 melee_damage_upper = 12 @@ -67,8 +67,8 @@ name = "Greyson Positronic RMB-A unit" desc = "A small round drone, usually tasked with carrying out menial tasks. Is that a fucking anti-personel mine?!" icon_state = "boomba" - health = 15 - maxHealth = 15 + health = 15 * GREYSONWEAK_HEALTH_MOD + maxHealth = 15 * GREYSONWEAK_HEALTH_MOD move_to_delay = 4 melee_damage_lower = 10 melee_damage_upper = 10 @@ -86,8 +86,8 @@ name = "Greyson Positronic RMB-A unit" desc = "A small round drone, usually tasked with carrying out menial tasks. And this one has a gun." icon_state = "roomba_lmg" - health = 30 - maxHealth = 30 + health = 30 * GREYSONWEAK_HEALTH_MOD + maxHealth = 30 * GREYSONWEAK_HEALTH_MOD melee_damage_lower = 5 melee_damage_upper = 10 ranged = TRUE @@ -110,8 +110,8 @@ name = "Greyson Positronic RMB-SEC unit" desc = "A small blue round drone, usually tasked with carrying out menial tasks. And this one has a overclocked gun." icon_state = "roomba_lmg" - health = 50 - maxHealth = 50 + health = 50 * GREYSONWEAK_HEALTH_MOD + maxHealth = 50 * GREYSONWEAK_HEALTH_MOD melee_damage_lower = 5 melee_damage_upper = 10 rounds_left = 10 //takes more per shot! @@ -121,8 +121,8 @@ name = "Greyson Positronic RMB-SEC unit" desc = "A small blue round drone, usually tasked with carrying out menial tasks. And this one has a gun and seems to have added armor." icon_state = "roomba_IH_lmg" - health = 70 - maxHealth = 70 + health = 70 * GREYSONWEAK_HEALTH_MOD + maxHealth = 70 * GREYSONWEAK_HEALTH_MOD melee_damage_lower = 5 melee_damage_upper = 10 @@ -130,8 +130,8 @@ name = "Greyson Positronic RMB-MED unit" desc = "A small round drone, usually tasked with carrying out menial tasks. This one has a hypo on the top of it..." icon_state = "roomba_drugs" - health = 20 - maxHealth = 20 + health = 20 * GREYSONWEAK_HEALTH_MOD + maxHealth = 20 * GREYSONWEAK_HEALTH_MOD melee_damage_lower = 7 melee_damage_upper = 12 var/injection_per_hit = 2 @@ -149,8 +149,8 @@ name = "Greyson Positronic RMB-MED unit" desc = "A small white round drone, usually tasked with carrying out menial tasks. This one has a hypo on the top of it..." icon_state = "roomba_medical_drugs" - health = 20 - maxHealth = 20 + health = 20 * GREYSONWEAK_HEALTH_MOD + maxHealth = 20 * GREYSONWEAK_HEALTH_MOD melee_damage_lower = 2 melee_damage_upper = 3 injection_per_hit = 1 @@ -160,8 +160,8 @@ name = "Greyson Positronic RMB-MED unit" desc = "A small white round drone, usually tasked with carrying out menial tasks. This one has a hypo on the top of it..." icon_state = "roomba_medical_drugs" - health = 20 - maxHealth = 20 + health = 20 * GREYSONWEAK_HEALTH_MOD + maxHealth = 20 * GREYSONWEAK_HEALTH_MOD melee_damage_lower = 2 melee_damage_upper = 3 injection_per_hit = 3 diff --git a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/synthetic.dm b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/synthetic.dm index 8b3b3a70d3d..d8f6fcbc150 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/synthetic.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/synthetic.dm @@ -6,8 +6,8 @@ attacktext = "punched" turns_per_move = 7 move_to_delay = 2 - health = 100 - maxHealth = 100 + health = 100 * GREYSONROBUST_HEALTH_MOD + maxHealth = 100 * GREYSONROBUST_HEALTH_MOD cleaning = FALSE /mob/living/carbon/superior_animal/robot/greyson/synthetic/epistol @@ -49,9 +49,9 @@ desc = "A full body positronic, tasked with carrying out security duty without emotion, remorse, or questions. This one has an overclocked super cog laser rifle built in its arm." icon_state = "nanotrasen_ert" projectiletype = /obj/item/projectile/beam - health = 150 - maxHealth = 150 - armor = list(melee = 35, bullet = 25, energy = 40, bomb = 60, bio = 100, rad = 100) //We want to be gunned down, not lasered + health = 150 * GREYSONROBUST_HEALTH_MOD + maxHealth = 150 * GREYSONROBUST_HEALTH_MOD + armor = list(melee = 8, bullet = 6, energy = 10, bomb = 60, bio = 100, rad = 100) //We want to be gunned down, not lasered /// base type, dont use /mob/living/carbon/superior_animal/robot/greyson/synthetic/epistol/sniper diff --git a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/turrets.dm b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/turrets.dm index 9cb2da9dc95..bbb019f8ffe 100644 --- a/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/turrets.dm +++ b/code/modules/mob/living/carbon/superior_animal/robots/subtype/greyson/types/turrets.dm @@ -9,8 +9,8 @@ mob_size = MOB_MEDIUM - maxHealth = 75 - health = 75 + maxHealth = 75 * GREYSONWEAK_HEALTH_MOD + health = 75 * GREYSONWEAK_HEALTH_MOD faction = "greyson" @@ -31,7 +31,7 @@ melee_damage_lower = 12 melee_damage_upper = 17 destroy_surroundings = FALSE - armor = list(melee = 35, bullet = 25, energy = 40, bomb = 60, bio = 100, rad = 100) //We want to be gunned down, not lasered + armor = list(melee = 8, bullet = 6, energy = 10, bomb = 60, bio = 100, rad = 100) //We want to be gunned down, not lasered times_to_get_stat_modifiers = 2 //two prefixes @@ -92,8 +92,8 @@ ranged_cooldown = 8 rounds_left = 33 mags_left = 3 - maxHealth = 125 - health = 125 + maxHealth = 125 * GREYSONROBUST_HEALTH_MOD + health = 125 * GREYSONROBUST_HEALTH_MOD rapid = TRUE rapid_fire_shooting_amount = 3 @@ -142,12 +142,12 @@ mag_type = /obj/item/stalker_fuel_rod/depleted mags_left = 2 - armor = list(melee = 35, bullet = 50, energy = 80, bomb = 100, bio = 100, rad = 100) //if people want to melee the stalker that explodes apon death, power to them + armor = list(melee = 8, bullet = 12, energy = 20, bomb = 100, bio = 100, rad = 100) //if people want to melee the stalker that explodes apon death, power to them get_stat_modifier = FALSE // lol no - maxHealth = 400 //tanky - health = 400 + maxHealth = 400 * GREYSONROBUST_HEALTH_MOD //tanky + health = 400 * GREYSONROBUST_HEALTH_MOD deathmessage = "violently explodes, its internal generator combusting in a brilliant blue-white flame!" reload_message = "lets out a hiss as a fuel rod ejects from its carapace!" diff --git a/code/modules/mob/living/carbon/superior_animal/termite/termite.dm b/code/modules/mob/living/carbon/superior_animal/termite/termite.dm index 8e705b1dfb8..9a920f7a434 100644 --- a/code/modules/mob/living/carbon/superior_animal/termite/termite.dm +++ b/code/modules/mob/living/carbon/superior_animal/termite/termite.dm @@ -27,7 +27,7 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi fleshcolor = "#7C90B8" bloodcolor = "#7C90B8" - armor_penetration = 5 + armor_divisor = 1 destroy_surroundings = TRUE friendly_to_colony = FALSE @@ -44,7 +44,7 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi //Controller that spawns the termites var/datum/termite_controller/controller - get_stat_modifier = TRUE + get_stat_modifier = FALSE allowed_stat_modifiers = list( /datum/stat_modifier/mob/living/carbon/superior_animal/durable = 20, @@ -162,7 +162,7 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi melee_damage_upper = TERMITE_DMG_MED //Armor related variables - armor = list(melee = 15, bullet = 20, energy = 20, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 5, bullet = 3, energy = 3, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/iron @@ -188,7 +188,7 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi melee_damage_upper = TERMITE_DMG_HIGH //Armor related variables - armor = list(melee = 20, bullet = 30, energy = 10, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 8, bullet = 5, energy = 2, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/silver @@ -217,7 +217,7 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi melee_damage_upper = TERMITE_DMG_LOW //Armor related variables - armor = list(melee = 30, bullet = 20, energy = 10, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 6, bullet = 3, energy = 2, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/uranium @@ -243,7 +243,7 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi melee_damage_upper = TERMITE_DMG_MED //Armor related variables - armor = list(melee = 10, bullet = 20, energy = 25, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 5, bullet = 3, energy = 6, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/plasma @@ -255,7 +255,8 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi icon = 'icons/mob/mobs-termite.dmi' // Sprites made by Polyushko#0323 icon_state = "koroleva_termite" icon_dead = "koroleva_gore" - armor_penetration = 35 + armor_divisor = 1.5 + get_stat_modifier = TRUE //Health related variables maxHealth = TERMITE_HEALTH_HIGH @@ -270,7 +271,7 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi melee_damage_upper = TERMITE_DMG_HIGH //Armor related variables - armor = list(melee = 15, bullet = 20, energy = 25, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 6, bullet = 4, energy = 5, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/diamond @@ -285,7 +286,8 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi comfy_range = 6 //How far we like to be form are targets when we fire! projectiletype = /obj/item/projectile/bullet/spear contaminant_immunity = TRUE - armor_penetration = 35 + get_stat_modifier = TRUE + armor_divisor = 1.5 //Health related variables maxHealth = TERMITE_HEALTH_HIGH @@ -302,7 +304,7 @@ GLOBAL_LIST_INIT(termites_special, list(/mob/living/carbon/superior_animal/termi ranged = TRUE //Armor related variables - armor = list(melee = 30, bullet = 20, energy = 15, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 12, bullet = 4, energy = 5, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/osmium diff --git a/code/modules/mob/living/carbon/superior_animal/termite/termite_no_despawn.dm b/code/modules/mob/living/carbon/superior_animal/termite/termite_no_despawn.dm index 41c72aa652f..aa8dcb8d42f 100644 --- a/code/modules/mob/living/carbon/superior_animal/termite/termite_no_despawn.dm +++ b/code/modules/mob/living/carbon/superior_animal/termite/termite_no_despawn.dm @@ -17,7 +17,7 @@ faction = "wurm" fire_verb = "spits" see_in_dark = 10 - armor_penetration = 15 + armor_divisor = 1.1 density = 0 // Prevents friendly fire between themselves, projectiles will go over them, making them also harder to target. fleshcolor = "#7C90B8" @@ -33,7 +33,7 @@ range_telegraph = "chitin begins to crack and spikes emerge, as it prepares to launch them at" - get_stat_modifier = TRUE + get_stat_modifier = FALSE allowed_stat_modifiers = list( /datum/stat_modifier/mob/living/carbon/superior_animal/durable = 20, @@ -94,7 +94,7 @@ melee_damage_upper = TERMITE_DMG_MED //Armor related variables - armor = list(melee = 20, bullet = 35, energy = 35, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 5, bullet = 3, energy = 3, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/iron @@ -121,7 +121,7 @@ melee_damage_upper = TERMITE_DMG_HIGH //Armor related variables - armor = list(melee = 35, bullet = 59, energy = 20, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 8, bullet = 5, energy = 2, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/silver @@ -151,7 +151,7 @@ melee_damage_upper = TERMITE_DMG_LOW //Armor related variables - armor = list(melee = 50, bullet = 35, energy = 20, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 6, bullet = 3, energy = 2, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/uranium @@ -178,7 +178,7 @@ melee_damage_upper = TERMITE_DMG_MED //Armor related variables - armor = list(melee = 20, bullet = 30, energy = 50, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 5, bullet = 3, energy = 6, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/plasma @@ -190,7 +190,8 @@ icon = 'icons/mob/mobs-termite.dmi' // Sprites made by Polyushko#0323 icon_state = "koroleva_termite" icon_dead = "koroleva_gore" - armor_penetration = 35 + armor_divisor = 1.3 + get_stat_modifier = TRUE inherent_mutations = list(MUTATION_DEAF, MUTATION_RAND_UNSTABLE, MUTATION_GIGANTISM, MUTATION_PROT_MILK, MUTATION_TERMITE_FRIEND) //Health related variables @@ -206,7 +207,7 @@ melee_damage_upper = TERMITE_DMG_HIGH //Armor related variables - armor = list(melee = 25, bullet = 40, energy = 50, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 6, bullet = 4, energy = 5, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/diamond @@ -221,7 +222,8 @@ comfy_range = 6 //How far we like to be form are targets when we fire! projectiletype = /obj/item/projectile/bullet/spear contaminant_immunity = TRUE - armor_penetration = 35 + get_stat_modifier = TRUE + armor_divisor = 1.5 inherent_mutations = list(MUTATION_DEAF, MUTATION_RAND_UNSTABLE, MUTATION_GIGANTISM, MUTATION_SCREAMING) //Health related variables @@ -239,7 +241,7 @@ ranged = TRUE //Armor related variables - armor = list(melee = 50, bullet = 30, energy = 40, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 12, bullet = 4, energy = 5, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/osmium diff --git a/code/modules/mob/living/carbon/superior_animal/vox/thrown_items.dm b/code/modules/mob/living/carbon/superior_animal/vox/thrown_items.dm index ed40553883c..e935daa61f4 100644 --- a/code/modules/mob/living/carbon/superior_animal/vox/thrown_items.dm +++ b/code/modules/mob/living/carbon/superior_animal/vox/thrown_items.dm @@ -2,7 +2,7 @@ name = "sharp stone" damage_types = list(BRUTE = 16) agony = 12 - armor_penetration = 5 + armor_divisor = 1 step_delay = 1.15 check_armour = ARMOR_MELEE can_ricochet = FALSE @@ -15,7 +15,7 @@ name = "rock fragements" damage_types = list(BRUTE = 24) //Same as a .40 agony = 15 - armor_penetration = 25 + armor_divisor = 1.25 //primitive. step_delay = 1 check_armour = ARMOR_MELEE can_ricochet = FALSE diff --git a/code/modules/mob/living/carbon/superior_animal/vox/types/vox_types.dm b/code/modules/mob/living/carbon/superior_animal/vox/types/vox_types.dm index 9d7325ef599..91f4c31ae30 100644 --- a/code/modules/mob/living/carbon/superior_animal/vox/types/vox_types.dm +++ b/code/modules/mob/living/carbon/superior_animal/vox/types/vox_types.dm @@ -44,10 +44,10 @@ reload_message = "picks up a rock!" - armor = list(melee = 20, bullet = 15, energy = 5, bomb = 50, bio = 0, rad = 0) + armor = list(melee = 8, bullet = 5, energy = 0, bomb = 50, bio = 0, rad = 0) ranged = FALSE - armor_penetration = 25 + armor_divisor = 1.25 /mob/living/carbon/superior_animal/vox/hider name = "Inuwa kisa" @@ -62,8 +62,8 @@ reload_message = "picks up a rock!" - maxHealth = 35 //Glass cannon - health = 35 + maxHealth = 35 * VOXBIRD_HEALTH_MOD //Glass cannon + health = 35 * VOXBIRD_HEALTH_MOD /mob/living/carbon/superior_animal/vox/hider/UnarmedAttack() . = ..() @@ -92,9 +92,9 @@ reload_message = "picks up a rock!" - maxHealth = 90 - health = 90 - armor_penetration = 35 + maxHealth = 90 * VOXBIRD_HEALTH_MOD + health = 90 * VOXBIRD_HEALTH_MOD + armor_divisor = 1.25 /mob/living/carbon/superior_animal/vox/weak name = "Yaro mafarauci" @@ -108,8 +108,8 @@ knock_over_odds = 15 - maxHealth = 35 - health = 35 + maxHealth = 35 * VOXBIRD_HEALTH_MOD + health = 35 * VOXBIRD_HEALTH_MOD /mob/living/carbon/superior_animal/vox/rage name = "Jan barazana" @@ -122,7 +122,7 @@ melee_damage_upper = 35 knock_over_odds = 25 - armor_penetration = 15 + armor_divisor = 1.25 /mob/living/carbon/superior_animal/vox/scout name = "karfe kafafu" @@ -136,7 +136,7 @@ knock_over_odds = 30 - armor = list(melee = 30, bullet = 20, bomb = 60, bio = 0, rad = 0) + armor = list(melee = 10, bullet = 8, energy = 2, bomb = 60, bio = 0, rad = 0) ranged = FALSE can_burrow = TRUE diff --git a/code/modules/mob/living/carbon/superior_animal/vox/types/wasp.dm b/code/modules/mob/living/carbon/superior_animal/vox/types/wasp.dm index 39c668d4e31..ee74afa676c 100644 --- a/code/modules/mob/living/carbon/superior_animal/vox/types/wasp.dm +++ b/code/modules/mob/living/carbon/superior_animal/vox/types/wasp.dm @@ -27,7 +27,7 @@ has_special_parts = FALSE - armor = list(melee = 10, bullet = 15, energy = 5, bomb = 20, bio = 20, rad = 0) + armor = list(melee = 2, bullet = 3, energy = 1, bomb = 20, bio = 20, rad = 0) get_stat_modifier = TRUE diff --git a/code/modules/mob/living/carbon/superior_animal/vox/vox.dm b/code/modules/mob/living/carbon/superior_animal/vox/vox.dm index 1908c9684a7..d6c328fd16a 100644 --- a/code/modules/mob/living/carbon/superior_animal/vox/vox.dm +++ b/code/modules/mob/living/carbon/superior_animal/vox/vox.dm @@ -4,8 +4,8 @@ icon_state = "vox_marsmud" icon = 'icons/mob/mobs-voxy.dmi' - maxHealth = 50 - health = 50 + maxHealth = 50 * VOXBIRD_HEALTH_MOD + health = 50 * VOXBIRD_HEALTH_MOD faction = "vox_tribe" //In case of different tribes turns_per_move = 5 @@ -24,12 +24,12 @@ has_special_parts = TRUE special_parts = list(/obj/item/animal_part/wolf_tooth) - armor = list(melee = 10, bullet = 15, energy = 5, bomb = 20, bio = 20, rad = 0) + armor = list(melee = 2, bullet = 1, energy = 0, bomb = 20, bio = 20, rad = 0) get_stat_modifier = TRUE melee_sharp = TRUE //Claws - armor_penetration = 5 + armor_divisor = 1.25 allowed_stat_modifiers = list( /datum/stat_modifier/mob/living/carbon/superior_animal/armor/mult/positive/low = 15, diff --git a/code/modules/mob/living/carbon/superior_animal/wurms/types/wurm.dm b/code/modules/mob/living/carbon/superior_animal/wurms/types/wurm.dm index d39b1f44cc5..4d43e552716 100644 --- a/code/modules/mob/living/carbon/superior_animal/wurms/types/wurm.dm +++ b/code/modules/mob/living/carbon/superior_animal/wurms/types/wurm.dm @@ -141,8 +141,8 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm projectiletype = /obj/item/projectile/goo //Health related variables - maxHealth = WURM_HEALTH_LOW - health = WURM_HEALTH_LOW + maxHealth = WURM_HEALTH_LOW * CAVEMOB_HEALTH_MOD + health = WURM_HEALTH_LOW * CAVEMOB_HEALTH_MOD //Movement related variables move_to_delay = WURM_SPEED_MED @@ -153,7 +153,7 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm melee_damage_upper = WURM_DMG_MED //Armor related variables - armor = list(melee = 10, bullet = 15, energy = 15, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 5, bullet = 8, energy = 8, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/iron @@ -167,8 +167,8 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm icon_living = "worm" //Health related variables - maxHealth = WURM_HEALTH_HIGH - health = WURM_HEALTH_HIGH + maxHealth = WURM_HEALTH_HIGH * CAVEMOB_HEALTH_MOD + health = WURM_HEALTH_HIGH * CAVEMOB_HEALTH_MOD //Movement related variables move_to_delay = WURM_SPEED_SLUG @@ -179,7 +179,7 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm melee_damage_upper = WURM_DMG_LOW //Armor related variables - armor = list(melee = 25, bullet = 20, energy = 10, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 12, bullet = 8, energy = 5, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/silver @@ -193,8 +193,8 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm icon_living = "worm" //Health related variables - maxHealth = WURM_HEALTH_MED - health = WURM_HEALTH_MED + maxHealth = WURM_HEALTH_MED * CAVEMOB_HEALTH_MOD + health = WURM_HEALTH_MED * CAVEMOB_HEALTH_MOD //Movement related variables move_to_delay = WURM_SPEED_HIGH @@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm melee_damage_upper = WURM_DMG_MED //Armor related variables - armor = list(melee = 15, bullet = 30, energy = 10, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 8, bullet = 14, energy = 5, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/osmium @@ -220,8 +220,8 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm icon_living = "worm" //Health related variables - maxHealth = WURM_HEALTH_HIGH - health = WURM_HEALTH_HIGH + maxHealth = WURM_HEALTH_HIGH * CAVEMOB_HEALTH_MOD + health = WURM_HEALTH_HIGH * CAVEMOB_HEALTH_MOD //Movement related variables move_to_delay = WURM_SPEED_SLUG @@ -232,7 +232,7 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm melee_damage_upper = WURM_DMG_MED //Armor related variables - armor = list(melee = 20, bullet = 20, energy = 25, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 5, bullet = 8, energy = 12, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/osmium @@ -249,8 +249,8 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm destroy_surroundings = FALSE //Health related variables - maxHealth = WURM_HEALTH_HIGH - health = WURM_HEALTH_HIGH + maxHealth = WURM_HEALTH_HIGH * CAVEMOB_HEALTH_MOD + health = WURM_HEALTH_HIGH * CAVEMOB_HEALTH_MOD //Movement related variables move_to_delay = WURM_SPEED_SLUG @@ -261,7 +261,7 @@ GLOBAL_LIST_INIT(wurms_special, list(/mob/living/carbon/superior_animal/wurm/osm melee_damage_upper = WURM_DMG_MED //Armor related variables - armor = list(melee = 20, bullet = 20, energy = 25, bomb = 50, bio = 100, rad = 0) + armor = list(melee = 5, bullet = 8, energy = 12, bomb = 50, bio = 100, rad = 0) //Loot related variables ore = /obj/item/stack/ore/iron // given something just in case. diff --git a/code/modules/mob/living/carbon/superior_animal/xenomorph/drone.dm b/code/modules/mob/living/carbon/superior_animal/xenomorph/drone.dm index 35b0ae1552c..8c203dccde5 100644 --- a/code/modules/mob/living/carbon/superior_animal/xenomorph/drone.dm +++ b/code/modules/mob/living/carbon/superior_animal/xenomorph/drone.dm @@ -16,8 +16,8 @@ var/datum/xenomorph/xenomorph_ai mob_size = MOB_LARGE viewRange = 8 - armor = list(melee = 30, bullet = 30, energy = 5, bomb = 30, bio = 100, rad = 100) - armor_penetration = 15 + armor = list(melee = 7, bullet = 7, energy = 1, bomb = 30, bio = 100, rad = 100) + armor_divisor = 1.25 maxHealth = 30 health = 30 @@ -87,7 +87,7 @@ var/datum/xenomorph/xenomorph_ai melee_sharp = TRUE //claws - armor_penetration = 15 + armor_divisor = 1.25 /mob/living/carbon/superior_animal/xenomorph/slip(slipped_on,stun_duration=8) diff --git a/code/modules/mob/living/carbon/superior_animal/xenomorph/types/XenoImpressive.dm b/code/modules/mob/living/carbon/superior_animal/xenomorph/types/XenoImpressive.dm index 238917594dc..510bc904abf 100644 --- a/code/modules/mob/living/carbon/superior_animal/xenomorph/types/XenoImpressive.dm +++ b/code/modules/mob/living/carbon/superior_animal/xenomorph/types/XenoImpressive.dm @@ -9,7 +9,7 @@ health = 250 attack_sound = list('sound/xenomorph/alien_footstep_charge1.ogg', 'sound/xenomorph/alien_footstep_charge2.ogg', 'sound/xenomorph/alien_footstep_charge3.ogg') - armor = list(melee = 35, bullet = 35, energy = 15, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 8, bullet = 8, energy = 3, bomb = 30, bio = 100, rad = 100) melee_damage_lower = 30 melee_damage_upper = 35 @@ -109,7 +109,7 @@ /datum/stat_modifier/mob/living/speed/flat/positive/low = 1 ) - armor = list(melee = 30, bullet = 30, energy = 15, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 7, bullet = 7, energy = 3, bomb = 30, bio = 100, rad = 100) melee_damage_lower = 30 melee_damage_upper = 35 diff --git a/code/modules/mob/living/carbon/superior_animal/xenomorph/types/XenoMega.dm b/code/modules/mob/living/carbon/superior_animal/xenomorph/types/XenoMega.dm index b9b08c99726..adbfce086a7 100644 --- a/code/modules/mob/living/carbon/superior_animal/xenomorph/types/XenoMega.dm +++ b/code/modules/mob/living/carbon/superior_animal/xenomorph/types/XenoMega.dm @@ -12,7 +12,7 @@ melee_damage_lower = 40 melee_damage_upper = 50 - armor = list(melee = 30, bullet = 35, energy = 5, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 7, bullet = 8, energy = 1, bomb = 30, bio = 100, rad = 100) allowed_stat_modifiers = list( /datum/stat_modifier/mob/living/carbon/superior_animal/padded/xeno = 36, @@ -40,7 +40,7 @@ health = 1500 poison_per_bite = 10 - armor = list(melee = 40, bullet = 45, energy = 15, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 10, bullet = 11, energy = 3, bomb = 30, bio = 100, rad = 100) melee_damage_lower = 40 diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index a733defe995..ce0042dc873 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -1,4 +1,3 @@ - /* apply_damage(a,b,c) args @@ -8,27 +7,23 @@ Returns standard 0 if fail */ -/mob/living/proc/apply_damage(damage = 0, damagetype = BRUTE, def_zone = null, armor_divisor = 1, wounding_multiplier = 1, sharp = FALSE, edge = FALSE, used_weapon = null) +/mob/living/proc/apply_damage(damage = 0, damagetype = BRUTE, def_zone = null, armor_divisor = 1, wounding_multiplier = 1, sharp = FALSE, edge = FALSE, used_weapon = null) // After melee rebalance set wounding_multiplier to 0 to activate melee wounding level determination activate_ai() switch(damagetype) - if(BRUTE) - adjustBruteLoss(damage) - + wounding_multiplier = wound_check(injury_type, wounding_multiplier, edge, sharp) + adjustBruteLoss(damage * wounding_multiplier) if(BURN) - if(COLD_RESISTANCE in mutations) - damage = 0 - adjustFireLoss(damage) - +// if(COLD_RESISTANCE in mutations) +// damage = 0 + wounding_multiplier = wound_check(injury_type, wounding_multiplier, edge, sharp) // Why not? + adjustFireLoss(damage * wounding_multiplier) if(TOX) adjustToxLoss(damage) - if(OXY) adjustOxyLoss(damage) - if(CLONE) adjustCloneLoss(damage) - if(HALLOSS) adjustHalLoss(damage) @@ -38,20 +33,20 @@ return TRUE -/mob/living/proc/apply_damages(brute = 0, burn = 0, tox = 0, oxy = 0, clone = 0, halloss = 0, def_zone) +/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/halloss = 0, var/def_zone = null) activate_ai() - if(brute) apply_damage(brute, BRUTE, def_zone) - if(burn) apply_damage(burn, BURN, def_zone) - if(tox) apply_damage(tox, TOX, def_zone) - if(oxy) apply_damage(oxy, OXY, def_zone) - if(clone) apply_damage(clone, CLONE, def_zone) - if(halloss) apply_damage(halloss, HALLOSS, def_zone) + if(brute) apply_damage(brute, BRUTE, def_zone) + if(burn) apply_damage(burn, BURN, def_zone) + if(tox) apply_damage(tox, TOX, def_zone) + if(oxy) apply_damage(oxy, OXY, def_zone) + if(clone) apply_damage(clone, CLONE, def_zone) + if(halloss) apply_damage(halloss, HALLOSS, def_zone) return TRUE -/mob/living/proc/apply_effect(effect = 0, effecttype = STUN, armor_value = 0, check_protection = 1) +/mob/living/proc/apply_effect(var/effect = 0, var/effecttype = STUN, var/armor_value = 0, var/check_protection = 1) activate_ai() if(!effect) @@ -87,7 +82,7 @@ return TRUE -/mob/living/proc/apply_effects(stun = 0, weaken = 0, paralyze = 0, irradiate = 0, stutter = 0, eyeblur = 0, drowsy = 0, agony = 0, armor_value = 0) +/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/armor_value = 0) activate_ai() if(stun) apply_effect(stun, STUN, armor_value) if(weaken) apply_effect(weaken, WEAKEN, armor_value) @@ -100,13 +95,13 @@ // heal ONE external organ, organ gets randomly selected from damaged ones. -/mob/living/proc/heal_organ_damage(brute, burn, additionally_brute_percent = 0, additionaly_burn_percent = 0) +/mob/living/proc/heal_organ_damage(var/brute, var/burn, var/additionally_brute_percent = 0, var/additionaly_burn_percent = 0) adjustBruteLoss(-(brute + getBruteLoss()/100 * additionally_brute_percent)) adjustFireLoss(-(burn + getFireLoss()/100 * additionaly_burn_percent)) src.updatehealth() // damage ONE external organ, organ gets randomly selected from damaged ones. -/mob/living/proc/take_organ_damage(brute, burn, emp=0) +/mob/living/proc/take_organ_damage(var/brute, var/burn, var/emp=0) activate_ai() if(status_flags & GODMODE) return FALSE //godmode @@ -115,13 +110,13 @@ src.updatehealth() // heal MANY external organs, in random order -/mob/living/proc/heal_overall_damage(brute, burn) +/mob/living/proc/heal_overall_damage(var/brute, var/burn) adjustBruteLoss(-brute) adjustFireLoss(-burn) src.updatehealth() // damage MANY external organs, in random order -/mob/living/take_overall_damage(brute, burn, used_weapon) +/mob/living/take_overall_damage(var/brute, var/burn, var/used_weapon = null) if(status_flags & GODMODE) return FALSE //godmode adjustBruteLoss(brute) @@ -129,7 +124,7 @@ src.updatehealth() -/mob/living/get_fall_damage(turf/from, turf/dest) +/mob/living/get_fall_damage(var/turf/from, var/turf/dest) activate_ai() var/damage = min(15, maxHealth*0.4) @@ -138,15 +133,11 @@ damage *= abs(from.z - dest.z)+1 return damage -/mob/living/fall_impact(turf/from, turf/dest) +/mob/living/fall_impact(var/turf/from, var/turf/dest) activate_ai() var/damage = get_fall_damage(from, dest) if (damage > 0) take_overall_damage(damage) playsound(src, pick(punch_sound), 100, 1, 10) - if(ishuman(src)) - if(!src.stats.getPerk(PERK_PARKOUR)) - src.Weaken(4) - else - src.Weaken(4) + Weaken(4) updatehealth() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index dce3e1ccdb7..a482302ea6b 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -1,72 +1,41 @@ -#define ARMOR_HALLOS_COEFFICIENT 0.4 -#define ARMOR_GDR_COEFFICIENT 0.1 +#define ARMOR_HALLOS_COEFFICIENT 0.1 //This calculation replaces old run_armor_check in favor of more complex and better system //If you need to do something else with armor - just use getarmor() proc and do with those numbers all you want //Random absorb system was a cancer, and was removed from all across the codebase. Don't recreate it. Clockrigger 2019 +#define ARMOR_MESSAGE_COOLDOWN 0.5 SECONDS -/mob/living/proc/damage_through_armor( - damage = 0, - damagetype = BRUTE, - def_zone = null, - attack_flag = ARMOR_MELEE, - armour_pen = 0, - used_weapon = null, - sharp = FALSE, - edge = FALSE, - post_pen_mult = 1 - ) - - if(damage == 0) - return FALSE - - //Used for simple/super mobs do to their armor being checked twice - var/armor_times_mod = 1 - - if(istype(src,/mob/living/simple_animal/) || istype(src,/mob/living/carbon/superior_animal/)) - armor_times_mod = 0.5 - - //GDR - guaranteed damage reduction. It's a value that deducted from damage before all calculations - var/armor = getarmor(def_zone, attack_flag) - var/guaranteed_damage_red = armor * ARMOR_GDR_COEFFICIENT - var/armor_effectiveness = max(0, ((armor * armor_times_mod) - armour_pen)) - var/effective_damage = damage - guaranteed_damage_red - - if(istype(src,/mob/living/simple_animal/) || istype(src,/mob/living/carbon/superior_animal/)) - var/mob_brute_armor = src.getarmor(def_zone, "bullet") //All brute over-pen checks bullet rather then melee for simple mobs to keep melee viable - var/mob_laser_armor = src.getarmor(def_zone, "energy") - var/mob_agony_armor = src.getarmor(def_zone, "agony") - - //message_admins("mob_brute_armor = [mob_brute_armor]!") - //message_admins("mob_laser_armor = [mob_laser_armor]!") - //message_admins("mob_agony_armor = [mob_agony_armor]!") - - //We take the armor pen and baseline armor for calulating the armor pen rather then the reduction so that we get correct values - var/burns_armor_overpenetration = armour_pen - mob_laser_armor - var/brute_armor_overpenetration = armour_pen - mob_brute_armor - - //This is put here rather then above over-pen as we want to keep over-pen being with baseline armor rather then halfed. - mob_brute_armor = mob_brute_armor * armor_times_mod - mob_laser_armor = mob_laser_armor * armor_times_mod - - //message_admins("brute_armor_overpenetration = [brute_armor_overpenetration]!") - //message_admins("burns_armor_overpenetration = [burns_armor_overpenetration]!") +/mob/living/var/last_armor_message - //message_admins("effective_damage = [effective_damage]!") +/mob/living/proc/armor_message(msg1, msg2) + if(world.time < last_armor_message) + return FALSE + last_armor_message = world.time + ARMOR_MESSAGE_COOLDOWN + if(msg2) + visible_message(msg1, msg2) + else + show_message(msg1, 1) - if(damagetype == HALLOSS) - effective_damage = max(0,round(effective_damage - mob_agony_armor)) +/mob/living/proc/damage_through_armor(damage = 0, damagetype = BRUTE, def_zone, attack_flag = ARMOR_MELEE, armor_divisor = 0, used_weapon, sharp = FALSE, edge = FALSE, wounding_multiplier, list/dmg_types = list(), return_continuation = FALSE, dir_mult = 1) + if(damage) // If damage is defined, we add it to the list + if(!dmg_types[damagetype]) + dmg_types += damagetype + dmg_types[damagetype] += damage - if(brute_armor_overpenetration > 0 && damagetype == BRUTE) - effective_damage += max(0,round(brute_armor_overpenetration)) + if(armor_divisor <= 0) + armor_divisor = 1 + log_debug("[used_weapon] applied damage to [name] with a nonpositive armor divisor") - if(burns_armor_overpenetration > 0 && damagetype == BURN) - effective_damage += max(0,round(burns_armor_overpenetration)) + var/total_dmg = 0 + var/dealt_damage = 0 - //message_admins("post math effective_damage = [effective_damage]!") + for(var/dmg_type in dmg_types) + total_dmg += dmg_types[dmg_type] - else + if(!total_dmg) + return FALSE +/* shelving this for now. don't wanna deal with it - CDB if(damagetype == HALLOSS) //First we get the nervs! effective_damage = round(effective_damage * clamp((get_specific_organ_efficiency(OP_NERVE, def_zone) / 100), 0.5, 1.5)) @@ -87,110 +56,187 @@ if(prob(effective_damage + 10)) visible_message(SPAN_DANGER("[src] has been knocked down!")) apply_effect(1, WEAKEN, getarmor(def_zone, ARMOR_MELEE) ) +*/ + // Determine DR and ADR, armour divisor reduces it + var/armor = getarmor(def_zone, attack_flag) / armor_divisor + if(!(attack_flag in list(ARMOR_MELEE, ARMOR_BULLET, ARMOR_ENERGY))) // Making sure BIO and other armor types are handled correctly + armor /= 5 + var/ablative_armor = getarmorablative(def_zone, attack_flag) / armor_divisor + + var/remaining_armor = armor + var/remaining_ablative = ablative_armor + + for(var/dmg_type in dmg_types) + var/dmg = dmg_types[dmg_type] + if(dmg) + var/used_armor = 0 // Used for agony calculation, as well as reduction in armour before follow-up attacks + + if(dmg_type in list(BRUTE, BURN, TOX, BLAST)) // Some damage types do not help penetrate armor + if(remaining_armor) + var/dmg_armor_difference = dmg - remaining_armor + var/is_difference_positive = dmg_armor_difference > 0 + used_armor += is_difference_positive ? dmg - dmg_armor_difference : dmg + remaining_armor = is_difference_positive ? 0 : -dmg_armor_difference + dmg = is_difference_positive ? dmg_armor_difference : 0 + if(remaining_ablative && dmg) + var/ablative_difference + ablative_difference = dmg - remaining_ablative + var/is_difference_positive = ablative_difference > 0 + used_armor += is_difference_positive ? dmg - ablative_difference : dmg + remaining_ablative = is_difference_positive ? 0 : -ablative_difference + dmg = is_difference_positive ? ablative_difference : 0 + else + dmg = max(dmg - remaining_armor - remaining_ablative, 0) + + if(istype(src,/mob/living/simple_animal/) || istype(src,/mob/living/carbon/superior_animal/)) //This code is kept as a bit of a dinosaur from GDR but is tweaked for allowing halloss=damage on mobs. + var/mob_agony_armor = src.getarmor(def_zone, "agony") + var/guaranteed_damage_red = armor * 0.1 //0.1 is the former GDR value, tweak this to tweak the whole formulae + var/effective_damage = damage - guaranteed_damage_red + + if(damagetype == HALLOSS) + effective_damage = max(0,round(effective_damage - mob_agony_armor)) + + if(!(dmg_type == HALLOSS)) // Determine pain from impact + adjustHalLoss(used_armor * (wounding_multiplier ? wounding_multiplier : 1) * ARMOR_HALLOS_COEFFICIENT * max(0.5, (get_specific_organ_efficiency(OP_NERVE, def_zone) / 100))) + + dmg_types[dmg_type] = dmg // Finally, we adjust the damage passing through + if(dmg) + dealt_damage += dmg + + if(dmg_type == HALLOSS && ishuman(src)) //We already did this for mobs + dmg = round(dmg * clamp((get_specific_organ_efficiency(OP_NERVE, def_zone) / 100), 0.5, 1.5)) + var/pain_armor = max(0, (src.getarmor(def_zone, "bullet") + src.getarmor(def_zone, "melee") / armor_divisor))//All brute over-pen checks bullet rather then melee for simple mobs to keep melee viable + var/pain_no_matter_what = (dmg * 0.15) //we deal 15% of are pain, this is to stop rubbers being *completely* uses with basic armor - Its not perfect in melee + dmg = max(pain_no_matter_what, (dmg - pain_armor)) + if(ishuman(src)) + var/mob/living/carbon/human/victim = src + if(prob(25 + (dmg * 2))) + if(!victim.stat && !(victim.has_shield())) + if(victim.headcheck(def_zone)) + //Harder to score a stun but if you do it lasts a bit longer + if(prob(dmg)) + visible_message(SPAN_DANGER("[src] [victim.form.knockout_message]")) + apply_effect(5, PARALYZE, getarmor(def_zone, ARMOR_MELEE) ) + else + //Easier to score a stun but lasts less time + if(prob(dmg + 10)) + visible_message(SPAN_DANGER("[src] has been knocked down!")) + apply_effect(1, WEAKEN, getarmor(def_zone, ARMOR_MELEE) ) + + if(dmg_type == BRUTE) + + if ( (sharp || edge) && prob ( (1 - dmg / dmg_types[dmg_type]) * 100 ) ) // If enough of the brute damage is blocked, sharpness is lost from all followup attacks, this converts damage into crushing as well + if(wounding_multiplier) + wounding_multiplier = step_wounding_double(wounding_multiplier) // Implied piercing damage, degrade by two steps (prevents damage duping from <1 multiplier) + else + wounding_multiplier = 1 // Crushing multiplier forced + sharp = FALSE + edge = FALSE + armor_message(SPAN_NOTICE("[src] armor deflected the strike!"), // No cut (strike), only bash + SPAN_NOTICE("Your armor deflects the strike!")) - if(effective_damage <= 0) - show_message(SPAN_NOTICE("Your armor fully absorbs the blow!")) - return FALSE - + apply_damage(dmg, dmg_type, def_zone, armor_divisor, wounding_multiplier, sharp, edge, used_weapon) + if(ishuman(src) && def_zone && dmg >= 20) + var/mob/living/carbon/human/H = src + var/obj/item/organ/external/o = H.get_organ(def_zone) + if (o && o.status & ORGAN_SPLINTED) + visible_message(SPAN_WARNING("The splints break off [src] after being hit!"), + SPAN_WARNING("Your splints break off after being hit!")) + o.status &= ~ORGAN_SPLINTED + var/effective_armor = (1 - dealt_damage / total_dmg) * 100 - //Here we can remove edge or sharpness from the blow - if((sharp || edge) && prob (getarmor(def_zone, attack_flag))) - sharp = 0 - edge = 0 //Feedback //In order to show both target and everyone around that armor is actually working, we are going to send message for both of them //Goon/tg chat should take care of spam issue on this one - - if(armor_effectiveness >= 74) - visible_message(SPAN_NOTICE("[src] armor easily absorbs the blow!"), - SPAN_NOTICE("Your armor reduced the impact greatly!")) - - else if(armor_effectiveness >= 49) - visible_message(SPAN_NOTICE("[src] armor absorbs most of the damage!"), - SPAN_NOTICE("Your armor protects you from impact!")) - - else if(armor_effectiveness >= 24) - show_message(SPAN_NOTICE("Your armor reduced impact for a bit.")) - - //No armor? Damage as usual - if(armor_effectiveness == 0) - apply_damage(effective_damage * post_pen_mult, damagetype, def_zone, used_weapon, sharp, edge) - if(ishuman(src) && def_zone) - var/mob/living/carbon/human/H = src - var/obj/item/organ/external/o = H.get_organ(def_zone) - if (o && o.status & ORGAN_SPLINTED && effective_damage >= 20) - visible_message(SPAN_WARNING("The splints break off [src] after being hit!"), - SPAN_WARNING("Your splints break off after being hit!")) - o.status &= ~ORGAN_SPLINTED - //Here we split damage in two parts, where armor value will determine how much damage will get through - else - //Pain part of the damage, that simulates impact from armor absorbtion - //For balance purposes, it's lowered by ARMOR_HALLOS_COEFFICIENT - if(!(damagetype == HALLOSS )) - var/agony_gamage = round( ( effective_damage * armor_effectiveness * ARMOR_HALLOS_COEFFICIENT * clamp((get_specific_organ_efficiency(OP_NERVE, def_zone) / 100), 0.5, 1.5) / 100)) - adjustHalLoss(agony_gamage) - - //Actual part of the damage that passed through armor - var/actual_damage = round ( ( effective_damage * ( 100 - armor_effectiveness ) ) / 100 ) - apply_damage(actual_damage * post_pen_mult, damagetype, def_zone, used_weapon, sharp, edge) - if(ishuman(src) && def_zone && actual_damage >= 20) - var/mob/living/carbon/human/H = src - var/obj/item/organ/external/o = H.get_organ(def_zone) - if (o && o.status & ORGAN_SPLINTED) - visible_message(SPAN_WARNING("The splints break off [src] after being hit!"), - SPAN_WARNING("Your splints break off after being hit!")) - o.status &= ~ORGAN_SPLINTED - return actual_damage - return effective_damage - + switch(effective_armor) + if(90 to INFINITY) + armor_message(SPAN_NOTICE("[src] armor absorbs the blow!"), + SPAN_NOTICE("Your armor absorbed the impact!")) + if(74 to 90) + armor_message(SPAN_NOTICE("[src] armor easily absorbs the blow!"), + SPAN_NOTICE("Your armor reduced the impact greatly!")) + if(49 to 74) + armor_message(SPAN_NOTICE("[src] armor absorbs most of the damage!"), + SPAN_NOTICE("Your armor protects you from the impact!")) + if(-INFINITY to 24) + armor_message(SPAN_NOTICE("[src] armor reduces the impact by a little."), + SPAN_NOTICE("Your armor reduced the impact a little.")) + + // Deal damage to ablative armour based on how much was used, we multiply armour divisor back so high AP doesn't decrease damage dealt to ADR + if(ablative_armor) + damageablative(def_zone, (ablative_armor - remaining_ablative) * armor_divisor) + + //If we have a grab in our hands and get hit with melee damage type, there is a chance we lower our grab's state + if(attack_flag == ARMOR_MELEE && ishuman(src) && isitem(used_weapon)) + var/mob/living/carbon/human/H = src + var/obj/item/I = used_weapon + var/toughness_val = H.stats.getStat(STAT_TGH) + + if(dealt_damage > 10 && prob((dealt_damage - toughness_val * (sharp && edge ? 1 : 0.5) * (I.w_class < ITEM_SIZE_BULKY ? 1 : 0.5)))) + for(var/obj/item/grab/G in get_both_hands(H)) + visible_message(SPAN_NOTICE("[H]'s grab has been weakened!"), SPAN_WARNING("Your grab has been weakened!")) + G.state-- + + // Returns if a projectile should continue travelling + if(return_continuation) + var/obj/item/projectile/P = used_weapon + P.damage_types = dmg_types + if(sharp) + var/remaining_dmg = 0 + for(var/dmg_type in dmg_types) + remaining_dmg += dmg_types[dmg_type] + return ((total_dmg / 2 < remaining_dmg && remaining_dmg > mob_size) ? PROJECTILE_CONTINUE : PROJECTILE_STOP) + else return PROJECTILE_STOP + + return dealt_damage //if null is passed for def_zone, then this should return something appropriate for all zones (e.g. area effect damage) /mob/living/proc/getarmor(var/def_zone, var/type) - return 0 + return FALSE -/mob/living/simple_animal/getarmor(var/def_zone, var/type) - return src.armor[type] +/mob/living/proc/getarmorablative(var/def_zone, var/type) + return FALSE -/mob/living/carbon/superior_animal/getarmor(var/def_zone, var/type) - return src.armor[type] +/mob/living/proc/damageablative(var/def_zone, var/damage) + return FALSE /mob/living/proc/hit_impact(damage, dir) if(incapacitated(INCAPACITATION_DEFAULT|INCAPACITATION_BUCKLED_PARTIALLY)) return shake_animation(damage) - -/mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone) + // return PROJECTILE_CONTINUE if bullet should continue flying +/mob/living/bullet_act(obj/item/projectile/P, var/def_zone_hit) var/hit_dir = get_dir(P, src) - if (P.is_hot() >= HEAT_MOBIGNITE_THRESHOLD && (!(P.testing))) + if (P.is_hot() >= HEAT_MOBIGNITE_THRESHOLD) IgniteMob() //Being hit while using a deadman switch - if(istype(get_active_hand(),/obj/item/device/assembly/signaler) && (!(P.testing))) + if(istype(get_active_hand(),/obj/item/device/assembly/signaler)) var/obj/item/device/assembly/signaler/signaler = get_active_hand() if(signaler.deadman && prob(80)) log_and_message_admins("has triggered a signaler deadman's switch") src.visible_message(SPAN_WARNING("[src] triggers their deadman's switch!")) signaler.signal() + var/agony = P.damage_types[HALLOSS] ? P.damage_types[HALLOSS] : 0 //Stun Beams if(P.taser_effect) - if (!(P.testing)) - stun_effect_act(0, P.agony, def_zone, P) - to_chat(src, SPAN_WARNING("You have been hit by [P]!")) - else - P.on_impact(src, TRUE) //not sure if this will work + stun_effect_act(0, agony, def_zone_hit, P) + to_chat(src, SPAN_WARNING("You have been hit by [P]!")) qdel(P) return TRUE - if(P.knockback && hit_dir && (!(P.testing))) + if(P.knockback && hit_dir) throw_at(get_edge_target_turf(src, hit_dir), P.knockback, P.knockback) + P.on_hit(src, def_zone_hit) + //Armor and damage if(!P.nodamage) if (!(P.testing)) @@ -203,24 +249,17 @@ if(is_type_in_list(src, P.supereffective_types, TRUE)) dmult += P.supereffective_mult damage *= dmult - if (!(P.testing)) - damage_through_armor(damage, damage_type, def_zone, P.check_armour, armour_pen = P.armor_penetration, used_weapon = P, sharp=is_sharp(P), edge=has_edge(P), post_pen_mult = P.post_penetration_dammult) + hit_impact(P.get_structure_damage(), hit_dir) + return damage_through_armor(def_zone = def_zone_hit, attack_flag = P.check_armour, armor_divisor = P.armor_divisor, used_weapon = P, sharp = is_sharp(P), edge = has_edge(P), wounding_multiplier = P.wounding_mult, dmg_types = P.damage_types, return_continuation = TRUE) - - if(P.agony > 0 && istype(P,/obj/item/projectile/bullet)) - if (!(P.testing)) - hit_impact(P.agony, hit_dir) - damage_through_armor(P.agony, HALLOSS, def_zone, P.check_armour, armour_pen = P.armor_penetration, used_weapon = P, sharp = is_sharp(P), edge = has_edge(P)) - - ..() - return TRUE + return PROJECTILE_CONTINUE //Handles the effects of "stun" weapons -/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null) +/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon) flash_pain() //For not bloating damage_through_armor here is simple armor calculation for stun time - var/armor_coefficient = max(0, 1 - getarmor(def_zone, ARMOR_ENERGY) / 100) + var/armor_coefficient = max(0, 1 - getarmor(def_zone, ARMOR_ENERGY) / 25) //If armor is 100 or more, we just skeeping it if (stun_amount && armor_coefficient) @@ -229,6 +268,7 @@ Weaken(stun_amount * armor_coefficient) apply_effect(STUTTER, stun_amount * armor_coefficient) apply_effect(EYE_BLUR, stun_amount * armor_coefficient) + SEND_SIGNAL(src, COMSIG_LIVING_STUN_EFFECT) if (agony_amount && armor_coefficient) @@ -236,7 +276,7 @@ apply_effect(STUTTER, agony_amount * armor_coefficient) apply_effect(EYE_BLUR, agony_amount * armor_coefficient) -/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0) +/mob/living/proc/electrocute_act(var/shock_damage, obj/source, var/siemens_coeff = 1) return 0 //only carbon liveforms have this proc /mob/living/emp_act(severity) @@ -266,26 +306,25 @@ return FALSE //Hulk modifier - if(HULK in user.mutations) - effective_force *= 2 +// if(HULK in user.mutations) +// effective_force *= 2 //Apply weapon damage - if (damage_through_armor(effective_force, I.damtype, hit_zone, ARMOR_MELEE, I.armor_penetration, used_weapon = I, sharp = is_sharp(I), edge = has_edge(I), post_pen_mult = I.post_penetration_dammult)) + if (damage_through_armor(effective_force, I.damtype, hit_zone, ARMOR_MELEE, I.armor_divisor, used_weapon = I, sharp = is_sharp(I), edge = has_edge(I))) return TRUE else return FALSE //this proc handles being hit by a thrown atom /mob/living/hitby(atom/movable/AM as mob|obj,var/speed = THROWFORCE_SPEED_DIVISOR)//Standardization and logging -Sieve - if(istype(AM,/obj/)) + if(istype(AM,/obj)) var/obj/O = AM var/dtype = O.damtype - var/throw_damage = O.throwforce //Are minium damage we do is baseline in cases were we do more damage we do more - + var/throw_damage = O.throwforce var/miss_chance = 15 if (O.throw_source) var/distance = get_dist(O.throw_source, loc) - miss_chance = max(15*(distance-4), 0) + miss_chance = max(15*(distance-2), 0) if (prob(miss_chance)) visible_message("\blue \The [O] misses [src] narrowly!") @@ -296,11 +335,8 @@ IgniteMob() src.visible_message(SPAN_WARNING("[src] has been hit by [O].")) - var/ppd = 1 - if(isitem(O)) - var/obj/item/thingytocheck = O - ppd = thingytocheck.post_penetration_dammult - damage_through_armor(throw_damage, dtype, null, ARMOR_MELEE, null, used_weapon = O, sharp = is_sharp(O), edge = has_edge(O), post_pen_mult = ppd) + + damage_through_armor(throw_damage, dtype, null, ARMOR_MELEE, O.armor_divisor, used_weapon = O, sharp = is_sharp(O), edge = has_edge(O)) O.throwing = 0 //it hit, so stop moving @@ -337,10 +373,10 @@ if(T) src.loc = T visible_message(SPAN_WARNING("[src] is pinned to the wall by [O]!"),SPAN_WARNING("You are pinned to the wall by [O]!")) - src.anchored = 1 + src.anchored = TRUE src.pinned += O -/mob/living/proc/embed(var/obj/item/O, var/def_zone=null) +/mob/living/proc/embed(obj/item/O, var/def_zone) if(O.wielded) return if(ismob(O.loc)) @@ -349,7 +385,7 @@ return O.forceMove(src) src.embedded += O - src.visible_message("\The [O] embeds in the [src]!") + src.visible_message(SPAN_DANGER("\The [O] embeds in the [src]!")) src.verbs += /mob/proc/yank_out_object O.on_embed(src) @@ -402,9 +438,7 @@ update_fire() /mob/living/proc/update_fire() - cut_overlay(image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing")) - if(on_fire) - add_overlay(image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing")) + return /mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person fire_stacks = CLAMP(fire_stacks + add_fire_stacks, FIRE_MIN_STACKS, FIRE_MAX_STACKS) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 972bb661690..89b71f38857 100755 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -34,9 +34,9 @@ /// The buildmode holders this mob is currently selected by. var/list/obj/effect/bmode/buildholder/selected_by = list() - var/armor_penetration = 0 //Used for generic attacks - var/projectile_armor_penetration_adjustment = 0 - var/projectile_armor_penetration_mult = 1 + var/armor_divisor = 1 //Used for generic attacks + var/projectile_armor_divisor_adjustment = 0 + var/projectile_armor_divisor_mult = 1 //Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS var/bruteloss = 0.0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage) @@ -47,6 +47,8 @@ var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot. var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off. + var/injury_type = INJURY_TYPE_LIVING //Humanmob uses species instead + var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. var/t_plasma = null diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 37d0a0f8e5a..f70d2d53564 100755 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -555,7 +555,7 @@ var/mob/living/carbon/human/firer = Proj.firer chance -= firer.stats.getStat(STAT_VIG, FALSE) / 5 var/obj/item/projectile/bullet/B = Proj - chance = max((chance - B.armor_penetration), 0) + chance = max((chance / B.armor_divisor), 0) if (!(Proj.testing)) if(B.starting && prob(chance)) // disregard this for test because its luck based visible_message(SPAN_DANGER("\The [Proj.name] ricochets off [src]\'s armour!")) diff --git a/code/modules/mob/living/simple_animal/friendly/light_geist.dm b/code/modules/mob/living/simple_animal/friendly/light_geist.dm index 283d08bb1be..5d6e1f57f93 100644 --- a/code/modules/mob/living/simple_animal/friendly/light_geist.dm +++ b/code/modules/mob/living/simple_animal/friendly/light_geist.dm @@ -16,9 +16,9 @@ mob_size = MOB_SMALL hunger_enabled = 1 armor = list( - melee = 10, - bullet = 10, - energy = 10, + melee = 2, + bullet = 2, + energy = 2, bomb = 10, bio = 10, rad = 10, diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index f73d25a5d2b..918385b377b 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -139,9 +139,9 @@ icon_gib = "brownbear_gib" icon_dead = "combatbear_dead" faction = "excelsior" - armor = list(melee = 20, bullet = 15, energy = 5, bomb = 10, bio = 100, rad = 100, agony = 0) // It's an ARMORED bear - maxHealth = 400 - health = 400 + armor = list(melee = 5, bullet = 3, energy = 1, bomb = 10, bio = 100, rad = 100, agony = 0) // It's an ARMORED bear + maxHealth = 300 * EXCELSIOR_HEALTH_MOD + health = 300 * EXCELSIOR_HEALTH_MOD melee_damage_lower = 30 melee_damage_upper = 40 special_parts = list(/obj/item/animal_part/wolf_tooth,/obj/item/animal_part/wolf_tooth) @@ -154,8 +154,8 @@ icon = 'icons/mob/64x64.dmi' icon_state = "yaoguai" icon_dead = "yaoguai_dead" - maxHealth = 400 - health = 400 + maxHealth = 400 * MEGAFAUNA_HEALTH_MOD + health = 400 * MEGAFAUNA_HEALTH_MOD melee_damage_lower = 40 //Low health but an extremely powerful hitter melee_damage_upper = 50 //You call 400 HP LOW HEALTH?! - Seb leather_amount = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/big.dm b/code/modules/mob/living/simple_animal/hostile/big.dm index ab38ad3904d..3f865026686 100644 --- a/code/modules/mob/living/simple_animal/hostile/big.dm +++ b/code/modules/mob/living/simple_animal/hostile/big.dm @@ -42,12 +42,12 @@ mob_size = MOB_LARGE - maxHealth = 550 - health = 550 + maxHealth = 550 * MEGAFAUNA_HEALTH_MOD + health = 550 * MEGAFAUNA_HEALTH_MOD melee_damage_lower = 35 melee_damage_upper = 40 - armor = list(melee = 35, bullet = 30, energy = 25, bomb = 5, bio = 10, rad = 25) + armor = list(melee = 10, bullet = 14, energy = 12, bomb = 5, bio = 10, agony = 10, rad = 25) old_x = -16 old_y = 0 @@ -84,8 +84,8 @@ icon = 'icons/mob/64x64.dmi' icon_state = "chunks" icon_dead = "deathclaw_dead" - maxHealth = 500 - health = 500 + maxHealth = 500 * MEGAFAUNA_HEALTH_MOD + health = 500 * MEGAFAUNA_HEALTH_MOD melee_damage_lower = 30 melee_damage_upper = 40 meat_amount = 8 @@ -119,7 +119,7 @@ has_special_parts = TRUE special_parts = list(/obj/item/animal_part/wolf_tooth,/obj/item/animal_part/wolf_tooth) mob_size = MOB_LARGE - armor = list(melee = 25, bullet = 10, energy = 0, bomb = 5, bio = 10, rad = 25) + armor = list(melee = 6, bullet = 2, energy = 0, bomb = 5, bio = 10, rad = 25) inherent_mutations = list(MUTATION_CAT_EYES, MUTATION_GIGANTISM, MUTATION_RAND_UNSTABLE) /mob/living/simple_animal/hostile/retaliate/gaslamp @@ -198,8 +198,8 @@ icon_dead = "arachnid_dead" melee_damage_lower = 30 melee_damage_upper = 35 - maxHealth = 300 - health = 300 + maxHealth = 300 * MEGAFAUNA_HEALTH_MOD + health = 300 * MEGAFAUNA_HEALTH_MOD move_to_delay = 2 turns_per_move = 2 vision_range = 5 @@ -216,9 +216,8 @@ has_rare_parts = TRUE special_parts = list(/obj/item/animal_part/stalker_chitin) rare_parts = list(/obj/item/animal_part/stalker_spur) - + armor = list(melee = 5, bullet = 7, energy = 1, bomb = 5, bio = 10, agony = 20, rad = 25) mob_size = MOB_LARGE - armor = list(melee = 15, bullet = 30, energy = 35, bomb = 5, bio = 10, rad = 25) inherent_mutations = list(MUTATION_GIGANTISM, MUTATION_CLUMSY, MUTATION_COUGHING, MUTATION_NERVOUSNESS, MUTATION_CLOAKING) /mob/living/simple_animal/hostile/nightmare/dream_daemon @@ -230,13 +229,13 @@ icon_dead = "arachnid_daemon_dead" melee_damage_lower = 40 melee_damage_upper = 60 - maxHealth = 450 - health = 450 + maxHealth = 450 * MEGAFAUNA_HEALTH_MOD + health = 450 * MEGAFAUNA_HEALTH_MOD move_to_delay = 4 turns_per_move = 4 vision_range = 8 aggro_vision_range = 20 - armor = list(melee = 20, bullet = 30, energy = 5, bomb = 5, bio = 10, rad = 25) //Lost its laser armor do to being a darker colour + armor = list(melee = 5, bullet = 14, energy = 12, bomb = 5, bio = 10, agony = 10, rad = 25) inherent_mutations = list(MUTATION_GIGANTISM, MUTATION_CLUMSY, MUTATION_COUGHING, MUTATION_NERVOUSNESS, MUTATION_GREATER_CLOAKING) /mob/living/simple_animal/hostile/nightmare/MoveToTarget() @@ -270,8 +269,8 @@ icon_dead = "leaper_dead" melee_damage_lower = 50 melee_damage_upper = 60 - maxHealth = 600 - health = 600 + maxHealth = 600 * MEGAFAUNA_HEALTH_MOD + health = 600 * MEGAFAUNA_HEALTH_MOD move_to_delay = 4 turns_per_move = 4 vision_range = 16 @@ -322,8 +321,8 @@ icon_dead = "hellpig_dead" melee_damage_lower = 30 melee_damage_upper = 45 - maxHealth = 750 - health = 750 + maxHealth = 750 * MEGAFAUNA_HEALTH_MOD + health = 750 * MEGAFAUNA_HEALTH_MOD move_to_delay = 4 turns_per_move = 4 vision_range = 16 @@ -341,7 +340,7 @@ has_special_parts = TRUE special_parts = list(/obj/item/animal_part/wolf_tooth,/obj/item/animal_part/wolf_tooth,/obj/item/animal_part/hell_hide) mob_size = MOB_LARGE - armor = list(melee = 25, bullet = 10, energy = 20, bomb = 5, bio = 10, rad = 25) + armor = list(melee = 8, bullet = 6, energy = 10, bomb = 5, bio = 10, agony = 10, rad = 25) inherent_mutations = list(MUTATION_GIGANTISM, MUTATION_CLUMSY, MUTATION_BLINDNESS, MUTATION_NO_PAIN, MUTATION_HYPERION, MUTATION_BLOOD_BANK) /mob/living/simple_animal/hostile/hell_pig/wendigo @@ -353,14 +352,14 @@ icon_dead = "wendigo_dead" melee_damage_lower = 25 melee_damage_upper = 35 - maxHealth = 600 - health = 600 + maxHealth = 600 * MEGAFAUNA_HEALTH_MOD + health = 600 * MEGAFAUNA_HEALTH_MOD move_to_delay = 2 turns_per_move = 6 speak_emote = list("snarls!", "jerks erratically.") has_special_parts = TRUE special_parts = list(/obj/item/animal_part/wolf_tooth,/obj/item/animal_part/wolf_tooth,/obj/item/animal_part/cannibal_tooth) - armor = list(melee = 35, bullet = 20, energy = 0, bomb = 5, bio = 10, rad = 25) + armor = list(melee = 8, bullet = 10, energy = 3, bomb = 5, bio = 10, agony = 10, rad = 25) inherent_mutations = list(MUTATION_GIGANTISM, MUTATION_CLUMSY, MUTATION_IMBECILE, MUTATION_RAND_UNSTABLE, MUTATION_HYPERION) @@ -375,8 +374,8 @@ icon_dead = "slepnir_dead" melee_damage_lower = 30 melee_damage_upper = 35 - maxHealth = 550 - health = 550 + maxHealth = 550 * MEGAFAUNA_HEALTH_MOD + health = 550 * MEGAFAUNA_HEALTH_MOD vision_range = 8 aggro_vision_range = 16 move_to_delay = 1 @@ -384,5 +383,5 @@ speak_emote = list("stomps its hooves!", "whinnies!") has_special_parts = TRUE special_parts = list(/obj/item/animal_part/slepnir_hoof,/obj/item/animal_part/wolf_tooth,/obj/item/animal_part/wolf_tooth) - armor = list(melee = 25, bullet = 10, energy = 10, bomb = 5, bio = 10, rad = 25) + armor = list(melee = 8, bullet = 4, energy = 4, bomb = 5, bio = 10, agony = 10, rad = 25) inherent_mutations = list(MUTATION_GIGANTISM, MUTATION_CLUMSY, MUTATION_IMBECILE, MUTATION_RAND_UNSTABLE, MUTATION_HYPERION, MUTATION_BLOOD_BANK) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 642ba54fa5b..451ebdf883a 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -11,10 +11,10 @@ response_disarm = "gently pushes aside the" response_harm = "hits the" speed = 4 - maxHealth = 25 + maxHealth = 25 * CARP_HEALTH_MOD health = 25 - armor = list(melee = 5, bullet = 10, energy = 50, bomb = 25, bio = 100, rad = 25) //Lasers dont work on scales + armor = list(melee = 1, bullet = 2, energy = 12, bomb = 25, bio = 100, rad = 25) //Lasers dont work on scales harm_intent_damage = 8 @@ -35,8 +35,8 @@ desc = "A ferocious, fang-bearing creature that resembles a fish. This one is quite young." icon_state = "babycarp" icon_gib = "carp_gib" - maxHealth = 10 - health = 10 + maxHealth = 10 * CARP_HEALTH_MOD + health = 10 * CARP_HEALTH_MOD harm_intent_damage = 8 melee_damage_lower = 4 @@ -54,8 +54,8 @@ //pixel_x = -16 - health = 75 - maxHealth = 75 + health = 75 * CARP_HEALTH_MOD + maxHealth = 75 * CARP_HEALTH_MOD has_special_parts = TRUE special_parts = list(/obj/item/animal_part/wolf_tooth) harm_intent_damage = 5 @@ -74,8 +74,8 @@ move_to_delay = 3 mob_size = MOB_LARGE - health = 200 - maxHealth = 200 + health = 150 * CARP_HEALTH_MOD + maxHealth = 150 * CARP_HEALTH_MOD has_special_parts = TRUE special_parts = list(/obj/item/animal_part/wolf_tooth,/obj/item/animal_part/carp_fang) melee_damage_lower = 25 @@ -90,8 +90,8 @@ icon = 'icons/mob/64x64.dmi' icon_state = "megacarp" icon_dead = "megacarp_dead" - maxHealth = 345 //WHITE WHALE - health = 345 + maxHealth = 245 * CARP_HEALTH_MOD//WHITE WHALE + health = 245 * CARP_HEALTH_MOD //HOLY GRAIL //attack_same = 1 We no longer attack are yonger less rare of breeds speed = 1 meat_amount = 10 @@ -108,7 +108,7 @@ /obj/item/animal_part/carp_fang, /obj/item/animal_part/carp_fang) //HOLY GRAIL - armor = list(melee = 25, bullet = 10, energy = 65, bomb = 25, bio = 100, rad = 25) //Lasers dont work on scales + armor = list(melee = 6, bullet = 2, energy = 16, bomb = 25, bio = 100, rad = 25) //Lasers dont work on scales /mob/living/simple_animal/hostile/carp/allow_spacemove() diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm index 93bef4f50e6..6376f56c135 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/simple_animal/hostile/creature.dm @@ -111,8 +111,8 @@ icon = 'icons/mob/mobs-monster.dmi' speak_emote = list("gibbers") icon_state = "devil" - health = 120 - maxHealth = 120 + health = 120 * CAVEMOB_HEALTH_MOD + maxHealth = 120 * CAVEMOB_HEALTH_MOD melee_damage_lower = 15 melee_damage_upper = 20 attacktext = "chomped" @@ -122,7 +122,7 @@ has_special_parts = TRUE inherent_mutations = list(MUTATION_BLINDNESS, MUTATION_ECHOLOCATION, MUTATION_TOXIN_RESISTANCE, MUTATION_BLOOD_BANK) special_parts = list(/obj/item/animal_part/sarg_horn, /obj/item/animal_part/sarg_horn) - armor = list(melee = 5, bullet = 10, energy = 0, bomb = 25, bio = 0, rad = 25) + armor = list(melee = 1, bullet = 2, energy = 0, bomb = 25, bio = 0, rad = 25) /* #define MOOK_ATTACK_NEUTRAL 0 diff --git a/code/modules/mob/living/simple_animal/hostile/excelsior.dm b/code/modules/mob/living/simple_animal/hostile/excelsior.dm index 3781fcac125..746a21888e1 100644 --- a/code/modules/mob/living/simple_animal/hostile/excelsior.dm +++ b/code/modules/mob/living/simple_animal/hostile/excelsior.dm @@ -14,6 +14,15 @@ maxHealth = 800 break_stuff_probability = 100 stop_automated_movement = 1 + armor = list( + melee = 0, + bullet = 0, + energy = 0, + bomb = 0, + bio = 0, //robot + rad = 100, //ROBOT + agony = 100 ///robot + ) aggro_vision_range = 16 //No more cheesing vision_range = 40 //No more cheesing diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 9d005a5d95e..cecd8a3e2ff 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -4,8 +4,8 @@ icon = 'icons/mob/mobs-monster.dmi' icon_state = "melee" icon_dead = "melee_broken" - health = 50 - maxHealth = 50 + health = 50 * REPUBLICON_HEALTH_MOD + maxHealth = 50 * REPUBLICON_HEALTH_MOD melee_damage_lower = 5 melee_damage_upper = 13 attacktext = "sawed" @@ -32,7 +32,7 @@ var/drop1 = /obj/item/scrap_lump var/drop2 = null needs_environment = FALSE - armor = list(melee = 15, bullet = 5, energy = 20, bomb = 25, bio = 100, rad = 25) + armor = list(melee = 3, bullet = 1, energy = 5, bomb = 25, bio = 100, rad = 25) cant_gib = TRUE sanity_damage = 1 @@ -72,8 +72,8 @@ icon = 'icons/mob/mobs-monster.dmi' icon_state = "republicon" icon_dead = "republicon_dead" - health = 75 - maxHealth = 75 + health = 75 * REPUBLICON_HEALTH_MOD + maxHealth = 75 * REPUBLICON_HEALTH_MOD melee_damage_lower = 15 melee_damage_upper = 25 attacktext = "clawed" @@ -147,11 +147,11 @@ melee_damage_lower = 35 melee_damage_upper = 40 - armor = list(melee = 15, bullet = 10, energy = 20, bomb = 25, bio = 0, rad = 25) + armor = list(melee = 3, bullet = 2, energy = 5, bomb = 25, bio = 0, rad = 25) - health = 450 - maxHealth = 450 + health = 450 * REPUBLICON_HEALTH_MOD + maxHealth = 450 * REPUBLICON_HEALTH_MOD attacktext = "sliced" faction = "hivebot" viewRange = 14 diff --git a/code/modules/mob/living/simple_animal/hostile/jelly.dm b/code/modules/mob/living/simple_animal/hostile/jelly.dm index e3933c48a6b..42c1635de6c 100644 --- a/code/modules/mob/living/simple_animal/hostile/jelly.dm +++ b/code/modules/mob/living/simple_animal/hostile/jelly.dm @@ -16,7 +16,7 @@ bones_amount = 0 sanity_damage = 1 - armor = list(melee = 50, bullet = 80, energy = 10, bomb = 25, bio = 100, rad = 100) //Were basiclly ballastic jell + armor = list(melee = 8, bullet = 20, energy = 2, bomb = 25, bio = 100, rad = 100) //Were basiclly ballastic jell /mob/living/simple_animal/hostile/jelly/bloat @@ -31,4 +31,4 @@ melee_damage_upper = 15 speak_chance = 2 emote_hear = list("squishes","spluts","splorts","sqrshes","digests","makes slime noises") - emote_see = list("undulates quietly") \ No newline at end of file + emote_see = list("undulates quietly") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 5556af578f3..9f45b384fb5 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -26,7 +26,7 @@ bones_amount = 0 var/datum/effect/effect/system/trail/ion/trail - armor = list(melee = 35, bullet = 10, energy = 20, bomb = 25, bio = 0, rad = 25) + armor = list(melee = 8, bullet = 2, energy = 5, bomb = 25, bio = 0, rad = 25) //the drone randomly switches between these states because it's malfunctioning var/hostile_drone = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index f503aabcdab..08f687c03f4 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -271,7 +271,7 @@ stop_automated_movement_when_pulled = 0 maxHealth = 350 health = 350 - armor = list(melee = 45, bullet = 50, energy = 30, bomb = 0, bio = 100, rad = 50) + armor = list(melee = 11, bullet = 12, energy = 7, bomb = 0, bio = 100, rad = 50) vision_range = 16 harm_intent_damage = 5 melee_damage_lower = 10 @@ -313,7 +313,7 @@ melee_damage_upper = 35 maxHealth = 450 //Boosted because melee given armor/shield health = 450 - armor = list(melee = 65, bullet = 40, energy = 30, bomb = 0, bio = 100, rad = 50) + armor = list(melee = 16, bullet = 10, energy = 7, bomb = 0, bio = 100, rad = 50) icon_state = "syndicate_stormtrooper_sword" drop_items = list(/obj/item/melee/energy/sword/red, /obj/item/shield/buckler/energy) attacktext = "slashed" @@ -339,7 +339,7 @@ /mob/living/simple_animal/hostile/elitemercenary/range/space/heavy/shotgun ranged_cooldown = 4 rapid = 0 - armor = list(melee = 65, bullet = 50, energy = 20, bomb = 0, bio = 100, rad = 50) + armor = list(melee = 16, bullet = 12, energy = 5, bomb = 0, bio = 100, rad = 50) health = 450 maxHealth = 450 icon_state = "syndicate_stormtrooper_shotgun" diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 286ef73028a..f8adeb8e8c1 100755 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -484,7 +484,7 @@ if(ishuman(parrot_interest)) var/mob/living/carbon/human/H = parrot_interest var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone))) - H.damage_through_armor(damage, BRUTE, affecting, ARMOR_MELEE, 0, 0, sharp = 1) + H.damage_through_armor(damage, BRUTE, affecting, ARMOR_MELEE, null, null, sharp = TRUE) var/msg3 = (pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons.")) src.visible_message("[src] [msg3].") else diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 5b0e024f7e8..ab43dc41768 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -415,7 +415,7 @@ dmult += Proj.supereffective_mult damage *= dmult if (!(Proj.testing)) - damage_through_armor(damage, damage_type, def_zone, Proj.check_armour, armour_pen = Proj.armor_penetration, used_weapon = Proj, sharp=is_sharp(Proj), edge=has_edge(Proj), post_pen_mult = Proj.post_penetration_dammult) + return damage_through_armor(damage, def_zone, attack_flag = Proj.check_armour, armor_divisor = Proj.armor_divisor, used_weapon = Proj, sharp = is_sharp(Proj), edge = has_edge(Proj), wounding_multiplier = Proj.wounding_mult, dmg_types = Proj.damage_types, return_continuation = TRUE) return FALSE /mob/living/simple_animal/rejuvenate() diff --git a/code/modules/mob/mob_grab_specials.dm b/code/modules/mob/mob_grab_specials.dm index 673aaa76329..075b0eaa691 100644 --- a/code/modules/mob/mob_grab_specials.dm +++ b/code/modules/mob/mob_grab_specials.dm @@ -291,7 +291,7 @@ for (var/turf/T in range(1, attacker.loc)) if(istype(T, /turf/simulated/wall)) free_space = FALSE - if(!T.CanPass(attacker, T)) + if(!T.Enter(attacker)) free_space = FALSE if(!free_space) to_chat(attacker, SPAN_WARNING("There is not enough space around you to do this.")) @@ -318,7 +318,7 @@ sleep(1) target.throw_at(get_edge_target_turf(target, dir), 7, 2)//this is very fast, and very painful for any obstacle involved - target.damage_through_armor(damage, HALLOSS, attack_flag = ARMOR_MELEE) + target.damage_through_armor(damage, HALLOSS, armor_divisor = 2) // attacker.regen_slickness(0.4) //admin messaging diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 345af411d8a..697862fa37c 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -685,6 +685,94 @@ proc/is_blind(A) /mob/proc/weight_coeff() return get_max_w_class()/(ITEM_SIZE_TITANIC) +// Steps used to modify wounding multiplier. Should be used alongside edge/sharp when determining final damage of BRUTE-type attacks. +/proc/step_wounding(var/wounding, var/is_increase = FALSE) // Usually mobs are the ones attacking (no), so this should be okay here? If it gets lucky a macro would be slightly faster + if(is_increase) + switch(wounding) + if(WOUNDING_HARMLESS) + return WOUNDING_TINY + if(WOUNDING_TINY) + return WOUNDING_SMALL + if(WOUNDING_SMALL) + return WOUNDING_NORMAL + if(WOUNDING_NORMAL) + return WOUNDING_NORMAL + if(WOUNDING_NORMAL) + return WOUNDING_WIDE + if(WOUNDING_WIDE) + return WOUNDING_EXTREME + if(WOUNDING_EXTREME) + return WOUNDING_DEVESTATING + if(WOUNDING_DEVESTATING) + return WOUNDING_DEVESTATING + else + switch(wounding) + if(WOUNDING_HARMLESS) + return WOUNDING_HARMLESS + if(WOUNDING_TINY) + return WOUNDING_HARMLESS + if(WOUNDING_SMALL) + return WOUNDING_TINY + if(WOUNDING_NORMAL) + return WOUNDING_SMALL + if(WOUNDING_SERIOUS) + return WOUNDING_NORMAL + if(WOUNDING_WIDE) + return WOUNDING_SERIOUS + if(WOUNDING_EXTREME) + return WOUNDING_WIDE + if(WOUNDING_DEVESTATING) + return WOUNDING_EXTREME + +/proc/step_wounding_double(var/wounding, var/is_increase = FALSE) + if(is_increase) + switch(wounding) + if(WOUNDING_HARMLESS) + return WOUNDING_SMALL + if(WOUNDING_TINY) + return WOUNDING_NORMAL + if(WOUNDING_SMALL) + return WOUNDING_SERIOUS + if(WOUNDING_NORMAL) + return WOUNDING_WIDE + if(WOUNDING_SERIOUS) + return WOUNDING_WIDE + if(WOUNDING_WIDE) + return WOUNDING_DEVESTATING + if(WOUNDING_EXTREME) + return WOUNDING_DEVESTATING + else + switch(wounding) + if(WOUNDING_HARMLESS) + return WOUNDING_HARMLESS + if(WOUNDING_TINY) + return WOUNDING_HARMLESS + if(WOUNDING_SMALL) + return WOUNDING_HARMLESS + if(WOUNDING_NORMAL) + return WOUNDING_TINY + if(WOUNDING_SERIOUS) + return WOUNDING_SMALL + if(WOUNDING_WIDE) + return WOUNDING_NORMAL + if(WOUNDING_EXTREME) + return WOUNDING_SERIOUS + if(WOUNDING_DEVESTATING) + return WOUNDING_WIDE + +// Determine wounding level. If var/wounding is provided, the attack should come from a projectile. This isn't the case yet, as we default to var/wounding = 1 until melee rework. +/proc/wound_check(var/injurytype, var/wounding, var/edge, var/sharp) + if(sharp && (!edge)) // impaling/piercing, 2x damage, affected by injurytype + switch(injurytype) + if(INJURY_TYPE_HOMOGENOUS) + return wounding ? step_wounding_double(wounding) : 1 + if(INJURY_TYPE_UNLIVING) + return wounding ? step_wounding(wounding) : 1.5 + else + return wounding ? wounding : 2 + if(sharp && edge) // cutting, 1.5x damage + return wounding ? wounding : 1.5 + return wounding ? wounding : 1 // crushing, 1x damage //Soj edit /mob/proc/get_health() diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index e7854c68f8c..90e81add471 100755 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -111,6 +111,14 @@ else return +/client/verb/blocking() + set hidden = 1 + if(!istype(mob, /mob/living/carbon/human)) + return + if(!mob.stat && isturf(mob.loc) && !mob.restrained()) + mob:blocking() + else + return /client/verb/drop_item() set hidden = 1 diff --git a/code/modules/nanogate/nanogate_items.dm b/code/modules/nanogate/nanogate_items.dm index 6fe7a09b030..78b8a25e860 100644 --- a/code/modules/nanogate/nanogate_items.dm +++ b/code/modules/nanogate/nanogate_items.dm @@ -5,9 +5,9 @@ icon_state = "nanite_rig" suit_type = "nanite" armor_list = list( - melee = 35, - bullet = 35, - energy = 35, + melee = 7, + bullet = 7, + energy = 7, bomb = 25, bio = 100, rad = 100 diff --git a/code/modules/nanogate/powers/nanobot.dm b/code/modules/nanogate/powers/nanobot.dm index f5e46b9064c..ebda2f1601e 100644 --- a/code/modules/nanogate/powers/nanobot.dm +++ b/code/modules/nanogate/powers/nanobot.dm @@ -100,7 +100,7 @@ List of powers in this page : set name = "Upgrade Nanobot - Armor (1)" set desc = "Spend some of your nanites to upgrade your nanobots armor to better reduce and mitigate incoming damage." nano_point_cost = 1 - var/armor_boost = list(melee = 60, bullet = 60, energy = 60, bomb = 75, bio = 100, rad = 100) // How much armor does the nanobot get? + var/armor_boost = list(melee = 15, bullet = 15, energy = 3, bomb = 75, bio = 100, rad = 100) // How much armor does the nanobot get? if(Stand) // Do they have the bot? if(pay_power_cost(nano_point_cost)) diff --git a/code/modules/organs/external/damage.dm b/code/modules/organs/external/damage.dm old mode 100755 new mode 100644 index fd6d9c91963..83701ab39a7 --- a/code/modules/organs/external/damage.dm +++ b/code/modules/organs/external/damage.dm @@ -9,36 +9,28 @@ var/prev_brute = brute_dam //We'll record how much damage the limb already had, before we apply the damage from this incoming hit var/prev_burn = burn_dam - if(owner) - switch(damage_type) - if(BRUTE) - amount = round(amount * owner.species.brute_mod * owner.brute_mod_perk * brute_mod, 0.1) - if(BURN) - amount = round(amount * owner.species.burn_mod * owner.burn_mod_perk * burn_mod, 0.1) - - else - switch(damage_type) - if(BRUTE) - amount = round(amount * brute_mod, 0.1) - if(BURN) - amount = round(amount * burn_mod, 0.1) - - - - + var/external_wounding_multiplier = wounding_multiplier + switch(damage_type) + if(BRUTE) + amount = round(amount * brute_mod, 0.1) + external_wounding_multiplier = wound_check(species.injury_type, wounding_multiplier, edge, sharp) + if(BURN) + amount = round(amount * burn_mod, 0.1) + external_wounding_multiplier = wound_check(species.injury_type, wounding_multiplier, edge, sharp) // Damage is transferred to internal organs. if(LAZYLEN(internal_organs)) // var/can_transfer = (brute_dam > (min_broken_damage * ORGAN_HEALTH_MULTIPLIER)) ? TRUE : FALSE // Only applies to brute and burn var/obj/item/organ/internal/I = pickweight(internal_organs) if((damage_type == BRUTE || damage_type == BURN) && !((status & ORGAN_BROKEN) || cannot_break)) - I = get_bone() + if(istype(I, /obj/item/organ/internal/vital)) // If user has the bone mutation, they must be broken before hitting any other organ. Similarly, if the targeted organ is vital to short-term survival (brain, heart, lungs), it is protected by the ribcage or skull. + I = get_bone() var/transferred_damage_amount switch(damage_type) if(BRUTE) - transferred_damage_amount = amount - (max_damage - brute_dam) / max(1, armor_penetration * 0.1) / 2 + transferred_damage_amount = amount - (max_damage - brute_dam) / armor_divisor / 2 if(BURN) - transferred_damage_amount = amount - (max_damage - burn_dam) / max(1, armor_penetration * 0.1) / 2 + transferred_damage_amount = amount - (max_damage - burn_dam) / armor_divisor / 2 if(HALLOSS) transferred_damage_amount = 0 else @@ -50,44 +42,44 @@ if(amount <= 0) return FALSE + if(used_weapon) add_autopsy_data("[used_weapon]", amount) // Handle remaining limb damage switch(damage_type) if(BRUTE) - if(status & ORGAN_BROKEN && prob(40)) if(owner && !(owner.species && (owner.species.flags & NO_PAIN))) owner.emote("scream") //getting hit on broken hand hurts if(sharp && !BP_IS_ROBOTIC(src)) if(!edge) - createwound(PIERCE, amount) + createwound(PIERCE, amount * external_wounding_multiplier) else - createwound(CUT, amount) + createwound(CUT, amount * external_wounding_multiplier) else - createwound(BRUISE, amount) + createwound(BRUISE, amount * external_wounding_multiplier) if(BURN) if(status & ORGAN_BLEEDING) status &= ~ORGAN_BLEEDING - createwound(BURN, amount) + + createwound(BURN, amount * external_wounding_multiplier) // sync the organ's damage with its wounds update_damages() - //if(!owner) return update_damstate() //No point trying to sever severed limbs or update owner health. owner?.updatehealth() //droplimb will call updatehealth() again if it does end up being called - //If limb took enough damage and is broken, try to cut or tear it off - if(status & ORGAN_BROKEN && owner && loc == owner && !is_stump()) +//If limb took enough damage and is broken, try to cut or tear it off + if(owner && loc == owner && !is_stump()) if(!cannot_amputate && config.limbs_can_break && (brute_dam + burn_dam) >= (max_damage * ORGAN_HEALTH_MULTIPLIER)) - //organs can come off in three cases - //1. If the damage source is edge_eligible and the brute damage dealt exceeds the edge threshold, then the organ is cut off. - //2. If the damage amount dealt exceeds the disintegrate threshold, the organ is completely obliterated. - //3. If the organ has already reached or would be put over it's max damage amount (currently redundant), - // and the brute damage dealt exceeds the tearoff threshold, the organ is torn off. - - //Check edge eligibility + //organs can come off in four cases + //1. If the damage source is edge_eligible and the brute damage dealt exceeds the edge threshold, then the organ is cut off. + //2. If the damage amount dealt exceeds the disintegrate threshold, the organ is completely obliterated. + //3. If the organ has already reached or would be put over it's max damage amount (currently redundant), + // and the brute damage dealt exceeds the tearoff threshold, the organ is torn off. + //4. If the organ is robotic, and it has reached its max damage threshold, it will either drop off, or blow up. + //Check edge eligibility var/edge_eligible = 0 if(edge) if(istype(used_weapon,/obj/item)) @@ -99,14 +91,13 @@ switch(damage_type) if(BRUTE) - if(edge_eligible && (amount + prev_brute) >= max_damage * DROPLIMB_THRESHOLD_EDGE) - droplimb(TRUE, DROPLIMB_EDGE) - else if((amount + prev_brute) >= max_damage * DROPLIMB_THRESHOLD_DESTROY) - droplimb(FALSE, DROPLIMB_BLUNT) - else if((amount + prev_brute) >= max_damage * DROPLIMB_THRESHOLD_TEAROFF) - droplimb(FALSE, DROPLIMB_EDGE) - else if(brute_dam && BP_IS_ROBOTIC(src)) - droplimb(prob(50), pick(DROPLIMB_EDGE, DROPLIMB_BLUNT)) + if(status & ORGAN_BROKEN) + if(edge_eligible && (amount + prev_brute) >= max_damage * DROPLIMB_THRESHOLD_EDGE) + droplimb(TRUE, DROPLIMB_EDGE) + else if((amount + prev_brute) >= max_damage * DROPLIMB_THRESHOLD_DESTROY) + droplimb(FALSE, DROPLIMB_BLUNT) + else if((amount + prev_brute) >= max_damage * DROPLIMB_THRESHOLD_TEAROFF) + droplimb(FALSE, DROPLIMB_EDGE) if(BURN) if(edge_eligible && (amount + prev_burn) >= max_damage * DROPLIMB_THRESHOLD_EDGE) droplimb(TRUE, DROPLIMB_EDGE_BURN) @@ -135,4 +126,3 @@ owner.updatehealth() return update_damstate() - diff --git a/code/modules/organs/external/subtypes/robotic.dm b/code/modules/organs/external/subtypes/robotic.dm index 740839316ca..7d7fcd1d48a 100755 --- a/code/modules/organs/external/subtypes/robotic.dm +++ b/code/modules/organs/external/subtypes/robotic.dm @@ -5,7 +5,7 @@ nerve_struck = -1 // no nerves here cannot_break = 1 nature = MODIFICATION_SILICON - armor_list = list(melee = 20, bullet = 20, energy = 20, bomb = 20, bio = 100, rad = 100) + armor_list = list(melee = 5, bullet = 5, energy = 5, bomb = 20, bio = 100, rad = 100) matter = list(MATERIAL_STEEL = 2, MATERIAL_PLASTIC = 2) // Multiplied by w_class var/min_malfunction_damage = 20 // Any more damage than that and you start getting nasty random malfunctions diff --git a/code/modules/organs/external/subtypes/robotic_types.dm b/code/modules/organs/external/subtypes/robotic_types.dm index 05d77b405f7..b880c8ad64f 100644 --- a/code/modules/organs/external/subtypes/robotic_types.dm +++ b/code/modules/organs/external/subtypes/robotic_types.dm @@ -177,7 +177,7 @@ obj/item/organ/external/robotic/synthskin/groin desc = "Custom tooled and held together by hope and duct tape." force_icon = 'icons/mob/human_races/cyberlimbs/advanced_ghetto.dmi' //Sprites were done by Kirov on request model = "ghetto" - armor_list = list(melee = 10, bullet = 10, energy = 10, bomb = -5, bio = 100, rad = 100) + armor_list = list(melee = 2, bullet = 2, energy = 2, bomb = -5, bio = 100, rad = 100) matter = list(MATERIAL_STEEL = 3, MATERIAL_PLASTIC = 1) min_broken_damage = 30 min_malfunction_damage = 15 @@ -207,7 +207,7 @@ obj/item/organ/external/robotic/synthskin/groin desc = "Reinforced purple and white prosthesis designed for space exploration and light combat." force_icon = 'icons/mob/human_races/cyberlimbs/moebius.dmi' model = "moebius" - armor_list = list(melee = 30, bullet = 30, energy = 30, bomb = 30, bio = 100, rad = 100) + armor_list = list(melee = 7, bullet = 7, energy = 7, bomb = 30, bio = 100, rad = 100) matter = list(MATERIAL_STEEL = 2, MATERIAL_PLASTIC = 2, MATERIAL_PLASTEEL = 1) max_damage = 60 min_broken_damage = 40 @@ -246,7 +246,7 @@ obj/item/organ/external/robotic/synthskin/groin desc = "Reinforced dark prosthesis designed for heavy combat." force_icon = 'icons/mob/human_races/cyberlimbs/blackshield.dmi' model = "blackshield" - armor_list = list(melee = 35, bullet = 35, energy = 35, bomb = 35, bio = 100, rad = 100) + armor_list = list(melee = 7, bullet = 7, energy = 7, bomb = 35, bio = 100, rad = 100) matter = list(MATERIAL_STEEL = 15, MATERIAL_PLASTIC = 5, MATERIAL_PLASTEEL = 10) max_damage = 60 min_broken_damage = 40 @@ -320,7 +320,7 @@ obj/item/organ/external/robotic/synthskin/groin desc = "Plasma reinforced black prosthesis designed for heavy combat." force_icon = 'icons/mob/human_races/cyberlimbs/excelsior.dmi' //Sprites were done by Kirov on request model = "excelsior" - armor_list = list(melee = 50, bullet = 50, energy = 50, bomb = 50, bio = 100, rad = 100) + armor_list = list(melee = 10, bullet = 10, energy = 10, bomb = 50, bio = 100, rad = 100) matter = list(MATERIAL_STEEL = 2, MATERIAL_PLASTEEL = 1, MATERIAL_PLASMA = 0.5) //Plasma needed as a material that excelsiors can't teleport in max_damage = 65 min_broken_damage = 45 @@ -353,7 +353,7 @@ obj/item/organ/external/robotic/synthskin/groin desc = "Advanced, extremely resilient and mobile prosthetic. Inscribed with \"Made in\" followed by gibberish, must have been lost to time." force_icon = 'icons/mob/human_races/cyberlimbs/one_star.dmi' model = "one_star" - armor_list = list(melee = 65, bullet = 65, energy = 65, bomb = 65, bio = 100, rad = 100) + armor_list = list(melee = 10, bullet = 10, energy = 10, bomb = 65, bio = 100, rad = 100) matter = list(MATERIAL_STEEL = 1, MATERIAL_PLASTIC = 4, MATERIAL_PLATINUM = 2) max_damage = 70 min_broken_damage = 50 @@ -377,7 +377,7 @@ obj/item/organ/external/robotic/synthskin/groin desc = "A robotic limb crafted from metallic hydrogen and gold" force_icon = 'icons/mob/human_races/cyberlimbs/nashef-agunabi.dmi' model = "nashef-agunabi" - armor_list = list(melee = 20, bullet = 20, energy = 35, bomb = 30, bio = 100, rad = 100) + armor_list = list(melee = 5, bullet = 5, energy = 2, bomb = 30, bio = 100, rad = 100) matter = list(MATERIAL_HYDROGEN = 5, MATERIAL_GOLD = 4, MATERIAL_PLATINUM = 2) max_damage = 70 min_broken_damage = 50 diff --git a/code/modules/organs/external/subtypes/standard.dm b/code/modules/organs/external/subtypes/standard.dm index 008adc81784..0b7410a50f8 100644 --- a/code/modules/organs/external/subtypes/standard.dm +++ b/code/modules/organs/external/subtypes/standard.dm @@ -19,7 +19,7 @@ owner.update_hair() ..() -/obj/item/organ/external/head/take_damage(amount, damage_type, armor_divisor = max(1, armor_penetration), wounding_multiplier = 1, sharp, edge, used_weapon = null, list/forbidden_limbs = list(), silent) +/obj/item/organ/external/head/take_damage(amount, damage_type, armor_divisor = max(1, armor_divisor), wounding_multiplier = 1, sharp, edge, used_weapon = null, list/forbidden_limbs = list(), silent) . = ..() if(. && !disfigured) if(amount > 25) diff --git a/code/modules/organs/internal/_internal.dm b/code/modules/organs/internal/_internal.dm index ff6a3b99e12..a003386ac8d 100644 --- a/code/modules/organs/internal/_internal.dm +++ b/code/modules/organs/internal/_internal.dm @@ -85,7 +85,7 @@ /obj/item/organ/internal/proc/get_process_efficiency(process_define) return organ_efficiency[process_define] - (organ_efficiency[process_define] * (damage / max_damage)) -/obj/item/organ/internal/take_damage(amount, damage_type = BRUTE, wounding_multiplier = 1, silent = FALSE, sharp = FALSE, edge = FALSE, silent = FALSE) //Deals damage to the organ itself +/obj/item/organ/internal/take_damage(amount, damage_type = BRUTE, wounding_multiplier = 1, silent = FALSE, sharp = FALSE, edge = FALSE) //Deals damage to the organ itself if(!damage_type || status & ORGAN_DEAD) return FALSE diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 076018c8c7f..650b2112e1f 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -29,7 +29,7 @@ var/chained = 0//Adminbus chain-grab -/obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0) +/obj/singularity/New(loc, var/starting_energy = 12, var/temp = 0) //CARN: admin-alert for chuckle-fuckery. admin_investigate_setup() energy = starting_energy diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index d92d3d27e31..3a98de67301 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -12,6 +12,9 @@ /obj/item/ammo_casing/pistol_35/prespawned amount = 15 +/obj/item/ammo_casing/pistol_35/spent + projectile_type = null + /obj/item/ammo_casing/pistol_35/hv desc = "A 9mm high-velocity bullet casing." icon_state = "pistol_c_hv" @@ -928,7 +931,7 @@ w_class = ITEM_SIZE_SMALL caliber = CAL_ARROW force = WEAPON_FORCE_NORMAL - armor_penetration = ARMOR_PEN_GRAZING + armor_divisor = ARMOR_PEN_GRAZING projectile_type = /obj/item/projectile/bullet/reusable/arrow matter = list(MATERIAL_STEEL = 0.5, MATERIAL_WOOD = 0.5, MATERIAL_PLASTIC= 0.5) maxamount = 3 @@ -959,7 +962,7 @@ name = "broadhead arrow" icon_state = "arrow-broad" force = WEAPON_FORCE_PAINFUL - armor_penetration = 0 + armor_divisor = 1 desc = "A good-quality handmade arrow, with a metal head and plastic fletching. This one has quite a broad head, capable of causing severe damage to unarmored targets, but reducing its ability to penetrate armor." projectile_type = /obj/item/projectile/bullet/reusable/arrow/broadhead @@ -967,7 +970,7 @@ name = "serrated arrow" icon_state = "arrow-serrated" force = WEAPON_FORCE_PAINFUL - armor_penetration = 0 + armor_divisor = 1 desc = "A good-quality handmade aerodinamic arrow, with a metal head and plastic fletching. This one has wicked sharp serrated blades along its head, letting it stick in wounds easily, penetrating thick hide and armor alike at fast speeds." projectile_type = /obj/item/projectile/bullet/reusable/arrow/serrated diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index cf14953f5eb..b967a5e5319 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -811,7 +811,7 @@ /obj/item/ammo_magazine/kurtz_50 name = "heavy pistol magazine" - desc = "A 10 round magazine marked for 12mm." + desc = "A 7 round magazine marked for 12mm." icon_state = "kurtz" origin_tech = list(TECH_COMBAT = 2) mag_type = MAGAZINE @@ -819,7 +819,7 @@ caliber = CAL_50 matter = list(MATERIAL_STEEL = 4) ammo_type = /obj/item/ammo_casing/kurtz_50 - max_ammo = 10 + max_ammo = 7 multiple_sprites = 1 /obj/item/ammo_magazine/kurtz_50/empty @@ -951,13 +951,13 @@ /obj/item/ammo_magazine/speed_loader_kurtz_50 name = "speed loader (12mm Special)" - desc = "A 6 round speed loader marked for 12mm." + desc = "A 5 round speed loader marked for 12mm." icon_state = "slmagnum_base" icon = 'icons/obj/ammo_speed.dmi' caliber = CAL_50 ammo_type = /obj/item/ammo_casing/kurtz_50 matter = list(MATERIAL_STEEL = 3) - max_ammo = 6 + max_ammo = 5 /obj/item/ammo_magazine/speed_loader_kurtz_50/update_icon() cut_overlays() diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 65731e32b6d..ebda6abc7d3 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -135,7 +135,7 @@ For the sake of consistency, I suggest always rounding up on even values when ap var/currently_firing = FALSE var/wield_delay = 0 // Gun wielding delay , generally in seconds. - var/wield_delay_factor = 0 // A factor that characterizes weapon size , this makes it require more vig to insta-wield this weapon or less , values below 0 reduce the vig needed and above 1 increase it + var/wield_delay_factor = 2 // A factor that characterizes weapon size , this makes it require more vig to insta-wield this weapon or less , values below 0 reduce the vig needed and above 1 increase it //Gun numbers and stuf var/serial_type = "INDEX" // Index will be used for detective scanners, if there is a serial type , the gun will add a number onto its final , if none , it won;'t show on examine @@ -545,9 +545,9 @@ For the sake of consistency, I suggest always rounding up on even values when ap projectile.multiply_projectile_damage(damage_multiplier) if(extra_proj_penmult) - projectile.multiply_projectile_penetration(extra_proj_penmult) + projectile.add_projectile_penetration(penetration_multiplier) - projectile.multiply_projectile_penetration(penetration_multiplier + user.stats.getStat(STAT_VIG) * 0.02) + projectile.add_projectile_penetration(penetration_multiplier) if(extra_proj_wallbangmult) projectile.multiply_pierce_penetration(extra_proj_wallbangmult) @@ -1208,7 +1208,7 @@ For the sake of consistency, I suggest always rounding up on even values when ap var/list/melee_stats = list() melee_stats += list(list("name" = "Melee Capabilities", "type" = "ProgressBar", "value" = force, "max" = initial(force) * 10)) - melee_stats += list(list("name" = "Armor Penetration", "type" = "ProgressBar", "value" = armor_penetration, "max" = 100, "unit" = "%")) + melee_stats += list(list( "name" = "Armor Divisor", "type" = "AnimatedNumber", "value" = armor_divisor, "max" = 10)) stats["Physical Details"] = melee_stats @@ -1277,8 +1277,8 @@ For the sake of consistency, I suggest always rounding up on even values when ap data += list(list("name" = "Projectile Type", "type" = "String", "value" = P.name)) data += list(list("name" = "Overall Damage", "type" = "String", "value" = (P.get_total_damage() * damage_multiplier) + get_total_damage_adjust())) - data += list(list("name" = "Overall AP", "type" = "String", "value" = P.armor_penetration * penetration_multiplier)) - data += list(list("name" = "Overall Pain", "type" = "String", "value" = P.agony * proj_agony_multiplier)) + data += list(list("name" = "Armor Divisor", "type" = "String", "value" = P.armor_divisor * penetration_multiplier)) + data += list(list("name" = "Overall Pain", "type" = "String", "value" = (P.get_pain_damage()) * proj_agony_multiplier)) data += list(list("name" = "Wound Scale", "type" = "String", "value" = P.wounding_mult)) data += list(list("name" = "Recoil Multiplier", "type" = "String", "value" = P.recoil)) @@ -1290,9 +1290,11 @@ For the sake of consistency, I suggest always rounding up on even values when ap var/list/data = list() data["projectile_name"] = P.name data["projectile_damage"] = (P.get_total_damage() * damage_multiplier) + get_total_damage_adjust() + data["projectile_AP"] = P.armor_divisor + penetration_multiplier data["projectile_WOUND"] = P.wounding_mult - data["projectile_AP"] = P.armor_penetration * penetration_multiplier - data["projectile_pain"] = P.agony * proj_agony_multiplier + data["unarmoured_damage"] = min(0, ((P.get_total_damage() * damage_multiplier) + get_total_damage_adjust()) * P.wounding_mult) + data["armoured_damage_10"] = min(0, (((P.get_total_damage() * damage_multiplier) + get_total_damage_adjust()) - (10 / (P.armor_divisor + penetration_multiplier))) * P.wounding_mult) + data["armoured_damage_15"] = min(0, (((P.get_total_damage() * damage_multiplier) + get_total_damage_adjust()) - (15 / (P.armor_divisor + penetration_multiplier))) * P.wounding_mult) data["projectile_recoil"] = P.recoil qdel(P) return data @@ -1324,7 +1326,7 @@ For the sake of consistency, I suggest always rounding up on even values when ap vision_flags = initial(vision_flags) see_invisible_gun = initial(see_invisible_gun) force = initial(force) - armor_penetration = initial(armor_penetration) + armor_divisor = initial(armor_divisor) sharp = initial(sharp) attack_verb = list("struck", "hit", "bashed") auto_eject = initial(auto_eject) //SoJ edit diff --git a/code/modules/projectiles/guns/_projectile.dm b/code/modules/projectiles/guns/_projectile.dm index 69b0df24fcd..a36680a7edf 100644 --- a/code/modules/projectiles/guns/_projectile.dm +++ b/code/modules/projectiles/guns/_projectile.dm @@ -488,4 +488,4 @@ if(!ammo_magazine) load_ammo(autoload, H) else - ammo_magazine.attackby(autoload, user) \ No newline at end of file + ammo_magazine.attackby(autoload, user) diff --git a/code/modules/projectiles/guns/energy/laser/antebellum.dm b/code/modules/projectiles/guns/energy/laser/antebellum.dm index e7aa0a88ede..5f881d9676e 100644 --- a/code/modules/projectiles/guns/energy/laser/antebellum.dm +++ b/code/modules/projectiles/guns/energy/laser/antebellum.dm @@ -19,7 +19,7 @@ price_tag = 1250 gun_tags = list(GUN_LASER, GUN_ENERGY, GUN_SCOPE) init_firemodes = list( - list(mode_name="rapid fire", mode_desc="Light rapid plasma bolts", projectile_type=/obj/item/projectile/plasma/light, fire_sound='sound/weapons/energy/burn.ogg', fire_delay=8, icon="stun", projectile_color = "#00FFFF", armor_penetration = 5), + list(mode_name="rapid fire", mode_desc="Light rapid plasma bolts", projectile_type=/obj/item/projectile/plasma/light, fire_sound='sound/weapons/energy/burn.ogg', fire_delay=8, icon="stun", projectile_color = "#00FFFF"), list(mode_name="grenade", mode_desc="fires a frag biomatter-shell", projectile_type=/obj/item/projectile/bullet/grenade/frag/nt, charge_cost=30000, icon="grenade"), ) twohanded = FALSE diff --git a/code/modules/projectiles/guns/energy/laser/cog.dm b/code/modules/projectiles/guns/energy/laser/cog.dm index 0d6882d317b..ca54abba4b2 100644 --- a/code/modules/projectiles/guns/energy/laser/cog.dm +++ b/code/modules/projectiles/guns/energy/laser/cog.dm @@ -49,7 +49,7 @@ icon = 'icons/obj/guns/energy/sprocket.dmi' icon_state = "sprocket" damage_multiplier = 0.9 // +0.1 when unfolded = baseline Cog - penetration_multiplier = 0.8 // +0.2 when unfolded = base Cog + penetration_multiplier = 0.8// +0.2 when unfolded = base Cog projectile_type = /obj/item/projectile/beam/hardstun // Snowflake 100% nonlethal projectile with reduced firerate w_class = ITEM_SIZE_NORMAL // Starts folded, bulk added when unfolded FAR surpasses BULKY class folding_stock = TRUE // Foldable stock for easy carry diff --git a/code/modules/projectiles/guns/energy/laser/concilium.dm b/code/modules/projectiles/guns/energy/laser/concilium.dm index 2ee8212067c..4c9dd3cb06a 100644 --- a/code/modules/projectiles/guns/energy/laser/concilium.dm +++ b/code/modules/projectiles/guns/energy/laser/concilium.dm @@ -20,7 +20,7 @@ slowdown_hold = 1 //heavy wood stock. Stupidly chonky suitable_cell = /obj/item/cell/large damage_multiplier = 1.2 //Kinda bad beam inside but can be upgraded to be a normal laser lmg! - armor_penetration = 1.1 + armor_divisor = 0.1 init_offset = 3 price_tag = 2000 gun_tags = list(GUN_LASER, GUN_ENERGY) diff --git a/code/modules/projectiles/guns/energy/laser/lasercore.dm b/code/modules/projectiles/guns/energy/laser/lasercore.dm index 95ba43d47e7..4c0fead0f97 100644 --- a/code/modules/projectiles/guns/energy/laser/lasercore.dm +++ b/code/modules/projectiles/guns/energy/laser/lasercore.dm @@ -83,9 +83,8 @@ item_state = "gleam" matter = list(MATERIAL_PLASTEEL = 20, MATERIAL_STEEL = 4, MATERIAL_WOOD = 12, MATERIAL_SILVER = 15, MATERIAL_GOLD = 4, MATERIAL_DIAMOND = 3) //steal the COs laser for copper wire. extra_bulk = 15 //A bit more bulk than an unfolded laser-core. - projectile_type = /obj/item/projectile/beam/midlaser //a step down but we're also a good bit more energy efficient. damage_multiplier = 1.1 //essentially the same bonus you get from - armor_penetration = 1.2 + armor_divisor = 0.2 zoom_factors = list(0.4) extra_damage_mult_scoped = 0.2 max_upgrades = 3 //we're already pretty beefy. diff --git a/code/modules/projectiles/guns/energy/laser/sunrise.dm b/code/modules/projectiles/guns/energy/laser/sunrise.dm index 4f0f41380dc..40debf43ac5 100644 --- a/code/modules/projectiles/guns/energy/laser/sunrise.dm +++ b/code/modules/projectiles/guns/energy/laser/sunrise.dm @@ -20,7 +20,7 @@ matter = list(MATERIAL_PLASTEEL = 15, MATERIAL_STEEL = 20, MATERIAL_PLASTIC = 10, MATERIAL_SILVER = 4, MATERIAL_GLASS = 10, MATERIAL_URANIUM = 2) init_recoil = CARBINE_RECOIL(0.1) damage_multiplier = 0.75 - penetration_multiplier = 1.0 + penetration_multiplier = 1 max_upgrades = 0 //we're good enough as is. price_tag = 1500 charge_cost = 20 diff --git a/code/modules/projectiles/guns/energy/misc/robotguns.dm b/code/modules/projectiles/guns/energy/misc/robotguns.dm index a9912c4dfad..8152310de21 100644 --- a/code/modules/projectiles/guns/energy/misc/robotguns.dm +++ b/code/modules/projectiles/guns/energy/misc/robotguns.dm @@ -29,7 +29,7 @@ icon = 'icons/obj/robot_items.dmi' icon_state = "security_rifle" item_state = "security_rifle" - damage_multiplier = 1.2 //all firemodes are -0.2 so this should go down to 1.0 + damage_multiplier = 1.3 cell_type = /obj/item/cell/medium/greyson modifystate = null force = WEAPON_FORCE_PAINFUL @@ -38,10 +38,10 @@ charge_meter = TRUE serial_type = "NM" init_firemodes = list( - list(mode_name="Rubbers Burst", projectile_type=/obj/item/projectile/bullet/rifle_75/rubber, fire_sound = 'sound/weapons/guns/fire/NM_PARA.ogg', burst = 2 ,fire_delay = 10, icon="burst", damage_mult_add = -0.2), - list(mode_name="Standard Burst", projectile_type=/obj/item/projectile/bullet/rifle_75, fire_sound = 'sound/weapons/guns/fire/NM_PARA.ogg', burst = 2 ,fire_delay = 10, icon="burst", damage_mult_add = -0.2), - list(mode_name="Hollowpoint Burst", projectile_type=/obj/item/projectile/bullet/rifle_75/lethal, fire_sound = 'sound/weapons/guns/fire/NM_PARA.ogg', burst = 2 , fire_delay = 10, icon="burst", damage_mult_add = -0.2), - list(mode_name="Incendiary Burst", projectile_type=/obj/item/projectile/bullet/rifle_75/incend, fire_sound = 'sound/weapons/guns/fire/NM_PARA.ogg', burst = 2, fire_delay = 20, icon="burst", damage_mult_add = -0.2), + list(mode_name="Rubbers Burst", projectile_type=/obj/item/projectile/bullet/rifle_75/rubber, fire_sound = 'sound/weapons/guns/fire/NM_PARA.ogg', burst = 2 ,fire_delay = 10, icon="burst"), + list(mode_name="Standard Burst", projectile_type=/obj/item/projectile/bullet/rifle_75, fire_sound = 'sound/weapons/guns/fire/NM_PARA.ogg', burst = 2 ,fire_delay = 10, icon="burst"), + list(mode_name="Hollowpoint Burst", projectile_type=/obj/item/projectile/bullet/rifle_75/lethal, fire_sound = 'sound/weapons/guns/fire/NM_PARA.ogg', burst = 2 , fire_delay = 10, icon="burst"), + list(mode_name="Incendiary Burst", projectile_type=/obj/item/projectile/bullet/rifle_75/incend, fire_sound = 'sound/weapons/guns/fire/NM_PARA.ogg', burst = 2, fire_delay = 20, icon="burst"), ) /obj/item/gun/energy/dazzlation //the last gun you'll ever need. diff --git a/code/modules/projectiles/guns/energy/plasma/excubitor.dm b/code/modules/projectiles/guns/energy/plasma/excubitor.dm index 86b7716c7df..7ba9e9ed8ba 100644 --- a/code/modules/projectiles/guns/energy/plasma/excubitor.dm +++ b/code/modules/projectiles/guns/energy/plasma/excubitor.dm @@ -13,7 +13,7 @@ suitable_cell = /obj/item/cell/medium/neotheology projectile_type = /obj/item/projectile/plasma/light force = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_MASSIVE + armor_divisor = ARMOR_PEN_MASSIVE fire_delay = 10 charge_cost = 60 // 10 shots out of a 600M init_recoil = HANDGUN_RECOIL(1) diff --git a/code/modules/projectiles/guns/matter/launcher/books.dm b/code/modules/projectiles/guns/matter/launcher/books.dm index 08305f7df80..e682b2d04eb 100644 --- a/code/modules/projectiles/guns/matter/launcher/books.dm +++ b/code/modules/projectiles/guns/matter/launcher/books.dm @@ -45,7 +45,7 @@ //Theirs better weapons then this! fire_sound = 'sound/weapons/magical.ogg' force = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_EXTREME + armor_divisor = ARMOR_PEN_EXTREME structure_damage_factor = STRUCTURE_DAMAGE_HEAVY max_stored_matter = 20 fire_delay = 15 diff --git a/code/modules/projectiles/guns/mods/mods.dm b/code/modules/projectiles/guns/mods/mods.dm index 73234b31ab1..1bf194d5d0c 100644 --- a/code/modules/projectiles/guns/mods/mods.dm +++ b/code/modules/projectiles/guns/mods/mods.dm @@ -42,7 +42,7 @@ UPGRADE_BULK = 2, GUN_UPGRADE_STEPDELAY_MULT = 2, GUN_UPGRADE_DAMAGE_MULT = 0.5, - GUN_UPGRADE_PEN_MULT = 0.5, + GUN_UPGRADE_PEN_MULT = 0.75, GUN_UPGRADE_PIERC_MULT = -3, //This does a LOT lowering range, as well as most guns being unable to wall bang with it GUN_UPGRADE_OFFSET = 21, GUN_UPGRADE_RECOIL = 2.5, @@ -103,7 +103,7 @@ ..() var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.weapon_upgrades = list( - GUN_UPGRADE_PEN_MULT = 1.2, + GUN_UPGRADE_PEN_MULT = 1.1, GUN_UPGRADE_PIERC_MULT = 1, // Adds 1 to the gun's penetrating value GUN_UPGRADE_STEPDELAY_MULT = 0.8, GUN_UPGRADE_FIRE_DELAY_MULT = 1.5, @@ -124,7 +124,7 @@ ..() var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.weapon_upgrades = list( - GUN_UPGRADE_PEN_MULT = 0.5, + GUN_UPGRADE_PEN_MULT = 0.75, GUN_UPGRADE_DAMAGE_BURN = 10, GUN_UPGRADE_OFFSET = 5, GUN_UPGRADE_RECOIL = 1.3, @@ -148,7 +148,7 @@ GUN_UPGRADE_HONK = TRUE, GUN_UPGRADE_RECOIL = 1.2, GUN_UPGRADE_DAMAGE_MULT = 0.8, - GUN_UPGRADE_PEN_MULT = 0.8, + GUN_UPGRADE_PEN_MULT = 0.9, GUN_UPGRADE_FIRE_DELAY_MULT = 1.2, GUN_UPGRADE_MOVE_DELAY_MULT = 1.2, GUN_UPGRADE_MUZZLEFLASH = 1.2, @@ -318,7 +318,7 @@ I.weapon_upgrades = list( GUN_UPGRADE_DAMAGE_MULT = 1.1, GUN_UPGRADE_FIRE_DELAY_MULT = 0.9, //10% delay removed - GUN_UPGRADE_PEN_MULT = 1.2, //we shoot harder, but not by much + GUN_UPGRADE_PEN_MULT = 1.1, //we shoot harder, but not by much GUN_UPGRADE_MOVE_DELAY_MULT = 0.9, //We shoot somehwat faster (not hit scan) GUN_UPGRADE_RECOIL = 0.85, //15% less recoil (doesn't help as much without stacking it with other mods) UPGRADE_BULK = -1 @@ -343,7 +343,7 @@ I.weapon_upgrades = list( GUN_UPGRADE_DAMAGE_MULT = 1.15, //15% more damage GUN_UPGRADE_FIRE_DELAY_MULT = 0.8, //20% delay removed - GUN_UPGRADE_PEN_MULT = 2, //we shoot harder + GUN_UPGRADE_PEN_MULT = 1.5, //we shoot harder GUN_UPGRADE_MOVE_DELAY_MULT = 0.6, //We shoot way faster (not hit scan) GUN_UPGRADE_MUZZLEFLASH = 2, //Bigger flash GUN_UPGRADE_RECOIL = 0.75, //25% less recoil (dosnt help as much without stacking it with other mods) @@ -647,6 +647,7 @@ I.weapon_upgrades = list( GUN_UPGRADE_DAMAGE_BRUTE = 5, GUN_UPGRADE_PEN_BASE = 0.2, + GUN_UPGRADE_PEN_MULT = 1.1, GUN_UPGRADE_PIERC_MULT = 1, GUN_UPGRADE_FIRE_DELAY_MULT = 1.2, GUN_UPGRADE_RECOIL = 1.2, @@ -828,7 +829,7 @@ var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.weapon_upgrades = list( GUN_UPGRADE_OFFSET = rand(5,15), - GUN_UPGRADE_PEN_MULT = rand(4,9)/10, + GUN_UPGRADE_PEN_MULT = rand(2,4)/10, GUN_UPGRADE_DAMAGE_MULT = rand(4,9)/10, ) I.destroy_on_removal = TRUE @@ -847,7 +848,7 @@ ..() var/datum/component/item_upgrade/I = AddComponent(/datum/component/item_upgrade) I.weapon_upgrades = list( - GUN_UPGRADE_PEN_MULT = rand(4,9)/10, + GUN_UPGRADE_PEN_MULT = rand(2,4)/10, GUN_UPGRADE_STEPDELAY_MULT = rand(12,18)/10, ) I.destroy_on_removal = TRUE diff --git a/code/modules/projectiles/guns/oddity_items.dm b/code/modules/projectiles/guns/oddity_items.dm index 8854ab9de25..c22f8490533 100644 --- a/code/modules/projectiles/guns/oddity_items.dm +++ b/code/modules/projectiles/guns/oddity_items.dm @@ -42,7 +42,7 @@ matter = list(MATERIAL_PLASTEEL = 20, MATERIAL_STEEL = 10) max_shells = 1 damage_multiplier = 2 - penetration_multiplier = 2 + penetration_multiplier = 1 init_recoil = RIFLE_RECOIL(4) price_tag = 3250 gun_parts = null @@ -139,7 +139,7 @@ icon = 'icons/obj/guns/projectile/rafale_bluecross.dmi' damage_multiplier = 1.8 init_recoil = HANDGUN_RECOIL(0.3) - penetration_multiplier = 3.1 + penetration_multiplier = 1.5 price_tag = 2350 serial_type = "BlueCross" @@ -430,7 +430,7 @@ load_method = MAGAZINE mag_well = MAG_WELL_PISTOL | MAG_WELL_H_PISTOL damage_multiplier = 1.5 - penetration_multiplier = 1.2 // So that it's good for PVE too + penetration_multiplier = 1.2 init_recoil = HANDGUN_RECOIL(0.3) gun_tags = list(GUN_PROJECTILE, GUN_CALIBRE_9MM, GUN_SILENCABLE, GUN_MAGWELL) serial_type = "BlueCross" @@ -505,7 +505,7 @@ force = WEAPON_FORCE_HARMLESS throwforce = WEAPON_FORCE_HARMLESS w_class = ITEM_SIZE_NORMAL - armor_penetration = ARMOR_PEN_HALF + armor_divisor = ARMOR_PEN_HALF structure_damage_factor = STRUCTURE_DAMAGE_DESTRUCTIVE tool_qualities = list(QUALITY_HAMMERING = 20) max_upgrades = 2 @@ -529,9 +529,9 @@ real_mod *= 0.5 //Insainly op // message_admins("3ogre: safty_math [safty_math] safty_health [safty_health] delay_adder [delay_adder]") -// message_admins("4ogre: armor_penetration [armor_penetration]") - armor_penetration += real_mod -// message_admins("5ogre: armor_penetration [armor_penetration]") +// message_admins("4ogre: armor_divisor [armor_divisor]") + armor_divisor += real_mod +// message_admins("5ogre: armor_divisor [armor_divisor]") clickdelay_offset = delay_adder .=..() @@ -547,7 +547,7 @@ matter = list(MATERIAL_PLASTEEL = 5, MATERIAL_PLASTIC = 12) force = 15 //Base level backstab_damage = 15 //base is 15 but grows - armor_penetration = ARMOR_PEN_MASSIVE //Less do to how powerful it is + armor_divisor = ARMOR_PEN_MASSIVE //Less do to how powerful it is throwforce = WEAPON_FORCE_ROBUST price_tag = 3500 max_upgrades = 2 @@ -622,7 +622,7 @@ force = WEAPON_FORCE_DANGEROUS switched_on_forcemult = 4.4 //88 w_class = ITEM_SIZE_NORMAL - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP switched_on_penmult = 2.5 //50 matter = list(MATERIAL_SILVER = 2, MATERIAL_PLASTEEL = 10, MATERIAL_PLASTIC = 3) tool_qualities = list(QUALITY_SAWING = 70, QUALITY_CUTTING = 60, QUALITY_WIRE_CUTTING = 30) @@ -708,7 +708,7 @@ //message_admins("2knife: speedy_dashing [speedy_dashing]") if(speedy_dashing > 0) //Hopefully your running around to accually use this - armor_penetration *= speedy_dashing + armor_divisor *= speedy_dashing force *= speedy_dashing if(tracker == target.name && give_coin) coin_tracker += 1 @@ -752,7 +752,7 @@ item_state = "katana" hitsound = 'sound/weapons/heavyslash.ogg' force = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW price_tag = 2050 clickdelay_offset = 0 max_upgrades = 1//Already over powered. @@ -781,7 +781,7 @@ icon_state = "spectral_harvester" hitsound = 'sound/weapons/heavyslash.ogg' force = WEAPON_FORCE_GODLIKE //88 damage but + weilding - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE price_tag = 2750 clickdelay_offset = 15 //This stacks with base max_upgrades = 0 //No... @@ -902,7 +902,7 @@ slowdown_hold = 0.3 //Its a bad weapon force = WEAPON_FORCE_PAINFUL - armor_penetration = ARMOR_PEN_SHALLOW + armor_divisor = ARMOR_PEN_SHALLOW has_alt_mode = FALSE /obj/item/shield/riot/mass_grave/check_shield_arc() @@ -916,33 +916,33 @@ max_durability += 1 switch(mass_grave_counter) if(5) - armor_list = list(melee = 10, bullet = 10, energy = 10, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 2, energy = 2, bomb = 0, bio = 0, rad = 0) force = WEAPON_FORCE_DANGEROUS - armor_penetration = ARMOR_PEN_MODERATE + armor_divisor = ARMOR_PEN_MODERATE slowdown = 0.25 slowdown_hold = 0.25 if(10) - armor_list = list(melee = 15, bullet = 15, energy = 15, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 4, bullet = 4, energy = 4, bomb = 0, bio = 0, rad = 0) force = WEAPON_FORCE_ROBUST - armor_penetration = ARMOR_PEN_DEEP + armor_divisor = ARMOR_PEN_DEEP slowdown = 0.20 slowdown_hold = 0.20 if(20) - armor_list = list(melee = 25, bullet = 25, energy = 25, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 6, bullet = 6, energy = 6, bomb = 0, bio = 0, rad = 0) force = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_EXTREME + armor_divisor = ARMOR_PEN_EXTREME slowdown = 0.15 slowdown_hold = 0.15 if(50) - armor_list = list(melee = 35, bullet = 35, energy = 35, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 9, bullet = 9, energy = 9, bomb = 0, bio = 0, rad = 0) force = WEAPON_FORCE_LETHAL - armor_penetration = ARMOR_PEN_MASSIVE + armor_divisor = ARMOR_PEN_MASSIVE slowdown = 0.10 slowdown_hold = 0.10 if(100) - armor_list = list(melee = 40, bullet = 40, energy = 40, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 10, bullet = 10, energy = 10, bomb = 0, bio = 0, rad = 0) force = WEAPON_FORCE_LETHAL + 5 - armor_penetration = ARMOR_PEN_MASSIVE + 5 + armor_divisor = ARMOR_PEN_MASSIVE + 5 slowdown = 0.05 slowdown_hold = 0.05 @@ -950,7 +950,7 @@ //Endless Growth name = "mass grave marker shield" force += 1 - armor_penetration += 1 + armor_divisor += 1 post_moder_game_balance *= 1.1 //150 x 1.1 = 165 -> 165 x 1.1 = 181.5(182) ect ect post_moder_game_balance = round(post_moder_game_balance) @@ -991,7 +991,7 @@ icon_state = "regaloutfit_redder" //Sprite by Ayshe / gid_git item_state = "regaloutfit_redder" blood_overlay_type = "coat" - armor_list = list(melee = 10, bullet = 5, energy = 5, bomb = 0, bio = 0, rad = 0) + armor_list = list(melee = 2, bullet = 1, energy = 1, bomb = 0, bio = 0, rad = 0) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS min_cold_protection_temperature = T0C - 60 diff --git a/code/modules/projectiles/guns/projectile/automatic/lmg.dm b/code/modules/projectiles/guns/projectile/automatic/lmg.dm index a5bf97c513f..b97b9e9168b 100644 --- a/code/modules/projectiles/guns/projectile/automatic/lmg.dm +++ b/code/modules/projectiles/guns/projectile/automatic/lmg.dm @@ -200,7 +200,7 @@ fire_sound_silenced = 'sound/weapons/guns/fire/silenced_mg.ogg' // Yay snowflake silenced sound! caliber = CAL_RIFLE damage_multiplier = 1.2 // With full auto penalties in mind (20%) this becomes a normal x1 damage modifier. - penetration_multiplier = 1.0 + penetration_multiplier = 1 init_recoil = HMG_RECOIL(0.6) // Better slap a bipod on this one! Impossible to fire steady if not braced. gun_tags = list(GUN_PROJECTILE, GUN_SILENCABLE) // Believe it or not, an LMG that CAN be silenced. serial_type = "NM" diff --git a/code/modules/projectiles/guns/projectile/automatic/mamba.dm b/code/modules/projectiles/guns/projectile/automatic/mamba.dm index 3c149536593..14470f7be04 100644 --- a/code/modules/projectiles/guns/projectile/automatic/mamba.dm +++ b/code/modules/projectiles/guns/projectile/automatic/mamba.dm @@ -14,8 +14,8 @@ load_method = SINGLE_CASING|MAGAZINE mag_well = MAG_WELL_RIFLE matter = list(MATERIAL_PLASTEEL = 15, MATERIAL_PLASTIC = 10) - damage_multiplier = 1.0 - penetration_multiplier = 1.0 + damage_multiplier = 1 + penetration_multiplier = 1 extra_damage_mult_scoped = 0.2 zoom_factors = list(0.8) price_tag = 950 diff --git a/code/modules/projectiles/guns/projectile/automatic/nordwind.dm b/code/modules/projectiles/guns/projectile/automatic/nordwind.dm index de62ed3372d..bace2bfbccb 100644 --- a/code/modules/projectiles/guns/projectile/automatic/nordwind.dm +++ b/code/modules/projectiles/guns/projectile/automatic/nordwind.dm @@ -142,7 +142,7 @@ zoom_factors = list(0.8) damage_multiplier = 1 //Little bit better Strelki extra_damage_mult_scoped = 0.3 - penetration_multiplier = 1.0 + penetration_multiplier = 1 init_recoil = RIFLE_RECOIL(1.1) see_invisible_gun = -1 auto_eject = FALSE @@ -150,5 +150,4 @@ SEMI_AUTO_NODELAY ) serial_type = "NM" - gun_parts = list(/obj/item/part/gun/frame/discountnordwind = 1, /obj/item/part/gun/grip/serb = 1, /obj/item/part/gun/mechanism/autorifle = 1, /obj/item/part/gun/barrel/lrifle = 1) diff --git a/code/modules/projectiles/guns/projectile/automatic/ppsh.dm b/code/modules/projectiles/guns/projectile/automatic/ppsh.dm index cc239aca2ff..88359861fb6 100644 --- a/code/modules/projectiles/guns/projectile/automatic/ppsh.dm +++ b/code/modules/projectiles/guns/projectile/automatic/ppsh.dm @@ -65,7 +65,7 @@ origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2) price_tag = 800 damage_multiplier = 0.9 - penetration_multiplier = 1.0 + penetration_multiplier = 1 init_recoil = SMG_RECOIL(1.3) auto_eject = 0 serial_type = "NM" diff --git a/code/modules/projectiles/guns/projectile/automatic/scaffold.dm b/code/modules/projectiles/guns/projectile/automatic/scaffold.dm index 4f01e142370..d237a5387ac 100644 --- a/code/modules/projectiles/guns/projectile/automatic/scaffold.dm +++ b/code/modules/projectiles/guns/projectile/automatic/scaffold.dm @@ -20,7 +20,7 @@ reload_sound = 'sound/weapons/guns/interact/sfrifle_magin.ogg' cocked_sound = 'sound/weapons/guns/interact/sfrifle_cock.ogg' damage_multiplier = 1.5 //simular to 257 - penetration_multiplier = 3 + penetration_multiplier = 2 init_recoil = LMG_RECOIL(0.6) serial_type = "GP" diff --git a/code/modules/projectiles/guns/projectile/automatic/slaught_o_matic.dm b/code/modules/projectiles/guns/projectile/automatic/slaught_o_matic.dm index 32c13675753..9e6cd3e8da1 100644 --- a/code/modules/projectiles/guns/projectile/automatic/slaught_o_matic.dm +++ b/code/modules/projectiles/guns/projectile/automatic/slaught_o_matic.dm @@ -26,7 +26,7 @@ var/choosen_color = "" damage_multiplier = 0.8 - penetration_multiplier = 0.2 + penetration_multiplier = 0.8 init_recoil = HANDGUN_RECOIL(1.6) gun_parts = list(/obj/item/stack/material/plastic = 4) diff --git a/code/modules/projectiles/guns/projectile/automatic/sts.dm b/code/modules/projectiles/guns/projectile/automatic/sts.dm index 5464cf9a4af..59b16f22058 100644 --- a/code/modules/projectiles/guns/projectile/automatic/sts.dm +++ b/code/modules/projectiles/guns/projectile/automatic/sts.dm @@ -106,7 +106,7 @@ w_class = ITEM_SIZE_NORMAL caliber = CAL_RIFLE mag_well = MAG_WELL_RIFLE - penetration_multiplier = 1.0 + penetration_multiplier = 1 init_recoil = RIFLE_RECOIL(1.4) saw_off = FALSE matter = list(MATERIAL_PLASTEEL = 20, MATERIAL_WOOD = 12) diff --git a/code/modules/projectiles/guns/projectile/automatic/triage.dm b/code/modules/projectiles/guns/projectile/automatic/triage.dm index 58bc0f95961..620ee075ed7 100644 --- a/code/modules/projectiles/guns/projectile/automatic/triage.dm +++ b/code/modules/projectiles/guns/projectile/automatic/triage.dm @@ -60,4 +60,4 @@ /obj/item/gun/projectile/automatic/triage/Initialize() . = ..() - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/projectiles/guns/projectile/automatic/trouble_shooter.dm b/code/modules/projectiles/guns/projectile/automatic/trouble_shooter.dm index ca6af00cb57..faf978c4bdb 100644 --- a/code/modules/projectiles/guns/projectile/automatic/trouble_shooter.dm +++ b/code/modules/projectiles/guns/projectile/automatic/trouble_shooter.dm @@ -13,7 +13,7 @@ fire_sound = 'sound/weapons/guns/fire/batrifle_fire.ogg' price_tag = 3400 damage_multiplier = 1.5 - penetration_multiplier = 3 + penetration_multiplier = 1 pierce_multiplier = 2 init_recoil = HMG_RECOIL(0.5) init_firemodes = list( diff --git a/code/modules/projectiles/guns/projectile/little_comet.dm b/code/modules/projectiles/guns/projectile/little_comet.dm index c4bbd26fdb6..18c1ffdeb8a 100644 --- a/code/modules/projectiles/guns/projectile/little_comet.dm +++ b/code/modules/projectiles/guns/projectile/little_comet.dm @@ -14,7 +14,7 @@ matter = list(MATERIAL_PLASTEEL = 12, MATERIAL_WOOD = 6) price_tag = 5000 damage_multiplier = 1.1 //because pistol round - penetration_multiplier = 20 + penetration_multiplier = 10 //Max. pierce_multiplier = 5 init_recoil = RIFLE_RECOIL(0.3) gun_tags = list(GUN_PROJECTILE, GUN_CALIBRE_9MM, GUN_INTERNAL_MAG, GUN_REVOLVER, GUN_SILENCABLE) diff --git a/code/modules/projectiles/guns/projectile/pistol/rebar.dm b/code/modules/projectiles/guns/projectile/pistol/rebar.dm index ee38a19a6e3..9cb3ea33787 100644 --- a/code/modules/projectiles/guns/projectile/pistol/rebar.dm +++ b/code/modules/projectiles/guns/projectile/pistol/rebar.dm @@ -14,7 +14,7 @@ mag_well = MAG_WELL_PISTOL damage_multiplier = 1.6 init_recoil = HANDGUN_RECOIL(1) - penetration_multiplier = 2 + penetration_multiplier = 1 gun_tags = list(GUN_PROJECTILE, GUN_MAGWELL, GUN_CALIBRE_12MM, GUN_SILENCABLE) allow_greyson_mods = TRUE diff --git a/code/modules/projectiles/guns/projectile/pistol/silenced.dm b/code/modules/projectiles/guns/projectile/pistol/silenced.dm index dd13665477a..5a8ea0830ed 100644 --- a/code/modules/projectiles/guns/projectile/pistol/silenced.dm +++ b/code/modules/projectiles/guns/projectile/pistol/silenced.dm @@ -15,7 +15,7 @@ mag_well = MAG_WELL_PISTOL proj_step_multiplier = 0.8 damage_multiplier = 1.6 - penetration_multiplier = 3 + penetration_multiplier = 1.5 init_recoil = HANDGUN_RECOIL(0.4) gun_tags = list(GUN_PROJECTILE, GUN_MAGWELL) serial_type = "SD GmbH" diff --git a/code/modules/projectiles/guns/projectile/revolver/artwork_revolver.dm b/code/modules/projectiles/guns/projectile/revolver/artwork_revolver.dm index 5f643cc43d3..dcebede813a 100644 --- a/code/modules/projectiles/guns/projectile/revolver/artwork_revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver/artwork_revolver.dm @@ -58,4 +58,4 @@ icon_state = "[icon_state]_spin" spawn(10) var/random_icon = rand(1,5) - icon_state = "artwork_revolver_[random_icon]" \ No newline at end of file + icon_state = "artwork_revolver_[random_icon]" diff --git a/code/modules/projectiles/guns/projectile/revolver/breakaction.dm b/code/modules/projectiles/guns/projectile/revolver/breakaction.dm index 643130ea1aa..8c5d212b17d 100644 --- a/code/modules/projectiles/guns/projectile/revolver/breakaction.dm +++ b/code/modules/projectiles/guns/projectile/revolver/breakaction.dm @@ -82,6 +82,7 @@ icon_state = "mateba" item_state = "mateba" caliber = CAL_50 + max_shells = 5 origin_tech = list(TECH_COMBAT = 10, TECH_MATERIAL = 5) matter = list(MATERIAL_PLASTEEL = 20, MATERIAL_WOOD = 6, MATERIAL_PLATINUM = 2) fire_sound = 'sound/weapons/guns/fire/12mm_revolver.ogg' @@ -89,7 +90,7 @@ damage_multiplier = 1.3 // Not as good as the Deckard in penetration for balance purposes, still quite good. init_recoil = HANDGUN_RECOIL(0.5) // Takes no mods that assist with recoil. wield_delay = 0.6 SECOND - wield_delay_factor = 0.6 // 60 vig, heavy gun + wield_delay_factor = 0.3 // 30 vig, heavy gun - but still a handgun. can_dual = FALSE max_upgrades = 4 // Deckard on steroids, let's not get out of hand blacklist_upgrades = list( // Gun already has amazing recoil control, barrels that reduce recoil interfere with the sliding recoil control mechanism. diff --git a/code/modules/projectiles/guns/projectile/revolver/deckard.dm b/code/modules/projectiles/guns/projectile/revolver/deckard.dm index 78bb33b4db0..d6afdcd083c 100644 --- a/code/modules/projectiles/guns/projectile/revolver/deckard.dm +++ b/code/modules/projectiles/guns/projectile/revolver/deckard.dm @@ -5,7 +5,7 @@ icon_state = "deckard" caliber = CAL_50 origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) - max_shells = 6 // Standardizing speedloaders + max_shells = 5 // Standardizing speedloaders //Absolutely not. Stop powercreeping up the mag-capacities of weapons that have anemic performance, just make the damage more menaningful - CDB matter = list(MATERIAL_PLASTEEL = 12, MATERIAL_WOOD = 6) price_tag = 1300 //one of most robust revolvers here damage_multiplier = 1.2 diff --git a/code/modules/projectiles/guns/projectile/revolver/hornet.dm b/code/modules/projectiles/guns/projectile/revolver/hornet.dm index 9a85f31b325..c64823c2e3d 100644 --- a/code/modules/projectiles/guns/projectile/revolver/hornet.dm +++ b/code/modules/projectiles/guns/projectile/revolver/hornet.dm @@ -7,6 +7,7 @@ item_state = "hornet" force = WEAPON_FORCE_PAINFUL caliber = CAL_50 + max_shells = 5 matter = list(MATERIAL_PLASTEEL = 15, MATERIAL_PLASTIC = 8) price_tag = 1200 can_dual = TRUE diff --git a/code/modules/projectiles/guns/projectile/revolver/longboi.dm b/code/modules/projectiles/guns/projectile/revolver/longboi.dm index c2090e9e335..5bce5682d3c 100644 --- a/code/modules/projectiles/guns/projectile/revolver/longboi.dm +++ b/code/modules/projectiles/guns/projectile/revolver/longboi.dm @@ -8,7 +8,7 @@ caliber = CAL_50 slot_flags = SLOT_BACK|SLOT_BELT //Can't fit a holster due to length origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) - max_shells = 6 + max_shells = 5 matter = list(MATERIAL_PLASTEEL = 12, MATERIAL_WOOD = 6) price_tag = 1250 //It's a novelty item. damage_multiplier = 0.9 diff --git a/code/modules/projectiles/guns/projectile/revolver/revolver.dm b/code/modules/projectiles/guns/projectile/revolver/revolver.dm index 1a1dad03365..53019d12d44 100644 --- a/code/modules/projectiles/guns/projectile/revolver/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver/revolver.dm @@ -19,7 +19,7 @@ price_tag = 650 fire_delay = 3 //all revolvers can fire faster, but have huge recoil damage_multiplier = 1.2 - armor_penetration = 0.65 // Insanely powerful handcannon, but worthless against heavy armor + armor_divisor = -0.35 // Insanely powerful handcannon, but worthless against heavy armor init_recoil = HANDGUN_RECOIL(1.3) gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_REVOLVER) var/drawChargeMeter = TRUE diff --git a/code/modules/projectiles/guns/projectile/revolver/tacticool_revolver.dm b/code/modules/projectiles/guns/projectile/revolver/tacticool_revolver.dm index 9176a295a7b..c47e4abce71 100644 --- a/code/modules/projectiles/guns/projectile/revolver/tacticool_revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver/tacticool_revolver.dm @@ -6,7 +6,7 @@ item_state = "tacticool_revolver" fire_sound = 'sound/weapons/guns/fire/12mm_revolver.ogg' caliber = CAL_50 - max_shells = 6 + max_shells = 5 fire_delay = 4 drawChargeMeter = FALSE origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3) diff --git a/code/modules/projectiles/guns/projectile/revolver/wayfarer.dm b/code/modules/projectiles/guns/projectile/revolver/wayfarer.dm index d0cd5d2c3ad..d1f35bc5953 100644 --- a/code/modules/projectiles/guns/projectile/revolver/wayfarer.dm +++ b/code/modules/projectiles/guns/projectile/revolver/wayfarer.dm @@ -18,7 +18,7 @@ can_dual = TRUE price_tag = 1400 damage_multiplier = 1.6 - penetration_multiplier = 2 + penetration_multiplier = 1 init_recoil = RIFLE_RECOIL(0.1) gun_tags = list(GUN_PROJECTILE, GUN_INTERNAL_MAG, GUN_REVOLVER) max_upgrades = 7 //Holds more slots do to being exl gun and not that good cal wise/easy to get diff --git a/code/modules/projectiles/guns/projectile/shotgun/buffalo.dm b/code/modules/projectiles/guns/projectile/shotgun/buffalo.dm index d8cd19a8774..bc9f393db81 100644 --- a/code/modules/projectiles/guns/projectile/shotgun/buffalo.dm +++ b/code/modules/projectiles/guns/projectile/shotgun/buffalo.dm @@ -22,7 +22,7 @@ bulletinsert_sound = 'sound/weapons/guns/interact/shotgun_insert.ogg' matter = list(MATERIAL_PLASTEEL = 20, MATERIAL_PLASTIC = 10) price_tag = 800 - penetration_multiplier = 1.8 + penetration_multiplier = 0.8 pierce_multiplier = 2 damage_multiplier = 0.8 init_recoil = RIFLE_RECOIL(1.4) diff --git a/code/modules/projectiles/guns/projectile/shotgun/riot.dm b/code/modules/projectiles/guns/projectile/shotgun/riot.dm index 20aa0d3a609..6dd923a22cf 100644 --- a/code/modules/projectiles/guns/projectile/shotgun/riot.dm +++ b/code/modules/projectiles/guns/projectile/shotgun/riot.dm @@ -69,7 +69,7 @@ matter = list(MATERIAL_PLASTEEL = 25, MATERIAL_PLASTIC = 12) price_tag = 1000 damage_multiplier = 0.8 - penetration_multiplier = 1.0 + penetration_multiplier = 1 zoom_factors = list(0.2) init_recoil = RIFLE_RECOIL(1.4) folding_stock = TRUE //we can fold our stocks diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 08f95e4717f..525a4acfd15 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -61,7 +61,7 @@ var/can_ricochet = FALSE // defines if projectile can or cannot ricochet. var/ricochet_id = 0 // if the projectile ricochets, it gets its unique id in order to process iteractions with adjacent walls correctly. - var/ricochet_mod = 1 //How much we affect the likeliness of a round to bounce. This number is modified negatively by 10% of the projecties AP(thus, ricochet_mult = 1.5 on ap 10 gun is actually 1.4). high cal rubbers have lower mult than low cal rubbers and are further penalized by having AP and AP mod on their rounds/weapons more often. +// var/ricochet_mod = 1 //How much we affect the likeliness of a round to bounce. This number is modified negatively by 10% of the projecties AP(thus, ricochet_mult = 1.5 on ap 10 gun is actually 1.4). high cal rubbers have lower mult than low cal rubbers and are further penalized by having AP and AP mod on their rounds/weapons more often. var/list/damage_types = list(BRUTE = 10) //BRUTE, BURN, TOX, OXY, CLONE, HALLOSS -> int are the only things that should be in here var/nodamage = FALSE //Determines if the projectile will skip any damage inflictions @@ -153,7 +153,7 @@ /obj/item/projectile/proc/get_total_damage() var/val = 0 for(var/i in damage_types) - val += damage_types[i] * post_penetration_dammult + val += damage_types[i] return val /obj/item/projectile/proc/is_halloss() @@ -162,12 +162,16 @@ return FALSE return TRUE +/obj/item/projectile/proc/get_pain_damage() + if (damage_types[HALLOSS]) + return damage_types[HALLOSS] + /obj/item/projectile/multiply_projectile_damage(newmult) for(var/i in damage_types) - damage_types[i] *= newmult + damage_types[i] *= i == HALLOSS ? 1 : newmult -/obj/item/projectile/multiply_projectile_penetration(newmult) - armor_penetration = initial(armor_penetration) * newmult +/obj/item/projectile/add_projectile_penetration(newmult) + armor_divisor = initial(armor_divisor) + newmult /obj/item/projectile/multiply_pierce_penetration(newmult) penetrating = initial(penetrating) + newmult @@ -176,9 +180,6 @@ if(!hitscan) step_delay = initial(step_delay) * newmult -/obj/item/projectile/multiply_projectile_agony(newmult) - agony = initial(agony) * newmult - /obj/item/projectile/add_fire_stacks(newmult) fire_stacks = initial(fire_stacks) + newmult @@ -218,21 +219,21 @@ playsound(src, hitsound_wall, 50, 1, -2) return -/obj/item/projectile/multiply_pierce_penetration(newmult) - penetrating = initial(penetrating) + newmult - //Checks if the projectile is eligible for embedding. Not that it necessarily will. /obj/item/projectile/proc/can_embed() //embed must be enabled and damage type must be brute if(!embed || damage_types[BRUTE] <= 0) return FALSE return TRUE - +/* /obj/item/projectile/proc/get_structure_damage() return ((damage_types[BRUTE] + damage_types[BURN]) * structure_damage_factor) - -/obj/item/projectile/proc/get_ricochet_modifier() - return (ricochet_mod - (armor_penetration * 0.01)) //Return ricochet mod(default 1) modified by AP. E.G 1 - (AP(10) * 0.01) = 0.1. Thus 10% less likely to bounce per 10ap. +*/ +/obj/item/projectile/proc/get_structure_damage(var/injury_type) + if(!injury_type) // Assume homogenous + return (damage_types[BRUTE] + damage_types[BURN]) * wound_check(INJURY_TYPE_HOMOGENOUS, wounding_mult, edge, sharp) * 2 + else + return (damage_types[BRUTE] + damage_types[BURN]) * wound_check(injury_type, wounding_mult, edge, sharp) * 2 //return 1 if the projectile should be allowed to pass through after all, 0 if not. /obj/item/projectile/proc/check_penetrate(atom/A) @@ -279,11 +280,11 @@ for (var/entry in livingfirer.projectile_damage_increment) damage_types[entry] += livingfirer.projectile_damage_increment[entry] - if (livingfirer.projectile_armor_penetration_mult != 1) - multiply_projectile_penetration(livingfirer.projectile_armor_penetration_mult) + if (livingfirer.projectile_armor_divisor_mult != 1) + add_projectile_penetration(livingfirer.projectile_armor_divisor_mult) - if (livingfirer.projectile_armor_penetration_adjustment) - armor_penetration += livingfirer.projectile_armor_penetration_adjustment + if (livingfirer.projectile_armor_divisor_adjustment) + armor_divisor *= livingfirer.projectile_armor_divisor_adjustment if (livingfirer.projectile_speed_mult != 1) multiply_projectile_step_delay(livingfirer.projectile_speed_mult) @@ -728,7 +729,7 @@ */ playsound(target_mob, pick(mob_hit_sound), 40, 1) - //admin logs + //admin logs if(!no_attack_log) if(ismob(firer)) @@ -736,36 +737,34 @@ var/victim_message = "shot with \a [src.type]" var/admin_message = "shot (\a [src.type])" - admin_attack_log(original_firer, target_mob, attacker_message, victim_message, admin_message) + admin_attack_log(firer, target_mob, attacker_message, victim_message, admin_message) else target_mob.attack_log += "\[[time_stamp()]\] [original_firer] (May No Longer Exists) shot [target_mob]/[target_mob.ckey] with \a [src]" if(target_mob?.ckey && original_firer?.ckey) //We dont care about PVE msg_admin_attack("[original_firer.name] (May No Longer Exists) shot [target_mob] ([target_mob.ckey]) with \a [src] (JMP)") log_admin("[target_mob.real_name] Ckey [original_firer.ckey] shot with [src.type] by [original_firer.ckey] named [original_firer.real_name]") - //sometimes bullet_act() will want the projectile to continue flying - if (result == PROJECTILE_CONTINUE) + if(target_mob.mob_classification & CLASSIFICATION_ORGANIC) + var/turf/target_loca = get_turf(target_mob) + var/mob/living/L = target_mob + if(damage_types[BRUTE] > 10) + var/splatter_dir = dir + if(starting) + splatter_dir = get_dir(starting, target_loca) + target_loca = get_step(target_loca, splatter_dir) + var/blood_color = "#C80000" + if(ishuman(target_mob)) + var/mob/living/carbon/human/H = target_mob + blood_color = H.species.blood_color + new /obj/effect/overlay/temp/dir_setting/bloodsplatter(target_mob.loc, splatter_dir, blood_color) + if(target_loca && prob(50)) + target_loca.add_blood(L) + + if(result == PROJECTILE_STOP) + return TRUE + else return FALSE - if (!testing) - if(target_mob.mob_classification & CLASSIFICATION_ORGANIC) - var/turf/target_loca = get_turf(target_mob) - var/mob/living/L = target_mob - if(damage_types[BRUTE] > 10) - var/splatter_dir = dir - if(starting) - splatter_dir = get_dir(starting, target_loca) - target_loca = get_step(target_loca, splatter_dir) - var/blood_color = "#C80000" - if(ishuman(target_mob)) - var/mob/living/carbon/human/H = target_mob - blood_color = H.form.blood_color - new /obj/effect/overlay/temp/dir_setting/bloodsplatter(target_mob.loc, splatter_dir, blood_color) - if(target_loca && prob(50)) - target_loca.add_blood(L) - - return TRUE - /obj/item/projectile/Bump(atom/A as mob|obj|turf|area, forced = FALSE) if(A == src) return FALSE @@ -773,6 +772,7 @@ loc = A.loc return FALSE //go fuck yourself in another place pls + if((bumped && !forced) || (A in permutated)) return FALSE @@ -808,8 +808,12 @@ impact_atom = C qdel(src) return TRUE - if(ismob(A)) + // Mobs inside containers shouldnt get bumped(such as mechs or closets) + if(!isturf(A.loc)) + bumped = FALSE + return FALSE + var/mob/M = A if(isliving(A)) //if they have a neck grab on someone, that person gets hit instead @@ -840,8 +844,6 @@ if(passthrough) //move ourselves onto A so we can continue on our way if (!tempLoc) - if (testing) - impact_atom = A qdel(src) return TRUE @@ -857,8 +859,7 @@ density = FALSE invisibility = 101 - if (testing) - impact_atom = A + qdel(src) return TRUE @@ -892,7 +893,7 @@ damage_drop_off = max(1, range_shot - affective_damage_range) / 100 //How far we were shot - are affective range. This one is for damage drop off ap_drop_off = max(1, range_shot - affective_ap_range) //How far we were shot - are affective range. This one is for AP drop off - armor_penetration = max(0, armor_penetration - ap_drop_off) + armor_divisor = max(0, armor_divisor - ap_drop_off) agony = max(0, agony - range_shot) //every step we lose one agony, this stops sniping with rubbers. //log_and_message_admins("LOG 2| range shot [range_shot] | drop ap [ap_drop_off] | drop damg | [damage_drop_off] | penetrating [penetrating].") @@ -961,7 +962,7 @@ damage_drop_off = max(1, range_shot - affective_damage_range) / 100 //How far we were shot - are affective range. This one is for damage drop off ap_drop_off = max(1, range_shot - affective_ap_range) //How far we were shot - are affective range. This one is for AP drop off - armor_penetration = max(0, armor_penetration - ap_drop_off) + armor_divisor = max(0, armor_divisor - ap_drop_off) agony = max(0, agony - range_shot) //every step we lose one agony, this stops sniping with rubbers. //log_and_message_admins("LOG 2| range shot [range_shot] | drop ap [ap_drop_off] | drop damg | [damage_drop_off] | penetrating [penetrating].") @@ -1106,7 +1107,7 @@ P.activate(P.lifetime) /obj/item/projectile/proc/block_damage(var/amount, atom/A) - amount /= armor_penetration + amount /= armor_divisor var/dmg_total = 0 var/dmg_remaining = 0 for(var/dmg_type in damage_types) @@ -1115,11 +1116,12 @@ dmg_total += dmg if(dmg && amount) var/dmg_armor_difference = dmg - amount - amount = dmg_armor_difference ? 0 : -dmg_armor_difference - dmg = dmg_armor_difference ? dmg_armor_difference : 0 + var/is_difference_positive = dmg_armor_difference > 0 + amount = is_difference_positive ? 0 : -dmg_armor_difference + dmg = is_difference_positive ? dmg_armor_difference : 0 if(!(dmg_type == HALLOSS)) dmg_remaining += dmg - if(dmg) + if(dmg > 0) damage_types[dmg_type] = dmg else damage_types -= dmg_type @@ -1127,7 +1129,7 @@ on_impact(A) qdel(src) - return dmg_total ? (dmg_remaining / dmg_total) : 0 + return dmg_total > 0 ? (dmg_remaining / dmg_total) : 0 //"Tracing" projectile /obj/item/projectile/test //Used to see if you can hit them. @@ -1227,3 +1229,4 @@ var/icon/I = new(P.icon, P.icon_state) I.Blend(color) return I + diff --git a/code/modules/projectiles/projectile/ameridian.dm b/code/modules/projectiles/projectile/ameridian.dm index d0b30981841..6155229fdc5 100644 --- a/code/modules/projectiles/projectile/ameridian.dm +++ b/code/modules/projectiles/projectile/ameridian.dm @@ -5,7 +5,7 @@ hitsound_wall = 'sound/weapons/guns/misc/laser_searwall.ogg' damage_types = list(BURN = 40) // 20 more damage than the Cog irradiate = 15 - armor_penetration = 15 // 5 less AP than the Cog + armor_divisor = 1.15 //less AP than the Cog check_armour = ARMOR_ENERGY hitscan = TRUE invisibility = 101 //beam projectiles are invisible as they are rendered by the effect engine @@ -20,7 +20,7 @@ name = "ameridian shard" damage_types = list(BRUTE = 30) //Were a bit better then 10mm to stay competitive irradiate = 10 - armor_penetration = 15 + armor_divisor = 1.15 check_armour = ARMOR_BULLET embed = TRUE shrapnel_type = /obj/item/material/shard/ameridian diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 3bd35e50242..89d8119eb07 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -11,7 +11,8 @@ In pvp they also have more lasting damages, such as infections, pain form burns, hitsound_wall = 'sound/weapons/guns/misc/laser_searwall.ogg' pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE damage_types = list(BURN = 20) - armor_penetration = 20 //Some AP + armor_divisor = 1.2 //Some AP + wounding_mult = 1.2 //and some wounding mult check_armour = ARMOR_ENERGY var/frequency = 1 hitscan = 1 @@ -28,7 +29,7 @@ In pvp they also have more lasting damages, such as infections, pain form burns, /obj/item/projectile/beam/check_penetrate(var/atom/A) // For shields to actually block projectiles if(istype(A, /obj/item/shield)) var/obj/item/shield/S = A - var/loss = round(S.durability / armor_penetration / 8) + var/loss = round(S.durability / armor_divisor * 8) block_damage(loss, A) A.visible_message(SPAN_WARNING("\The [src] is weakened by the \the [A]!")) playsound(A.loc, 'sound/weapons/shield/shielddissipate.ogg', 50, 1) @@ -37,22 +38,22 @@ In pvp they also have more lasting damages, such as infections, pain form burns, /obj/item/projectile/beam/musket name = "Musket laser" - armor_penetration = 40 //Good AP, its for slow firing weapon + armor_divisor = 2.5 //Good AP, its for slow firing weapon eyeblur = 1 damage_types = list(BURN = 25) //According to Rain Chule recommendation /obj/item/projectile/beam/drone damage_types = list(BURN = 15) - armor_penetration = 10 //Some AP + armor_divisor = 1.1 //Some AP recoil = 2 /obj/item/projectile/beam/pulse/drone damage_types = list(BURN = 10) - armor_penetration = 5 //No AP we deal 30 damage in 3 shots + armor_divisor = 1 //No AP we deal 30 damage in 3 shots /obj/item/projectile/beam/weak damage_types = list(BURN = 16) - armor_penetration = 15 //Some AP + armor_divisor = 1.15 //Some AP recoil = 2 // Laser bullets are your premium and expensive upgrade to your traditional bullets. @@ -63,52 +64,52 @@ In pvp they also have more lasting damages, such as infections, pain form burns, // 223 is a middle ground between 408 and 75. Damage of 408, AP of 75 /obj/item/projectile/beam/laser_223 damage_types = list(BURN = 20) - armor_penetration = 20 + armor_divisor = 2 recoil = 5 wounding_mult = WOUNDING_SERIOUS /* /obj/item/projectile/beam/laser_223/ap damage_types = list(BURN = 16) - armor_penetration = 36 + armor_divisor = 3 recoil = 7 wounding_mult = WOUNDING_NORMAL penetrating = 1 /obj/item/projectile/beam/laser_223/lethal damage_types = list(BURN = 27) - armor_penetration = 15 + armor_divisor = 1 recoil = 5 wounding_mult = WOUNDING_WIDE */ /obj/item/projectile/beam/weak/pistol_35 damage_types = list(BURN = 15) - armor_penetration = 20 + armor_divisor = 2 recoil = 2.5 /obj/item/projectile/beam/weak/light_rifle_257 damage_types = list(BURN = 14) - armor_penetration = 30 + armor_divisor = 3 recoil = 3.5 /obj/item/projectile/beam/weak/rifle_75 damage_types = list(BURN = 15.5) - armor_penetration = 36 + armor_divisor = 3 recoil = 5 /obj/item/projectile/beam/weak/heavy_rifle_408 damage_types = list(BURN = 20) - armor_penetration = 46 + armor_divisor = 4 recoil = 10 /obj/item/projectile/beam/weak/magnum_40 damage_types = list(BURN = 19) - armor_penetration = 33 + armor_divisor = 3 recoil = 4.5 /obj/item/projectile/beam/weak/kurtz_50 damage_types = list(BURN = 23.5) - armor_penetration = 35 + armor_divisor = 3 recoil = 8 /obj/item/projectile/beam/weak/smg @@ -120,23 +121,23 @@ In pvp they also have more lasting damages, such as infections, pain form burns, /obj/item/projectile/beam/weak/lethal damage_types = list(BURN = 20) - armor_penetration = 0 //cant have negitive armor sadly + armor_divisor = 1 //cant have negitive armor sadly /obj/item/projectile/beam/weak/ap damage_types = list(BURN = 15) - armor_penetration = 25 + armor_divisor = 1.25 /obj/item/projectile/beam/weak/ap/reaver damage_types = list(BURN = 16.5) /obj/item/projectile/beam/shotgun damage_types = list(BURN = 35) //Normal slugs deal 45 - armor_penetration = 10 + armor_divisor = 1.1 recoil = 2 /obj/item/projectile/beam/shotgun/strong damage_types = list(BURN = 54) // Default slug (/obj/item/projectile/bullet/shotgun) deal 54 damage - armor_penetration = 10 + armor_divisor = 1.1 eyeblur = 4 recoil = 4 @@ -150,13 +151,14 @@ In pvp they also have more lasting damages, such as infections, pain form burns, /obj/item/projectile/beam/midlaser // Middle ground between better than stock but worse than heavy. damage_types = list(BURN = 25) - armor_penetration = 25 + armor_divisor = 1.25 /obj/item/projectile/beam/heavylaser name = "heavy laser" icon_state = "heavylaser" damage_types = list(BURN = 35) - armor_penetration = 25 + armor_divisor = 1.5 + wounding_mult = 1.3 eyeblur = 4 muzzle_type = /obj/effect/projectile/laser_heavy/muzzle tracer_type = /obj/effect/projectile/laser_heavy/tracer @@ -167,7 +169,8 @@ In pvp they also have more lasting damages, such as infections, pain form burns, name = "x-ray beam" icon_state = "xray" damage_types = list(BURN = 25) - armor_penetration = 40 + armor_divisor = 2.25 + wounding_mult = 1 eyeblur = 4 recoil = 1 penetrating = 1 //Pierces walls @@ -179,7 +182,8 @@ In pvp they also have more lasting damages, such as infections, pain form burns, name = "pulse" icon_state = "u_laser" damage_types = list(BURN = 40) - armor_penetration = 25 + armor_divisor = 2 //it's a pulse blast. + wounding_mult = 1.5 eyeblur = 4 recoil = 3 muzzle_type = /obj/effect/projectile/laser_pulse/muzzle @@ -194,7 +198,7 @@ In pvp they also have more lasting damages, such as infections, pain form burns, /obj/item/projectile/beam/pulse/heavy name = "heavy pulse" damage_types = list(BURN = 50) - armor_penetration = 35 + armor_divisor = 2.25 recoil = 5 /obj/item/projectile/beam/emitter @@ -210,7 +214,7 @@ In pvp they also have more lasting damages, such as infections, pain form burns, name = "nuclear beam" icon_state = "emitter" damage_types = list(BURN = 40) - armor_penetration = 30 //Experimental and extremely rare but also self recharging so take it as you will + armor_divisor = 1.75 //Experimental and extremely rare but also self recharging so take it as you will recoil = 7 muzzle_type = /obj/effect/projectile/emitter/muzzle @@ -230,7 +234,7 @@ In pvp they also have more lasting damages, such as infections, pain form burns, name = "dissolver ray" icon_state = "emitter" damage_types = list(BURN = 30) //Less burn but also less recoil - armor_penetration = 40 //Experimental and extremely rare but also self recharging so take it as you will + armor_divisor = 4 //Experimental and extremely rare but also self recharging so take it as you will recoil = 5 //Less recoil but also less burn muzzle_type = /obj/effect/projectile/emitter/muzzle @@ -250,15 +254,15 @@ In pvp they also have more lasting damages, such as infections, pain form burns, name = "desolator ray" icon_state = "xray" damage_types = list(BURN = 20) //Worse Xray - armor_penetration = 25 + armor_divisor = 2 eyeblur = 4 recoil = 6 penetrating = 1 - + muzzle_type = /obj/effect/projectile/xray/muzzle tracer_type = /obj/effect/projectile/xray/tracer impact_type = /obj/effect/projectile/xray/impact - + /obj/item/projectile/beam/IRKdesolator/on_impact(atom/target) var/mob/living/M = target var/mob/living/carbon/human/H = M @@ -266,13 +270,13 @@ In pvp they also have more lasting damages, such as infections, pain form burns, if(istype(target, /mob/living/carbon/)) H.apply_effect(15,IRRADIATE)//Irradiates less but pierces walls else - return 1 + return 1 /obj/item/projectile/beam/sniper name = "sniper beam" icon_state = "xray" damage_types = list(BURN = 50) - armor_penetration = 40 + armor_divisor = 2 //stun = 3 //weaken = 3 //stutter = 3 @@ -285,11 +289,10 @@ In pvp they also have more lasting damages, such as infections, pain form burns, /obj/item/projectile/beam/stun name = "stun beam" icon_state = "stun" - armor_penetration = 0 + armor_divisor = 1 nodamage = 1 taser_effect = 1 - agony = 30 - damage_types = list(BURN = 1) + damage_types = list(BURN = 1, HALLOSS = 30) muzzle_type = /obj/effect/projectile/stun/muzzle tracer_type = /obj/effect/projectile/stun/tracer @@ -301,8 +304,7 @@ In pvp they also have more lasting damages, such as infections, pain form burns, icon_state = "stun" nodamage = 1 taser_effect = 1 - agony = 65 // Middle ground between an instant electrode stun and stunbeam - damage_types = list(BURN = 0) // Just in case, this is supposed to be 100% nonlethal + damage_types = list(BURN = 0, HALLOSS = 65) // Middle ground between an instant electrode stun and stunbeam muzzle_type = /obj/effect/projectile/stun/muzzle tracer_type = /obj/effect/projectile/stun/tracer impact_type = /obj/effect/projectile/stun/impact @@ -313,9 +315,8 @@ In pvp they also have more lasting damages, such as infections, pain form burns, /obj/item/projectile/beam/sniper/judgement name = "lighting" icon_state = "stun" - agony = 5 - damage_types = list(BURN = 10) - armor_penetration = 0 + damage_types = list(BURN = 10, HALLOSS = 5) + armor_divisor = 1 eyeblur = 0 muzzle_type = /obj/effect/projectile/stun/muzzle @@ -327,7 +328,7 @@ In pvp they also have more lasting damages, such as infections, pain form burns, name = "sin" icon_state = "xray" damage_types = list(TOX = 10) - armor_penetration = 0 + armor_divisor = 1 eyeblur = 0 muzzle_type = /obj/effect/projectile/xray/muzzle tracer_type = /obj/effect/projectile/xray/tracer @@ -338,7 +339,7 @@ In pvp they also have more lasting damages, such as infections, pain form burns, name = "grace" icon_state = "xray" damage_types = list(TOX = 0)//Shouldnt do anything but just in case its toxin - armor_penetration = 0 + armor_divisor = 1 stun = 0 weaken = 0 eyeblur = 0 @@ -371,7 +372,7 @@ In pvp they also have more lasting damages, such as infections, pain form burns, /obj/item/projectile/beam/tesla name = "lightning" damage_types = list(BURN = 30) - armor_penetration = 10 + armor_divisor = 1.1 hitscan = TRUE muzzle_type = /obj/effect/projectile/tesla/muzzle @@ -390,7 +391,7 @@ In pvp they also have more lasting damages, such as infections, pain form burns, name = "infrared radiation" icon_state = "invisible" damage_types = list(BURN = 15) - armor_penetration = 15 //less ap + armor_divisor = 1.25 //less ap eyeblur = 0 muzzle_type = null tracer_type = null diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 411c325288c..d18ba070a29 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -68,20 +68,28 @@ Bullet also tend to have more armor against them do to this and can be douged un return FALSE var/chance = 0 - if(istype(A, /turf/simulated/wall)) + if(istype(A, /turf/simulated/wall)) // TODO: refactor this from functional into OOP var/turf/simulated/wall/W = A - chance = round(damage/W.material.integrity*180) - else if(istype(A, /obj/item/shield)) // Shields block projectiles as intended + chance = round(penetrating/2 * armor_divisor * 2 / W.material.integrity * 180) + else if(istype(A, /obj/item/shield)) var/obj/item/shield/S = A - chance = round(S.durability / armor_penetration) + chance = round(armor_divisor * 2 / S.durability * 180) else if(istype(A, /obj/machinery/door)) var/obj/machinery/door/D = A - chance = round(damage/D.maxHealth*180) + chance = round(penetrating/2 * armor_divisor * 2 / D.maxHealth * 180) if(D.glass) chance *= 2 else if(istype(A, /obj/structure/girder)) chance = 100 + else if(istype(A, /obj/structure/low_wall)) + chance = round(penetrating/2 * armor_divisor * 2 / 150 * 180) // hardcoded, value is same as steel wall, will have to be changed once low walls have integrity + else if(istype(A, /obj/structure/table)) + var/obj/structure/table/T = A + chance = round(penetrating/2 * armor_divisor * 2 / T.maxHealth * 180) + else if(istype(A, /obj/structure/barricade)) + var/obj/structure/barricade/B = A + chance = round(penetrating/2 * armor_divisor * 2 / B.material.integrity * 180) else if(istype(A, /obj/machinery) || istype(A, /obj/structure)) - chance = damage + chance = armor_divisor * penetrating/2 if(prob(chance) || (A in holder.force_penetration_on)) if(A.opacity || istype(A, /obj/item/shield)) diff --git a/code/modules/projectiles/projectile/bullettypes.dm b/code/modules/projectiles/projectile/bullettypes.dm index 6f9bf0b2fc7..3ec2f1c0ef0 100644 --- a/code/modules/projectiles/projectile/bullettypes.dm +++ b/code/modules/projectiles/projectile/bullettypes.dm @@ -11,8 +11,8 @@ //*********************************// ///9mm/// /obj/item/projectile/bullet/pistol_35 - damage_types = list(BRUTE = 15) - armor_penetration = 5 + damage_types = list(BRUTE = 24) + armor_divisor = 0.4 step_delay = 0.65 can_ricochet = TRUE wounding_mult = WOUNDING_SMALL @@ -21,20 +21,18 @@ recoil = 5 /obj/item/projectile/bullet/pistol_35/hv - damage_types = list(BRUTE = 10) - armor_penetration = 20 - wounding_mult = WOUNDING_TINY + damage_types = list(BRUTE = 18) + armor_divisor = 1.2 step_delay = 0.5 affective_damage_range = 5 affective_ap_range = 5 can_ricochet = TRUE + sharp = TRUE recoil = 6 /obj/item/projectile/bullet/pistol_35/practice name = "practice bullet" - damage_types = list(BRUTE = 2) - agony = 3 - armor_penetration = 0 + damage_types = list(BRUTE = 4) embed = FALSE sharp = FALSE step_delay = 0.75 @@ -43,39 +41,34 @@ /obj/item/projectile/bullet/pistol_35/lethal name = "hollow-point bullet" - damage_types = list(BRUTE = 8) - agony = 6 - post_penetration_dammult = 3 - armor_penetration = 0 + damage_types = list(BRUTE = 18) + armor_divisor = 0.2 wounding_mult = WOUNDING_NORMAL penetrating = 0 can_ricochet = FALSE embed = TRUE - sharp = TRUE + sharp = FALSE step_delay = 0.65 recoil = 5 /obj/item/projectile/bullet/pistol_35/rubber name = "rubber bullet" icon_state = "rubber" - damage_types = list(BRUTE = 10) - agony = 22 - armor_penetration = 0 + damage_types = list(BRUTE = 12, HALLOSS = 22) + armor_divisor = 0.4 wounding_mult = WOUNDING_SMALL embed = FALSE //Prob should have a chance to embed, but makes close to no sense to do this for 9mm at least. sharp = FALSE can_ricochet = TRUE - ricochet_mod = 3 //lower cal rubbers are the most likely to ricochet. +// //ricochet_mod = 3 //lower cal rubbers are the most likely to ricochet. recoil = 4 ignition_source = FALSE /obj/item/projectile/bullet/pistol_35/rubber/soporific name = "soporific coated rubber bullet" - damage_types = list(BRUTE = 0) - agony = 25 + damage_types = list(BRUTE = 0, HALLOSS = 25) var/spray = "stoxin" can_ricochet = FALSE - armor_penetration = 0 /obj/item/projectile/bullet/pistol_35/rubber/soporific/New() ..() @@ -91,9 +84,8 @@ /obj/item/projectile/bullet/pistol_35/rubber/soporific/cbo name = "soporific condensed plastic bullet" - agony = 30 + damage_types = list(HALLOSS = 30) can_ricochet = FALSE - armor_penetration = 0 /obj/item/projectile/bullet/pistol_35/rubber/soporific/cbo/on_hit(atom/target, def_zone = null) if(isliving(target)) @@ -103,13 +95,12 @@ /obj/item/projectile/bullet/pistol_35/rubber/pepperball name = "pepperball" - damage_types = list(BRUTE = 2) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. - agony = 22 + damage_types = list(BRUTE = 2, HALLOSS = 22) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. step_delay = 0.6 //a little slower than rubber rounds - these are just pepperspray balls - armor_penetration = 0 var/spray = "condensedcapsaicin" embed = FALSE can_ricochet = FALSE + wounding_mult = WOUNDING_SMALL /obj/item/projectile/bullet/pistol_35/rubber/pepperball/New() ..() @@ -124,17 +115,15 @@ reagents.trans_to_mob(L, 3, CHEM_TOUCH, copy = FALSE) /obj/item/projectile/bullet/pistol_35/scrap - damage_types = list(BRUTE = 12) - armor_penetration = 0 + damage_types = list(BRUTE = 14) + armor_divisor = 0.25 affective_damage_range = 1 affective_ap_range = 1 recoil = 3 /obj/item/projectile/bullet/pistol_35/biomatter name = "biomatter bullet" - damage_types = list(BURN = 15) - agony = 20 - armor_penetration = 0 + damage_types = list(BURN = 15, HALLOSS = 20) penetrating = 0 can_ricochet = FALSE embed = FALSE @@ -149,8 +138,8 @@ /obj/item/projectile/bullet/magnum_40 icon_state = "bullet_magnum" - damage_types = list(BRUTE = 19) - armor_penetration = 10 + damage_types = list(BRUTE = 28) + armor_divisor = 0.5 wounding_mult = WOUNDING_NORMAL can_ricochet = TRUE step_delay = 0.4 @@ -161,9 +150,7 @@ /obj/item/projectile/bullet/magnum_40/practice name = "practice bullet" - damage_types = list(BRUTE = 2) - agony = 4 - armor_penetration = 0 + damage_types = list(BRUTE = 4) embed = FALSE sharp = FALSE can_ricochet = FALSE @@ -171,51 +158,46 @@ recoil = 4 /obj/item/projectile/bullet/magnum_40/hv - damage_types = list(BRUTE = 16) - armor_penetration = 33 + damage_types = list(BRUTE = 22) + armor_divisor = 1.3 penetrating = 1 step_delay = 0.25 nocap_structures = TRUE //Door breaching - wounding_mult = WOUNDING_SMALL + sharp = TRUE affective_damage_range = 5 affective_ap_range = 5 recoil = 9 /obj/item/projectile/bullet/magnum_40/lethal name = "hollow-point bullet" - damage_types = list(BRUTE = 9) - agony = 11 - armor_penetration = 0 + damage_types = list(BRUTE = 22) + armor_divisor = 0.25 wounding_mult = WOUNDING_SERIOUS - post_penetration_dammult = 3 penetrating = 0 can_ricochet = FALSE embed = TRUE - sharp = TRUE + sharp = FALSE step_delay = 0.5 recoil = 7 /obj/item/projectile/bullet/magnum_40/rubber name = "rubber bullet" icon_state = "rubber" - damage_types = list(BRUTE = 14) //Basically a lower-damage HP but with more agony damage to it. Technically LTL - but not really ideal for it. Crowd-suppression. - agony = 30 - armor_penetration = 10 + damage_types = list(BRUTE = 15, HALLOSS = 30) //Basically a lower-damage HP but with more agony damage to it. Technically LTL - but not really ideal for it. Crowd-suppression. + armor_divisor = 0.5 wounding_mult = WOUNDING_SMALL embed = TRUE //If you shoot someone with a rubber, it will take out an eye - or require surgery if it's high-velocity. Anything over 9mm should, realistically, fuck you up. sharp = FALSE can_ricochet = TRUE - ricochet_mod = 2.5 + //ricochet_mod = 2.5 step_delay = 0.5 recoil = 6 ignition_source = FALSE /obj/item/projectile/bullet/magnum_40/rubber/pepperball name = "pepperball" - damage_types = list(BRUTE = 4) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. - agony = 30 + damage_types = list(BRUTE = 4, HALLOSS = 30) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. step_delay = 0.6 //a little slower than rubber rounds - these are just pepperspray balls - armor_penetration = 0 var/spray = "condensedcapsaicin" embed = FALSE can_ricochet = FALSE //breaks upon impact; impossible. @@ -234,9 +216,7 @@ /obj/item/projectile/bullet/magnum_40/rubber/soporific name = "soporific coated rubber bullet" - damage_types = list(BRUTE = 0) - agony = 35 - armor_penetration = 0 + damage_types = list(BRUTE = 0, HALLOSS = 35) var/spray = "stoxin" can_ricochet = FALSE embed = FALSE @@ -254,17 +234,16 @@ reagents.trans_to_mob(L, 3, CHEM_TOUCH, copy = FALSE) /obj/item/projectile/bullet/magnum_40/scrap - damage_types = list(BRUTE = 16) - armor_penetration = 5 + damage_types = list(BRUTE = 15) + armor_divisor = 0.5 affective_damage_range = 3 affective_ap_range = 3 recoil = 6 /obj/item/projectile/bullet/magnum_40/biomatter name = "biomatter bullet" - damage_types = list(BURN = 20) - agony = 32 - armor_penetration = 0 + damage_types = list(BURN = 20, HALLOSS = 32) + armor_divisor = 0.7 penetrating = 0 can_ricochet = FALSE embed = FALSE @@ -276,8 +255,8 @@ /// 12mm Heavy Pistol /// /obj/item/projectile/bullet/kurtz_50 icon_state = "bullet_krutz" - damage_types = list(BRUTE = 23.5) - armor_penetration = 15 + damage_types = list(BRUTE = 36) + armor_divisor = 0.6 wounding_mult = WOUNDING_WIDE can_ricochet = TRUE embed = TRUE @@ -289,26 +268,24 @@ /obj/item/projectile/bullet/kurtz_50/rubber name = "rubber bullet" icon_state = "rubber" - damage_types = list(BRUTE = 15) + damage_types = list(BRUTE = 20, HALLOSS = 35) wounding_mult = WOUNDING_SERIOUS - agony = 35 check_armour = ARMOR_MELEE - armor_penetration = 10 + armor_divisor = 0.5 can_ricochet = TRUE - ricochet_mod = 2 //including our AP mallus for bounce we are baseline about 1.9x as likely to bounce. + //ricochet_mod = 2 //including our AP mallus for bounce we are baseline about 1.9x as likely to bounce. step_delay = 0.7 recoil = 10 ignition_source = FALSE /obj/item/projectile/bullet/kurtz_50/rubber/pepperball name = "pepperball" - damage_types = list(BRUTE = 6) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. - agony = 35 + damage_types = list(BRUTE = 6, HALLOSS = 35) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. step_delay = 0.75 //a little slower than rubber rounds - these are just pepperspray balls - armor_penetration = 0 var/spray = "condensedcapsaicin" embed = FALSE can_ricochet = FALSE //breaks upon impact; impossible. + wounding_mult = WOUNDING_SMALL /obj/item/projectile/bullet/kurtz_50/rubber/pepperball/New() ..() @@ -324,9 +301,7 @@ /obj/item/projectile/bullet/kurtz_50/practice name = "practice bullet" - damage_types = list(BRUTE = 2) - agony = 3 - armor_penetration = 0 + damage_types = list(BRUTE = 5) embed = FALSE can_ricochet = FALSE step_delay = 0.75 @@ -334,10 +309,8 @@ /obj/item/projectile/bullet/kurtz_50/lethal name = "hollow-point bullet" - damage_types = list(BRUTE = 10) - agony = 12 - post_penetration_dammult = 3 - armor_penetration = 0 + damage_types = list(BRUTE = 27) + armor_divisor = 0.3 wounding_mult = WOUNDING_EXTREME penetrating = 0 can_ricochet = FALSE @@ -346,15 +319,15 @@ /obj/item/projectile/bullet/kurtz_50/hv name = "AV bullet" - damage_types = list(BRUTE = 20) - armor_penetration = 35 - wounding_mult = WOUNDING_NORMAL + damage_types = list(BRUTE = 27) + armor_divisor = 1.4 penetrating = 2 can_ricochet = FALSE step_delay = 0.45 affective_damage_range = 6 affective_ap_range = 6 nocap_structures = TRUE //We can breach doors rather well + sharp = TRUE recoil = 16 @@ -365,8 +338,8 @@ /obj/item/projectile/bullet/light_rifle_257 icon_state = "bullet_carbine" - damage_types = list(BRUTE = 14) - armor_penetration = 15 + damage_types = list(BRUTE = 21) + armor_divisor = 1 wounding_mult = WOUNDING_SMALL penetrating = 1 can_ricochet = TRUE @@ -377,9 +350,7 @@ /obj/item/projectile/bullet/light_rifle_257/practice name = "practice bullet" - damage_types = list(BRUTE = 2) - agony = 2 - armor_penetration = 0 + damage_types = list(BRUTE = 4) embed = FALSE sharp = FALSE can_ricochet = FALSE @@ -387,26 +358,25 @@ recoil = 4 /obj/item/projectile/bullet/light_rifle_257/hv - damage_types = list(BRUTE = 13) - armor_penetration = 30 - wounding_mult = WOUNDING_TINY + damage_types = list(BRUTE = 17) + armor_divisor = 2.5 penetrating = 2 hitscan = TRUE affective_damage_range = 8 //Can snipe affective_ap_range = 8 nocap_structures = TRUE //RATARATARAT down a door + sharp = TRUE recoil = 7 /obj/item/projectile/bullet/light_rifle_257/rubber name = "rubber bullet" icon_state = "rubber" - damage_types = list(BRUTE = 10) - agony = 20 + damage_types = list(BRUTE = 10, HALLOSS = 20) check_armour = ARMOR_MELEE - armor_penetration = 10 + armor_divisor = 0.8 wounding_mult = WOUNDING_TINY embed = TRUE //Imagine being shot with a high velocity .223/5.56 rubber bullet - that shit could easily kill you - or at least would act like a normal bullet. - sharp = TRUE //There is no-way this round is not acting like a regular high-velocity round at this point. + sharp = FALSE can_ricochet = TRUE step_delay = 0.9 recoil = 4 @@ -414,10 +384,8 @@ /obj/item/projectile/bullet/light_rifle_257/rubber/pepperball name = "pepperball" - damage_types = list(BRUTE = 4) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. - agony = 20 + damage_types = list(BRUTE = 4, HALLOSS = 20) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. step_delay = 1.0 //a little slower than rubber rounds - these are just pepperspray balls - armor_penetration = 0 var/spray = "condensedcapsaicin" embed = FALSE can_ricochet = FALSE //breaks upon impact; impossible. @@ -436,15 +404,13 @@ /obj/item/projectile/bullet/light_rifle_257/lethal name = "hollow-point bullet" - damage_types = list(BRUTE = 6) - agony = 6 - post_penetration_dammult = 3 - armor_penetration = 0 + damage_types = list(BRUTE = 17) + armor_divisor = 0.5 wounding_mult = WOUNDING_SERIOUS penetrating = 0 can_ricochet = FALSE embed = TRUE - sharp = TRUE + sharp = FALSE step_delay = 0.6 recoil = 5 @@ -452,17 +418,18 @@ name = "incendiary bullet" damage_types = list(BURN = 10) //We deal most of are damage with fire stacks fire_stacks = 1 - armor_penetration = 0 + armor_divisor = 0.5 penetrating = 0 can_ricochet = FALSE embed = FALSE sharp = FALSE + wounding_mult = WOUNDING_NORMAL step_delay = 0.7 recoil = 7 /obj/item/projectile/bullet/light_rifle_257/scrap - damage_types = list(BRUTE = 12) - armor_penetration = 7 + damage_types = list(BRUTE = 14) + armor_divisor = 0.5 affective_damage_range = 4 affective_ap_range = 4 recoil = 6 @@ -473,8 +440,8 @@ /// 7.62x39mm Rifle /// /obj/item/projectile/bullet/rifle_75 - damage_types = list(BRUTE = 15.5) - armor_penetration = 20 + damage_types = list(BRUTE = 25) + armor_divisor = 1.25 wounding_mult = WOUNDING_SERIOUS penetrating = 1 can_ricochet = TRUE @@ -484,21 +451,20 @@ recoil = 10 /obj/item/projectile/bullet/rifle_75/hv - damage_types = list(BRUTE = 14) - armor_penetration = 36 - wounding_mult = WOUNDING_NORMAL + damage_types = list(BRUTE = 19) + armor_divisor = 3 penetrating = 2 hitscan = TRUE affective_damage_range = 8 affective_ap_range = 8 nocap_structures = TRUE //Helps against walls and doors + sharp = TRUE recoil = 14 /obj/item/projectile/bullet/rifle_75/practice name = "practice bullet" - damage_types = list(BRUTE = 2) - agony = 2 - armor_penetration = 0 + damage_types = list(BRUTE = 2, HALLOSS = 2) + armor_divisor = 1 embed = FALSE sharp = FALSE can_ricochet = FALSE @@ -507,23 +473,21 @@ /obj/item/projectile/bullet/rifle_75/rubber name = "rubber bullet" icon_state = "rubber" - damage_types = list(BRUTE = 12) - agony = 26 + damage_types = list(BRUTE = 14, HALLOSS = 26) check_armour = ARMOR_MELEE - armor_penetration = 15 + armor_divisor = 1 wounding_mult = WOUNDING_NORMAL embed = TRUE //literally imagine a 7.62 rubber bullet hitting you - holy shit. - sharp = TRUE //there is literally no-fucking-way this would not act like a regular sharp round at this point. + sharp = FALSE can_ricochet = TRUE - ricochet_mod = 2 //including armor penalty ends up as closer to 1.85x as likely. + //ricochet_mod = 2 //including armor penalty ends up as closer to 1.85x as likely. step_delay = 0.9 recoil = 6 ignition_source = FALSE /obj/item/projectile/bullet/rifle_75/rubber/soporific name = "soporific coated rubber bullet" - damage_types = list(BRUTE = 4) // Minor damage from blunt trauma, it's meant to be LTL - agony = 30 + damage_types = list(BRUTE = 4, HALLOSS = 30) // Minor damage from blunt trauma, it's meant to be LTL var/spray = "stoxin" /obj/item/projectile/bullet/rifle_75/rubber/soporific/New() @@ -540,15 +504,13 @@ /obj/item/projectile/bullet/rifle_75/lethal name = "hollow-point bullet" - damage_types = list(BRUTE = 7) - agony = 9 - post_penetration_dammult = 3 - armor_penetration = 0 + damage_types = list(BRUTE = 19) + armor_divisor = 0.65 wounding_mult = WOUNDING_WIDE penetrating = 0 can_ricochet = FALSE embed = TRUE - sharp = TRUE + sharp = FALSE step_delay = 0.8 recoil = 10 @@ -556,7 +518,6 @@ name = "incendiary bullet" damage_types = list(BURN = 12) //We deal most of are damage with fire stacks fire_stacks = 2 - armor_penetration = 0 penetrating = 0 can_ricochet = FALSE embed = FALSE @@ -566,7 +527,7 @@ /obj/item/projectile/bullet/rifle_75/scrap damage_types = list(BRUTE = 14) - armor_penetration = 10 + armor_divisor = 0.5 affective_damage_range = 3 affective_ap_range = 3 recoil = 5 @@ -575,8 +536,8 @@ /obj/item/projectile/bullet/heavy_rifle_408 icon_state = "bullet_heavy" - damage_types = list(BRUTE = 20) - armor_penetration = 25 + damage_types = list(BRUTE = 28) + armor_divisor = 1.4 wounding_mult = WOUNDING_SERIOUS penetrating = 2 can_ricochet = TRUE @@ -588,52 +549,49 @@ /obj/item/projectile/bullet/heavy_rifle_408/rubber name = "rubber bullet" icon_state = "rubber" - damage_types = list(BRUTE = 17) - armor_penetration = 20 - agony = 32 + damage_types = list(BRUTE = 17, HALLOSS = 32) + armor_divisor = 1.3 check_armour = ARMOR_MELEE embed = TRUE //imagine an effectively smaller .50 Cal marksman round hitting you. holy shit. - sharp = TRUE //there is literally no-fucking-way this would not act like a regular sharp round at this point. + sharp = FALSE can_ricochet = TRUE - ricochet_mod = 1.35 //after AP penalty to ricochet is factored in we have more like 15% more chance to ricochet. + //ricochet_mod = 1.35 //after AP penalty to ricochet is factored in we have more like 15% more chance to ricochet. step_delay = 0.9 recoil = 14 ignition_source = FALSE /obj/item/projectile/bullet/heavy_rifle_408/practice name = "practice bullet" - damage_types = list(BRUTE = 2) - agony = 2 - armor_penetration = 0 + damage_types = list(BRUTE = 6) + armor_divisor = 1 embed = FALSE sharp = FALSE + wounding_mult = WOUNDING_NORMAL can_ricochet = FALSE step_delay = 0.5 recoil = 10 /obj/item/projectile/bullet/heavy_rifle_408/hv name = "sabot penetrator" - damage_types = list(BRUTE = 16) - armor_penetration = 46 - wounding_mult = WOUNDING_NORMAL + damage_types = list(BRUTE = 20) + armor_divisor = 3.5 penetrating = 3 hitscan = TRUE affective_damage_range = 9 //Sniping cal affective_ap_range = 9 nocap_structures = TRUE //anit-wall/door + sharp = TRUE recoil = 20 /obj/item/projectile/bullet/heavy_rifle_408/lethal name = "hollow-point bullet" - damage_types = list(BRUTE = 12) - agony = 14 - post_penetration_dammult = 3 - armor_penetration = 0 //none of none. Dont give HP any AP + damage_types = list(BRUTE = 20) + armor_divisor = 0.7 wounding_mult = WOUNDING_WIDE penetrating = 0 can_ricochet = FALSE embed = TRUE - sharp = TRUE + sharp = FALSE step_delay = 0.5 recoil = 16 @@ -641,7 +599,7 @@ name = "incendiary bullet" damage_types = list(BURN = 15) //We deal most of are damage with fire stacks fire_stacks = 3 - armor_penetration = 0 + armor_divisor = 1 penetrating = 0 can_ricochet = FALSE embed = FALSE @@ -651,7 +609,7 @@ /obj/item/projectile/bullet/heavy_rifle_408/scrap damage_types = list(BRUTE = 15) - armor_penetration = 15 //half of normal + armor_divisor = 0.75 affective_damage_range = 4 affective_ap_range = 4 recoil = 12 @@ -659,8 +617,8 @@ ///Snowflake /// /obj/item/projectile/bullet/c10x24 - damage_types = list(BRUTE = 19) - armor_penetration = 18 + damage_types = list(BRUTE = 20) + armor_divisor = 2 wounding_mult = WOUNDING_SMALL penetrating = 2 can_ricochet = TRUE @@ -672,7 +630,7 @@ /obj/item/projectile/bullet/auto_460 damage_types = list(BRUTE = 30) - armor_penetration = 25 + armor_divisor = 1.25 penetrating = 2 can_ricochet = TRUE step_delay = 0.3 @@ -682,7 +640,7 @@ /obj/item/projectile/bullet/auto_460/scrap damage_types = list(BRUTE = 17.5) - armor_penetration = 15 + armor_divisor = 1.15 penetrating = 1 can_ricochet = TRUE step_delay = 0.3 @@ -693,7 +651,7 @@ //// 14.5×114mm Anti-Materiel Rifle Rounds //// /obj/item/projectile/bullet/antim damage_types = list(BRUTE = 60) - armor_penetration = 100 + armor_divisor = 10 wounding_mult = WOUNDING_WIDE nocap_structures = TRUE //stun = 5 @@ -705,11 +663,10 @@ recoil = 40 /obj/item/projectile/bullet/antim/lethal - damage_types = list(BRUTE = 45) + damage_types = list(BRUTE = 45, HALLOSS = 100) embed = TRUE - armor_penetration = 60 + armor_divisor = 4 wounding_mult = WOUNDING_EXTREME - agony = 100 penetrating = 2 affective_damage_range = 9 affective_ap_range = 9 @@ -720,7 +677,7 @@ damage_types = list(BURN = 45) embed = FALSE fire_stacks = 5 //BURN, BABY! BUUURN!! - armor_penetration = 20 + armor_divisor = 4 penetrating = 2 affective_damage_range = 10 affective_ap_range = 10 @@ -728,15 +685,15 @@ recoil = 40 /obj/item/projectile/bullet/antim/scrap - damage_types = list(BRUTE = 41.5) - armor_penetration = 50 + damage_types = list(BRUTE = 40) + armor_divisor = 4 affective_damage_range = 8 affective_ap_range = 8 recoil = 30 /obj/item/projectile/bullet/antim/ion damage_types = list(BRUTE = 25) - armor_penetration = 40 + armor_divisor = 4 recoil = 15 /obj/item/projectile/bullet/antim/ion/on_impact(atom/target, blocked = FALSE) @@ -747,12 +704,11 @@ //smoothbore rifles /obj/item/projectile/bullet/ball nocap_structures = TRUE - damage_types = list(BRUTE = 40) //Grab me musket as the founding fathers intended - armor_penetration = 50 //no longer a little jank, much like other older rifles it falters in terms of AP while still having enough to really smash through armor. + damage_types = list(BRUTE = 40, HALLOSS = 60) //Grab me musket as the founding fathers intended + armor_divisor = 4 //no longer a little jank, much like other older rifles it falters in terms of AP while still having enough to really smash through armor. supereffective_mult = 6 //we do 40 damage base, up to 240 with supereffective - plus AP bonus, plus agony bonus, about the same 350~ as before supereffective_types = list(/mob/living/carbon/human = FALSE, /mob/living = TRUE) //We are great at fighting living things(other than people, for balance reasons) but not so much robots. wounding_mult = WOUNDING_EXTREME - agony = 60 penetrating = 2 hitscan = TRUE //It's a bullet, but its hitscan as its only used by snipers. embed = FALSE //Blow a golf ball sized hole through the first man, he's dead on the spot - No embeds, tears through @@ -765,7 +721,7 @@ name = "coilgun round" icon_state = null damage_types = list(BRUTE = 26) - armor_penetration = 20 + armor_divisor = 2 wounding_mult = WOUNDING_SERIOUS penetrating = 1 @@ -779,8 +735,8 @@ /obj/item/projectile/bullet/pellet/mech_flak //Flak Cannon name = "flak shrapnel" icon_state = "l_birdshot-4" - damage_types = list(BRUTE = 11) - armor_penetration = 22 + damage_types = list(BRUTE = 14) + armor_divisor = 1.5 wounding_mult = WOUNDING_NORMAL penetrating = 0 @@ -801,15 +757,16 @@ range_step = 8 //projectile will lose a fragment each time it travels this distance. base_spread = 90 //lower means the pellets spread more across body parts. spread_step = 1 //higher means the pellets spread more across body parts with distance - + pellets = 8 affective_damage_range = 11 affective_ap_range = 11 //Anti-Air /obj/item/projectile/bullet/mech_machinegun //Heavy Machinegun name = "large caliber bullet" icon_state = "bullet_heavy" - damage_types = list(BRUTE = 13) - armor_penetration = 15 //To keep it somewhat fair towards the handhelds considering it has higher ammo capacity + damage_types = list(BRUTE = 21) + wounding_mult = WOUNDING_SERIOUS + armor_divisor = 1.25 //To keep it somewhat fair towards the handhelds considering it has higher ammo capacity penetrating = 1 can_ricochet = TRUE @@ -822,7 +779,7 @@ name = "gigantic round" icon_state = "slug" damage_types = list(BRUTE = 56) - armor_penetration = 50 //Tally ho + armor_divisor = 4 //Tally ho wounding_mult = WOUNDING_EXTREME penetrating = 3 //tank sized round @@ -836,7 +793,7 @@ name = "humongous round" icon_state = "bullet_kurtz" damage_types = list(BRUTE = 26) - armor_penetration = 43 //This fires 2 in a row so keep that in mind + armor_divisor = 3 //This fires 2 in a row so keep that in mind wounding_mult = WOUNDING_SERIOUS penetrating = 3 //tank sized round @@ -852,9 +809,9 @@ /obj/item/projectile/bullet/shotgun name = "slug" icon_state = "slug" - damage_types = list(BRUTE = 37) - armor_penetration = 25 - wounding_mult = WOUNDING_WIDE + damage_types = list(BRUTE = 35) + armor_divisor = 3 + wounding_mult = WOUNDING_SERIOUS knockback = 0 //Bug doups hits step_delay = 0.9 //Slugs are meant for long range shooting @@ -866,7 +823,7 @@ name = "ceramic slug" icon_state = "slug" damage_types = list(BRUTE = 30) - armor_penetration = 10 + armor_divisor = 1.2 knockback = 1 //KER-BLAM!!!! affective_damage_range = 4 affective_ap_range = 4 @@ -875,12 +832,12 @@ /obj/item/projectile/bullet/shotgun/beanbag name = "beanbag" icon_state = "rubber" - damage_types = list(BRUTE = 15) + damage_types = list(BRUTE = 20, HALLOSS = 60) wounding_mult = WOUNDING_NORMAL - agony = 60 - armor_penetration = 0 + armor_divisor = 1.5 embed = FALSE sharp = FALSE + wounding_mult = WOUNDING_WIDE step_delay = 1.65 affective_damage_range = 5 affective_ap_range = 2 @@ -889,10 +846,9 @@ /obj/item/projectile/bullet/shotgun/beanbag/pepperball name = "pepperball slug" - damage_types = list(BRUTE = 6) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. - agony = 50 + damage_types = list(BRUTE = 6, HALLOSS = 50) //Pepperballs disipate upon impact. They'll sting like shit, but won't do much in a low-velocity round. step_delay = 2 //Slower than a beanbag due to it being STRONG as fuck. - armor_penetration = 0 + armor_divisor = 0.8 var/spray = "condensedcapsaicin" embed = FALSE can_ricochet = FALSE //breaks upon impact; impossible. @@ -911,8 +867,8 @@ /obj/item/projectile/bullet/shotgun/beanbag/soporific name = "soporific coated beanbag" - damage_types = list(BRUTE = 10) // They still hurt! - agony = 65 + damage_types = list(BRUTE = 10, HALLOSS = 65) // They still hurt! + armor_divisor = 0.8 var/spray = "stoxin" /obj/item/projectile/bullet/shotgun/beanbag/soporific/New() @@ -930,9 +886,8 @@ /obj/item/projectile/bullet/shotgun/practice name = "practice slug" - damage_types = list(BRUTE = 4) - agony = 5 - armor_penetration = 0 + damage_types = list(BRUTE = 4, HALLOSS = 5) + armor_divisor = 0.5 embed = FALSE affective_damage_range = 1 affective_ap_range = 1 @@ -941,34 +896,35 @@ /obj/item/projectile/bullet/shotgun/incendiary //This is the best ammo for pvp in a shotgun, beating the stunshell with its pain and cooks anyone in any armor! damage_types = list(BURN = 22.5) //We deal most of are damage with fire stacks + armor_divisor = 0.5 fire_stacks = 4 //40 pain a fire proc through ALL armor! recoil = 40 /obj/item/projectile/bullet/shotgun/scrap damage_types = list(BRUTE = 27) - armor_penetration = 5 + armor_divisor = 1.2 affective_damage_range = 3 affective_ap_range = 4 recoil = 10 /obj/item/projectile/bullet/shotgun/beanbag/scrap - damage_types = list(BRUTE = 13) - agony = 55 + damage_types = list(BRUTE = 13, HALLOSS = 55) + armor_divisor = 1.25 affective_damage_range = 1 affective_ap_range = 1 recoil = 8 /obj/item/projectile/bullet/pellet/shotgun/scrap - damage_types = list(BRUTE = 7.5) + damage_types = list(BRUTE = 8) + armor_divisor = 0.9 affective_damage_range = 4 affective_ap_range = 4 recoil = 6 /obj/item/projectile/bullet/shotgun/biomatter //Unique niche round. High AP, Low damage, high agony. Good for mob crunching, or AP LTL uses name = "biomatter slug" - damage_types = list(BURN = 10) // Thin little piece of biomass designed to defeat armor but not really large enough to cause super serious injuries. - agony = 40 // BURNS SO BAD - armor_penetration = 40 //high velocity + damage_types = list(BURN = 10, HALLOSS = 40) // Thin little piece of biomass designed to defeat armor but not really large enough to cause super serious injuries. + armor_divisor = 4 //high velocity wounding_mult = WOUNDING_SMALL //tiny slug. penetrating = 0 can_ricochet = FALSE @@ -1011,14 +967,12 @@ /obj/item/projectile/bullet/kurtz_50/rubber/railgun hitscan = TRUE can_ricochet = FALSE - ricochet_mod = 1.5 + //ricochet_mod = 1.5 recoil = 9 ignition_source = FALSE /obj/item/projectile/bullet/kurtz_50/incendiary - damage_types = list(BRUTE = 5) - agony = 5 - armor_penetration = 0 + damage_types = list(BRUTE = 5, HALLOSS = 5) embed = FALSE can_ricochet = FALSE knockback = 0 @@ -1032,9 +986,7 @@ /obj/item/projectile/bullet/lrifle/incendiary icon_state = "fireball" - damage_types = list(BURN = 3.5) - agony = 5 - armor_penetration = 0 + damage_types = list(BURN = 3.5, HALLOSS = 5) embed = FALSE can_ricochet = FALSE knockback = 0 @@ -1054,8 +1006,8 @@ icon_state = "gauss" mob_hit_sound = list('sound/effects/gore/sear.ogg') hitsound_wall = 'sound/weapons/guns/misc/ric4.ogg' - damage_types = list(BRUTE = 34) - armor_penetration = 40 + damage_types = list(BRUTE = 40) + armor_divisor = 4 check_armour = ARMOR_BULLET embed = FALSE can_ricochet = FALSE @@ -1070,13 +1022,12 @@ /obj/item/projectile/bullet/pellet/shotgun name = "shrapnel" icon_state = "birdshot-1" - damage_types = list(BRUTE = 11) + damage_types = list(BRUTE = 16) + armor_divisor = 0.6 wounding_mult = WOUNDING_SMALL //lotta relatively smaller pellets. - agony = 5 pellets = 4 range_step = 1 spread_step = 10 - post_penetration_dammult = 1.5 //shotgun supremacy is coming back baybee knockback = 0 //We do not knockback do to issues with bullet douping step_delay = 0.9 affective_damage_range = 2 @@ -1091,8 +1042,6 @@ name = "heavy shrapnel" damage_types = list(BRUTE = 8) //We hit slightly softer than buckshot wounding_mult = WOUNDING_NORMAL - agony = 0 //No. - post_penetration_dammult = 2 pellets = 6 // but more times range_step = 2 //and at longer range step_delay = 1.1 //we travel a bit slower @@ -1103,8 +1052,7 @@ name = "Unstable energy bolt" icon_state = "l_birdshot-1" damage_types = list(BURN = 11.5) //slightly less than buck, but FAR more painful - armor_penetration = 15 //heated shot melt armor. - post_penetration_dammult = 1.5 //this is probably gonna need to be tuned back, but we'll see. + armor_divisor = 2 //heated shot melt armor. embed = FALSE can_ricochet = FALSE sharp = FALSE @@ -1116,12 +1064,11 @@ /obj/item/projectile/bullet/shotgun/payload name = "explosive bolt" icon_state = "bolter" - damage_types = list(BRUTE = 15) + damage_types = list(BRUTE = 15, HALLOSS = 5) wounding_mult = WOUNDING_EXTREME //Shredding - agony = 5 knockback = 1 fire_stacks = 1 - armor_penetration = 10 + armor_divisor = 10 nocap_structures = TRUE check_armour = ARMOR_BOMB sharp = TRUE @@ -1154,9 +1101,9 @@ /obj/item/projectile/bullet/crossbow_bolt name = "bolt" icon_state = "bolt" - damage_types = list(BRUTE = 22.5) + damage_types = list(BRUTE = 22) wounding_mult = WOUNDING_SMALL //Relatively small entry wound and straight impale. - armor_penetration = 15 + armor_divisor = 1.5 knockback = 0 //Bug doups hits supereffective_types = list(/mob/living/carbon/human = FALSE, /mob/living = TRUE) supereffective_mult = 1.5 @@ -1168,11 +1115,9 @@ /obj/item/projectile/bullet/crossbow_bolt/lethal name = "bolt" icon_state = "bolt" - damage_types = list(BRUTE = 10) + damage_types = list(BRUTE = 15) wounding_mult = WOUNDING_NORMAL //slightly bigger - agony = 29 - armor_penetration = 0 - post_penetration_dammult = 3 + armor_divisor = 0.5 supereffective_types = list(/mob/living/carbon/human = FALSE, /mob/living = TRUE) supereffective_mult = 1.5 step_delay = 0.9 @@ -1181,10 +1126,11 @@ /obj/item/projectile/bullet/crossbow_bolt/hv name = "bolt" icon_state = "bolt" - damage_types = list(BRUTE = 23.5) - armor_penetration = 55 + damage_types = list(BRUTE = 15) + armor_divisor = 3 penetrating = 3 hitscan = TRUE + sharp = TRUE supereffective_types = list(/mob/living/carbon/human = FALSE, /mob/living = TRUE) supereffective_mult = 1.5 affective_damage_range = 9 @@ -1206,7 +1152,7 @@ name = "metal rod" icon_state = "bolt" damage_types = list(BRUTE = 5) //This is multiplied by tension when fired, so it's actually 25 damage. - armor_penetration = 15 + armor_divisor = 1.25 wounding_mult = WOUNDING_NORMAL //it's a whole ass rod. step_delay = 0.9 embed = FALSE @@ -1218,7 +1164,7 @@ /obj/item/projectile/bullet/reusable/rod_bolt/superheated name = "superheated metal rod" damage_types = list(BRUTE = 5, BURN = 2.5) //This is multiplied by tension when fired, so it's actually 37.5 damage. - armor_penetration = 20 + armor_divisor = 1.5 wounding_mult = WOUNDING_SERIOUS //it's a SUPER HOT whole ass bolt. step_delay = 0.6 embed = TRUE @@ -1233,7 +1179,7 @@ name = "flashforged rod" icon_state = "bolt" damage_types = list(BRUTE = 5) //This is multiplied by tension when fired, so it's actually 25 damage. Slightly worse, but it's faster and has higher AP. - armor_penetration = 30 + armor_divisor = 2 step_delay = 0.6 embed = FALSE penetrating = 1 @@ -1246,10 +1192,10 @@ name = "flashforged superheated rod" icon_state = "bolt" damage_types = list(BRUTE = 5, BURN = 2.5) //This is multiplied by tension when fired, so it's actually 57.5 damage. Slightly worse, but it's faster and has higher AP. - armor_penetration = 30 + armor_divisor = 20 step_delay = 0.2 embed = TRUE - penetrating = 0 + penetrating = 2 affective_damage_range = 7 affective_ap_range = 7 create_type = null @@ -1259,7 +1205,7 @@ name = "arrow" icon_state = "arrow" damage_types = list(BRUTE = 2) //Multiplied by 10 when fired. - armor_penetration = 2 + armor_divisor = 0.3 effective_faction = list("wurm", "roach", "spider", "vox_tribe", "russian", "tengo") //good against common colony mobs damage_mult = 2 // Turns out arrows always sucked embed = FALSE //don't want to embed and drop an arrow, that would be weird @@ -1278,7 +1224,7 @@ damage_types = list(BRUTE = 1.5) // 15 damage at max pull damage_mult = 1.5 // Less bonus damage against effective faction embed_mult = 3 //we are going to try really hard to embed - armor_penetration = 7 // Crossbow bolts are better, however this should not penetrate armor the same as a bullet (if not MORE). + armor_divisor = 0.75 // Crossbow bolts are better, however this should not penetrate armor the same as a bullet (if not MORE). hitscan = TRUE // As every HV ammo affective_damage_range = 8 affective_ap_range = 8 @@ -1289,10 +1235,9 @@ /obj/item/projectile/bullet/reusable/arrow/broadhead name = "broadhead arrow" icon_state = "arrow-broad" - post_penetration_dammult = 1.1 damage_types = list(BRUTE = 4.5) //Very good base damage, negligible (5) AP, but no embedding. Think of it as arrow-hollowpoints. embed = FALSE - armor_penetration = 0.5 + armor_divisor = 0.2 create_type = /obj/item/ammo_casing/arrow/broadhead /obj/item/projectile/bullet/reusable/arrow/hunting @@ -1301,7 +1246,7 @@ damage_types = list(BRUTE = 1) //Multiplied by 10 when fired. supereffective_types = list(/mob/living/carbon/human = FALSE, /mob/living = TRUE) supereffective_mult = 5 //we do 10 damage base, up to 50 against SE mobs, then with 50 AP on should do ~100. Slow to fire, unwieldly, slow projectiles (but reusable), so I'll say this is fair? - armor_penetration = 10 //high ap to take advantage of overpen on mobs + armor_divisor = 1 //high ap to take advantage of overpen on mobs step_delay = 0.7 // 20% faster than normal arrows affective_damage_range = 8 //worse than the baroque, but better than regular arrows affective_ap_range = 8 @@ -1311,6 +1256,7 @@ name = "fragmenting hunting arrow" icon_state = "arrow-bone" damage_types = list(BRUTE = 2) //Multiplied by 10 when fired. + armor_divisor = 0.75 embed = TRUE hitscan = TRUE // Sniping round, fast supereffective_mult = 18 //we do 20 damage base, up to 360 against SE mobs, then with 55 (+5 hunting bow) AP on should do ~410. Baroque is around ~430 vs mobs, so roughly baroque-tier vs mobs, with the same wieldliness and different ammo costs (bone/leather/metal/plastic vs metal/cardboard). @@ -1325,7 +1271,6 @@ damage_types = list(BRUTE = 0.5) //Low damage, but chem-warfarable. embed = FALSE reagent_flags = INJECTABLE | DRAINABLE | AMOUNT_VISIBLE | REFILLABLE - armor_penetration = 0.5 step_delay = 1 create_type = /obj/item/projectile/bullet/reusable/arrow/practice/payload var/volume = 15// We only splash the target with reagents, so we hold a little more than syrette arrows. Good for acids, incindiaries, etc. @@ -1362,7 +1307,6 @@ damage_types = list(HALLOSS = 0.1) embed = FALSE nodamage = TRUE - armor_penetration = 0 create_type = /obj/item/ammo_casing/arrow/practice /obj/item/projectile/bullet/reusable/arrow/practice/payload @@ -1380,7 +1324,6 @@ effective_faction = null damage_types = list(HALLOSS = 1) embed = FALSE //impact fuze - armor_penetration = 0 step_delay = 1.1 //slower affective_damage_range = 6 affective_ap_range = 6 diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 3aa7b05aeff..a16f3808dee 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -13,8 +13,7 @@ /obj/item/projectile/energy/flash name = "chemical shell" icon_state = "bullet" - damage_types = list(BURN = 5) - agony = 10 + damage_types = list(BURN = 5, HALLOSS = 10) kill_count = 15 //if the shell hasn't hit anything after travelling this far it just explodes. var/flash_range = 0 var/brightness = 7 @@ -50,19 +49,17 @@ name = "electrode" icon_state = "spark" mob_hit_sound = list('sound/weapons/tase.ogg') - armor_penetration = 20 + armor_divisor= 1.2 nodamage = 1 taser_effect = 1 - agony = 40 - damage_types = list(HALLOS = 0) + damage_types = list(HALLOS = 40) recoil = 6 //Damage will be handled on the MOB side, to prevent window shattering. /obj/item/projectile/energy/electrode/stunshot name = "stunshot" - damage_types = list(BURN = 5) + damage_types = list(BURN = 5, HALLOSS = 80) taser_effect = 1 - agony = 80 affective_damage_range = 2 recoil = 16 @@ -84,9 +81,8 @@ /obj/item/projectile/energy/bolt name = "bolt" icon_state = "cbbolt" - damage_types = list(TOX = 20) + damage_types = list(TOX = 20, HALLOSS = 40) nodamage = 0 - agony = 40 stutter = 10 diff --git a/code/modules/projectiles/projectile/fragment.dm b/code/modules/projectiles/projectile/fragment.dm index ca62dfc8b85..4f0e2f90a43 100644 --- a/code/modules/projectiles/projectile/fragment.dm +++ b/code/modules/projectiles/projectile/fragment.dm @@ -23,10 +23,9 @@ check_armour = ARMOR_BOMB /obj/item/projectile/bullet/pellet/fragment/rubber - damage_types = list(BRUTE = 1) - ricochet_mod = 3 // :3c + damage_types = list(BRUTE = 1, HALLOSS = 25)// 70 x 25 = 1750 pain, if all hit, rather then 32 x 150 + //ricochet_mod = 3 // :3c can_ricochet = TRUE - agony = 25 // 70 x 25 = 1750 pain, if all hit, rather then 32 x 150 embed = FALSE sharp = FALSE ignition_source = FALSE diff --git a/code/modules/projectiles/projectile/hydrogen.dm b/code/modules/projectiles/projectile/hydrogen.dm index 51ba7033700..c08b11908fb 100644 --- a/code/modules/projectiles/projectile/hydrogen.dm +++ b/code/modules/projectiles/projectile/hydrogen.dm @@ -4,7 +4,7 @@ mob_hit_sound = list('sound/effects/gore/sear.ogg') hitsound_wall = 'sound/weapons/guns/misc/laser_searwall.ogg' damage_types = list(BURN = 70) - armor_penetration = 40 + armor_divisor = 2.25 check_armour = ARMOR_ENERGY muzzle_type = /obj/effect/projectile/plasma/muzzle impact_type = /obj/effect/projectile/plasma/impact @@ -38,15 +38,15 @@ // Overcharged Shots /obj/item/projectile/hydrogen/max damage_types = list(BURN = 90) - armor_penetration = 60 + armor_divisor = 2.75 recoil = 40 /obj/item/projectile/hydrogen/pistol/max damage_types = list(BURN = 80) - armor_penetration = 60 + armor_divisor = 2.5 recoil = 20 /obj/item/projectile/hydrogen/cannon/max damage_types = list(BURN = 100) - armor_penetration = 60 + armor_divisor = 3 recoil = 60 diff --git a/code/modules/projectiles/projectile/plasma.dm b/code/modules/projectiles/projectile/plasma.dm index 630936956d2..a78e5155d53 100644 --- a/code/modules/projectiles/projectile/plasma.dm +++ b/code/modules/projectiles/projectile/plasma.dm @@ -4,7 +4,7 @@ mob_hit_sound = list('sound/effects/gore/sear.ogg') hitsound_wall = 'sound/weapons/guns/misc/laser_searwall.ogg' damage_types = list(BURN = 28) - armor_penetration = 15 + armor_divisor = 1.1 check_armour = ARMOR_ENERGY fire_stacks = 1 //Blasma @@ -18,13 +18,13 @@ impact_type = /obj/effect/projectile/plasma/impact /obj/item/projectile/plasma/shell - damage_types = list(BURN = 36) + damage_types = list(BURN = 40) recoil = 12 /obj/item/projectile/plasma/light name = "light plasma bolt" - damage_types = list(BURN = 28) - armor_penetration = 0 + damage_types = list(BURN = 33) + armor_divisor = 0.65 recoil = 7 /obj/item/projectile/plasma/heavy @@ -36,7 +36,7 @@ fire_stacks = 1 damage_types = list(BURN = 30) - armor_penetration = 30 + armor_divisor = 2.3 /obj/item/projectile/plasma/heavy/shell damage_types = list(BURN = 42) @@ -61,8 +61,7 @@ /obj/item/projectile/plasma/stun name = "stun plasma bolt" taser_effect = 1 - agony = 30 - damage_types = list(HALLOS = 0) + damage_types = list(HALLOS = 30) impact_type = /obj/effect/projectile/stun/impact recoil = 7 fire_stacks = 0 @@ -191,7 +190,7 @@ mob_hit_sound = list('sound/effects/gore/sear.ogg') hitsound_wall = 'sound/weapons/guns/misc/ric4.ogg' damage_types = list(BRUTE = 54) - armor_penetration = 65 + armor_divisor = 4 check_armour = ARMOR_BULLET affective_damage_range = 16 affective_ap_range = 16 @@ -202,7 +201,7 @@ /obj/item/projectile/plasma/check_penetrate(var/atom/A) if(istype(A, /obj/item/shield)) var/obj/item/shield/S = A - var/loss = round(S.durability / armor_penetration / 8) + var/loss = min(round(armor_divisor * 2 / S.durability), 1) block_damage(loss, A) A.visible_message(SPAN_WARNING("\The [src] is weakened by the \the [A]!")) playsound(A.loc, 'sound/weapons/shield/shielddissipate.ogg', 50, 1) diff --git a/code/modules/projectiles/projectile/plasma_aoe.dm b/code/modules/projectiles/projectile/plasma_aoe.dm index 6268bf5b4b7..8c739fd3da0 100644 --- a/code/modules/projectiles/projectile/plasma_aoe.dm +++ b/code/modules/projectiles/projectile/plasma_aoe.dm @@ -1,7 +1,7 @@ /obj/item/projectile/plasma/aoe name = "default plasma aoe" icon_state = "ion" - armor_penetration = 0 + armor_divisor = 1 damage_types = list(BURN = 0) var/aoe_strong = 0 @@ -17,13 +17,14 @@ if(emp_strength) empulse(target.loc, aoe_strong, aoe_weak, strength=emp_strength) if(heat_damage) - heatwave(target.loc, aoe_strong, aoe_weak, heat_damage, fire_stacks, armor_penetration) + heatwave(target.loc, aoe_strong, aoe_weak, heat_damage, fire_stacks, armor_divisor) + ..() /obj/item/projectile/plasma/aoe/ion name = "ion-plasma bolt" icon_state = "ion" - armor_penetration = 0 + armor_divisor = 1 damage_types = list(BURN = 27) aoe_strong = 1 @@ -36,7 +37,7 @@ /obj/item/projectile/plasma/aoe/ion/light name = "light ion-plasma bolt" - armor_penetration = 0 + armor_divisor = 1 damage_types = list(BURN = 20) aoe_strong = 0 @@ -49,7 +50,7 @@ /obj/item/projectile/plasma/aoe/heat name = "high-temperature plasma blast" - armor_penetration = 50 + armor_divisor = 2.25 damage_types = list(BURN = 20) aoe_strong = 1 @@ -62,7 +63,7 @@ /obj/item/projectile/plasma/aoe/heat/strong name = "high-temperature plasma blast" - armor_penetration = 25 + armor_divisor = 1.25 damage_types = list(BURN = 33) aoe_strong = 1 diff --git a/code/modules/projectiles/projectile/projectilegrenades.dm b/code/modules/projectiles/projectile/projectilegrenades.dm index 908b6240f63..2a7918e6797 100644 --- a/code/modules/projectiles/projectile/projectilegrenades.dm +++ b/code/modules/projectiles/projectile/projectilegrenades.dm @@ -1,10 +1,9 @@ /obj/item/projectile/bullet/batonround name = "baton round" icon_state = "grenade" - damage_types = list(BRUTE = 20) - agony = 100 + damage_types = list(BRUTE = 20, HALLOSS = 100) check_armour = ARMOR_MELEE - armor_penetration = 10 + armor_divisor = 1 embed = TRUE //literally imagine being hit by this. can_ricochet = TRUE //It's rubber sharp = FALSE @@ -14,7 +13,7 @@ name = "grenade shell" icon_state = "grenade" damage_types = list(BRUTE = 10) - armor_penetration = 0 + armor_divisor = 1 embed = TRUE sharp = FALSE check_armour = ARMOR_BULLET diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 85f8f74d560..294ff386dfe 100755 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -37,7 +37,7 @@ name = "high explosive rocket" icon_state = "rocket" damage_types = list(BRUTE = 70) - armor_penetration = 100 + armor_divisor = 10 check_armour = ARMOR_BULLET recoil = 75 @@ -67,7 +67,7 @@ name = "EMP rocket" icon_state = "rocket_e" damage_types = list(BRUTE = 10, BURN = 30) - armor_penetration = 100 + armor_divisor = 10 check_armour = ARMOR_BULLET var/heavy_emp_range = 3 var/light_emp_range = 8 @@ -264,16 +264,16 @@ var/mob/living/carbon/human/M = target M.confused += rand(5,8) M.sanity_damage = 8 - + /obj/item/projectile/IRKdebilitate //Marking for future use name = "debilitator bolt" damage_types = list(BRUTE = 12) //Intended to be brute agony = 20 icon_state = "declone" - armor_penetration = 10 + armor_divisor = 10 recoil = 2 -/obj/item/projectile/IRKdebilitate/on_impact(atom/target) +/obj/item/projectile/IRKdebilitate/on_impact(atom/target) if(ishuman(target)) if (!testing) var/mob/living/carbon/human/M = target @@ -314,7 +314,7 @@ icon_state = "flare" damage_types = list(BURN = 12) //Legit deadlyest gun that you get in mass kill_count = 12 - armor_penetration = 0 + armor_divisor = 1 step_delay = 3 eyeblur = 2 // bright light slightly blurs your vision luminosity_range = 5 @@ -387,7 +387,7 @@ name = "sonic bolt" icon_state = "energy2" damage_types = list(BRUTE = 10) - armor_penetration = 30 // It is a sound-wave liquifing organs I guess + armor_divisor = 3 // It is a sound-wave liquifing organs I guess kill_count = 7 check_armour = ARMOR_ENERGY var/golem_damage_bonus = 20 // Damage multiplier against ameridians. @@ -421,7 +421,7 @@ /obj/item/projectile/tether/tail name = "tail lash" damage_types = list(BRUTE = 13) - armor_penetration = 35 + armor_divisor = 2 nodamage = FALSE stun = 2 //Horrors weaken = 2 //Unspeakable @@ -502,7 +502,7 @@ /obj/item/projectile/bullet/os_trurret_gauss name = "ferrous slug" damage_types = list(BRUTE = 15) - armor_penetration = 25 + armor_divisor = 2 penetrating = 2 recoil = 30 step_delay = 0.4 @@ -524,7 +524,7 @@ name = "plasma discharge bolt" icon_state = "ice_1" damage_types = list(BURN = 47) - armor_penetration = 50 + armor_divisor = 2.5 check_armour = ARMOR_ENERGY recoil = 8 diff --git a/code/modules/psionics/psionic_items/psi_Harmor.dm b/code/modules/psionics/psionic_items/psi_Harmor.dm index 34fbdee19e9..a5b07085a9f 100644 --- a/code/modules/psionics/psionic_items/psi_Harmor.dm +++ b/code/modules/psionics/psionic_items/psi_Harmor.dm @@ -18,9 +18,9 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //It has gloves, hood, and shoes for the rest of them slowdown = 2 //slightly faster then a juggernaut. But theres no point in upgrading it! armor_list = list( - melee = 60, - bullet = 60, - energy = 60, + melee = 15, + bullet = 15, + energy = 15, bomb = 100, bio = 100, rad = 90 @@ -61,9 +61,9 @@ item_flags = STOPPRESSUREDAMAGE|THICKMATERIAL|AIRTIGHT|COVER_PREVENT_MANIPULATION|BLOCK_GAS_SMOKE_EFFECT matter = list() armor_list = list( - melee = 60, - bullet = 60, - energy = 60, + melee = 15, + bullet = 15, + energy = 15, bomb = 60, bio = 100, rad = 90 @@ -108,9 +108,9 @@ siemens_coefficient = 0 //Insulated! matter = list() armor_list = list( - melee = 60, - bullet = 60, - energy = 60, + melee = 15, + bullet = 15, + energy = 15, bomb = 100, bio = 100, rad = 90 @@ -151,9 +151,9 @@ slot_flags = SLOT_FEET matter = list() armor_list = list( - melee = 60, - bullet = 60, - energy = 60, + melee = 15, + bullet = 15, + energy = 15, bomb = 100, bio = 100, rad = 90 diff --git a/code/modules/psionics/psionic_items/psi_Larmor.dm b/code/modules/psionics/psionic_items/psi_Larmor.dm index 96284a8f79b..43a107f05c3 100644 --- a/code/modules/psionics/psionic_items/psi_Larmor.dm +++ b/code/modules/psionics/psionic_items/psi_Larmor.dm @@ -17,9 +17,9 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //It has gloves, hood, and shoes for the rest of them slowdown = -0.09 //with all three pieces figures out to 1.36 speed bonus, which is fairly high but also this shit is rare. armor_list = list( - melee = 30, - bullet = 25, - energy = 30, + melee =7, + bullet = 6, + energy = 7, bomb = 25, bio = 100, rad = 30 @@ -59,9 +59,9 @@ matter = list() slowdown = -0.09 armor_list = list( - melee = 30, - bullet = 25, - energy = 30, + melee =7, + bullet = 6, + energy = 7, bomb = 25, bio = 100, rad = 30 @@ -107,9 +107,9 @@ siemens_coefficient = 0 //Insulated! matter = list() armor_list = list( - melee = 30, - bullet = 25, - energy = 30, + melee =7, + bullet = 6, + energy = 7, bomb = 25, bio = 100, rad = 30 @@ -150,9 +150,9 @@ slowdown = -1.09 //1.36% speed up with all parts! No! Wrong! Humans are +1 slowdown by default so that you are slower without shoes, this is why shoes have -1 slowdown. Needs to have -1 slowdown as BASE can_hold_knife = 1 armor_list = list( - melee = 25, - bullet = 15, - energy = 20, + melee = 6, + bullet = 3, + energy = 5, bomb = 15, bio = 100, rad = 30 diff --git a/code/modules/psionics/psionic_items/psi_armor.dm b/code/modules/psionics/psionic_items/psi_armor.dm index 98a0ecfec02..d8f4877b297 100644 --- a/code/modules/psionics/psionic_items/psi_armor.dm +++ b/code/modules/psionics/psionic_items/psi_armor.dm @@ -19,9 +19,9 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //It has gloves, hood, and shoes for the rest of them slowdown = 0.3 //Slightly faster than the red suit. Maybe do it at 0.2? armor_list = list( - melee = 35, - bullet = 35, - energy = 35, + melee =8, + bullet = 8, + energy = 8, bomb = 30, bio = 100, rad = 50 @@ -61,9 +61,9 @@ slot_flags = SLOT_HEAD matter = list() armor_list = list( - melee = 35, - bullet = 35, - energy = 35, + melee =8, + bullet = 8, + energy = 8, bomb = 30, bio = 100, rad = 50 @@ -129,9 +129,9 @@ siemens_coefficient = 0 //Insulated! matter = list() armor_list = list( - melee = 35, - bullet = 35, - energy = 35, + melee =8, + bullet = 8, + energy = 8, bomb = 30, bio = 100, rad = 50 @@ -171,9 +171,9 @@ slot_flags = SLOT_FEET matter = list() armor_list = list( - melee = 35, - bullet = 35, - energy = 35, + melee = 8, + bullet = 8, + energy = 8, bomb = 30, bio = 100, rad = 50 diff --git a/code/modules/psionics/psionic_items/psi_artifacts.dm b/code/modules/psionics/psionic_items/psi_artifacts.dm index 6efb09e898d..10b777aee66 100644 --- a/code/modules/psionics/psionic_items/psi_artifacts.dm +++ b/code/modules/psionics/psionic_items/psi_artifacts.dm @@ -12,9 +12,9 @@ siemens_coefficient = 1 // Non-conductive matter = list(MATERIAL_BONE = 5, MATERIAL_BIOMATTER = 2) armor_list = list( - melee = 40, - bullet = 20, - energy = 5, + melee = 2, + bullet = 5, + energy = 1, bomb = 5, bio = 100, rad = 100 diff --git a/code/modules/psionics/psionic_items/psi_temp_items.dm b/code/modules/psionics/psionic_items/psi_temp_items.dm index 206a5382670..6341759b1ee 100644 --- a/code/modules/psionics/psionic_items/psi_temp_items.dm +++ b/code/modules/psionics/psionic_items/psi_temp_items.dm @@ -14,6 +14,7 @@ slot_flags = null flags = CONDUCT tool_qualities = list(QUALITY_SCREW_DRIVING = 25, QUALITY_BOLT_TURNING = 25, QUALITY_DRILLING = 25, QUALITY_WELDING = 25, QUALITY_CAUTERIZING = 25, QUALITY_PRYING = 25, QUALITY_DIGGING = 25, QUALITY_PULSING = 25, QUALITY_WIRE_CUTTING = 25, QUALITY_HAMMERING = 25, QUALITY_SHOVELING = 25, QUALITY_EXCAVATION = 25, QUALITY_CLAMPING = 25, QUALITY_RETRACTING = 25, QUALITY_SAWING = 25, QUALITY_BONE_SETTING = 25, QUALITY_CUTTING = 25, QUALITY_BONE_GRAFTING = 25) + no_double_tact = TRUE degradation = 0 // Can't degrade workspeed = 0.8 use_power_cost = 0 // Don't use power @@ -132,7 +133,7 @@ if(user.stats.getPerk(PERK_PSI_MANIA)) force = WEAPON_FORCE_BRUTAL whack_speed = 6 - armor_penetration = ARMOR_PEN_HALF + armor_divisor = ARMOR_PEN_HALF var/throwdir = get_dir(user,target) target.throw_at(get_edge_target_turf(target, throwdir),whack_speed,whack_speed) @@ -190,7 +191,7 @@ if(user.stats.getPerk(PERK_PSI_MANIA)) force = WEAPON_FORCE_BRUTAL - armor_penetration = ARMOR_PEN_HALF + armor_divisor = ARMOR_PEN_HALF ..() force = initial(force) // Reset the damage just in case @@ -218,7 +219,7 @@ max_durability = 80 //Can be made on mass and is meant to to be a light weak shield durability = 80 slowdown_time = 0 //Were crappy and mass made by the mind - armor_list = list(melee = 15, bullet = 15, energy = 35, bomb = 15, bio = 0, rad = 0) + armor_list = list(melee = 3, bullet = 3, energy = 2, bomb = 15, bio = 0, rad = 0) base_block_chance = 40 var/mob/living/carbon/holder // The one that prevent the blade from fading //Got to do a little more effort to make this block proj (min cost of 2 points) @@ -244,7 +245,7 @@ max_durability = 120 durability = 120 base_block_chance = 50 - armor_list = list(melee = 25, bullet = 20, energy = 40, bomb = 25, bio = 0, rad = 0) + armor_list = list(melee = 1, bullet = 5, energy = 2, bomb = 25, bio = 0, rad = 0) // Psionic gun. /obj/item/gun/kinetic_blaster @@ -288,7 +289,7 @@ if(holder.stats.getPerk(PERK_PSI_MANIA)) force = /obj/item/projectile/kinetic_blast/brutal - armor_penetration = ARMOR_PEN_HALF + armor_divisor = ARMOR_PEN_HALF projectile_type = force @@ -359,7 +360,7 @@ if(holder.stats.getPerk(PERK_PSI_MANIA)) force = /obj/item/projectile/kinetic_blast_electro/brutal - armor_penetration = ARMOR_PEN_HALF + armor_divisor = ARMOR_PEN_HALF projectile_type = force diff --git a/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm b/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm index 1d2a5bbdde7..bd71569862b 100644 --- a/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm +++ b/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm @@ -4,11 +4,11 @@ icon_state = "anomaly_suit" item_state = "anomaly_suit" slowdown = 0 - armor_list = list(melee = 5, bullet = 5, energy = 25, bomb = 0, bio = 100, rad = 100) + armor_list = list(melee = 5, bullet = 5, energy = 6, bomb = 0, bio = 100, rad = 100) /obj/item/clothing/head/helmet/space/anomaly name = "Expedition hood" desc = "A pressure resistant expedition hood partially capable of insulating against exotic alien energies and a myriad of other things. Much like a waterbear, it has defenses against many forms of nonconventional death- at the expense of zero defense against dying normally." icon_state = "cespace_helmet" item_state = "cespace_helmet" - armor_list = list(melee = 5, bullet = 5, energy = 25, bomb = 0, bio = 100, rad = 100) + armor_list = list(melee = 5, bullet = 5, energy = 6, bomb = 0, bio = 100, rad = 100) diff --git a/code/modules/scrap/scrap.dm b/code/modules/scrap/scrap.dm index c1bba292ebd..0950d93f28e 100755 --- a/code/modules/scrap/scrap.dm +++ b/code/modules/scrap/scrap.dm @@ -310,25 +310,26 @@ GLOBAL_LIST_EMPTY(scrap_base_cache) qdel(src) /obj/structure/scrap/attackby(obj/item/W, mob/living/carbon/human/user) - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - var/list/usable_qualities = list(QUALITY_SHOVELING, QUALITY_HAMMERING) - var/tool_type = W.get_tool_type(user, usable_qualities, src) - switch(tool_type) - if(QUALITY_SHOVELING) - if(W.use_tool(user, src, WORKTIME_NORMAL, QUALITY_SHOVELING, FAILCHANCE_VERY_EASY, required_stat = STAT_ROB, forced_sound = "rummage")) - user.visible_message(SPAN_NOTICE("[user] [pick(ways)] \the [src].")) - user.do_attack_animation(src) - if(user.stats.getPerk(PERK_JUNKBORN)) - rare_item = TRUE - else - rare_item = FALSE - dig_out_lump(user.loc, 0) - shuffle_loot() - clear_if_empty() - if(QUALITY_HAMMERING) - if(W.use_tool(user,src, WORKTIME_EXTREMELY_LONG, QUALITY_HAMMERING, FAILCHANCE_HARD, required_stat = STAT_ROB, forced_sound = "rummage")) - user.visible_message(SPAN_NOTICE("[user] compacts \the [src] into a solid mass!")) - make_cube() + if(user.a_intent != I_HURT) + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + var/list/usable_qualities = list(QUALITY_SHOVELING, QUALITY_HAMMERING) + var/tool_type = W.get_tool_type(user, usable_qualities, src) + switch(tool_type) + if(QUALITY_SHOVELING) + if(W.use_tool(user, src, WORKTIME_NORMAL, QUALITY_SHOVELING, FAILCHANCE_VERY_EASY, required_stat = STAT_ROB, forced_sound = "rummage")) + user.visible_message(SPAN_NOTICE("[user] [pick(ways)] \the [src].")) + user.do_attack_animation(src) + if(user.stats.getPerk(PERK_JUNKBORN)) + rare_item = TRUE + else + rare_item = FALSE + dig_out_lump(user.loc, 0) + shuffle_loot() + clear_if_empty() + if(QUALITY_HAMMERING) + if(W.use_tool(user,src, WORKTIME_EXTREMELY_LONG, QUALITY_HAMMERING, FAILCHANCE_HARD, required_stat = STAT_ROB, forced_sound = "rummage")) + user.visible_message(SPAN_NOTICE("[user] compacts \the [src] into a solid mass!")) + make_cube() /obj/structure/scrap/large name = "large scrap pile" diff --git a/html/changelogs/archive/2021-05.yml b/html/changelogs/archive/2021-05.yml index 3062f137e19..0a9241113b8 100644 --- a/html/changelogs/archive/2021-05.yml +++ b/html/changelogs/archive/2021-05.yml @@ -131,7 +131,7 @@ - rscdel: Vagabonds stole trade beacon railings - balance: rebalanced the technomancer helmet and insulated armour (now called insulated technomancer helmet/armour) to have the same stats. Not sure how this will - look in the ingame change log. " melee = 35, bullet = 25, energy = 40, bomb + look in the ingame change log. " melee =8, bullet = 6, energy = 10, bomb = 20, bio = 0, rad = 30 " - tweak: reduced light bulb range and power thedarkcrusader: diff --git a/icons/effects/alerts.dmi b/icons/effects/alerts.dmi new file mode 100644 index 00000000000..1fe5cb15754 Binary files /dev/null and b/icons/effects/alerts.dmi differ diff --git a/icons/effects/meleeeffects.dmi b/icons/effects/meleeeffects.dmi new file mode 100644 index 00000000000..dc0d6e2f58e Binary files /dev/null and b/icons/effects/meleeeffects.dmi differ diff --git a/icons/mob/ErisStyleHolo.dmi b/icons/mob/ErisStyleHolo.dmi new file mode 100644 index 00000000000..10c04343f20 Binary files /dev/null and b/icons/mob/ErisStyleHolo.dmi differ diff --git a/icons/mob/misc_overlays.dmi b/icons/mob/misc_overlays.dmi new file mode 100644 index 00000000000..edc1f2ed80c Binary files /dev/null and b/icons/mob/misc_overlays.dmi differ diff --git a/icons/mob/screen/ErisStyleHolo.dmi b/icons/mob/screen/ErisStyleHolo.dmi index 322c2b448d3..10c04343f20 100644 Binary files a/icons/mob/screen/ErisStyleHolo.dmi and b/icons/mob/screen/ErisStyleHolo.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index bcc340cf087..969cbc60b10 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -580,17 +580,8 @@ macro "hotkeymode" name = "CTRL+E" command = "quick-equip" elem - name = "F" - command = "a-intent left" - elem - name = "CTRL+F" - command = "a-intent left" - elem - name = "G" - command = "a-intent right" - elem - name = "CTRL+G" - command = "a-intent right" + name = "V" + command = "blocking" elem name = "H" command = "holster" diff --git a/modular_sojourn/fencer.dm b/modular_sojourn/fencer.dm index f6fa26a67d2..a978ecc1458 100644 --- a/modular_sojourn/fencer.dm +++ b/modular_sojourn/fencer.dm @@ -15,7 +15,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 - armor_penetration = 35 + armor_divisor = 2 deathmessage = "Gives a short wave and steps forwards into nothing..." armor = list(melee = 0, bullet = 0, energy = 0, bomb = 0, bio = 500, rad = 500, agony = 0) @@ -93,7 +93,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 - armor_penetration = 35 * (coins + 1) //AP grows faster then raw damage + armor_divisor = 2 * (coins + 1) //AP grows faster then raw damage if(ishuman(A)) var/mob/living/carbon/human/H = A diff --git a/modular_sojourn/power_puncher.dm b/modular_sojourn/power_puncher.dm index e7458927038..de6bc9bdbfa 100644 --- a/modular_sojourn/power_puncher.dm +++ b/modular_sojourn/power_puncher.dm @@ -112,8 +112,8 @@ take_damage(dmg, dmg_type) if(P.agony) take_damage(P.agony, HALLOSS) - if(P.armor_penetration) - take_damage(P.armor_penetration, HALLOSS) + if(P.armor_divisor) + take_damage(P.armor_divisor * 10, HALLOSS) /obj/machinery/power/puncher/Destroy() return ..() diff --git a/nano/templates/clothing_stats.tmpl b/nano/templates/clothing_stats.tmpl new file mode 100644 index 00000000000..e5f63cc60af --- /dev/null +++ b/nano/templates/clothing_stats.tmpl @@ -0,0 +1,63 @@ +
+

Specifications:

+
+

Armor details:

+ {{if data.armor_info.length}} + {{for data.armor_info}} +
+ {{:value.name}} +
+
+ {{:helper.displayBar(value.value, 0, 30, value.value <= 5 ? 'bad' : value.value < 10 ? 'average' : 'good', value.value)}} +
+ {{/for}} +
+ {{else}} +
+ Provides no armor protection. +
+ {{/if}} + {{if data.slowdown != 1}} +
+ Slowdown: +
+
+ {{:helper.displayBar(data.slowdown, -5, 20, data.slowdown < 1 ? 'good' : data.slowdown > 1 ? 'bad': 'average', data.slowdown+' delay units')}} +
+ {{/if}} + {{if data.stiffness != 1}} +
+ Stiffness: +
+
+ {{:helper.displayBar(data.stiffness, -5, 20, data.stiffness < 1 ? 'good' : data.stiffness > 1 ? 'bad': 'average', data.stiffness+' delay units')}} +
+ {{/if}} + {{if data.obscuration != 1}} +
+ Obscuration: +
+
+ {{:helper.displayBar(data.obscuration, -5, 20, data.obscuration < 1 ? 'good' : data.obscuration > 1 ? 'bad': 'average', data.obscuration+' delay units')}} +
+ {{/if}} +
+ {{if data.body_coverage}} +
+ Coverage: +
+
+ {{:data.body_coverage}} +
+ {{else}} +
+ Provides no body coverage. +
+ {{/if}} +
+ Time to equip: +
+
+ {{:helper.displayBar(data.equip_delay, 0, 100, data.equip_delay < 10 ? 'good' : data.equip_delay > 50 ? 'bad': 'average', data.equip_delay/10+' seconds')}} +
+
diff --git a/nano/templates/tool_stats.tmpl b/nano/templates/tool_stats.tmpl new file mode 100644 index 00000000000..1ef26c79084 --- /dev/null +++ b/nano/templates/tool_stats.tmpl @@ -0,0 +1,185 @@ + +
+

Specifications:

+
+ {{if data.tool_qualities}} +
+ Tool qualities: +
+
+ {{for data.tool_qualities}} +
+ {{:value.name}}: + {{:helper.displayBar(value.number, 0, 100, null, value.number)}} +
+ {{/for}} +
+ {{/if}} +
+ Tool health: +
+
+ {{:helper.displayBar(data.health, 0, data.health_max, data.health <= data.health_threshold ? 'bad' : data.health < data.health_max ? 'average' : '', data.health + ' / ' + data.health_max)}} +
+ {{if data.degradation > 0}} +
+ Tool degradation rate: +
+
+ {{:helper.displayBar(data.degradation, 0, data.degradation_max, data.degradation_state, data.degradation)}} +
+ {{/if}} +
+ Precision: +
+
+ {{:helper.displayBar(data.precision, -100, 100, data.precision_state, data.precision + '%')}} +
+
+ Speed: +
+
+ {{:helper.displayBar(data.workspeed, 0, data.workspeed_max, data.workspeed_state, data.workspeed)}} +
+ + {{if data.use_power_cost}} +

Power:

+ {{if data.cell_charge}} +
+ Cell rating: +
+
+ {{:helper.displayBar(data.cell_charge, 0, 100, data.cell_charge <= 25 ? 'bad' : data.cell_charge < 100 ? 'average' : '', data.cell_charge + '%')}} +
+ {{else}} +
+ No cell installed. +
+ {{/if}} +
+ Power usage: +
+
+ {{:helper.displayBar(data.use_power_cost, 0, data.use_power_cost_max, data.use_power_cost_state, data.use_power_cost)}} +
+ {{/if}} + {{if data.use_fuel_cost}} +

Fuel:

+ {{if data.fuel}} +
+ Fuel volume: +
+
+ {{:helper.displayBar(data.fuel.total_volume, 0, data.fuel.maximum_volume, data.fuel.total_volume <= data.fuel.total_volume * 0.25 ? 'bad' : data.fuel.total_volume < data.fuel.maximum_volume ? 'average' : '', data.fuel.total_volume + ' / ' + data.fuel.maximum_volume)}} +
+ {{for data.fuel.contents}} + {{:helper.fixed(value.volume)}} units of {{:value.name}}
+ {{/for}} + {{/if}} +
+ Fuel usage: +
+
+ {{:helper.displayBar(data.use_fuel_cost, 0, data.use_fuel_cost_max, data.use_fuel_cost_state, data.use_fuel_cost)}} +
+ {{/if}} +
+ Damage capabilities: +
+
+ {{:helper.displayBar(data.force, 0, data.force_max, '', data.force)}} +
+ +
+ Armor penetration: +
+
+ {{:data.armor_divisor}} +
+ + {{if data.extra_volume}} +
+ Extra tank volume: +
+
+ {{:data.extra_volume}}u +
+ {{/if}} + +

Unique properties:

+ + {{if data.extended_reach}} +
+ Range on wield: +
+
+ 2 tile radius (Swing excluded) +
+ {{/if}} + + {{if data.w_class > 2}} +
+ Harm intent and wielded: +
+
+ Swing +
+ {{/if}} + + {{if data.screen_shake}} +
+ Hit effects on wield: +
+
+ Screen shake +
+ {{/if}} + + {{if data.push_attack}} +
+ Aiming groin on disarm intent: +
+
+ Push target one tile away +
+ {{/if}} + + {{if data.sharp && data.edge}} + {{if data.forced_broad_strike}} +
Forced broad strike
+ {{else}} +
+ Disarm intent: +
+
+ Broad strike +
+ {{/if}} + {{/if}} + + {{if data.w_class > 3}} +
Double tact
+ {{/if}} +
+
+ +
+

Attachments:

+ Supports up to {{:data.upgrades_max}} attachments. + + {{if data.attachments}} +
+ + {{for data.attachments}} + +
+
+ {{:value.name}} +
+ {{/for}} +
+
+ {{/if}} +
diff --git a/nano/templates/weapon_stats.tmpl b/nano/templates/weapon_stats.tmpl new file mode 100644 index 00000000000..f6e75c4089f --- /dev/null +++ b/nano/templates/weapon_stats.tmpl @@ -0,0 +1,269 @@ +
+

Specifications:

+
+

Weapon details:

+ + {{if data.damage_multiplier != 1}} +
+ Projectile damage multiplier: +
+
+ {{:data.damage_multiplier}}x +
+ {{/if}} + + {{if data.pierce_multiplier != 0}} +
+ Projectile walls penetration: +
+
+ {{:data.pierce_multiplier}} walls +
+ {{/if}} + + {{if data.penetration_multiplier != 1}} +
+ Projectile Armor Divisor: +
+
+ {{:data.penetration_multiplier}} +
+ {{/if}} + +
+ Fire delay: +
+
+ {{:data.fire_delay < data.minimum_fire_delay ? data.minimum_fire_delay : data.fire_delay}} ms +
+ + {{if data.burst > 1}} +
+ Rounds per burst: +
+
+ {{:data.burst}} rounds +
+
+ Burst delay: +
+
+ {{:data.burst_delay}} ms +
+ {{/if}} + +

Recoil details:

+ {{if data.recoil_info.length}} + {{for data.recoil_info}} +
+ {{:value.name}} +
+
+ {{:helper.displayBar(value.name == "Movement Penalty" ? value.value / 10 : value.value, 0, data.total_recoil, (value.name == "Movement Penalty" ? value.value / 10 : value.value) <= 0.5 ? 'good' : (value.name == "Movement Penalty" ? value.value / 10 : value.value) <= 1.5 ? 'average' : 'bad', (value.name == "Movement Penalty" ? value.value / 10 : value.value) + ' degrees')}} +
+ {{/for}} +
+ {{else}} +
+ Has no kickback. +
+ {{/if}} + +

Physical details:

+
+ Melee capabilities: +
+
+ {{:helper.displayBar(data.force, 0, data.force_max, '', data.force)}} +
+
+ Armor penetration: +
+
+ {{:helper.displayBar(data.armor_divisor, 0, 100, '', data.armor_divisor + '%')}} +
+ + {{if data.caliber}} +

Ammo details:

+
+ Rifled caliber: +
+
+ {{:data.caliber}} +
+
+ Ammo remaining: +
+
+ {{:helper.displayBar(data.current_ammo, 0, data.max_shells, '', data.current_ammo)}} +
+ {{/if}} + + {{if data.charge_cost}} +

Power information:

+ {{if data.cell_charge}} +
+ Cell rating: +
+
+ {{:helper.displayBar(data.cell_charge, 0, 100, data.cell_charge <= 25 ? 'bad' : data.cell_charge < 100 ? 'average' : '', data.cell_charge + '%')}} +
+ {{else}} +
+ No cell installed. +
+ {{/if}} +
+ Power usage: +
+
+ {{:data.charge_cost}} +
+
+ Shots remaining: +
+
+ {{:helper.displayBar(data.shots_remaining, 0, data.max_shots, '', data.shots_remaining)}} +
+ {{/if}} +
+
+{{if data.projectile_name}} +
+

Projectile Info:

+
+
+ Name: +
+
+ {{:data.projectile_name}} +
+ +
+ Overall damage: +
+
+ {{:data.projectile_damage}} +
+ +
+ Overall AP: +
+
+ {{:data.projectile_AP}} +
+ +
+ Wound scale: +
+
+ {{:data.projectile_WOUND}} +
+ +
+ Unarmoured Damage: +
+
+ {{:data.unarmoured_damage}} +
+ +
+ Armoured (10) Damage: +
+
+ {{:data.armoured_damage_10}} +
+ +
+ Armoured (15) Damage: +
+
+ {{:data.armoured_damage_15}} +
+ +
+ Recoil multiplier: +
+
+ {{:data.projectile_recoil}} +
+
+
+{{/if}} + +{{if data.firemode_count}} +
+

Firemodes: {{:data.firemode_count}}

+ + {{for data.firemode_info}} + +
+
+

+ {{if value.current == 1}} + {{:helper.link(value.name, 'null', {'firemode' : value.index}, null, 'redButton')}} + {{else}} + {{:helper.link(value.name, 'null', {'firemode' : value.index})}} + {{/if}} + {{:value.desc}} +

+
+ {{if value.projectile_name}} +
+ New Projectile Override:
+
+
+ Name:{{:value.projectile_name}}
+ Overall damage: {{:value.projectile_damage}}
+ Overall AP: {{:value.projectile_AP}}
+ Wound scale: {{:value.projectile_WOUND}}
+
+ {{/if}} + {{if value.burst}} +
+ Rounds per burst: +
+
+ {{:value.burst}} +
+ + {{/if}} + {{if value.fire_delay}} +
+ Fire delay: +
+
+ {{:value.fire_delay < value.minimum_fire_delay ? value.minimum_fire_delay : value.fire_delay}} ms +
+ {{/if}} + {{if value.move_delay}} +
+ Movement delay: +
+
+ {{:value.move_delay}} ms +
+ {{/if}} +
+
+ {{/for}} +
+
+{{/if}} + +
+

Attachments:

+ {{if data.attachments}} +
+ + {{for data.attachments}} + +
+
+ {{:value.name}} +
+ {{/for}} +
+
+ {{/if}} +
diff --git a/sojourn-station.dme b/sojourn-station.dme index acc53ec451b..9ea2d82e795 100644 --- a/sojourn-station.dme +++ b/sojourn-station.dme @@ -972,6 +972,7 @@ #include "code\game\objects\effects\gibs.dm" #include "code\game\objects\effects\glowshroom.dm" #include "code\game\objects\effects\manifest.dm" +#include "code\game\objects\effects\melee.dm" #include "code\game\objects\effects\mines.dm" #include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\overlays.dm" diff --git a/sound/effects/swoosh.ogg b/sound/effects/swoosh.ogg new file mode 100644 index 00000000000..244ab61e350 Binary files /dev/null and b/sound/effects/swoosh.ogg differ