Fixes armour penetration not working against mechs in melee. (#21265)

A deprecated variable in the apply_damage chain fucked up the variable
order.

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
Matt Atlas
2025-08-31 17:25:05 +02:00
committed by GitHub
parent 9595c784ee
commit a3a9a2ad4a
48 changed files with 115 additions and 63 deletions

View File

@@ -1,5 +1,5 @@
///Generic damage proc (slimes and monkeys).
/atom/proc/attack_generic(mob/user as mob)
/atom/proc/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
return 0
///Generic click on for pai

View File

@@ -367,7 +367,7 @@
else
attackpylon(user, 4, user)
/obj/structure/cult/pylon/attack_generic(mob/user, damage)
/obj/structure/cult/pylon/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
//Artificiers maintain pylons

View File

@@ -62,7 +62,7 @@
CHECK_TICK
T.ChangeTurf(type)
/turf/unsimulated/wall/supermatter/attack_generic(mob/user as mob)
/turf/unsimulated/wall/supermatter/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
return attack_hand(user)
/turf/unsimulated/wall/supermatter/attack_robot(mob/user as mob)

View File

@@ -286,7 +286,7 @@
return
. = ..()
/obj/machinery/door/airlock/attack_generic(var/mob/user, var/damage)
/obj/machinery/door/airlock/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(stat & (BROKEN|NOPOWER))
if(damage >= 10)
if(src.density)

View File

@@ -70,7 +70,7 @@
else if(src.health < src.maxhealth * 3/4)
. += SPAN_WARNING("\The [src] shows signs of damage!")
/obj/machinery/door/attack_generic(var/mob/user, var/damage)
/obj/machinery/door/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(damage >= 10)
visible_message(SPAN_DANGER("\The [user] smashes into the [src]!"))
playsound(src.loc, hitsound, 60, 1)

View File

@@ -189,7 +189,7 @@
A.all_doors.Remove(src)
. = ..()
/obj/machinery/door/firedoor/attack_generic(var/mob/user, var/damage)
/obj/machinery/door/firedoor/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(stat & (BROKEN|NOPOWER))
if(damage >= 10)
if(src.density)

View File

@@ -72,7 +72,7 @@
if (health <= 0)
qdel(src)
/obj/item/storage/box/attack_generic(var/mob/user)
/obj/item/storage/box/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!chewable)
return
if(istype(user, /mob/living))
@@ -82,11 +82,6 @@
if(contents.len && !locate(/obj/item/reagent_containers/food) in src) // you can tear open empty boxes for nesting material, or for food
to_chat(user, SPAN_WARNING("There's no food in that box!"))
return
var/damage
if (!L.mob_size)
damage = 3//A safety incase i forgot to set a mob_size on something
else
damage = L.mob_size//he bigger you are, the faster it tears
if (!damage || damage <= 0)
return

View File

@@ -231,8 +231,8 @@
return 0
return 1
/obj/structure/attack_generic(var/mob/user, var/damage, var/attack_verb, var/wallbreaker)
if(!breakable || !damage || !wallbreaker)
/obj/structure/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!breakable || !damage || !environment_smash)
return 0
visible_message(SPAN_DANGER("[user] [attack_verb] the [src] apart!"))
user.do_attack_animation(src)

View File

@@ -141,7 +141,7 @@
var/attack_verb = pick("mangles", "slices", "slashes", "shreds")
attack_generic(user, UA.damage, attack_verb)
/obj/structure/barricade/attack_generic(mob/user, damage, attack_verb, wallbreaker)
/obj/structure/barricade/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!damage)
return FALSE
if(!isliving(user))

View File

@@ -722,8 +722,8 @@
var/obj/O = A
O.hear_talk(M, text, verb, speaking)
/obj/structure/closet/attack_generic(var/mob/user, var/damage, var/attack_message = "attacks", var/wallbreaker)
if(!damage || !wallbreaker)
/obj/structure/closet/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!damage || !environment_smash)
return
user.do_attack_animation(src)
visible_message(SPAN_DANGER("[user] [attack_message] \the [src]!"))

View File

@@ -129,7 +129,7 @@
health -= hitting_projectile.get_structure_damage()
check_health()
/obj/structure/closet/statue/attack_generic(var/mob/user, damage, attacktext, environment_smash)
/obj/structure/closet/statue/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(damage && environment_smash)
for(var/mob/M in src)

View File

@@ -116,8 +116,8 @@
harvest()
return
/obj/structure/reagent_crystal/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
if(!damage || !wallbreaker)
/obj/structure/reagent_crystal/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!damage || !environment_smash)
return FALSE
user.do_attack_animation(src)
visible_message(SPAN_WARNING("\The [user] [attack_message] \the [src]!"))

View File

@@ -30,7 +30,7 @@
dir = SOUTH
pixel_y = -20
/obj/structure/fireaxecabinet/attack_generic(var/mob/user, var/damage, var/attack_verb, var/wallbreaker)
/obj/structure/fireaxecabinet/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
user.do_attack_animation(src)
playsound(user, 'sound/effects/glass_hit.ogg', 50, 1)
visible_message(SPAN_WARNING("\The [user] [attack_verb] \the [src]!"))

View File

@@ -340,8 +340,8 @@
dismantle()
return
/obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
if(!damage || !wallbreaker)
/obj/structure/girder/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!damage || !environment_smash)
return FALSE
user.do_attack_animation(src)
visible_message(SPAN_DANGER("[user] [attack_message] \the [src]!"))

View File

@@ -65,7 +65,7 @@
health -= throw_force
healthcheck()
/obj/structure/gore/attack_generic()
/obj/structure/gore/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
attack_hand(usr)
/obj/structure/gore/attackby(obj/item/attacking_item, mob/user)

View File

@@ -318,7 +318,7 @@
healthcheck()
..()
/obj/structure/grille/attack_generic(var/mob/user, var/damage, var/attack_verb)
/obj/structure/grille/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
visible_message(SPAN_DANGER("[user] [attack_verb] the [src]!"))
user.do_attack_animation(src)
health -= damage
@@ -357,7 +357,7 @@
/obj/structure/grille/crescent/attackby()
return
/obj/structure/grille/crescent/attack_generic()
/obj/structure/grille/crescent/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
return
/obj/structure/grille/crescent/ex_act(var/severity = 2.0)

View File

@@ -182,7 +182,7 @@
verbs -= /obj/structure/inflatable/verb/hand_deflate
deflate()
/obj/structure/inflatable/attack_generic(var/mob/user, var/damage, var/attack_verb)
/obj/structure/inflatable/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
health -= damage
user.do_attack_animation(src)
if(health <= 0)

View File

@@ -80,7 +80,7 @@
visible_message(SPAN_WARNING("[user] hits [src] with [attacking_item]!"))
playsound(src.loc, 'sound/effects/glass_hit.ogg', 70, 1)
/obj/structure/mirror/attack_generic(var/mob/user, var/damage)
/obj/structure/mirror/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
user.do_attack_animation(src)
if(shattered)

View File

@@ -80,7 +80,7 @@
/obj/structure/simple_door/attack_hand(mob/user as mob)
return TryToSwitchState(user)
/obj/structure/simple_door/attack_generic(mob/user)
/obj/structure/simple_door/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(istype(user, /mob/living/simple_animal/construct)) // don't know of any other attack_generic smart enough to open doors
TryToSwitchState(user)
return

View File

@@ -238,7 +238,7 @@
"You hear a knocking sound.")
return
/obj/structure/window/attack_generic(var/mob/user, var/damage)
/obj/structure/window/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(damage >= 10)
visible_message(SPAN_DANGER("[user] smashes into [src]!"))

View File

@@ -85,11 +85,11 @@
try_touch(user, rotting)
/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker)
/turf/simulated/wall/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
radiate()
var/rotting = (locate(/obj/effect/overlay/wallrot) in src)
if(!damage || !wallbreaker)
if(!damage || !environment_smash)
try_touch(user, rotting)
return
@@ -98,11 +98,11 @@
return success_smash(user)
if(reinf_material)
if((wallbreaker == 2) && (damage >= max(material.hardness,reinf_material.hardness)))
if((environment_smash == 2) && (damage >= max(material.hardness,reinf_material.hardness)))
return success_smash(user)
else if(damage >= material.hardness)
return success_smash(user)
return fail_smash(user, wallbreaker)
return fail_smash(user, environment_smash)
/turf/simulated/wall/attackby(obj/item/attacking_item, mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)

View File

@@ -662,7 +662,7 @@
if(!mob_wear_hat(user))
return ..()
/obj/item/clothing/head/attack_generic(var/mob/user)
/obj/item/clothing/head/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!mob_wear_hat(user))
return ..()

View File

@@ -33,7 +33,7 @@
/obj/effect/map_effect/window_spawner/attack_ghost()
attack_generic()
/obj/effect/map_effect/window_spawner/attack_generic()
/obj/effect/map_effect/window_spawner/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
activate()
/obj/effect/map_effect/window_spawner/Initialize(mapload)

View File

@@ -70,7 +70,7 @@
else
return body
/mob/living/heavy_vehicle/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, blocked, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
/mob/living/heavy_vehicle/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
if(!damage)
return 0

View File

@@ -509,7 +509,7 @@
update_icon()
return
/mob/living/heavy_vehicle/attack_generic(var/mob/user, var/damage, var/attack_message, var/armor_penetration, var/attack_flags, var/damage_type = DAMAGE_BRUTE)
/mob/living/heavy_vehicle/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!(user in pilots))
. = ..()

View File

@@ -16,7 +16,7 @@
//so we don't appear to teleport from two tiles away when moving into a turf adjacent to vines.
addtimer(CALLBACK(src, PROC_REF(entangle), M), 1)
/obj/effect/plant/attack_generic(var/mob/user)
/obj/effect/plant/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
manual_unbuckle(user)
/obj/effect/plant/proc/trodden_on(var/mob/living/victim)

View File

@@ -217,7 +217,7 @@
if(response == "Yes")
harvest()
/obj/machinery/portable_atmospherics/hydroponics/attack_generic(var/mob/user)
/obj/machinery/portable_atmospherics/hydroponics/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
// Why did I ever think this was a good idea. TODO: move this onto the nymph mob.
if(istype(user,/mob/living/carbon/alien/diona))
var/mob/living/carbon/alien/diona/nymph = user

View File

@@ -542,7 +542,7 @@
/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
return
/mob/living/carbon/human/attack_generic(var/mob/user, var/damage, var/attack_message, var/armor_penetration, var/attack_flags, var/damage_type)
/mob/living/carbon/human/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!damage)
return

View File

@@ -436,7 +436,7 @@ This function restores all organs.
if(zone_to_get in organs_by_name)
return organs_by_name[zone_to_get]
/mob/living/carbon/human/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, blocked, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
/mob/living/carbon/human/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
if (invisibility == INVISIBILITY_LEVEL_TWO && back && (istype(back, /obj/item/rig)))
if(damage > 0)
to_chat(src, SPAN_DANGER("You are now visible."))

View File

@@ -8,7 +8,7 @@
standard 0 if fail
*/
/mob/living/proc/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, blocked, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
/mob/living/proc/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
SHOULD_NOT_SLEEP(TRUE)
if(!damage)

View File

@@ -349,7 +349,7 @@
// End BS12 momentum-transfer code.
/mob/living/attack_generic(var/mob/user, var/damage, var/attack_message, var/armor_penetration, var/attack_flags, var/damage_type = DAMAGE_BRUTE)
/mob/living/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!damage)
return

View File

@@ -823,7 +823,7 @@
user.put_in_active_hand(broken_device)
//Robots take half damage from basic attacks.
/mob/living/silicon/robot/attack_generic(var/mob/user, var/damage, var/attack_message)
/mob/living/silicon/robot/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
return ..(user,FLOOR(damage/2, 1),attack_message)
/mob/living/silicon/robot/proc/allowed(mob/M)

View File

@@ -88,7 +88,7 @@
/mob/living/simple_animal/construct/get_bullet_impact_effect_type(var/def_zone)
return BULLET_IMPACT_METAL
/mob/living/simple_animal/construct/attack_generic(var/mob/user)
/mob/living/simple_animal/construct/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(istype(user, /mob/living/simple_animal/construct))
var/mob/living/simple_animal/construct/C = user

View File

@@ -299,7 +299,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile/commanded)
if(M in friends)
friends -= M
/mob/living/simple_animal/hostile/commanded/attack_generic(var/mob/user, var/damage, var/attack_message)
/mob/living/simple_animal/hostile/commanded/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
..()
// We forgive our master

View File

@@ -152,7 +152,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile)
set_last_found_target(tmp_target_mob)
change_stance(HOSTILE_STANCE_ATTACK)
/mob/living/simple_animal/hostile/attack_generic(var/mob/user, var/damage, var/attack_message)
/mob/living/simple_animal/hostile/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
..()
if(last_found_target != user)
set_last_found_target(user)

View File

@@ -217,7 +217,7 @@
if(morphed)
restore()
/mob/living/simple_animal/hostile/morph/attack_generic(mob/user, damage, attack_message)
/mob/living/simple_animal/hostile/morph/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
..()
if(morphed)
restore()

View File

@@ -732,8 +732,7 @@
return
speech_buffer.Add(message)
/mob/living/simple_animal/parrot/attack_generic(var/mob/user, var/damage, var/attack_message)
/mob/living/simple_animal/parrot/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
var/success = ..()
if(client)

View File

@@ -104,7 +104,7 @@
var/datum/weakref/original_body
var/datum/weakref/possessed_body
/mob/living/simple_animal/shade/bluespace/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, blocked, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
/mob/living/simple_animal/shade/bluespace/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
return 0
/mob/living/simple_animal/shade/bluespace/adjustBruteLoss()

View File

@@ -705,7 +705,7 @@
if(ismob(hitting_projectile.firer))
handle_attack_by(hitting_projectile.firer)
/mob/living/simple_animal/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, blocked, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
/mob/living/simple_animal/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, used_weapon, damage_flags = 0, armor_pen, silent = FALSE)
. = ..()
handle_bleeding_timer(damage)
handle_blood()

View File

@@ -184,7 +184,7 @@
/atom/movable/openspace/turf_proxy/attack_hand(mob/user as mob)
loc.attack_hand(user)
/atom/movable/openspace/turf_proxy/attack_generic(mob/user as mob)
/atom/movable/openspace/turf_proxy/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
loc.attack_generic(user)
/atom/movable/openspace/turf_proxy/examine(mob/user, distance, is_adjacent, infix, suffix, show_extended)
@@ -212,7 +212,7 @@
/atom/movable/openspace/turf_mimic/attack_hand(mob/user as mob)
to_chat(user, SPAN_NOTICE("You cannot reach \the [src] from here."))
/atom/movable/openspace/turf_mimic/attack_generic(mob/user as mob)
/atom/movable/openspace/turf_mimic/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
to_chat(user, SPAN_NOTICE("You cannot reach \the [src] from here."))
/atom/movable/openspace/turf_mimic/examine(mob/user, distance, is_adjacent, infix, suffix, show_extended)

View File

@@ -221,7 +221,7 @@ By design, d1 is the smallest direction and d2 is the highest
return TRUE
return FALSE
/obj/structure/cable/attack_generic(var/mob/user)
/obj/structure/cable/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
//Let those rats (and other small things) nibble the cables
if (issmall(user) && !isDrone(user))
to_chat(user, SPAN_DANGER("You bite into \the [src]."))

View File

@@ -393,7 +393,7 @@
else
return light_range != brightness_range || light_power != brightness_power || light_color != brightness_color
/obj/machinery/light/attack_generic(var/mob/user, var/damage)
/obj/machinery/light/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!damage)
return
if(status == LIGHT_EMPTY)

View File

@@ -20,7 +20,7 @@
return
attack_hand(user)
/obj/structure/droppod_door/attack_generic(var/mob/user)
/obj/structure/droppod_door/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
attack_hand(user)
/obj/structure/droppod_door/attack_hand(var/mob/user)

View File

@@ -380,7 +380,7 @@
////////////////////////////////////////////////////////////////////////////////
/// FOOD END
////////////////////////////////////////////////////////////////////////////////
/obj/item/reagent_containers/food/snacks/attack_generic(var/mob/living/user)
/obj/item/reagent_containers/food/snacks/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!isanimal(user) && !isalien(user))
return

View File

@@ -115,8 +115,8 @@
visible_message(SPAN_WARNING("\The [src] breaks down!"), intent_message = THUNK_SOUND)
return break_to_parts() // if we break and form shards, return them to the caller to do !FUN! things with
/obj/structure/table/attack_generic(var/mob/user, var/damage, var/attack_message = "attacks", var/wallbreaker)
if(!damage || !wallbreaker)
/obj/structure/table/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!damage || !environment_smash)
return
user.do_attack_animation(src)
visible_message(SPAN_DANGER("[user] [attack_message] \the [src]!"))

View File

@@ -38,7 +38,7 @@
return
return attack_hand(user)
/obj/structure/lift/attack_generic(var/mob/user)
/obj/structure/lift/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
return attack_hand(user)
/obj/structure/lift/attack_hand(var/mob/user)

View File

@@ -421,7 +421,7 @@
/obj/vehicle/proc/update_stats()
return
/obj/vehicle/attack_generic(var/mob/user, var/damage, var/attack_message)
/obj/vehicle/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
if(!damage)
return
visible_message(SPAN_DANGER("[user] [attack_message] the [src]!"))

View File

@@ -0,0 +1,58 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# - (fixes bugs)
# wip
# - (work in progress)
# qol
# - (quality of life)
# soundadd
# - (adds a sound)
# sounddel
# - (removes a sound)
# rscadd
# - (adds a feature)
# rscdel
# - (removes a feature)
# imageadd
# - (adds an image or sprite)
# imagedel
# - (removes an image or sprite)
# spellcheck
# - (fixes spelling or grammar)
# experiment
# - (experimental change)
# balance
# - (balance changes)
# code_imp
# - (misc internal code change)
# refactor
# - (refactors code)
# config
# - (makes a change to the config files)
# admin
# - (makes changes to administrator tools)
# server
# - (miscellaneous changes to server)
#################################
# Your name.
author: MattAtlas
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- bugfix: "Fixes armour penetration not working on mechs when hit with a melee weapon or by simple mobs."