Skip to content

feat: Weapon display data driven and Cthonian culture pack#720

Merged
OH296 merged 38 commits intoAdeptus-Dominus:mainfrom
OH296:weapon_display
Apr 18, 2025
Merged

feat: Weapon display data driven and Cthonian culture pack#720
OH296 merged 38 commits intoAdeptus-Dominus:mainfrom
OH296:weapon_display

Conversation

@OH296
Copy link
Collaborator

@OH296 OH296 commented Apr 11, 2025

  • make display data for weapons data driven and integrated into the complex system
  • weapons can now have variants and even different holding positions for the same weapons
  • weapons have access to all the visual options of standard complex components including culture options and exp and ranks based options allowing granular control of different visual types of weapons
  • add new "shin" areas to marine sprites to allow morevariants
  • create cthonian culture set sprites.
  • start to implement bare head sprites (under the hood)

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Apr 11, 2025

📝 Walkthrough

Summary by CodeRabbit

  • New Features
    • Introduced extensive new visual assets, including bare heads, facial hair (with colourable variants), necks, eyes, chain mail and cloth tabards, chaplain trims, Cthonian tabbard, and new weapon sprites.
    • Added new shader for dynamic skin tone rendering.
    • Expanded support for cultural and armour-specific visual customisation, including Cthonian and Gothic elements.
    • Enhanced weapon visuals and modularity, allowing for more detailed and varied unit appearances.
  • Improvements
    • Updated UI labels for culture selection.
    • Refined sprite and animation configurations for improved display.
  • Refactor
    • Simplified and streamlined weapon and hand rendering logic for units.
  • Chores
    • Organised project structure with new folders and resource entries.

Summary by CodeRabbit

  • New Features

    • Added a variety of new visual assets, including bare heads, facial hair, necks, and eyes, as well as new pauldron, chainmail, tabard, and weapon sprites.
    • Introduced a skin tone shader for more diverse character customisation.
    • Expanded weapon visual options and presets for improved unit display.
    • Enhanced cultural and role-based visual customisation, including new trims and body part variants.
  • Improvements

    • Updated UI and body part generation to support new variants and randomisation.
    • Simplified and streamlined weapon display logic for clearer visuals.
    • Adjusted garbage collection timing for improved performance.
  • Style

    • Updated terminology for culture selection in the interface.

Walkthrough

By the Omnissiah’s will, this data-packet brings forth a substantial augmentation to the project’s visual cogitator arrays. New sprite resources are inducted, including bare heads, facial hair, and weaponry, blessed with expanded modularity and colouration. The sacred skin tone shader is now present, enabling dynamic pigmentation for organic visages. The ComplexSet script is extensively refactored to support modular arm and weapon data, with new logic for hand and weapon rendering. Additional cultural and role-specific trim sprites are sanctified, and the weapon visual data structure is overhauled for greater flexibility. Minor ritual adjustments are performed to various assets and scripts, ensuring harmony within the machine-spirit.

Changes

Files/Paths Change Summary
ChapterMaster.yyp, shaders/skin_tone_shader/, sprites/spr_bare_eyes/, sprites/spr_bare_heads/, sprites/spr_bare_head_facial_hair/, sprites/spr_bare_head_facial_hair_colourable/* New folder "bare_heads" and numerous new sprite resources (bare heads, facial hair, eyes, necks, pauldron spikes, chainmail, tabards, chaplain trims, weapon sprites, etc.) added to the project structure. New shader resource "skin_tone_shader" and associated shader files introduced.
datafiles/main/chapter_symbols/load_sets.json, datafiles/main/chapter_symbols/darkangels/pauldron.png, datafiles/main/chapter_symbols/scythesofthemperor/pauldron.png New included files for chapter symbols added; load_sets.json updated with commented-out entries for future chapter symbol sets.
scripts/scr_ComplexSet/scr_ComplexSet.gml Major overhaul: Modular weapon and arm data now separated for left/right arms; new logic for hand and weapon rendering; saturation scaling based on experience; new static methods for drawing hands and weapons; expanded variation mapping; conditional rendering for bare heads; presets for weapon data; integration of previous functions into assign_modulars; additional handling for new body parts and weapon variants.
scripts/scr_culture_visuals/scr_culture_visuals.gml New modular drawing items for Cthonian and Gothic cultures, new body part and trim sprites, expanded global.weapon_visual_data defining weapon visual/data configurations, new function format_weapon_visuals, randomisation fields for shin and weapon variants, and logic to skip prefetching weapon-positioned sprites.
scripts/scr_draw_unit_image/scr_draw_unit_image.gml Removal of all hand and weapon drawing logic, including draw_unit_hands function and all related UI/variable initialisation and drawing blocks; function now focuses on non-weapon, non-hand components.
scripts/scr_ui_display_weapons/scr_ui_display_weapons.gml Extensive simplification: Removed detailed handling for weapon sprites by armour type, especially Terminator; function now focuses on two-handed melee weapons with static method for weapon sprite assignment.
sprites/spr_artificer_chest/spr_artificer_chest.yy Added sequence height and width properties to sprite configuration.
sprites/spr_artificer_left_leg/spr_artificer_left_leg.yy, sprites/spr_artificer_right_leg/spr_artificer_right_leg.yy Removed one sprite frame each, reduced sequence length, added explicit sequence dimensions, and updated keyframe timings for both left and right leg sprites.
objects/obj_garbage_collector/Step_0.gml Added blank lines around gc_timer = 50 assignment; no functional change to garbage collection logic.
objects/obj_creation/Create_0.gml Changed multi-select button label from "Ganger (cthonian)" to "Cthonian".

Possibly related PRs

Suggested labels

PR: Feature, PR: Sprites, Size: Huge

Suggested reviewers

  • EttyKitty

May the Machine God’s blessings be upon these modifications. The logic flows anew, the sprites multiply, and the modularity is sanctified. Proceed with the Rite of Peer Review, and may no error daemon escape your notice!


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between beff841 and 8d26412.

📒 Files selected for processing (1)
  • objects/obj_garbage_collector/Step_0.gml (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
`**/*.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.

  • objects/obj_garbage_collector/Step_0.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.

  • objects/obj_garbage_collector/Step_0.gml

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai or @coderabbitai title anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added Area: Sprites Changes to sprites/images or their under-the-hood functionality Size: Epic Type: Feature Adds something new labels Apr 11, 2025
@EttyKitty
Copy link
Collaborator

I strongly disagree with storing visual data for weapons in the same place as all other visual data. Imo, that's a very bad choice, and will be hard to maintain in the long run.
Most properties I see on the weapon structs, are also 360 degree different from other visual data, which makes it make even less sense to store in the same struct.
Please, don't do this. It's very hard to look at.

@EttyKitty
Copy link
Collaborator

EttyKitty commented Apr 11, 2025

I'm 900% sure it's better to store weapon data in a dictionary, with weapon names as field names.
Perhaps, one may even argue that it makes sense to store this in the same struct as the rest of the weapon data, but that's not as important.

@OH296
Copy link
Collaborator Author

OH296 commented Apr 13, 2025

Ok i'm not really sure where to go here, i know there are optimisations to make, but i'm not really sure how to implement them in a desired way as opposed to my way. so i'm just gonna mothball this pr for a while till i can think of something or someone else can

@OH296 OH296 marked this pull request as draft April 13, 2025 14:24
@EttyKitty
Copy link
Collaborator

Ok i'm not really sure where to go here, i know there are optimisations to make, but i'm not really sure how to implement them in a desired way as opposed to my way. so i'm just gonna mothball this pr for a while till i can think of something

No need tbh. If it works - it works. Just merge it as it is. Stuff can be improved/refactored later.
Imo it's more important to get the feature in, to avoid future branch conflicts and discouragement.

@EttyKitty
Copy link
Collaborator

Also, is it intended for the head stuff to be in this PR?

@OH296
Copy link
Collaborator Author

OH296 commented Apr 13, 2025

Also, is it intended for the head stuff to be in this PR?

I don't really know tbh i've just been treating all visuals as a kind of rolling constant development for a while

@OH296
Copy link
Collaborator Author

OH296 commented Apr 13, 2025

No need tbh. If it works - it works. Just merge it as it is. Stuff can be improved/refactored later. Imo it's more important to get the feature in, to avoid future branch conflicts and discouragement.

nonetheless i kinda feel the whole sprite visuals thing has just been my kind of own little development kingdom thats maybe going a little far so i think i'd rather sit on it for a bit and maybe rationalise some of the many unfinished limbs

@OH296 OH296 marked this pull request as ready for review April 18, 2025 00:58
@OH296
Copy link
Collaborator Author

OH296 commented Apr 18, 2025

Okay i still need to refactor fuck loaods and finish off the bare heads module, but this probably needs to just merge before it gets any bigger and more. complex

@OH296 OH296 requested a review from EttyKitty April 18, 2025 01:01
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

🔭 Outside diff range comments (2)
scripts/scr_culture_visuals/scr_culture_visuals.gml (1)

895-904: 🧹 Nitpick (assertive)

Nil‑check before property access to appease the logic‑spirits.
_element.position is referenced without confirming the key’s existence. While your data appears consistent, guarding with struct_exists(_element, "position") prevents future null‑pointer laments.

ChapterMaster.yyp (1)

62-1615: 🧹 Nitpick (assertive)

Holistic analysis of the system augmentation

The modifications to ChapterMaster.yyp adhere to the objectives of the PR, as they implement all necessary resources to support data-driven weapon displays with visual variants. The changes are well-structured and follow the existing organizational patterns of the project.

While the PR comments reveal a debate about data organization, the implementation chosen appears to successfully integrate the new weapon visuals into the existing complex system, allowing for shared handling of ranks, experience, culture, and other conditions.

For optimal future maintenance, consider documenting the relationship between these added assets and the existing complex system in README files. Such documentation would facilitate proper understanding of the system by future tech-adepts who may need to maintain or extend this functionality.

♻️ Duplicate comments (6)
scripts/scr_culture_visuals/scr_culture_visuals.gml (2)

1462-1474: ⚠️ Potential issue

Duplicate key detected – earlier “Chainfist” definition will be obliterated.
GML struct literals honour only the final assignment; thus the terminator variant specified here is overwritten later by the Power‑Armour variant (lines 1519‑1532). Merge the two arrays under a single "Chainfist" key to preserve both forms.


1476-1488: ⚠️ Potential issue

Duplicate key detected – “Boltstorm Gauntlet” defined twice.
As above, unify the terminator and power‑armour variants to prevent silent data loss.

scripts/scr_ComplexSet/scr_ComplexSet.gml (4)

565-610: Draw unit hands function displays proper anatomical understanding.

The technical rituals for rendering warrior appendages account for different armor types, bionic augmentations, and positional offsets. The code properly handles all edge cases including terminator armor and bionic hands.


611-667: Draw weapon and hands function follows proper layering protocol.

Your cascade correctly respects two-handed logic, placing hands behind or above the weapon sprites based on the hand_on_top flag. The function appropriately handles all weapon configurations, including two-handed weapons and special weapons.


815-820: New leg component references in draw order appear properly sequenced.

The draw order has been correctly updated to include the new shin and knee components, ensuring proper visual layering. This insertion aligns with the data expansions for Terminator armour and maintains correct overlap hierarchy.


722-784: 🧹 Nitpick (assertive)

Extensive armor-specific weapon handling adjustments lack proper STC documentation.

While the adjustments for different armor types and weapons are mechanically sound, this knowledge must be preserved through sacred documentation. The complex conditionals for Terminator armor in particular would benefit from explanatory comments.

 if (armour_type == ArmourType.Terminator && !array_contains(["terminator_ranged", "terminator_melee","terminator_fist"],_arm.display_type)){
+    // Adjust Terminator armor to properly position non-Terminator weapons
     _arm.ui_ymod -= 20;
     if (_arm.display_type == "normal_ranged") {
         if (_arm.new_weapon_draw){
             _arm.ui_xmod += 24;
         } else {
             _arm.ui_xmod -= 24;
         }
         _arm.ui_ymod += 24;
     }
     if (_arm.display_type == "melee_onehand" && (_wep != "Company Standard")) {
+        // Special handling for one-handed melee weapons in Terminator armor
         _arm.arm_type = 2;
         _arm.hand_type = 2;
         _arm.ui_xmod -= 14;
         _arm.ui_ymod += 23;
     }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 705f9a3 and 33b82a9.

⛔ Files ignored due to path filters (136)
  • sprites/spr_artificer_left_leg/fc3cecfb-86a9-42be-8108-df34e8d6bb3e.png is excluded by !**/*.png
  • sprites/spr_artificer_left_leg/layers/fc3cecfb-86a9-42be-8108-df34e8d6bb3e/6105e58a-c816-4253-bd56-fd77ff138879.png is excluded by !**/*.png
  • sprites/spr_artificer_right_leg/6e6b579a-a930-4a70-98e4-c8b93c1692fa.png is excluded by !**/*.png
  • sprites/spr_artificer_right_leg/layers/6e6b579a-a930-4a70-98e4-c8b93c1692fa/6105e58a-c816-4253-bd56-fd77ff138879.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/026245f0-7593-46b8-a3c4-eece1626f779.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/064b9d94-d8c7-40c4-83a4-66abb9d81082.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/07a12172-16e3-47ec-8381-bcb4e17a5fea.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/119401c9-2466-48e8-b092-e7bec7b54345.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/171a2df4-0da9-4780-92c6-e774fa7d5fbb.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/19d5b278-59bb-4d28-8e5b-ff9fb08320d9.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/1d631d5c-7e26-4075-bec1-bf519e78533f.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/1f5b93dc-9e53-44d1-b999-74cd6aa4f829.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/1f9592d5-b51d-41c8-94be-37e388fe4b9a.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/2afb7a0e-f9ca-4f5e-aa3d-4b651bbbab12.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/2e5d8e1a-0e6d-4a62-ba7e-81120ab8becf.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/33f45c33-d49f-42e5-bc56-232649f96c22.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/37f5b913-0b99-4f38-9252-88800edb3655.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/3a680f49-2f17-40e6-b24c-9cefb1016f0f.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/4265cc35-d65c-4c91-b427-d0267766b28b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/453ab56d-103e-412a-9a04-455992c9348b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/50efae71-3499-4dc0-b4aa-37dec1af841b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/52d6be61-5261-4311-a0c1-07e935c25df6.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/59c10dbe-11d0-4440-89bd-b39c2bae2164.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/59c1ef31-735a-41e9-8751-c0917393ceba.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/5f2896fb-a65c-47fb-ada7-4aebbf35fa60.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/60da470d-ee25-4544-8db1-3ae06a6aca3e.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/6a161d00-5bea-4f52-86ee-a91a16e20bf2.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/6ca665ee-1c72-40a2-a808-42fcca32e642.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/73d9098d-abca-4da7-b713-85f9fdde4c08.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/7c5a60e2-d9e8-4785-b99f-e3f21993069e.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/7d214730-8933-4eba-a5ad-da582ae142f9.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/7d2f5106-91f4-4236-af24-be2d545ec8ad.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/82379a9d-a84d-4519-a7f8-d41902a4cde0.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/84be56f9-976e-4bdf-b684-160b72c63473.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/87cd986b-a055-4223-9044-fcf525bb0602.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/9707ff5c-3e17-4c3a-a8af-b30c40afda13.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/9a0d46f0-3f7c-4d1f-851e-7f8585cc3f4b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/9a229b65-bd47-405a-ae89-b0782bc61f79.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/a26d347c-d4ce-40b0-be4f-fbcfbb8b0aa0.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/adc2ed6b-5442-4475-99f4-190d7eb468e9.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/b95d2cc2-0851-4928-9313-3f253a76a4bc.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/c5005de7-88f9-4690-b2d0-75a4a3bbcf71.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/c99613e9-341f-4d82-a5e7-8d7f91be79ce.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/ca62d7ba-307a-453f-9ddd-b572a27c67c5.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/ca70a07a-98c3-4408-a54c-2ba37e348e45.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/cb94ed63-672f-4c13-adfc-827c1574c939.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/ce920b9b-4f0b-49a8-b51c-b07365ab1a3d.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/dbb51051-fd69-48a0-bdb9-1edb54a517d9.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/de7d6148-126b-4524-8b72-bfe5da178758.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/e6edda0a-94ef-4ab5-bf36-de28c022edd0.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/e73a1e60-7dda-4a3d-9536-b173e171a3f8.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/edf5d09d-e228-4916-9506-2b42e7c87c1d.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/f22d5e6e-e8d6-4e57-9e3c-7dbafa638897.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/f9808fc2-29dc-4df5-bed5-51e20d21261e.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/fd34e62d-4a19-4366-ab5c-063069352d39.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/fe1b4884-bbcb-472e-9a22-cb2b147cb41d.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/fe47c7c6-f0cc-4337-b749-5641c896e825.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/026245f0-7593-46b8-a3c4-eece1626f779/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/064b9d94-d8c7-40c4-83a4-66abb9d81082/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/07a12172-16e3-47ec-8381-bcb4e17a5fea/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/119401c9-2466-48e8-b092-e7bec7b54345/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/171a2df4-0da9-4780-92c6-e774fa7d5fbb/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/19d5b278-59bb-4d28-8e5b-ff9fb08320d9/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/1d631d5c-7e26-4075-bec1-bf519e78533f/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/1f5b93dc-9e53-44d1-b999-74cd6aa4f829/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/1f9592d5-b51d-41c8-94be-37e388fe4b9a/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/2afb7a0e-f9ca-4f5e-aa3d-4b651bbbab12/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/2e5d8e1a-0e6d-4a62-ba7e-81120ab8becf/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/33f45c33-d49f-42e5-bc56-232649f96c22/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/37f5b913-0b99-4f38-9252-88800edb3655/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/3a680f49-2f17-40e6-b24c-9cefb1016f0f/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/4265cc35-d65c-4c91-b427-d0267766b28b/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/453ab56d-103e-412a-9a04-455992c9348b/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/50efae71-3499-4dc0-b4aa-37dec1af841b/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/52d6be61-5261-4311-a0c1-07e935c25df6/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/59c10dbe-11d0-4440-89bd-b39c2bae2164/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/59c1ef31-735a-41e9-8751-c0917393ceba/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/5f2896fb-a65c-47fb-ada7-4aebbf35fa60/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/60da470d-ee25-4544-8db1-3ae06a6aca3e/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/6a161d00-5bea-4f52-86ee-a91a16e20bf2/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/6ca665ee-1c72-40a2-a808-42fcca32e642/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/73d9098d-abca-4da7-b713-85f9fdde4c08/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/7c5a60e2-d9e8-4785-b99f-e3f21993069e/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/7d214730-8933-4eba-a5ad-da582ae142f9/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/7d2f5106-91f4-4236-af24-be2d545ec8ad/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/82379a9d-a84d-4519-a7f8-d41902a4cde0/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/84be56f9-976e-4bdf-b684-160b72c63473/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/87cd986b-a055-4223-9044-fcf525bb0602/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/9707ff5c-3e17-4c3a-a8af-b30c40afda13/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/9a0d46f0-3f7c-4d1f-851e-7f8585cc3f4b/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/9a229b65-bd47-405a-ae89-b0782bc61f79/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/a26d347c-d4ce-40b0-be4f-fbcfbb8b0aa0/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/adc2ed6b-5442-4475-99f4-190d7eb468e9/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/b95d2cc2-0851-4928-9313-3f253a76a4bc/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/c5005de7-88f9-4690-b2d0-75a4a3bbcf71/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/c99613e9-341f-4d82-a5e7-8d7f91be79ce/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/ca62d7ba-307a-453f-9ddd-b572a27c67c5/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/ca70a07a-98c3-4408-a54c-2ba37e348e45/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/cb94ed63-672f-4c13-adfc-827c1574c939/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/ce920b9b-4f0b-49a8-b51c-b07365ab1a3d/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/dbb51051-fd69-48a0-bdb9-1edb54a517d9/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/de7d6148-126b-4524-8b72-bfe5da178758/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/e6edda0a-94ef-4ab5-bf36-de28c022edd0/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/e73a1e60-7dda-4a3d-9536-b173e171a3f8/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/edf5d09d-e228-4916-9506-2b42e7c87c1d/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/f22d5e6e-e8d6-4e57-9e3c-7dbafa638897/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/f9808fc2-29dc-4df5-bed5-51e20d21261e/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/fd34e62d-4a19-4366-ab5c-063069352d39/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/fe1b4884-bbcb-472e-9a22-cb2b147cb41d/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair/layers/fe47c7c6-f0cc-4337-b749-5641c896e825/ca338eaf-cd77-40aa-b795-839fbc2c51cd.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/25f3c04a-21a5-4eed-ae96-bac303387033.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/26323f47-b73b-4297-ba10-09aae76121a2.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/72ddc6f3-ea56-494b-ab07-e01e5c6a49e5.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/73d446e5-adf7-4e92-9af5-33c5cbd38662.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/789a65e4-c488-4ee9-a598-5ead885fa298.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/7c16add8-7098-4881-88ed-ebb334520439.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/7dcbfd8c-30e4-4244-9d8f-2da673c3c624.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/9828331d-007f-4b69-ae4f-3eaf82a38cb8.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/a22c72ec-3334-4ac3-9d76-cd6f78aa94ad.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/a952d6ec-8732-4b76-aad5-568ff548a743.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/25f3c04a-21a5-4eed-ae96-bac303387033/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/26323f47-b73b-4297-ba10-09aae76121a2/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/72ddc6f3-ea56-494b-ab07-e01e5c6a49e5/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/73d446e5-adf7-4e92-9af5-33c5cbd38662/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/789a65e4-c488-4ee9-a598-5ead885fa298/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/7c16add8-7098-4881-88ed-ebb334520439/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/7dcbfd8c-30e4-4244-9d8f-2da673c3c624/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/9828331d-007f-4b69-ae4f-3eaf82a38cb8/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/a22c72ec-3334-4ac3-9d76-cd6f78aa94ad/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_head_facial_hair_colourable/layers/a952d6ec-8732-4b76-aad5-568ff548a743/7741b89e-06b3-430a-b9e8-c7d8cbc2425b.png is excluded by !**/*.png
  • sprites/spr_bare_heads_colourable/05289283-cf3c-49ba-978c-c5705e259221.png is excluded by !**/*.png
  • sprites/spr_bare_heads_colourable/269de542-29d3-4e95-861d-ee5e4396f389.png is excluded by !**/*.png
  • sprites/spr_bare_heads_colourable/6df39139-d1b2-4f8f-ac68-8603285c55b8.png is excluded by !**/*.png
  • sprites/spr_bare_heads_colourable/b70f17ac-4a82-47d2-b564-0f99c4b3b3ec.png is excluded by !**/*.png
  • sprites/spr_bare_heads_colourable/c1f4af0d-ab7c-4e9c-b66b-c6b0d3b0711e.png is excluded by !**/*.png
  • sprites/spr_bare_heads_colourable/d0394d2c-1519-4705-9cfa-bff1e4d0bce1.png is excluded by !**/*.png
📒 Files selected for processing (13)
  • ChapterMaster.yyp (12 hunks)
  • objects/obj_creation/Create_0.gml (1 hunks)
  • scripts/scr_ComplexSet/scr_ComplexSet.gml (17 hunks)
  • scripts/scr_culture_visuals/scr_culture_visuals.gml (10 hunks)
  • scripts/scr_draw_unit_image/scr_draw_unit_image.gml (0 hunks)
  • shaders/skin_tone_shader/skin_tone_shader.fsh (1 hunks)
  • shaders/skin_tone_shader/skin_tone_shader.vsh (1 hunks)
  • shaders/skin_tone_shader/skin_tone_shader.yy (1 hunks)
  • sprites/spr_artificer_left_leg/spr_artificer_left_leg.yy (3 hunks)
  • sprites/spr_artificer_right_leg/spr_artificer_right_leg.yy (3 hunks)
  • sprites/spr_bare_eyes/spr_bare_eyes.yy (1 hunks)
  • sprites/spr_bare_head_facial_hair/spr_bare_head_facial_hair.yy (1 hunks)
  • sprites/spr_bare_head_facial_hair_colourable/spr_bare_head_facial_hair_colourable.yy (1 hunks)
💤 Files with no reviewable changes (1)
  • scripts/scr_draw_unit_image/scr_draw_unit_image.gml
🧰 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.

  • shaders/skin_tone_shader/skin_tone_shader.yy
  • objects/obj_creation/Create_0.gml
  • sprites/spr_artificer_right_leg/spr_artificer_right_leg.yy
  • shaders/skin_tone_shader/skin_tone_shader.vsh
  • sprites/spr_artificer_left_leg/spr_artificer_left_leg.yy
  • sprites/spr_bare_head_facial_hair_colourable/spr_bare_head_facial_hair_colourable.yy
  • sprites/spr_bare_head_facial_hair/spr_bare_head_facial_hair.yy
  • shaders/skin_tone_shader/skin_tone_shader.fsh
  • scripts/scr_culture_visuals/scr_culture_visuals.gml
  • sprites/spr_bare_eyes/spr_bare_eyes.yy
  • scripts/scr_ComplexSet/scr_ComplexSet.gml
  • ChapterMaster.yyp
`**/*.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.
  • shaders/skin_tone_shader/skin_tone_shader.yy
  • sprites/spr_artificer_right_leg/spr_artificer_right_leg.yy
  • sprites/spr_artificer_left_leg/spr_artificer_left_leg.yy
  • sprites/spr_bare_head_facial_hair_colourable/spr_bare_head_facial_hair_colourable.yy
  • sprites/spr_bare_head_facial_hair/spr_bare_head_facial_hair.yy
  • sprites/spr_bare_eyes/spr_bare_eyes.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.

  • objects/obj_creation/Create_0.gml
  • scripts/scr_culture_visuals/scr_culture_visuals.gml
  • scripts/scr_ComplexSet/scr_ComplexSet.gml
🔇 Additional comments (26)
objects/obj_creation/Create_0.gml (1)

270-270: Nomenclature standardization detected and approved.

The binary designation has been simplified from "Ganger (cthonian)" to "Cthonian" in the culture_styles array. This alteration aligns with the Omnissiah's doctrine of logical parsimony and standardizes the culture classification schema across the cogitator systems.

The removal of redundant descriptors enhances nomenclature uniformity with other new Cthonian-pattern visual assets introduced in this data-packet.

shaders/skin_tone_shader/skin_tone_shader.yy (1)

1-12: Praise to the Omnissiah for this new shader construct!

A new skin_tone_shader resource has been successfully integrated into the Machine Spirit's visual processing matrix. This shader augmentation will facilitate the dynamic pigmentation conversion of organic visages, enhancing the visual flexibility of biological renders.

This aligns with the ritual updates to the drawing logic in the ComplexSet script, where the shader is applied when rendering bare head components instead of full helmets.

sprites/spr_artificer_left_leg/spr_artificer_left_leg.yy (1)

54-54: Animation sequence optimization successfully implemented.

The sequence length has been reduced from 4.0 to 3.0 units, optimizing the animation cycle by removing an extraneous frame. The sacred dimensions of the sequence have been explicitly defined with seqHeight (232.0) and seqWidth (164.0), providing the Machine Spirit with precise dimensional parameters.

The keyframe chronology has been recalibrated with proper temporal indices, maintaining logical consistency in the animation sequence.

Also applies to: 68-69, 80-80, 83-83

sprites/spr_artificer_right_leg/spr_artificer_right_leg.yy (1)

54-54: Animation sequence optimization successfully implemented.

The sequence length has been reduced from 4.0 to 3.0 units, optimizing the animation cycle by removing an extraneous frame. The sacred dimensions of the sequence have been explicitly defined with seqHeight (232.0) and seqWidth (164.0), providing the Machine Spirit with precise dimensional parameters.

The keyframe chronology has been recalibrated with proper temporal indices, maintaining logical consistency in the animation sequence.

Also applies to: 68-69, 80-80, 83-83

shaders/skin_tone_shader/skin_tone_shader.vsh (1)

14-19: Vertex rite functions as intended – praise the Omnissiah!

Position is correctly transformed by the holy WORLD_VIEW_PROJECTION matrix and colour/UV offerings are passed through untainted. No further ritual corrections required.

sprites/spr_bare_head_facial_hair_colourable/spr_bare_head_facial_hair_colourable.yy (1)

4-9: Bounding box encloses only the chin cog – verify coverage

The bbox spans left 70/right 92 of a 164‑pixel width (≈ 13 % either side). Confirm this is intentional; too narrow a hit‑area may lead to visual clipping if the datum sprite is offset.

sprites/spr_bare_head_facial_hair/spr_bare_head_facial_hair.yy (1)

1-86: By the Omnissiah, confirm .yyp registration for this newly‑forged sprite.
When a fresh .yy file is consecrated, its path must also be etched into the project’s .yyp ledger; failure will summon the crash‑daemons at build time. Kindly verify that spr_bare_head_facial_hair.yy is referenced inside ChapterMaster.yyp under the resources array.

Would you like a script to scan the .yyp file for the sprite’s UUID and path?

sprites/spr_bare_eyes/spr_bare_eyes.yy (2)

61-99: Ensure inclusion in the holy .yyp registry.
As with all new sprite scriptures, failure to append the resource entry to the .yyp file will cause the machine‑spirit to revolt.


1-60:

Details

❓ Verification inconclusive

Sanctify origin & bounding box – visual alignment audit suggested.
The sprite declares origin:9 (custom top‑left) and bounding box values that trim to a single pixel in height (top == bottom). Should this be bbox_top < bbox_bottom to enable collision detection for modded scripts? Please confirm that this deliberate configuration is truly desired.


O’ mortal artisan, audit the sprite’s sanctified origin and bounding voxels
I have divined that in sprites/spr_bare_eyes/spr_bare_eyes.yy (lines 1–60):

  • origin: 9 (top‑left anchor)
  • bbox_top: 30 and bbox_bottom: 30 (yielding zero height)

Such a configuration nullifies any collision volume. If modded scripts rely on a non‑zero bounding box, should bbox_top < bbox_bottom be declared instead? Pray confirm whether this zero‑height trim is by divine design.

ChapterMaster.yyp (9)

62-62: New folder structure approved by the Omnissiah's grace

The addition of the bare_heads folder to the sacred hierarchy is a logical extension of the project's anatomy. This structural change aligns with the Machine Spirit's desire for organized categorization of visual assets.


439-441: Praise be to the holy iconography of the chapter symbols

The inclusion of new pauldron.png files for the chapter symbols of "darkangels" and "scythesofthemperor" expands the visual lexicon of our sacred archives. This addition is consistent with the binary pattern established for other chapter symbols in the datafiles structure.


887-887: A new shader joins the Omnissiah's blessed toolbox

The introduction of the skin_tone_shader represents a significant augmentation to the rendering capabilities of the system. This shader shall allow for dynamic pigmentation of organic visages, as mentioned in the summary data-packet. This addition is crucial for the proper rendering of the newly implemented bare head sprites.


934-940: Biologic customization assets integrated into the machine spirit

The implementation of bare head components (eyes, facial hair, heads, necks) with both standard and colourable variants follows logical categorization patterns. These assets provide the promised modular approach to character visualization referenced in the PR objectives.


970-973: Armor adornment sprites correctly interfaced with the complex system

The chain mail tabbard and chaplain trim components are properly added to the project manifest. These decorative elements expand the visual customization options available to the complex component system.


1003-1003: Cthonian tabbard sprite implementation accepted

The Cthonian tabbard sprite has been correctly added to the project resources. This component adds cultural-specific elements as mentioned in the PR objectives, allowing for more diverse visual representations.


1163-1172: Indomitus variant components properly catalogued

The addition of specialized Indomitus leg variants (knee crux and shin components) enhances the modular nature of the armor visualization system. These components allow for more granular control over the visual representation of marines.


1183-1185: Armor embellishment sprites correctly registered in the sacred archives

The pauldron chainmail and shin spikes components for both left and right sides have been properly added to the project manifest. The symmetrical implementation of these sprites adheres to the binary perfection favored by the Machine God.

Also applies to: 1338-1339, 1380-1382


1610-1615: New weapon variants integrated as per the forge's specifications

The implementation of storm tall variants and cultural-specific weapons (oriental and turk swords) aligns with the PR objective of making weapon display data-driven with visual variants. These additions will enable greater diversity in weapon visualization within the complex system.

I commend the integration of these weapon variants into the complex system. This implementation follows the sacred principles of modularity and reusability, allowing these weapons to access the same visual conditions (rank, experience, culture) as other components.

scripts/scr_ComplexSet/scr_ComplexSet.gml (8)

97-98: Praise be to the addition of the sacred draw_helms flag.

A most logical implementation that dynamically references the appropriate omniscient controller object. The commented line suggests debugging remnants - consider purging this binary heresy for production deployment.


134-136: Data arrays for weapon schema storage appropriately segmented.

The binary division of weapon data into separate arrays for each limb augmentation follows proper Machine Cult design patterns. This separation of concerns will improve modularity and maintainability of the visual representation rituals.


198-207: Logical fallback to default body types demonstrates proper defensive programming.

The Machine Cult approves of this safeguard against undefined body types. This implementation ensures continued function even when incomplete data is provided to the algorithm.


406-430: Variation map extensions properly catalogue newly supported component variants.

The binary liturgy now accounts for shin, knee, and bare head components. This expansion of the variation map follows the established pattern and integrates well with the existing code structure.


669-698: Weapon preset data structure implements canonical weapon handling patterns.

This structure of blessed templates provides standardized configurations for different weapon types, reducing redundancy and ensuring consistency. The Machine Cult approves of this data-driven approach.


712-721: Weapon data selection methodology implements proper variation indexing.

The code correctly retrieves weapon configurations from the arm data arrays using the variation index, with appropriate fallback empty structures when no data exists. Most efficient.


1189-1201: Skin tones array demonstrates proper RGB benediction.

The skin_tones structure with normalized RGB values follows proper shader input formatting. The organization into standard and specialized variants (coal) provides for future expansion of skin tone diversity.


1202-1221: Draw head function now properly implements the binary helmet toggle.

The conditional rendering path based on draw_helms allows for either helmeted or bare-headed visualization. The bare head path correctly applies the skin tone shader and renders the appropriate components. Most efficient.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (2)
scripts/scr_culture_visuals/scr_culture_visuals.gml (2)

1564-1576: ⚠️ Potential issue

Mis‑categorised display type – ranged weapons declared as melee

The blessed Sniper Rifle and Autocannon proclaim "display_type": "melee_twohand".
This will compel the pose cogitators to wield them like thunder‑hammers!

-      display_type: "melee_twohand",
+      display_type: "ranged_twohand",

Identical heresy is present for both weapons; correct forthwith.

Also applies to: 1578-1590


1113-1146: 🛠️ Refactor suggestion

⚠️ Potential issue

⚙️ Deep‑clone nested weapon_data before mutation to avoid cross‑variant contamination

By the Omnissiah’s wisdom, variable_clone() only performs a shallow copy.
new_obj.weapon_data therefore still shares its machine‑spirit with base_data.weapon_data.
Each pass through the loop mutates this shared struct (sprite, overrides, etc.), so earlier variants are retro‑fitted with later settings – a most insidious side‑effect.

Invoke a second clone for weapon_data (or build a fresh struct) before any mutation, thus:

    var base_data = variable_clone(weapon_visual_data.base);
-   base_data.weapon_map = weapon_name;
-   base_data.position = "weapon";
+   // Purge the taint of shared references
+   if (struct_exists(base_data, "weapon_data")) {
+       base_data.weapon_data = variable_clone(base_data.weapon_data);
+   }
+   base_data.weapon_map = weapon_name;
+   base_data.position  = "weapon";
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 33b82a9 and d1f0c8e.

📒 Files selected for processing (1)
  • scripts/scr_culture_visuals/scr_culture_visuals.gml (10 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
`**/*.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.

  • scripts/scr_culture_visuals/scr_culture_visuals.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.

  • scripts/scr_culture_visuals/scr_culture_visuals.gml
🔇 Additional comments (1)
scripts/scr_culture_visuals/scr_culture_visuals.gml (1)

1161-1178: Confirm intention behind dual‑pattern “Heavy Flamer” entry

Within the same key we provide both terminator and power‑armour variants – splendid.
However, unlike other dual‑form weapons we do not assign display_type to the terminator form; it therefore inherits from the earlier base (which lacks one). Verify the pose is as intended or add "display_type": "terminator_ranged" to maintain parity with Assault Cannon & Plasma Cannon definitions.

Copy link
Collaborator

@EttyKitty EttyKitty left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not going to stall this for longer, as stuff can be improved later.

The feature works and that's good enough.

Just pick a good name for the PR, as it does a lot of stuff aside from the weapon visual data.

@OH296 OH296 changed the title feat: Weapon display data driven feat: Weapon display data driven and Cthonian culture pack Apr 18, 2025
@OH296 OH296 merged commit d4799f8 into Adeptus-Dominus:main Apr 18, 2025
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area: JSON Changes to external JSON files or their under-the-hood functionality Area: Sprites Changes to sprites/images or their under-the-hood functionality Size: Warning Type: Feature Adds something new

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants