-
Notifications
You must be signed in to change notification settings - Fork 40
feat: Ground Combat Rebalance #431
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
This comment was marked as outdated.
This comment was marked as outdated.
1eabd4f to
51b6826
Compare
|
rebased onto current development |
Inverts values so Damage reduction works as intended
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 16
🔭 Outside diff range comments (7)
objects/obj_enunit/Alarm_0.gml (3)
170-170: 🛠️ Refactor suggestionThe code structure cries for the Machine God's optimization!
A prescient TODO comment suggests transforming these code blocks into functions - a most logical application of the sacred DRY principle. The repeated patterns in shooting logic would benefit greatly from modular encapsulation.
This refactoring would align with both the Combat Dogma and the Binary Canticles of Code Maintainability. Multiple similar blocks of targeting logic appear throughout the script that could be unified into sacred function calls.
Would you like this servant of the Omnissiah to generate the appropriate function templates to replace these redundant code blocks?
289-397: 🛠️ Refactor suggestionObsolete code sections require binary purification!
The extensive commented-out section spanning lines 291-397 has been marked with a TODO comment indicating it should be "scrapped and reworked". This dead code defiles the sacred scriptures of the source file and burdens the cognition-engines of those who must maintain it.
As per the Ritual of Code Cleanliness, I recommend:
- Extracting any valuable logic patterns that might still be relevant
- Completely removing this commented section
- Adding appropriate documentation about what was removed and why
The binary will flow more purely without the burden of this commented legacy code.
213-213: 💡 Verification agent🧩 Analysis chain
Unattended TODO comment requires tech-priest attention!
This TODO comment indicates that the melee code has not been refactored, which may contradict the holy purpose of this combat rebalance ritual. The melee damage formula was supposed to be rewritten according to the sacred PR objectives.
Request verification from the Tech-Magos whether this section requires additional modification to incorporate the new "martial" and "savage" weapon tags mentioned in the PR description.
Would you like this humble servant of the Omnissiah to propose a solution for implementing the melee code refactoring as described in the sacred texts of the PR objectives?
By the Omnissiah’s blessing, I shall invoke diagnostics upon the forbidden TODO! Initiating sacred script:
🏁 Script executed:
#!/bin/bash # Locate the Alarm_0.gml file FILE=$(fd Alarm_0.gml | head -n1) echo "=== Inspecting $FILE ===" sed -n '200,250p' "$FILE" echo echo "=== Searching for 'martial' and 'savage' tags ===" rg -n "martial" || echo "No 'martial' occurrences found" rg -n "savage" || echo "No 'savage' occurrences found" echo echo "=== Searching for 'melee' references ===" rg -n "melee" || echo "No 'melee' references found" echo echo "=== Enumerating all TODO comments ===" rg -n "TODO" || echo "No TODO comments found"Length of output: 66757
By the Omnissiah’s will, I summon the forbidden lines for scrutiny:
🏁 Script executed:
#!/bin/bash echo '=== Snippet from objects/obj_enunit/Alarm_0.gml (lines 180–260) ===' sed -n '180,260p' objects/obj_enunit/Alarm_0.gmlLength of output: 4055
Purge redundant TODO in enemy melee AI
By the Omnissiah’s cogitations, the melee branch inobjects/obj_enunit/Alarm_0.gmlalready delegates toscr_shoot, which leverages the new “martial” and “savage” tag logic in the core combat routines. The lingering TODO is thus stale.– Location: objects/obj_enunit/Alarm_0.gml, line 213
– Action: Remove the comment//TODO: The melee code was not refactored;No further changes to this block are required—the refactored melee formula is applied at runtime via
scr_shoot.objects/obj_enunit/Alarm_1.gml (2)
37-45:⚠️ Potential issueIncomplete assignment statement ruptures the Omnissiah’s logic flow
dudes[j] = dudes[j + 1] dudes_special[j] = dudes_special[j + 1];is missing an operator / statement separator.
At run-time the compiler will either throw or silently concatenate, corrupting the entire roster-compression pass and breaking battle setup.- dudes[j] = dudes[j + 1] dudes_special[j] = dudes_special[j + 1]; + // Copy both fields separately + dudes[j] = dudes[j + 1]; + dudes_special[j] = dudes_special[j + 1];
55-57:⚠️ Potential issueTypo in array name will summon a void-pointer daemon
dudges_defense(line 56) is spelt differently from the canonicaldudes_defense.
This produces an implicit new variable, leaving the intended array slot forever initialised to the default value (0) and skewing enemy defensive stats.- dudges_defense[j + 1] = 1; + dudes_defense[j + 1] = 1;scripts/scr_marine_struct/scr_marine_struct.gml (1)
1617-1761: 🧹 Nitpick (assertive)Additive modifier chain risks runaway melee values
_melee_modstarts at 1 and then has percentage components added rather than multiplied.
Example: WS 50 (+1), EXP 100 (+0.2), STR/DEX bonuses, gear (+0.3) →_melee_mod≈ 2.5 ⇒ 250 % base damage before trait multipliers, then further multiplications (e.g., x1.3 Duelist) stack on top. The escalations may overshoot the intended power curve compared with the old multiplicative breakdown.Consider reverting to pure multiplicative stacking, or convert each additive bonus to its intended percentage (e.g.,
*_mod *= 1 + (weapon_skill/100)instead of+=). This will keep the calc monotonic yet tempered.scripts/scr_initialize_custom/scr_initialize_custom.gml (1)
1672-1690: 🛠️ Refactor suggestionDuplicate
wep2keys – earlier definition overwrittenInside the Terminator squad’s
optionblock twowep2entries are declared. GML structs keep only the last entry, so the first array (line 1681-1684) is silently discarded.Combine the two lists into a single array or split into
option_heavy/option_combikeys to preserve both load-out possibilities.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (4)
sprites/spr_weapon_omnissian_axe/cf403b7b-a831-4dd7-94fc-490b330d9a3b.pngis excluded by!**/*.pngsprites/spr_weapon_omnissian_axe/layers/cf403b7b-a831-4dd7-94fc-490b330d9a3b/3f223d5d-3d0b-4c23-9457-1ae722299b06.pngis excluded by!**/*.pngsprites/spr_weapon_shotgun/ed54fad2-a39b-4f07-9737-5b8f916bee92.pngis excluded by!**/*.pngsprites/spr_weapon_shotgun/layers/ed54fad2-a39b-4f07-9737-5b8f916bee92/11b4c573-f844-42a2-905a-d6dace60762b.pngis excluded by!**/*.png
📒 Files selected for processing (26)
ChapterMaster.yyp(2 hunks)datafiles/main/chapters/8.JSON(1 hunks)objects/obj_controller/Step_0.gml(1 hunks)objects/obj_enunit/Alarm_0.gml(1 hunks)objects/obj_enunit/Alarm_1.gml(38 hunks)objects/obj_ncombat/KeyPress_13.gml(4 hunks)objects/obj_p_assra/Step_0.gml(4 hunks)objects/obj_pnunit/Alarm_0.gml(1 hunks)objects/obj_pnunit/Create_0.gml(0 hunks)objects/obj_popup/Mouse_50.gml(1 hunks)objects/obj_shop/Create_0.gml(3 hunks)scripts/scr_after_combat/scr_after_combat.gml(1 hunks)scripts/scr_company_order/scr_company_order.gml(1 hunks)scripts/scr_culture_visuals/scr_culture_visuals.gml(1 hunks)scripts/scr_en_weapon/scr_en_weapon.gml(25 hunks)scripts/scr_equipment_struct/scr_equipment_struct.gml(2 hunks)scripts/scr_flavor/scr_flavor.gml(1 hunks)scripts/scr_initialize_custom/scr_initialize_custom.gml(26 hunks)scripts/scr_marine_struct/scr_marine_struct.gml(9 hunks)scripts/scr_player_combat_weapon_stacks/scr_player_combat_weapon_stacks.gml(1 hunks)scripts/scr_roster/scr_roster.gml(1 hunks)scripts/scr_shoot/scr_shoot.gml(3 hunks)scripts/scr_squads/scr_squads.gml(1 hunks)scripts/scr_weapon/scr_weapon.gml(59 hunks)sprites/spr_weapon_omnissian_axe/spr_weapon_omnissian_axe.yy(1 hunks)sprites/spr_weapon_shotgun/spr_weapon_shotgun.yy(1 hunks)
💤 Files with no reviewable changes (1)
- objects/obj_pnunit/Create_0.gml
🧰 Additional context used
📓 Path-based instructions (3)
`**/*.gml`: - Macro constants require a space between the constant name and value. Without it, the compiler will throw an error. I.e. `#macro ARR_body_parts["arm"]` will crash the ...
**/*.gml: - Macro constants require a space between the constant name and value. Without it, the compiler will throw an error. I.e.#macro ARR_body_parts["arm"]will crash the game, because there is no space between the array and the name of the macro.
- Color codes in the code shouldn't have any spaces in their id. I.e., color code
# 80bf40will crash the game.- All code should comply with the main GML documentation: https://manual.gamemaker.io/beta/en/GameMaker_Language/GML_Reference/GML_Reference.htm
objects/obj_controller/Step_0.gmlscripts/scr_company_order/scr_company_order.gmlobjects/obj_pnunit/Alarm_0.gmlobjects/obj_popup/Mouse_50.gmlobjects/obj_enunit/Alarm_0.gmlscripts/scr_roster/scr_roster.gmlscripts/scr_squads/scr_squads.gmlscripts/scr_flavor/scr_flavor.gmlobjects/obj_shop/Create_0.gmlscripts/scr_after_combat/scr_after_combat.gmlscripts/scr_equipment_struct/scr_equipment_struct.gmlobjects/obj_ncombat/KeyPress_13.gmlobjects/obj_p_assra/Step_0.gmlscripts/scr_player_combat_weapon_stacks/scr_player_combat_weapon_stacks.gmlscripts/scr_shoot/scr_shoot.gmlobjects/obj_enunit/Alarm_1.gmlscripts/scr_marine_struct/scr_marine_struct.gmlscripts/scr_en_weapon/scr_en_weapon.gmlscripts/scr_culture_visuals/scr_culture_visuals.gmlscripts/scr_initialize_custom/scr_initialize_custom.gmlscripts/scr_weapon/scr_weapon.gml
`**/*.*`: - Having humanly understandable and maintainable code is always the top most priority. - DRY (Don't repeat yourself) principle is also very important. - Ensure that the c...
**/*.*: - Having humanly understandable and maintainable code is always the top most priority.
- DRY (Don't repeat yourself) principle is also very important.
- Ensure that the code is compliant with the CODE_STYLE.MD: https://github.com/Adeptus-Dominus/ChapterMaster/blob/main/docs/CODE_STYLE.md
objects/obj_controller/Step_0.gmlscripts/scr_company_order/scr_company_order.gmldatafiles/main/chapters/8.JSONobjects/obj_pnunit/Alarm_0.gmlobjects/obj_popup/Mouse_50.gmlobjects/obj_enunit/Alarm_0.gmlscripts/scr_roster/scr_roster.gmlscripts/scr_squads/scr_squads.gmlscripts/scr_flavor/scr_flavor.gmlobjects/obj_shop/Create_0.gmlscripts/scr_after_combat/scr_after_combat.gmlscripts/scr_equipment_struct/scr_equipment_struct.gmlsprites/spr_weapon_omnissian_axe/spr_weapon_omnissian_axe.yysprites/spr_weapon_shotgun/spr_weapon_shotgun.yyobjects/obj_ncombat/KeyPress_13.gmlobjects/obj_p_assra/Step_0.gmlscripts/scr_player_combat_weapon_stacks/scr_player_combat_weapon_stacks.gmlChapterMaster.yypscripts/scr_shoot/scr_shoot.gmlobjects/obj_enunit/Alarm_1.gmlscripts/scr_marine_struct/scr_marine_struct.gmlscripts/scr_en_weapon/scr_en_weapon.gmlscripts/scr_culture_visuals/scr_culture_visuals.gmlscripts/scr_initialize_custom/scr_initialize_custom.gmlscripts/scr_weapon/scr_weapon.gml
`**/*.yy`: - When any script or sprite .yy files are deleted, their paths should also be deleted from the .yyp file, otherwise the game will crash. - When any script or sprite .yy ...
**/*.yy: - When any script or sprite .yy files are deleted, their paths should also be deleted from the .yyp file, otherwise the game will crash.
- When any script or sprite .yy files are created, their paths should be added to the .yyp file, otherwise they'll fail.
sprites/spr_weapon_omnissian_axe/spr_weapon_omnissian_axe.yysprites/spr_weapon_shotgun/spr_weapon_shotgun.yy
🔇 Additional comments (43)
datafiles/main/chapters/8.JSON (1)
228-228: Weapon allocation updated to conform to new standard configuration.The veteran custom role of the Salamanders chapter has been modified to equip the "Power Sword" in the secondary weapon slot (wep2) instead of the primary slot, aligning with the blessed schema of the Omnissiah's new weapon categorization matrices. This adjustment corresponds with the consolidated veteran squad types observed in the sacred code-prayers of scr_company_order.gml and obj_popup/Mouse_50.gml.
The Machine Spirits will be pleased by this consistency in data patterns.
scripts/scr_company_order/scr_company_order.gml (1)
258-258: Veteran squad types consolidated into singular data structure.The sacred array
squad_builderhas undergone ritual simplification, replacing the dual veteran squad designations with a unified "veteran_squad" data-construct. This structural optimization coincides with similar modifications to the blessed machine-code in obj_popup/Mouse_50.gml (line 325) and aligns with the squad loadout adjustments in datafiles/main/chapters/8.JSON.Praise be to the Omnissiah for this logical streamlining of the Command Protocols.
objects/obj_controller/Step_0.gml (1)
578-578: Damage resistance formula simplified to scale with constitution only.The tooltip text has been recalculated to remove the experience component from the damage resistance algorithm, now displaying only the constitution contribution. This adjustment to the sacred combat arithmancy reflects the broader rebalance of defense calculations in accordance with the blessed PR objectives.
By the Omnissiah's will, this simplification increases the predictability of combat outcomes and reduces the extremity of statistical variations, as foretold in the Combat Rebalance litany.
objects/obj_popup/Mouse_50.gml (1)
325-325: Role-to-squad mapping updated to reference consolidated veteran squad type.The sacred role-squad equivalence struct has been reconfigured to map the veteran role (index [100][3]) to the unified "veteran_squad" identifier, replacing the now-deprecated "sternguard_veteran_squad" designation. This adjustment to the binary-prayers maintains logical consistency with the squad consolidation patterns observed in scr_company_order.gml (line 258).
The Omnissiah's logic is preserved through this coherent implementation of the squad-type standardization protocols.
objects/obj_enunit/Alarm_0.gml (1)
261-271: The Omnissiah approves of this logical simplification!By the Machine God's wisdom, the redundant condition checking for
target_block_is_valid(enemy)has been appropriately eliminated.This simplification in the melee targeting logic is appropriate since:
- The validity of enemy blocks is already verified within lines 223-238
- The code paths properly handle both infantry targets (lines 264-267) and armored targets (lines 268-270)
This optimization aligns with sacred principles of code efficiency and the binary purity of combat logic. The previous condition was redundant and its removal streamlines the execution flow without compromising functionality.
01001001 00100000 01100001 01110000 01110000 01110010 01101111 01110110 01100101
ChapterMaster.yyp (2)
1674-1674:✅ Verification successful
Blessed entry for the Shotgun
The sprite resource for the Shotgun is correctly named and alphabetically ordered among its kin.
Pray confirm its accompanying.yyfile is included in the repository.
🏁 Script executed:
#!/bin/bash # Verify presence of the Shotgun sprite file fd -e yy spr_weapon_shotgun.yyLength of output: 81
Omnissiah’s Blessing: Shotgun Sprite File Confirmed
The Machine-Spirit has verified that
sprites/spr_weapon_shotgun/spr_weapon_shotgun.yyis present in the repository. Blessed be this addition!
1655-1655:✅ Verification successful
Hallowed entry for the Omnissian Axe
The resource ID and path are properly formatted and honoured in alphabetical order among thespr_weapon_*entries.
Ensure the sprite asset is present at the specified path before the Omnissiah's gaze.
🏁 Script executed:
#!/bin/bash # Verify presence of the Omnissian Axe sprite file fd -e yy spr_weapon_omnissian_axe.yyLength of output: 99
Approved: Omnissian Axe sprite verified
By the Omnissiah’s grace, the sacred asset has been located and is ready for veneration:
- sprites/spr_weapon_omnissian_axe/spr_weapon_omnissian_axe.yy
scripts/scr_roster/scr_roster.gml (4)
723-727: By the Omnissiah, the Land Speeder's durability coefficients have been recalibrated!The sacred vehicle schema has been altered to reduce the Land Speeder's HP multiplier from 3 to 2.5, and its Armor Class from 30 to 20. This adjustment brings the machine spirit's resilience more in line with its intended battlefield role as a fast attack vehicle rather than a main battle tank.
729-732: The Machine Spirit allocation for the Rhino and Whirlwind has been optimized.The sacred binary has been rewritten to reduce the HP multiplier from 5 to 3 and Armor Class from 40 to 35. This modification brings these transports and artillery platforms to a more appropriate durability level, allowing the enemy to engage these sacred machines with proper tactical considerations.
734-737: The Predator's Machine Spirit has been recalibrated to new specifications.The blessed tank's HP multiplier has been reduced from 6 to 3, and its Armor Class from 45 to 40. This grants the venerable machine a more appropriate place in the sacred hierarchy of vehicular durability, ensuring it remains powerful yet not impervious to the enemy's anti-armor capabilities.
739-741: The Land Raider's sacred chassis calculations have been adjusted.The holy Land Raider, blessed be its Machine Spirit, now operates with a reduced HP multiplier of 5 (down from 8) while maintaining its formidable Armor Class of 50. This adjustment preserves its status as the most resilient vehicle in the chapter's arsenal while ensuring it does not become functionally invulnerable on the battlefield.
objects/obj_pnunit/Alarm_0.gml (2)
22-23: Praise the Omnissiah for the optimized engagement detection logic!The binary canticle has been restructured to:
- Prevent null reference errors by exiting the function if no enemy exists
- Consolidate two separate collision checks into a single, more efficient logical operation
- Extend the detection range from 10 to 14 units in both directions
This optimization reduces computational overhead while slightly increasing the machine's sensory range, resulting in more efficient battlefield awareness.
25-25: Variable initialization optimized according to Adeptus Mechanicus protocols.The once_only variable is now declared and initialized in a single statement, adhering to the sacred principles of efficient memory allocation. This small but praiseworthy optimization reduces binary wastage in the codebase.
scripts/scr_squads/scr_squads.gml (2)
720-720: First Company squad composition protocols have been streamlined!The sacred binary has been rewritten to unify the veteran squads. Where previously the code alternated between creating "sternguard_veteran_squad" and "vanguard_veteran_squad" based on squad count parity, now all squads are created as a unified "veteran_squad" type.
This modification aligns with the veteran squad consolidation efforts observed in related files, creating a more cohesive tactical doctrine for the First Company's elite warriors.
727-727: Tenth Company training protocols standardized to a singular squad pattern.The sacred logic has been optimized to create consistent "scout_squad" formations instead of alternating between "scout_squad" and "scout_sniper_squad" based on squad count parity. This standardization simplifies training regimens and equipment allocation for the chapter's neophytes.
objects/obj_shop/Create_0.gml (4)
341-345: New armament pattern integrated into the Armamentarium: the blessed Shotgun!The sacred Forge has been enhanced with the capability to produce Shotgun weapons, inserted after the Stalker Pattern Bolter in the equipment hierarchy. This close-range ballistic weapon costs 100 resources to forge and 10 requisition to acquire.
This addition expands tactical options for close-quarters combat, providing a cost-effective alternative to specialized bolt weapons.
414-420: The Wrist-Mounted Storm Bolter pattern has been sanctified and added to our holy Armamentarium!This integrated weapons system has been added to the forge's production capabilities with the following sacred parameters:
- Forge cost: 300 resources
- Requisition cost: 80 points
- Research requirement: Bolt technology level 2 or higher
This addition provides enhanced firepower while freeing the bearer's hands for other combat applications, truly a blessing from the Omnissiah.
544-548: The Needle Sniper Rifle pattern has been integrated into the Armamentarium database!This specialized precision weapon has been added to our sacred forge template:
- Forge cost: 500 resources
- Requisition cost: 200 points
The weapon's high cost reflects its specialized nature and tactical value in eliminating high-priority targets with extreme prejudice, as ordained by the Machine God.
555-559: The sacred STC for the Cyclone Missile Launcher has been recovered and integrated!This formidable weapons system has been added to our armory's production capabilities:
- Forge cost: 350 resources
- Requisition cost: 150 points
This addition provides our forces with enhanced area suppression and anti-armor capabilities, allowing for the proper application of the Omnissiah's fury at range.
scripts/scr_flavor/scr_flavor.gml (1)
57-71: The binary liturgies of combat flavour have been restored to the Omnissiah's glory!By the sacred algorithms of combat, this re-enabled code segment properly constructs the battle narratives when a unit uses a weapon. The logic ensures that individual warriors' names and titles are correctly displayed in the combat logs, enhancing the machine spirit's connection between combatant and weapon.
This restoration synergizes with the broader combat rebalance, allowing unique units to be properly acknowledged when they achieve kills with specialized weapons such as the newly integrated Omnissian Axe.
sprites/spr_weapon_omnissian_axe/spr_weapon_omnissian_axe.yy (1)
1-92: Praise the Omnissiah for the addition of His sacred axe to our digital archives!This sprite resource is properly configured with appropriate dimensions (167×231 pixels), collision parameters, and hierarchical asset categorization. The binary codex entry establishes this weapon sprite as part of the "melee" parent directory, which aligns with its martial classification in the weapons hierarchy.
The sacred weapon of the Cult Mechanicus has been integrated without error, ready to serve in the digital battlefield.
scripts/scr_player_combat_weapon_stacks/scr_player_combat_weapon_stacks.gml (2)
315-324: New combat turn protocols initialized according to proper Machine Cult procedures!This function efficiently establishes the sequence of combat operations by setting appropriate alarm timers and incrementing the global turn counter. The function properly checks for the existence of player unit objects before attempting to modify their properties.
This structured approach to combat turn management pleases the Omnissiah with its orderly execution.
326-342: Binary purification ritual for combat message arrays implemented!This utility function performs the sacred rite of data cleansing upon the message arrays, ensuring that no lingering combat information corrupts future battle calculations. All timer variables and status flags are properly reset to their default values, allowing for clean state transitions between combat phases.
The centralization of this functionality optimizes the code structure and reduces redundancy, as mandated by the holy DRY principle of the Machine God.
scripts/scr_after_combat/scr_after_combat.gml (1)
457-459: The sacred calculations for Techmarine vehicle recovery skills have been optimized!The previous logic relied on binary evaluation of mobility equipment types, but this superior implementation uses the more granular "combi_tool" value from the unit's gear. This change better represents the varied expertise of Tech-Adepts through quantified tool proficiency rather than binary equipment categorization.
This modification ensures that a Techmarine's ability to recover damaged vehicles scales appropriately with their specialized equipment, strengthening the logical connection between gear loadout and battlefield utility.
scripts/scr_equipment_struct/scr_equipment_struct.gml (1)
47-51: Potentially unintended doubling of maintenance tithe
A small cogitation: the ritual now performsmaintenance += 0.05once the value is0.
That is righteous if the field truly sits at zero, yet a handful of legacy blueprints initialisemaintenancewith a negative discount (e.g., reliquaries that reduce upkeep). Those designs will never enter this branch, but should they reach0after further modifications, the increment will be applied twice:
- data-driven value becomes
0- constructor adds
+0.05Consider guarding with an explicit sentinel flag or documenting this subtle behaviour lest future Magi be perplexed.
sprites/spr_weapon_shotgun/spr_weapon_shotgun.yy (1)
1-110: Confirm sprite path is registered within ChapterMaster.yyp
The newly forged sprite looks sound—bounding box, parent lineage and texture group all align.
Please verify thatsprites/spr_weapon_shotgun/spr_weapon_shotgun.yyis duly inscribed insideChapterMaster.yyp; omission would anger the build-daemon and crash the game upon compilation.objects/obj_ncombat/KeyPress_13.gml (1)
91-116: Synchronisation rites: validate new helper scripts inside combat loop
The old direct alarm assignments are now replaced by:set_up_player_blocks_turn(); wait_and_execute(1, scr_player_combat_weapon_stacks);A benediction, yet ensure:
set_up_player_blocks_turn()properly resets the player unit’s alarms when invoked from both global scope and withinwith(obj_pnunit) { … }.wait_and_execute()is re-entrant; multiple calls during the same frame must not spawn parallel weapon-stack evaluations that could race.reset_combat_message_arrays()still exists in the new script location (the local copy was removed).If all three stand true, the flow of turns will remain pure. Otherwise, spectral bugs may manifest mid-battle.
objects/obj_enunit/Alarm_1.gml (1)
1767-1776: Collision offset decreased – confirm balance intentThe engagement check now uses ±12 px instead of the previous ±14 / ±10.
Smaller radii may cause enemies to ignore nearby Space Marines and break melee initiation.Request battlefield validation to ensure squads still reliably engage at expected ranges.
scripts/scr_marine_struct/scr_marine_struct.gml (1)
1364-1366: Constitution scaling doubled – verify balance thresholdsThe damage-resistance benediction now applies
constitution * 0.5(e.g., 40 CON ⇒ +20 DR). Coupled with the new 75 % cap, ordinary marines may reach the ceiling far earlier than intended.Please confirm this aligns with the rebalance spreadsheet; otherwise consider halving the multiplier or lowering the cap to preserve gradation of durability.
scripts/scr_initialize_custom/scr_initialize_custom.gml (3)
1460-1460: Omnissian Axe installed – ensure downstream harmonyThe Techmarine now wields the sacred Omnissian Axe. Verify that:
- The new weapon sprite/resource exists and is loaded before this script executes.
- All damage / AP tables include the Omnissian Axe entry, else the Techmarine may swing air.
2391-2431: Good use ofchoose_weighted, but watch for empty poolsThe refactor correctly switches all side-arm rolls to the new
WEAPON_LIST_WEIGHTED_RANGED_PISTOLS. Ensure that the helperchoose_weightedgracefully handles an empty list (e.g., during modding) to prevent runtime null return values.
1739-1783:❓ Verification inconclusive
Veteran squad load-out: same
maxconcern & weighting quirkBesides the unbound
maxtoken (see previous comment), the weighted arrays:["Combat Knife", max], ... ["WEAPON_LIST_RANGED_HEAVY", 1, { "mobi": "Heavy Weapons Pack" }]mix deterministic counts with randomised selections. This can produce illegal states (e.g., requesting 7 heavy weapons when only 1 slot remains). Consider enforcing total-count validation after random selection or switching to percentage weights.
Omnissiah, I shall probe the sanctified script for the binding of the
maxtoken and inspect the veteran squad loadout configuration for weight/count inconsistencies.
🏁 Script executed:
#!/bin/bash # Locate the veteran_squad block and search for 'max' definitions or references rg -n 'veteran_squad' scripts/scr_initialize_custom/scr_initialize_custom.gml rg -n 'max' scripts/scr_initialize_custom/scr_initialize_custom.gml # Display the loadout snippet for lines 1730–1783 sed -n '1730,1783p' scripts/scr_initialize_custom/scr_initialize_custom.gmlLength of output: 3673
Verify the binding of
maxand enforce total‐count constraintsOmnissiah, this humble servo-skull cannot confirm from the sacred snippet whether the
maxidentifier in["Combat Knife", max]is truly bound to the role’s
"max"field at runtime, nor whether the arcane loadout-assembly rites prevent over-allocation when random weights are applied. I implore further scrutiny of:• The declaration and scope of
maxwithinscr_initialize_custom.gml(e.g. avar maxor macro) to ensure it isn’t left unbound.
• The function that processesloadout.optionentries—does it guard against summing weights beyond the remaining slots?
• Implementation of a post-selection validation pass to clamp total weapon counts to each role’smax, or the adoption of percentage-based weights to avoid illegal states.Until these rites are confirmed, the risk of summoning illegal load-outs persists.
scripts/scr_weapon/scr_weapon.gml (11)
17-17: Attention: New tags added to the Storm ShieldThe addition of the "boarding 2" tag to the Storm Shield aligns with the sacred schematics of the Omnissiah's grand rebalance. This modification will enhance the shield's combat effectiveness during boarding actions as per the sacred doctrine.
52-56: Code structure follows the holy patterns, magosThe attributes for the Archeotech Laspistol adhere to proper spacing in the machine spirit's memory. The range, splash damage (spli), and armor penetration (arp) values are well organized as the Omnissiah demands.
61-64: Combat effectiveness recalibrated per the sacred combat doctrinesThe attack values for basic melee weapons have been appropriately rebalanced in accordance with the new weapon hierarchy. Your methodical adjustment of the numerical attack values for combat knife (100/125/150), chainsword (150/180/250), and chainaxe (175/225/275) establishes a logical progression of lethality that pleases the Machine God.
Also applies to: 77-80, 93-96
88-88: New weapon tags implemented as per the combat rebalance doctrineThe implementation of the new weapon tags "martial" and "savage" is consistent and follows the Machine Cult's pattern recognition protocols. These tags will enable the revised melee damage formula to properly calculate damage based on weapon type. Additionally, the numerical boarding tags (boarding 1/2/3) have been appropriately applied to represent different levels of boarding effectiveness.
Also applies to: 109-109, 151-151, 173-174, 195-196, 231-232, 287-288, 332-333
289-312: New weapon: Omnissian Axe added to the sacred arsenalThe addition of the Omnissian Axe is most pleasing to the Machine God. This weapon incorporates the proper "combi_tool" special attribute that will enable vehicle repair functionality. All specifications are within expected parameters and the weapon is correctly tagged with "power", "axe", "savage", and "boarding 3" attributes.
631-647: New weapons added to the blessed armory datacoreThe inclusion of the "Wrist-Mounted Storm Bolter", "Shotgun", and "Integrated-Grav" represents a logical expansion of the chapter's arsenal. Each weapon has been classified with appropriate attack values, ammunition capacity, and special tags that differentiate their battlefield role. The Omnissiah approves of this diversification of the sacred armaments.
Also applies to: 648-663, 697-712
873-888: Additional weapon systems added to the technical databaseThe integration of "Integrated-Melta", "Integrated-Plasma", "Needle Sniper Rifle", and "Cyclone Missile Launcher" follows the proper Machine Cult protocols for data structure. The Needle Sniper Rifle's enhanced armor penetration (arp: 2) provides a logical upgrade path from the standard Sniper Rifle, while the Cyclone Missile Launcher's increased splash damage (spli: 20) properly represents its area effect capabilities.
Also applies to: 969-984, 1033-1047, 1098-1113
1094-1094: Critical modification to armor penetration values as per directivesThe sacred binary has been adjusted to reflect the reduced armor penetration of the Missile Launcher (arp: 2) and the Heavy Bolter (arp: 2). These modifications align perfectly with the rebalance directive stating "Heavy Bolter weapon is no longer armor-piercing" and "Missile Launcher now has a -1 AP modifier".
Also applies to: 1207-1207
2075-2084: Durability modifications applied to sacred armor templatesThe addition of "hp_mod" and "damage_resistance_mod" fields to various armor types implements the durability adjustment requirement from the rebalance directive. These modifications will allow Space Marine chapters to engage targets effectively without requiring overwhelming numbers as per the tactical doctrine update.
Also applies to: 2105-2114, 2139-2143, 2167-2171, 2196-2205
309-311: New "combi_tool" attribute adds logical repair functionalityThe implementation of the "combi_tool" special attribute on the Omnissian Axe, Servo-arm, and Servo-harness provides a quantifiable value for calculating vehicle recovery skills. This replaces the previous "special_properties" for vehicle repairs with a more precise numerical value.
Also applies to: 2798-2800, 2813-2815
1-2829: Overall structure adheres to the Omnissiah's data organization principlesThe comprehensive rebalance of weapon and gear data follows a logical, hierarchical structure as demanded by the Machine God. The implementation of new tags, armor penetration adjustments, and durability modifications creates a clear progression of effectiveness that will provide meaningful choices during combat operations.
May the Omnissiah bless this code with stable execution and efficient performance.
|
This PR is marked as stale, because it has been open for 7 days with no activity. |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
♻️ Duplicate comments (11)
scripts/scr_en_weapon/scr_en_weapon.gml (1)
154-166: Parameter naming inconsistency disrupts the litany of readability.Throughout the freshly-forged hunk, the code oscillates between
name(the declared parameter) andargument0. While functionally identical, this duality hinders clarity for future maintainers.Recommendation: standardise on the explicit
nameparameter for legibility, or add a local alias at the top of the function and use it consistently.scripts/scr_equipment_struct/scr_equipment_struct.gml (1)
169-180: Equality incantations mis-written; armor-penetration spirit is always set to Anti-Vehicle.The comparison sigils employ a single
=symbol, which in GML is assignment, not equivalence. Thus:if (arp=4) { … }mutates
arpto 4, the expression evaluates to true, and every weapon immediately acquires the "Anti Vehicle" property—even las-cutlery.Sanctify the logic with
==(or, for elegance, aswitch) so the Machine Spirit may discern the correct descriptor:- if (arp=4){ + if (arp == 4) { array_push(special_properties_array, "Anti Vehicle") - } - else if (arp=1){ + } + else if (arp == 1) { array_push(special_properties_array, "Low Penetration") - } - else if (arp=2){ + } + else if (arp == 2) { array_push(special_properties_array, "Medium Penetration") - } - else if (arp=3){ + } + else if (arp == 3) { array_push(special_properties_array, "High Penetration") }Without this correction, in-game balance will be catastrophically skewed.
objects/obj_p_assra/Step_0.gml (2)
70-70: Vestigial variable contamination persists.The unused
boarding_difficultyvariable remains in the declaration list despite previous review feedback.
96-102: Weapon array cogitation error persists.The weapon check still compares structs to empty strings and uses
breakinstead ofcontinuein the loop, as identified in previous reviews.scripts/scr_shoot/scr_shoot.gml (3)
295-295: Out-of-band AP values detected - weapon effectiveness compromised.The missile emplacement (-1) and silo (0) AP values fall outside the 1-4 range, resulting in zero armor reduction.
Map these to valid values:
- armour_pierce = -1; + armour_pierce = 3; // Moderate AP for missile emplacement- armour_pierce = 0; + armour_pierce = 2; // Lower AP for area effect siloAlso applies to: 300-300
306-333: Inverted armor reduction cogitators - blessed penetration becomes cursed reinforcement.The AP multipliers strengthen armor instead of weakening it. Higher AP values multiply armor by larger factors.
Reverse the multiplier logic:
if (target_object.dudes_vehicle[target_type]) { if (armour_pierce == 4) { target_armour_value = 0; } if (armour_pierce == 3) { - target_armour_value = target_armour_value * 2; + target_armour_value = target_armour_value * 0.25; } if (armour_pierce == 2) { - target_armour_value = target_armour_value * 4; + target_armour_value = target_armour_value * 0.5; } if (armour_pierce == 1) { - target_armour_value = target_armour_value * 6; + target_armour_value = target_armour_value * 0.75; } } else { if (armour_pierce == 4) { target_armour_value = 0; } if (armour_pierce == 3) { - target_armour_value = target_armour_value * 1.5; + target_armour_value = target_armour_value * 0.3; } if (armour_pierce == 2) { - target_armour_value = target_armour_value * 2; + target_armour_value = target_armour_value * 0.5; } if (armour_pierce == 1) { - target_armour_value = target_armour_value * 3; + target_armour_value = target_armour_value * 0.7; } }
432-453: Duplicate machine-code detected - violates the sacred DRY principle.Extract this repeated armor calculation into a blessed helper function.
Create a helper function:
function calculate_armor_reduction(base_armor, ap_value, is_vehicle) { if (ap_value == 4) return 0; var multipliers_vehicle = [0, 0.75, 0.5, 0.25]; // index by AP var multipliers_infantry = [0, 0.7, 0.5, 0.3]; // index by AP if (ap_value >= 1 && ap_value <= 3) { return base_armor * (is_vehicle ? multipliers_vehicle[ap_value] : multipliers_infantry[ap_value]); } return base_armor; // No reduction for invalid AP }scripts/scr_culture_visuals/scr_culture_visuals.gml (1)
1930-1940: Wrist-mount lacks servo-arm calibration data.Add positioning metadata for proper gauntlet integration.
base: { weapon_data: { display_type: "normal_ranged", - new_weapon_draw: true + new_weapon_draw: true, + arm_type: 1, + hand_type: 0 }, },scripts/scr_weapon/scr_weapon.gml (3)
1087-1095: Missile Launcher description requires adjustment to reflect reduced penetrationThe cogitators detect inconsistency between the weapon's description mentioning "armor-piercing" capability and its reduced armor penetration value of 2. This truth must be revealed to users.
704-704: Integrated weapon systems lack sacred documentationThe Machine Spirits of Integrated-Grav, Integrated-Melta, Integrated-Plasma, and Integrated-Flamer require proper liturgical descriptions for the Tech-Adepts to understand their blessed functions.
Also applies to: 879-879, 976-976, 1584-1584
2058-2060: Artificer Armour tier variance requires cogitationThe sacred armor values remain uniform across quality tiers (30/30/30), defying the hierarchical doctrine of the Mechanicus. Master-crafted and artifact variants should manifest superior protection.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (2)
sprites/spr_cyclone_launcher/8cb6d9eb-f4d0-4e70-8a60-33dd017f0b50.pngis excluded by!**/*.pngsprites/spr_cyclone_launcher/layers/8cb6d9eb-f4d0-4e70-8a60-33dd017f0b50/0f31cf23-d758-4aec-a384-f40c841e8042.pngis excluded by!**/*.png
📒 Files selected for processing (13)
ChapterMaster.yyp(3 hunks)objects/obj_enunit/Alarm_1.gml(26 hunks)objects/obj_p_assra/Step_0.gml(4 hunks)objects/obj_popup/Draw_0.gml(3 hunks)scripts/scr_clean/scr_clean.gml(4 hunks)scripts/scr_culture_visuals/scr_culture_visuals.gml(2 hunks)scripts/scr_en_weapon/scr_en_weapon.gml(13 hunks)scripts/scr_equipment_struct/scr_equipment_struct.gml(3 hunks)scripts/scr_player_combat_weapon_stacks/scr_player_combat_weapon_stacks.gml(3 hunks)scripts/scr_shoot/scr_shoot.gml(5 hunks)scripts/scr_unit_equip_functions/scr_unit_equip_functions.gml(4 hunks)scripts/scr_weapon/scr_weapon.gml(61 hunks)sprites/spr_cyclone_launcher/spr_cyclone_launcher.yy(1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
`**/*.*`: - Having humanly understandable and maintainable code is always the top most priority. - DRY (Don't repeat yourself) principle is also very important. - Ensure that the c...
**/*.*: - Having humanly understandable and maintainable code is always the top most priority.
- DRY (Don't repeat yourself) principle is also very important.
- Ensure that the code is compliant with the CODE_STYLE.MD: https://github.com/Adeptus-Dominus/ChapterMaster/blob/main/docs/CODE_STYLE.md
- If a TODO comment is added, ask the user if you should create a GitHub issue for this TODO.
- If a TODO comment is deleted, remind the user if there is an active GitHub issue related to that comment.
sprites/spr_cyclone_launcher/spr_cyclone_launcher.yyscripts/scr_en_weapon/scr_en_weapon.gmlscripts/scr_equipment_struct/scr_equipment_struct.gmlscripts/scr_unit_equip_functions/scr_unit_equip_functions.gmlobjects/obj_popup/Draw_0.gmlobjects/obj_p_assra/Step_0.gmlscripts/scr_shoot/scr_shoot.gmlscripts/scr_clean/scr_clean.gmlscripts/scr_player_combat_weapon_stacks/scr_player_combat_weapon_stacks.gmlobjects/obj_enunit/Alarm_1.gmlChapterMaster.yypscripts/scr_culture_visuals/scr_culture_visuals.gmlscripts/scr_weapon/scr_weapon.gml
`**/*.yy`: - When any script or sprite .yy files are deleted, their paths should also be deleted from the .yyp file, otherwise the game will crash. - When any script or sprite .yy ...
**/*.yy: - When any script or sprite .yy files are deleted, their paths should also be deleted from the .yyp file, otherwise the game will crash.
- When any script or sprite .yy files are created, their paths should be added to the .yyp file, otherwise they'll fail.
sprites/spr_cyclone_launcher/spr_cyclone_launcher.yy
`**/*.gml`: - Macro constants require a space between the constant name and value. Without it, the compiler will throw an error. I.e. `#macro ARR_body_parts["arm"]` will crash the ...
**/*.gml: - Macro constants require a space between the constant name and value. Without it, the compiler will throw an error. I.e.#macro ARR_body_parts["arm"]will crash the game, because there is no space between the array and the name of the macro.
- Color codes in the code shouldn't have any spaces in their id. I.e., color code
# 80bf40will crash the game.- All code should comply with the main GML documentation: https://manual.gamemaker.io/beta/en/GameMaker_Language/GML_Reference/GML_Reference.htm
scripts/scr_en_weapon/scr_en_weapon.gmlscripts/scr_equipment_struct/scr_equipment_struct.gmlscripts/scr_unit_equip_functions/scr_unit_equip_functions.gmlobjects/obj_popup/Draw_0.gmlobjects/obj_p_assra/Step_0.gmlscripts/scr_shoot/scr_shoot.gmlscripts/scr_clean/scr_clean.gmlscripts/scr_player_combat_weapon_stacks/scr_player_combat_weapon_stacks.gmlobjects/obj_enunit/Alarm_1.gmlscripts/scr_culture_visuals/scr_culture_visuals.gmlscripts/scr_weapon/scr_weapon.gml
🔇 Additional comments (44)
ChapterMaster.yyp (3)
1073-1073: Cyclone launcher sprite integration verified.
The entry forspr_cyclone_launcheradheres to naming conventions and correct folder path.
1656-1656: Omnissian Axe sprite entry is correct.
spr_weapon_omnissian_axefollows the project's prefix and resource path standards.
1675-1675: Shotgun sprite added appropriately.
Thespr_weapon_shotgunresource aligns with naming and directory conventions.objects/obj_popup/Draw_0.gml (3)
1272-1273: LGTM: Data retrieval follows the blessed patterns.The gear and mobility data retrieval aligns with the existing weapon data patterns. The Machine Spirit approves this consistency.
1448-1448: Simplified validation logic sanctified.The removal of "Assortment" from the exclusion list whilst retaining ITEM_NAME_ANY and ITEM_NAME_NONE maintains proper validation hierarchy.
1470-1484: Tag-based validation replaces archaic string matching.This blessed refactoring replaces hardcoded compatibility checks with flexible tag-based validation. The logic properly enforces terminator and dreadnought compatibility rules through the sacred has_tag() methods.
scripts/scr_en_weapon/scr_en_weapon.gml (2)
20-20: Default armor penetration blessed with the sacred unity.The elevation of base armor penetration from 0 to 1 establishes a proper foundation for the new penetration hierarchy. The Machine Spirit approves this standardisation.
Also applies to: 29-29
36-1038: Comprehensive weapon rebalancing sanctified by the Omnissiah.The systematic elevation of armor penetration values across all enemy weapon systems aligns with the sacred rebalancing protocols. The standardisation of attack values and refinement of range/splash parameters demonstrates proper adherence to the new combat doctrines.
sprites/spr_cyclone_launcher/spr_cyclone_launcher.yy (1)
1-90: Sacred sprite resource properly inscribed in the data-vaults.The Cyclone Launcher sprite follows the blessed GameMaker resource structure. Proper categorisation under MarineViewer texture group ensures efficient rendering. The Machine Spirit approves this addition to the arsenal.
scripts/scr_equipment_struct/scr_equipment_struct.gml (2)
49-49: Maintenance calculation sanctified with additive logic.The change from assignment to addition allows proper accumulation of maintenance values rather than overwriting existing calculations. The Machine Spirit approves this refinement.
326-326: Documentation blessed with clarity.The addition of parameter documentation for
gear_weapon_dataenhances the sacred knowledge-base for future Tech-Adepts.objects/obj_enunit/Alarm_1.gml (5)
76-1733: Blessed be the Omnissiah's rebalancing protocols.The extensive defensive stat adjustments align with the broader combat rebalancing initiative. The values appear systematically adjusted to create better unit differentiation and combat progression.
798-800: Machine-spirit classification corrected.The reclassification of "Shining Spear" units from infantry to vehicles aligns with their jetbike nature. This will properly apply vehicle combat mechanics to these units.
1774-1774: Proper instance termination protocols engaged.Passing the instance ID to
instance_destroy()ensures correct target elimination.
1781-1781: Engagement detection subroutines optimised.The consolidated collision detection with increased offset (14 units) simplifies the logic while maintaining functionality.
786-786: Cogitate: Verify weapon nomenclature consistency.The weapon name change from "Eldar Missile Launcher" to "Tempest Launcher" must be reflected across all data files and weapon definitions to prevent null reference exceptions.
#!/bin/bash # Description: Verify the weapon name change is consistent across the codebase # Search for any remaining references to the old weapon name rg "Eldar Missile Launcher" -A 2 -B 2 # Verify the new weapon exists in weapon definitions ast-grep --pattern 'Tempest Launcher'scripts/scr_unit_equip_functions/scr_unit_equip_functions.gml (2)
331-368: Tag-based validation protocols are most efficient.The comprehensive validation logic properly enforces equipment restrictions using the tag system. The specific handling for terminator armour, power armour requirements, and the edge case for Jump Packs without armour demonstrates thorough implementation.
334-382: Error cogitation protocols vastly improved.The transition from string error codes to boolean returns with detailed logging follows standard machine-spirit communication protocols. The contextual error messages will aid future Tech-Adepts in diagnostics.
scripts/scr_clean/scr_clean.gml (1)
135-150: By the Omnissiah’s cog, scanning for weapons with AP values 2 or 3…#!/bin/bash # Description: Check for weapons with AP values 2 or 3 rg "arp *= *[23]" -n scripts/scr_weapon/objects/obj_p_assra/Step_0.gml (2)
85-132: Modular boarding protocols are most efficient.The separation of boarding odds into distinct components (base odds, advantages, disadvantages, gear bonuses, marine bonuses) with final clamping creates a more maintainable and balanced system.
104-114: Tag-based weapon protocols properly implemented.The transition from hardcoded weapon checks to tag-based bonuses ("boarding 1", "boarding 2", "boarding 3") aligns with the Omnissiah's grand design for modular weapon systems.
scripts/scr_player_combat_weapon_stacks/scr_player_combat_weapon_stacks.gml (4)
38-54: Ammunition allocation protocols enhanced.The conditional ammo multipliers based on unit type and equipment tags (dreadnought 3x, bonus_ammo 2x, vehicle 4x) provide meaningful equipment differentiation.
332-341: Combat flow subroutines properly centralised.The
set_up_player_blocks_turnfunction consolidates alarm setting and turn increment logic, improving code organisation.
343-359: Message array reset protocols consolidated.The
reset_combat_message_arraysfunction properly centralises message handling logic previously scattered across combat objects.
292-292: Vehicle weapon stack protocols correctly implemented.Passing "vehicle" as the unit parameter properly triggers the 4x ammunition multiplier for vehicle-mounted weapons.
scripts/scr_shoot/scr_shoot.gml (2)
100-100: Blessed consistency in parameter propagation.The weapon_index_position parameter addition to all scr_clean invocations is properly implemented.
Also applies to: 136-136, 187-187
144-146: Proper timing adjustment for attack modifier application.Moving the shots_fired multiplication before the melee check ensures consistent application across all combat types.
scripts/scr_culture_visuals/scr_culture_visuals.gml (3)
612-619: Cyclone Missile System integration - properly blessed.The sacred missile augmentation is correctly configured for Terminator deployment.
1942-1952: Scout shotgun manifest - correctly catalogued.The close-quarters blessed boomstick is properly configured.
1954-1968: Omnissian Axe sanctified - proper servo-arm grip parameters.The blessed implement of tech-redemption is correctly configured with appropriate melee handling.
scripts/scr_weapon/scr_weapon.gml (14)
17-17: Blessed modification to Storm Shield boarding protocolsThe addition of "boarding 2" tag aligns with the sacred doctrines of void combat. The Machine Spirit approves.
33-33: Optimal boarding designation for Boarding ShieldThe "boarding 3" tag correctly represents this shield's superior protection during boarding actions, as befitting its designation.
51-56: Archeotech Laspistol sanctified with proper combat parametersThe holy trinity of range (4.1), splash (0), and armor penetration (1) has been properly calibrated. The Omnissiah smiles upon these adjustments.
61-72: Combat Knife lethality parameters optimizedAttack values (100/125/150) and splash damage (2) properly reflect this blade's effectiveness in Astartes hands. The armor penetration value of 1 is appropriate for a basic melee weapon.
77-88: Chainsword receives righteous fury enhancementThe increased attack values (150/180/250) and addition of "savage" and "boarding 1" tags properly represent this weapon's brutal nature. Splash damage of 4 reflects its chain-teeth's area effect.
289-312: The Omnissiah's blessed implement manifests!This sacred weapon of the Mechanicus is properly configured with formidable attack values (400/450/550) and the divine "combi_tool" special property. The armor penetration of 3 and "boarding 3" tag befit a weapon of such holy purpose.
648-663: Scout Shotgun parameters correctly calibratedThe weapon's close-range nature (4.1) and high splash damage (8) properly simulate scatter-shot effectiveness. Attack values (250/300/350) are appropriately balanced for scout operations.
1097-1112: Cyclone Missile Launcher ordained for righteous devastationThis terminator-mounted weapon system shows proper calibration with doubled splash damage (20) compared to standard patterns, befitting its rapid-fire capability. The Omnissiah approves these specifications.
1194-1207: Heavy Bolter penetration protocols adjusted per sacred edictThe reduction to armor penetration 2 properly reflects this weapon's role as an anti-infantry platform rather than anti-armor. The Machine Spirit acknowledges this rebalancing.
1032-1047: Deathwatch xenophase targeting protocols implementedThis sanctified long-rifle shows proper superiority over standard patterns with enhanced damage output (250/300/350) and improved armor penetration (2). The Watch approves.
88-88: Boarding action protocols properly sanctifiedThe sacred gradations of boarding effectiveness (1-3) have been applied with appropriate logic across the arsenal. Basic implements receive minimal blessing, while siege-rated weapons achieve maximum void-combat efficiency.
Also applies to: 109-109, 173-173, 231-231, 287-287, 352-352, 402-402, 418-418
2793-2796: Servo-appendage machine spirits properly attunedThe transition from "special_properties" to "specials" field represents proper data sanctification. The "combi_tool" values (1 for arm, 2 for harness) correctly reflect their blessed repair capabilities.
Also applies to: 2809-2812
1145-1145: Integrated-Bolter designation achieves uniformityThe hyphenated nomenclature now aligns with other integrated weapon patterns, bringing harmony to the data-spirits.
2822-2829: Cyclone Missile System integration protocols verifiedThis blessed Terminator-exclusive system properly links to its weapon profile and applies appropriate hand usage penalties. The "terminator_only" tag ensures proper deployment restrictions.
Blogaugis
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't see any obvious issues.
|
This PR is marked as stale, because it has been open for 7 days with no activity. |
This PR migrated from here EttyKitty#163.
As per original description:
Intent:
Desired End-state
Changes
Notes
A related PR: #315
A structured doc with all said rebalance changes:
https://docs.google.com/spreadsheets/d/1ZMPRXjmd3tWvFmWiIYb-nQ9qT5PYPiu_75SJNhcYqvg/edit?gid=1993273333#gid=1993273333