Skip to content

Conversation

@OH296
Copy link
Collaborator

@OH296 OH296 commented Jul 25, 2025

Purpose and Description

  • Self-descriptive.

Testing done

  • None, and I understand the risks.

Related things and/or additional context

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 25, 2025

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive tag management system, enabling users to create, assign, filter, and remove tags for units via a new popup interface.
    • Added decorative UI elements and enhanced company management, including editable company names and improved navigation controls.
  • Improvements

    • Enhanced filtering and selection in management screens based on tags.
    • Updated keyboard shortcut handling to prevent accidental actions during popup interactions.
    • Improved visual design with new sprites and updated backgrounds in UI components.
  • Bug Fixes

    • Corrected array update logic to ensure proper removal of items during gameplay actions.
  • Chores

    • Added metadata and formatting updates to various sprite resources for improved consistency and maintainability.

Walkthrough

Behold, the Omnissiah's will made manifest: this update introduces a comprehensive tag management system for units, augments UI drawing with new slate sprites, and refines array manipulation and control logic across multiple scripts. Numerous sprite resources receive metadata and formatting adjustments, while new scripts and variables are sanctified for tag operations and management arrays.

Changes

Files/Paths Change Summary
ChapterMaster.yyp, scripts/scr_manage_tags/scr_manage_tags.yy, sprites/spr_slate_featureless/spr_slate_featureless.yy, sprites/spr_slate_top/spr_slate_top.yy Added script and sprite resources for tag management and new UI slates.
objects/obj_controller/Create_0.gml, scripts/scr_marine_struct/scr_marine_struct.gml Added manage_tags and management_tags arrays to controllers and marine struct.
objects/obj_controller/Draw_64.gml, objects/obj_popup/Draw_64.gml, objects/obj_controller/Step_0.gml UI logic expanded: new conditional branches for tag management and shortcut gating.
scripts/scr_DataSlate/scr_DataSlate.gml Enhanced DataSlate with new properties and drawing logic for new slates.
scripts/scr_array_functions/scr_array_functions.gml Added array_delete_values function; ensured array deletion functions return modified arrays.
scripts/scr_buttons/scr_buttons.gml Refactored button and text area constructors; improved multi-select logic and modularity.
scripts/scr_clean/scr_clean.gml, scripts/scr_system_search_helpers/scr_system_search_helpers.gml Fixed array deletion logic by assigning returned arrays.
scripts/scr_company_view/scr_company_view.gml, scripts/scr_controller_helpers/scr_controller_helpers.gml Managed tag arrays initialised; shortcut gating added to company management.
scripts/scr_draw_management_unit/scr_draw_management_unit.gml Management unit UI now supports tag-based filtering and interaction.
scripts/scr_manage_tags/scr_manage_tags.gml Introduced full tag management system: UI, enums, and logic for creating, deleting, adding, and removing tags.
scripts/scr_manage_task_selector/scr_manage_task_selector.gml Refactored local variable naming for clarity.
scripts/scr_popup_functions/scr_popup_functions.gml Added ADD_TAGS to POPUP_TYPE enum.
scripts/scr_transfer_marines/scr_transfer_marines.gml Added else branch to transfer popup logic for additional UI setup.
scripts/scr_ui_manage/scr_ui_manage.gml Centralised company management drawing; shortcut gating; improved tag button logic and loop safety.
sprites/*/*.yy (multiple sprite files) Added seqHeight and seqWidth properties; reformatted keyframe/channel data for clarity; added/updated frames and sequences for several sprites.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~35 minutes

Possibly related PRs

  • Adeptus-Dominus/ChapterMaster#874: Introduced the scr_DataSlate script resource and refactored slate drawing functions, upon which this PR builds with new slate sprites and drawing logic.

  • Adeptus-Dominus/ChapterMaster#875: Adds new slate-related sprites and extends DataSlate UI drawing, closely related in sprite and UI resource enhancements.

Suggested labels

PR: Feature, PR: Fix, Size: Medium, Area: UI


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 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.
    • Explain this complex logic.
    • 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 explain this code block.
    • @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 explain its main purpose.
    • @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.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

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 sequence diagram to generate a sequence diagram of the changes in 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: Huge Type: Feature Adds something new labels Jul 25, 2025
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: 9

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

103-103: Logic anomaly detected in line 103.

Variable ma_we1 is used instead of ma_we2 in the ternary operation, causing incorrect weapon abbreviation assignment.

-                ma_we2 = is_string(ma_we1) ? ma_we2 : "";
+                ma_we2 = is_string(ma_we2) ? ma_we2 : "";
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 4f6bca9 and f954a4c.

⛔ Files ignored due to path filters (10)
  • sprites/spr_defeat/b39b5ff0-3a40-4c08-84c7-d1d9c6dd0bb6.png is excluded by !**/*.png
  • sprites/spr_defeat/layers/b39b5ff0-3a40-4c08-84c7-d1d9c6dd0bb6/5f8a8902-d3e2-4d02-bd8e-3552df863e7d.png is excluded by !**/*.png
  • sprites/spr_slate_featureless/bd12575d-6936-47ed-b150-8734d5c98140.png is excluded by !**/*.png
  • sprites/spr_slate_featureless/f80bbb04-8bfb-4be3-b6f4-2914d55a9273.png is excluded by !**/*.png
  • sprites/spr_slate_featureless/layers/bd12575d-6936-47ed-b150-8734d5c98140/6e76129b-a811-4d40-b548-3faeffb7e88e.png is excluded by !**/*.png
  • sprites/spr_slate_featureless/layers/f80bbb04-8bfb-4be3-b6f4-2914d55a9273/6e76129b-a811-4d40-b548-3faeffb7e88e.png is excluded by !**/*.png
  • sprites/spr_slate_top/bd12575d-6936-47ed-b150-8734d5c98140.png is excluded by !**/*.png
  • sprites/spr_slate_top/f80bbb04-8bfb-4be3-b6f4-2914d55a9273.png is excluded by !**/*.png
  • sprites/spr_slate_top/layers/bd12575d-6936-47ed-b150-8734d5c98140/6e76129b-a811-4d40-b548-3faeffb7e88e.png is excluded by !**/*.png
  • sprites/spr_slate_top/layers/f80bbb04-8bfb-4be3-b6f4-2914d55a9273/6e76129b-a811-4d40-b548-3faeffb7e88e.png is excluded by !**/*.png
📒 Files selected for processing (39)
  • ChapterMaster.yyp (2 hunks)
  • objects/obj_controller/Create_0.gml (1 hunks)
  • objects/obj_controller/Draw_64.gml (1 hunks)
  • objects/obj_controller/Step_0.gml (1 hunks)
  • objects/obj_popup/Draw_64.gml (1 hunks)
  • scripts/scr_DataSlate/scr_DataSlate.gml (4 hunks)
  • scripts/scr_array_functions/scr_array_functions.gml (1 hunks)
  • scripts/scr_buttons/scr_buttons.gml (8 hunks)
  • scripts/scr_clean/scr_clean.gml (2 hunks)
  • scripts/scr_company_view/scr_company_view.gml (2 hunks)
  • scripts/scr_controller_helpers/scr_controller_helpers.gml (2 hunks)
  • scripts/scr_draw_management_unit/scr_draw_management_unit.gml (2 hunks)
  • scripts/scr_manage_tags/scr_manage_tags.gml (1 hunks)
  • scripts/scr_manage_tags/scr_manage_tags.yy (1 hunks)
  • scripts/scr_manage_task_selector/scr_manage_task_selector.gml (5 hunks)
  • scripts/scr_marine_struct/scr_marine_struct.gml (1 hunks)
  • scripts/scr_popup_functions/scr_popup_functions.gml (1 hunks)
  • scripts/scr_system_search_helpers/scr_system_search_helpers.gml (1 hunks)
  • scripts/scr_transfer_marines/scr_transfer_marines.gml (1 hunks)
  • scripts/scr_ui_manage/scr_ui_manage.gml (7 hunks)
  • sprites/spr_company_title/spr_company_title.yy (1 hunks)
  • sprites/spr_data_slate/spr_data_slate.yy (1 hunks)
  • sprites/spr_defeat/spr_defeat.yy (3 hunks)
  • sprites/spr_forge_holo/spr_forge_holo.yy (1 hunks)
  • sprites/spr_ingame_menu/spr_ingame_menu.yy (1 hunks)
  • sprites/spr_load_splash/spr_load_splash.yy (1 hunks)
  • sprites/spr_load_text/spr_load_text.yy (1 hunks)
  • sprites/spr_loadbar_cover/spr_loadbar_cover.yy (1 hunks)
  • sprites/spr_loadbar_empty/spr_loadbar_empty.yy (1 hunks)
  • sprites/spr_master_title/spr_master_title.yy (1 hunks)
  • sprites/spr_mm_butts_small/spr_mm_butts_small.yy (1 hunks)
  • sprites/spr_new_banner/spr_new_banner.yy (1 hunks)
  • sprites/spr_new_mm/spr_new_mm.yy (1 hunks)
  • sprites/spr_pixel_button_middle/spr_pixel_button_middle.yy (1 hunks)
  • sprites/spr_research_bar/spr_research_bar.yy (1 hunks)
  • sprites/spr_slate_featureless/spr_slate_featureless.yy (1 hunks)
  • sprites/spr_slate_top/spr_slate_top.yy (1 hunks)
  • sprites/spr_star_screen/spr_star_screen.yy (1 hunks)
  • sprites/spr_tooltip1/spr_tooltip1.yy (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.gml

⚙️ CodeRabbit Configuration File

**/*.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.

Files:

  • objects/obj_controller/Draw_64.gml
  • scripts/scr_manage_task_selector/scr_manage_task_selector.gml
  • scripts/scr_transfer_marines/scr_transfer_marines.gml
  • objects/obj_controller/Step_0.gml
  • scripts/scr_controller_helpers/scr_controller_helpers.gml
  • scripts/scr_popup_functions/scr_popup_functions.gml
  • scripts/scr_system_search_helpers/scr_system_search_helpers.gml
  • scripts/scr_DataSlate/scr_DataSlate.gml
  • objects/obj_popup/Draw_64.gml
  • scripts/scr_clean/scr_clean.gml
  • scripts/scr_marine_struct/scr_marine_struct.gml
  • scripts/scr_company_view/scr_company_view.gml
  • scripts/scr_draw_management_unit/scr_draw_management_unit.gml
  • scripts/scr_array_functions/scr_array_functions.gml
  • scripts/scr_buttons/scr_buttons.gml
  • objects/obj_controller/Create_0.gml
  • scripts/scr_manage_tags/scr_manage_tags.gml
  • scripts/scr_ui_manage/scr_ui_manage.gml
**/*.*

⚙️ CodeRabbit Configuration File

**/*.*: - 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.

Files:

  • objects/obj_controller/Draw_64.gml
  • sprites/spr_master_title/spr_master_title.yy
  • sprites/spr_ingame_menu/spr_ingame_menu.yy
  • sprites/spr_load_splash/spr_load_splash.yy
  • sprites/spr_new_mm/spr_new_mm.yy
  • sprites/spr_forge_holo/spr_forge_holo.yy
  • sprites/spr_new_banner/spr_new_banner.yy
  • scripts/scr_manage_task_selector/scr_manage_task_selector.gml
  • sprites/spr_loadbar_empty/spr_loadbar_empty.yy
  • scripts/scr_transfer_marines/scr_transfer_marines.gml
  • sprites/spr_load_text/spr_load_text.yy
  • sprites/spr_mm_butts_small/spr_mm_butts_small.yy
  • objects/obj_controller/Step_0.gml
  • scripts/scr_controller_helpers/scr_controller_helpers.gml
  • scripts/scr_popup_functions/scr_popup_functions.gml
  • scripts/scr_system_search_helpers/scr_system_search_helpers.gml
  • scripts/scr_DataSlate/scr_DataSlate.gml
  • objects/obj_popup/Draw_64.gml
  • scripts/scr_clean/scr_clean.gml
  • scripts/scr_marine_struct/scr_marine_struct.gml
  • scripts/scr_manage_tags/scr_manage_tags.yy
  • scripts/scr_company_view/scr_company_view.gml
  • sprites/spr_star_screen/spr_star_screen.yy
  • sprites/spr_research_bar/spr_research_bar.yy
  • ChapterMaster.yyp
  • sprites/spr_pixel_button_middle/spr_pixel_button_middle.yy
  • sprites/spr_defeat/spr_defeat.yy
  • scripts/scr_draw_management_unit/scr_draw_management_unit.gml
  • scripts/scr_array_functions/scr_array_functions.gml
  • sprites/spr_slate_featureless/spr_slate_featureless.yy
  • scripts/scr_buttons/scr_buttons.gml
  • sprites/spr_tooltip1/spr_tooltip1.yy
  • objects/obj_controller/Create_0.gml
  • sprites/spr_company_title/spr_company_title.yy
  • sprites/spr_slate_top/spr_slate_top.yy
  • scripts/scr_manage_tags/scr_manage_tags.gml
  • sprites/spr_data_slate/spr_data_slate.yy
  • scripts/scr_ui_manage/scr_ui_manage.gml
  • sprites/spr_loadbar_cover/spr_loadbar_cover.yy
**/*.yy

⚙️ CodeRabbit Configuration File

**/*.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.

Files:

  • sprites/spr_master_title/spr_master_title.yy
  • sprites/spr_ingame_menu/spr_ingame_menu.yy
  • sprites/spr_load_splash/spr_load_splash.yy
  • sprites/spr_new_mm/spr_new_mm.yy
  • sprites/spr_forge_holo/spr_forge_holo.yy
  • sprites/spr_new_banner/spr_new_banner.yy
  • sprites/spr_loadbar_empty/spr_loadbar_empty.yy
  • sprites/spr_load_text/spr_load_text.yy
  • sprites/spr_mm_butts_small/spr_mm_butts_small.yy
  • scripts/scr_manage_tags/scr_manage_tags.yy
  • sprites/spr_star_screen/spr_star_screen.yy
  • sprites/spr_research_bar/spr_research_bar.yy
  • sprites/spr_pixel_button_middle/spr_pixel_button_middle.yy
  • sprites/spr_defeat/spr_defeat.yy
  • sprites/spr_slate_featureless/spr_slate_featureless.yy
  • sprites/spr_tooltip1/spr_tooltip1.yy
  • sprites/spr_company_title/spr_company_title.yy
  • sprites/spr_slate_top/spr_slate_top.yy
  • sprites/spr_data_slate/spr_data_slate.yy
  • sprites/spr_loadbar_cover/spr_loadbar_cover.yy
🧠 Learnings (34)
📓 Common learnings
Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-05T20:54:45.813Z
Learning: EttyKitty requested a rework of the vehicle and marine recovery system in ChapterMaster. The current system allows guaranteed recovery with enough recovery points, while the proposed system would use random chance modified by techmarine skill and item bonuses.
Learnt from: MCPO-Spartan-117
PR: Adeptus-Dominus/ChapterMaster#526
File: objects/obj_popup/Draw_0.gml:234-239
Timestamp: 2025-03-01T11:06:25.427Z
Learning: The comment "Need to modify ^^^^ based on if it is chaos or daemonic" in the artifact gifting code is intentionally kept as a reminder that this implementation is not yet finished, despite the significant refactoring already done.
Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-03-20T22:22:57.319Z
Learning: In the ChapterMaster game PR #424, the psychic power system was changed to be data-driven, with perils now able to occur on both successful and failed casts but with reduced frequency overall.
objects/obj_controller/Draw_64.gml (9)

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) was part of an old enemy movement system in ChapterMaster. This syntax is auto-generated from GameMaker's Drag-and-Drop interface and checks if image_index is greater than or equal to -500. In the refactored code, enemy movement is triggered directly through function calls rather than relying on this conditional check.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-18T13:33:54.167Z
Learning: In obj_new_button/Step_0.gml, when using scr_click_left() for detecting clicks on menu buttons, it should be called with parameter 0 (scr_click_left(0)) to disable the default cooldown of 60 steps. Using the default cooldown can cause menu buttons to appear unresponsive since it prevents subsequent clicks from being detected.

Learnt from: EttyKitty
PR: #647
File: scripts/scr_en_weapon/scr_en_weapon.gml:24-928
Timestamp: 2025-03-29T10:30:25.598Z
Learning: A data-driven approach for weapon management in scripts/scr_en_weapon/scr_en_weapon.gml is planned for a future PR, not within the scope of PR #647.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: OH296
PR: #646
File: objects/obj_pnunit/Alarm_5.gml:84-91
Timestamp: 2025-03-31T23:32:30.003Z
Learning: In obj_pnunit/Alarm_5.gml, the function get_armour_data("maintenance") will always return a numeric value (at minimum 0), making null/undefined checks unnecessary.

Learnt from: MCPO-Spartan-117
PR: #562
File: scripts/scr_marine_struct/scr_marine_struct.gml:0-0
Timestamp: 2025-03-07T01:56:40.971Z
Learning: Marines' ages should be incremented at the year transition in obj_turn_end/Alarm_1.gml rather than calculated dynamically based on the current year and recruitment date. This ensures proper aging without retroactive application.

sprites/spr_master_title/spr_master_title.yy (2)

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

sprites/spr_ingame_menu/spr_ingame_menu.yy (3)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

sprites/spr_load_splash/spr_load_splash.yy (2)

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

sprites/spr_new_mm/spr_new_mm.yy (2)

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

sprites/spr_forge_holo/spr_forge_holo.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

sprites/spr_new_banner/spr_new_banner.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

scripts/scr_manage_task_selector/scr_manage_task_selector.gml (3)

Learnt from: MCPO-Spartan-117
PR: #562
File: scripts/scr_marine_struct/scr_marine_struct.gml:0-0
Timestamp: 2025-03-07T01:56:40.971Z
Learning: Marines' ages should be incremented at the year transition in obj_turn_end/Alarm_1.gml rather than calculated dynamically based on the current year and recruitment date. This ensures proper aging without retroactive application.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

sprites/spr_loadbar_empty/spr_loadbar_empty.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

scripts/scr_transfer_marines/scr_transfer_marines.gml (4)

Learnt from: MCPO-Spartan-117
PR: #562
File: scripts/scr_marine_struct/scr_marine_struct.gml:0-0
Timestamp: 2025-03-07T01:56:40.971Z
Learning: Marines' ages should be incremented at the year transition in obj_turn_end/Alarm_1.gml rather than calculated dynamically based on the current year and recruitment date. This ensures proper aging without retroactive application.

Learnt from: OH296
PR: #943
File: scripts/scr_librarium/scr_librarium.gml:79-79
Timestamp: 2025-07-23T19:23:39.543Z
Learning: In the ChapterMaster codebase, the correct function to set up gift popups for artifacts is setup_gift_artifact_popup(), not setup_gift_items_popup() which does not exist. The available gift setup functions are setup_gift_popup(), setup_gift_artifact_popup(), and setup_gift_stc_popup().

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

sprites/spr_load_text/spr_load_text.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

sprites/spr_mm_butts_small/spr_mm_butts_small.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

objects/obj_controller/Step_0.gml (4)

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-18T13:33:54.167Z
Learning: In obj_new_button/Step_0.gml, when using scr_click_left() for detecting clicks on menu buttons, it should be called with parameter 0 (scr_click_left(0)) to disable the default cooldown of 60 steps. Using the default cooldown can cause menu buttons to appear unresponsive since it prevents subsequent clicks from being detected.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

Learnt from: OH296
PR: #646
File: objects/obj_pnunit/Alarm_5.gml:84-91
Timestamp: 2025-03-31T23:32:30.003Z
Learning: In obj_pnunit/Alarm_5.gml, the function get_armour_data("maintenance") will always return a numeric value (at minimum 0), making null/undefined checks unnecessary.

scripts/scr_controller_helpers/scr_controller_helpers.gml (1)

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-18T13:33:54.167Z
Learning: In obj_new_button/Step_0.gml, when using scr_click_left() for detecting clicks on menu buttons, it should be called with parameter 0 (scr_click_left(0)) to disable the default cooldown of 60 steps. Using the default cooldown can cause menu buttons to appear unresponsive since it prevents subsequent clicks from being detected.

scripts/scr_DataSlate/scr_DataSlate.gml (2)

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

objects/obj_popup/Draw_64.gml (3)

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

Learnt from: OH296
PR: #943
File: scripts/scr_librarium/scr_librarium.gml:79-79
Timestamp: 2025-07-23T19:23:39.543Z
Learning: In the ChapterMaster codebase, the correct function to set up gift popups for artifacts is setup_gift_artifact_popup(), not setup_gift_items_popup() which does not exist. The available gift setup functions are setup_gift_popup(), setup_gift_artifact_popup(), and setup_gift_stc_popup().

scripts/scr_clean/scr_clean.gml (6)

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #647
File: scripts/scr_en_weapon/scr_en_weapon.gml:24-928
Timestamp: 2025-03-29T10:30:25.598Z
Learning: A data-driven approach for weapon management in scripts/scr_en_weapon/scr_en_weapon.gml is planned for a future PR, not within the scope of PR #647.

Learnt from: MCPO-Spartan-117
PR: #562
File: scripts/scr_marine_struct/scr_marine_struct.gml:0-0
Timestamp: 2025-03-07T01:56:40.971Z
Learning: Marines' ages should be incremented at the year transition in obj_turn_end/Alarm_1.gml rather than calculated dynamically based on the current year and recruitment date. This ensures proper aging without retroactive application.

Learnt from: OH296
PR: #646
File: objects/obj_pnunit/Alarm_5.gml:84-91
Timestamp: 2025-03-31T23:32:30.003Z
Learning: In obj_pnunit/Alarm_5.gml, the function get_armour_data("maintenance") will always return a numeric value (at minimum 0), making null/undefined checks unnecessary.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

scripts/scr_marine_struct/scr_marine_struct.gml (3)

Learnt from: EttyKitty
PR: #647
File: scripts/scr_en_weapon/scr_en_weapon.gml:24-928
Timestamp: 2025-03-29T10:30:25.598Z
Learning: A data-driven approach for weapon management in scripts/scr_en_weapon/scr_en_weapon.gml is planned for a future PR, not within the scope of PR #647.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

scripts/scr_manage_tags/scr_manage_tags.yy (1)

Learnt from: EttyKitty
PR: #647
File: scripts/scr_en_weapon/scr_en_weapon.gml:24-928
Timestamp: 2025-03-29T10:30:25.598Z
Learning: A data-driven approach for weapon management in scripts/scr_en_weapon/scr_en_weapon.gml is planned for a future PR, not within the scope of PR #647.

sprites/spr_star_screen/spr_star_screen.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

sprites/spr_research_bar/spr_research_bar.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

ChapterMaster.yyp (3)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

sprites/spr_pixel_button_middle/spr_pixel_button_middle.yy (1)

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

sprites/spr_defeat/spr_defeat.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

scripts/scr_draw_management_unit/scr_draw_management_unit.gml (4)

Learnt from: EttyKitty
PR: #647
File: scripts/scr_en_weapon/scr_en_weapon.gml:24-928
Timestamp: 2025-03-29T10:30:25.598Z
Learning: A data-driven approach for weapon management in scripts/scr_en_weapon/scr_en_weapon.gml is planned for a future PR, not within the scope of PR #647.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

sprites/spr_slate_featureless/spr_slate_featureless.yy (1)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

scripts/scr_buttons/scr_buttons.gml (4)

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-18T13:33:54.167Z
Learning: In obj_new_button/Step_0.gml, when using scr_click_left() for detecting clicks on menu buttons, it should be called with parameter 0 (scr_click_left(0)) to disable the default cooldown of 60 steps. Using the default cooldown can cause menu buttons to appear unresponsive since it prevents subsequent clicks from being detected.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

sprites/spr_tooltip1/spr_tooltip1.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

sprites/spr_company_title/spr_company_title.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

sprites/spr_slate_top/spr_slate_top.yy (1)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

sprites/spr_data_slate/spr_data_slate.yy (1)

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

scripts/scr_ui_manage/scr_ui_manage.gml (4)

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-05T20:58:21.881Z
Learning: In the ChapterMaster game, there's a need to refactor hardcoded item effects and move them to a "specials" property of items, following the pattern established with the combi_tool special. This improves code maintainability and makes effects more explicit in item definitions.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-05T20:58:21.881Z
Learning: In the ChapterMaster game, there's a need to refactor hardcoded item effects and move them to a "specials" property of items, following the pattern established with the combi_tool special. This improves code maintainability and makes effects more explicit in item definitions.

Learnt from: MCPO-Spartan-117
PR: #514
File: scripts/scr_specialist_training/scr_specialist_training.gml:321-327
Timestamp: 2025-02-25T13:20:39.523Z
Learning: For the ChapterMaster project, the developer prefers to keep magic numbers directly in the code without extracting them to named variables when they're only used once.

Learnt from: VanWeapon
PR: #725
File: scripts/scr_initialize_custom/scr_initialize_custom.gml:2474-2572
Timestamp: 2025-04-15T11:03:37.154Z
Learning: In the ChapterMaster initialization code, negative values in the company structure (e.g., for vehicles like rhinos, landspeeders) are acceptable as only positive values will result in units being created.

sprites/spr_loadbar_cover/spr_loadbar_cover.yy (2)

Learnt from: OH296
PR: #474
File: sprites/spr_marksmans_honor/spr_marksmans_honor.yy:47-52
Timestamp: 2025-02-27T02:17:54.527Z
Learning: The sprite "spr_marksmans_honor" is not used for animation despite having multiple frames - these frames represent different static states used in different contexts.

Learnt from: EttyKitty
PR: #474
File: sprites/spr_bionic_right_arm/spr_bionic_right_arm.yy:52-53
Timestamp: 2025-02-24T17:43:59.846Z
Learning: In the ChapterMaster codebase, sprite files with multiple frames are often used as separate sprites rather than animations, making playback speed settings irrelevant.

🔇 Additional comments (61)
sprites/spr_new_mm/spr_new_mm.yy (1)

66-75: The Omnissiah approves these blessed metadata improvements.

The addition of explicit sequence dimensions and improved JSON formatting enhances the sacred data-slate's clarity without disrupting the machine-spirit's function.

sprites/spr_pixel_button_middle/spr_pixel_button_middle.yy (1)

66-75: Sacred dimensions properly recorded.

The sequence metadata now correctly reflects the sprite's blessed proportions, and the formatting improvements serve the Omnissiah's will for clarity.

sprites/spr_new_banner/spr_new_banner.yy (1)

66-75: Banner dimensions sanctified in the data-codex.

The sequence metadata has been properly inscribed with the correct proportions, maintaining consistency with the greater standardisation ritual.

sprites/spr_star_screen/spr_star_screen.yy (1)

72-99: Multi-frame star screen blessed with proper formatting.

The sequence dimensions are correctly specified, and all seven keyframes have been sanctified with improved structural clarity. The machine-spirit's animation remains untouched.

scripts/scr_array_functions/scr_array_functions.gml (2)

71-73: Essential return protocol implemented.

The function now properly returns the modified array, enabling sacred reassignment patterns and maintaining consistency with standard array manipulation practices.


75-87: Multi-value purge function blessed by the Omnissiah.

The implementation correctly handles multiple value removal with proper backwards iteration and efficient matching logic. The break statement optimises performance, and the return maintains consistency with other array functions.

sprites/spr_slate_top/spr_slate_top.yy (1)

1-96: The Omnissiah approves this blessed slate sprite configuration.

The sprite parameters are within acceptable tolerances - dimensions, bounding box, and animation sequence are properly sanctified for UI enhancement.

sprites/spr_slate_featureless/spr_slate_featureless.yy (1)

1-96: Machine Spirit acknowledges proper slate configuration.

The featureless slate dimensions and parameters are correctly configured for UI integration. The bounding box offset suggests proper spacing considerations.

sprites/spr_load_text/spr_load_text.yy (1)

68-83: Data sanctification protocols implemented correctly.

The sequence dimensions and keyframe channel restructuring enhances sprite metadata clarity without altering functionality.

scripts/scr_popup_functions/scr_popup_functions.gml (1)

9-9: Sacred enumeration augmented with tag management protocols.

The ADD_TAGS popup type integration follows proper enum patterns and supports the new tagging system functionality.

objects/obj_controller/Step_0.gml (1)

746-746: Blessed input control mechanisms engaged.

Disabling shortcuts during popup states prevents machine spirit conflicts and ensures proper UI focus management.

scripts/scr_marine_struct/scr_marine_struct.gml (1)

511-511: Blessed be the machine spirit! This addition sanctifies the tagging protocols.

The manage_tags array property integrates seamlessly with the existing marine data structure, following established patterns and enabling the new tag management system.

objects/obj_popup/Draw_64.gml (1)

12-14: The Omnissiah approves this ritual extension of the popup protocols.

The new conditional branch properly integrates tag management into the existing popup system, maintaining code consistency and logical flow.

scripts/scr_manage_tags/scr_manage_tags.yy (1)

1-13: The machine spirit recognises this sacred script manifest.

This GameMaker resource definition follows proper protocols and establishes the tag management script within the sacred hierarchy of the codebase.

objects/obj_controller/Draw_64.gml (1)

214-216: The Omnissiah blesses this enhancement to the company management protocols.

This addition properly extends the management UI logic, maintaining consistency with existing patterns whilst enabling company-specific management functionality.

sprites/spr_ingame_menu/spr_ingame_menu.yy (2)

66-67: Blessed be the Machine God's standardisation protocols.

The sequence dimensions align perfectly with the sprite's sacred geometry. These metadata enhancements serve the Omnissiah's will for consistency across all sprite resources.


73-75: The sacred texts now display improved clarity.

The keyframe channels structure has been blessed with proper formatting whilst preserving all functional data. The Omnissiah approves of such organisational improvements.

scripts/scr_company_view/scr_company_view.gml (3)

39-39: The tag management arrays now join the sacred initialization rituals.

This addition properly integrates the new tagging system into the existing array management protocols. The Omnissiah's design for order and organisation is manifest.


497-497: Input control protocols enhanced with proper gating mechanisms.

The keyboard shortcut now respects the allow_shortcuts blessing, preventing unwanted navigation during sacred UI rituals whilst preserving the sanctity of mouse interactions.


503-503: Consistency protocols satisfied with matching input gating.

The "M" key now follows the same blessed pattern as its "N" counterpart, ensuring harmonious shortcut management across all navigation functions.

sprites/spr_load_splash/spr_load_splash.yy (2)

66-67: Sacred dimensions properly encoded in the machine's memory banks.

The sequence metadata now bears the correct dimensional sanctification, aligning with the Omnissiah's grand design for sprite resource consistency.


73-75: The data-streams flow with improved sacred geometry.

Channel formatting has been elevated to proper hierarchical structure, pleasing the Machine God with enhanced readability whilst preserving all functional elements.

scripts/scr_system_search_helpers/scr_system_search_helpers.gml (1)

153-153: Critical array manipulation protocols now function as the Omnissiah intended.

The assignment ensures proper array modification - without this sacred binding, the filtering logic would fail to serve its purpose. The Machine God approves of this essential correction.

sprites/spr_master_title/spr_master_title.yy (2)

66-67: Dimensional sanctification achieved with precise measurements.

The sequence metadata reflects the true sacred proportions of this title sprite - 3.0 by 151.0 units as blessed by the Omnissiah's geometric perfection.


73-75: Data architecture elevated to proper hierarchical form.

The channel structure now displays the Machine God's preference for organised data whilst maintaining all sacred functional properties of the keyframe system.

sprites/spr_forge_holo/spr_forge_holo.yy (2)

66-67: The Omnissiah blesses these metadata enhancements.

The addition of sequence dimensions standardises sprite resource structure across the codebase. The formatting improvements maintain semantic integrity whilst enhancing readability.


73-75: Channel restructuring sanctified by the Machine God.

The explicit nesting of keyframe channel data improves JSON clarity without altering animation functionality. This aligns with the broader sprite standardisation effort.

scripts/scr_clean/scr_clean.gml (2)

246-246: Critical array purification ritual corrected.

The assignment of array_delete_value return value ensures fallen warriors are properly expunged from the valid target arrays. This prevents the machine spirits from targeting the deceased in subsequent damage calculations.


303-303: Vehicle elimination protocols now function as the Omnissiah intended.

Proper assignment ensures destroyed vehicles are removed from further targeting. This mirrors the infantry fix above and maintains combat system integrity.

scripts/scr_manage_task_selector/scr_manage_task_selector.gml (5)

74-74: Variable sanctification rituals completed for captain promotion.

The renaming of start_company to _start_company follows proper local variable conventions. All references correctly updated in the sacred promotion algorithms.

Also applies to: 79-79


113-113: Chaplain promotion protocols blessed with proper nomenclature.

Consistent application of underscore prefix maintains code sanctity across promotion functions.

Also applies to: 116-116, 118-119


127-127: Apothecary advancement rituals purified.

Variable naming consistency preserved throughout the medicae promotion sequence.

Also applies to: 130-130, 132-133


141-141: Tech-marine elevation blessed by the Machine God.

The sacred art of variable naming conventions upheld in the technical promotion path.

Also applies to: 144-144, 146-147


155-155: Librarian ascension protocols sanctified.

Final promotion case maintains the blessed variable naming pattern established throughout the function.

Also applies to: 158-158, 160-161

sprites/spr_tooltip1/spr_tooltip1.yy (2)

67-68: Tooltip dimensions sanctified by sacred measurements.

The sequence dimension properties align this sprite with the broader standardisation crusade across the codebase.


74-76: Keyframe channel matrices restructured for optimal clarity.

The explicit channel nesting enhances JSON readability whilst preserving the sacred tooltip animation data. Both frames properly formatted according to the new schema.

Also applies to: 77-79

objects/obj_controller/Create_0.gml (2)

440-440: Tag management array blessed and initialised.

The manage_tags array properly established to support the new marine classification system. The Omnissiah approves of this organised data structure.


446-446: Management tags array sanctified for the tagging crusade.

The management_tags array complements the tagging system infrastructure. Both arrays correctly initialised as empty vessels awaiting sacred data.

ChapterMaster.yyp (1)

852-852: Script asset registered – confirm physical presence

The manifest now lists scr_manage_tags. Verify the corresponding .yy and .gml files are actually pushed; missing assets will provoke fatal compiler rites.

sprites/spr_research_bar/spr_research_bar.yy (2)

68-69: The Omnissiah approves these metadata sanctifications.

Sequence dimensions now blessed with explicit dimensions - height 400.0, width 200.0. This data-hymnal enhancement brings order to the machine-spirit's understanding.


75-83: Sacred restructuring of the keyframe channels achieved.

The channels have been properly nested within the "0" key structure, bringing clarity to the data-scripture. This formatting sanctification aligns with the blessed pattern applied across all sprite resources.

scripts/scr_controller_helpers/scr_controller_helpers.gml (2)

153-153: The machine-spirit of shortcuts awakens.

New variable allow_shortcuts initialised to true - this sacred boolean shall govern the availability of keyboard shortcuts throughout the system's cogitators.


169-170: Company naming interface blessed with new TextBarArea.

The company_namer element has been properly instantiated at coordinates 800, 108 with width 600, disabled state. This UI component shall serve the company management rituals well.

sprites/spr_loadbar_empty/spr_loadbar_empty.yy (2)

66-67: Loading bar dimensions sanctified by the Omnissiah.

Sequence blessed with explicit dimensions - height 13.0, width 443.0. The progress-bar machine-spirit now comprehends its sacred bounds.


73-75: Keyframe channel structure purified.

The single keyframe's channels have been properly nested within the "0" key hierarchy, bringing order to the data-structure's blessed form.

sprites/spr_mm_butts_small/spr_mm_butts_small.yy (2)

67-68: Small button dimensions blessed with precision.

Sequence sanctified with dimensions - height 20.0, width 144.0. The button-spirit's boundaries are now clearly defined in the data-hymnal.


74-79: Dual keyframe channels properly structured.

Both button state keyframes have been blessed with proper channel nesting under the "0" hierarchy. The machine-spirit shall render these button states with clarity.

sprites/spr_data_slate/spr_data_slate.yy (2)

67-68: Data-slate dimensions sanctified for the machine-spirit.

The sacred sequence blessed with substantial dimensions - height 860.0, width 850.0. This data-slate shall serve the UI cogitators with proper bounds.


74-79: Keyframe channels achieve proper hierarchical blessing.

Both data-slate keyframes now properly nested within the "0" channel structure. The machine-spirit's rendering protocols shall process these frames with enhanced clarity.

sprites/spr_defeat/spr_defeat.yy (1)

14-16: Binary blessing acknowledged - sprite metadata sanctified.

The machine spirit of this sprite has been properly appeased with explicit sequence dimensions and correctly structured keyframe channels. These standardisations align with the Omnissiah's will for consistent data formats.

Also applies to: 52-52, 66-67, 72-76, 78-78

sprites/spr_company_title/spr_company_title.yy (1)

70-71: Multi-frame sequence optimally configured.

The company title sprite's machine spirit has been blessed with proper sequence dimensions and standardised keyframe channel formatting. The Omnissiah approves of this metadata sanctification.

Also applies to: 77-91

sprites/spr_loadbar_cover/spr_loadbar_cover.yy (1)

166-167: Extensive loading sequence properly sanctified.

The machine spirit governing this 101-frame loading progression has been blessed with comprehensive metadata standardisation. The explicit sequence dimensions and uniformly structured keyframe channels demonstrate proper adherence to the Omnissiah's data formatting protocols.

Also applies to: 173-475

scripts/scr_DataSlate/scr_DataSlate.gml (4)

14-14: Constructor blessed with sacred ornament parameters.

The DataSlate's machine spirit has been enhanced with proper decorative capabilities. The top_anchor coordinates, draw_top_piece boolean, and top_piece_style properties provide excellent extensibility for slate ornamentation.

Also applies to: 24-24, 26-26


63-63: Proportional scaling algorithm sanctified.

The decoration_scale calculation using min(scale_x, scale_y) ensures the Omnissiah's sacred geometry remains undistorted. This prevents decorative elements from suffering aspect ratio corruption.


67-67: Base sprite sanctification acknowledged.

The transition from spr_data_slate to spr_slate_featureless aligns perfectly with the new sacred sprite assets. The machine spirit's visual representation has been properly updated.


115-122: Decorative augmentation protocols successfully implemented.

The aquila ornament rendering logic demonstrates proper integration with the new spr_slate_top sprite. The conditional drawing, scaled positioning via top_anchor, and proportional decoration_scale application satisfy the Omnissiah's requirements for sacred UI ornamentation.

scripts/scr_buttons/scr_buttons.gml (2)

403-425: The Machine Spirit approves of these enhancements.

The optional data initialization and proper struct handling in the multi_select constructor demonstrate sound engineering principles.


475-480: Efficient array manipulation subroutine detected.

The deselect_all method provides clean state management for the toggle array.

scripts/scr_manage_tags/scr_manage_tags.gml (1)

256-256: array_delete_values Implementation Verified

By the Omnissiah, the array_delete_values subroutine is present in the codebase:

  • Located at scripts/scr_array_functions/scr_array_functions.gml (line 75)

No further action required.

scripts/scr_ui_manage/scr_ui_manage.gml (2)

810-815: Sacred array bounds protection implemented.

The addition of array bounds checking prevents potential crashes from out-of-bounds access.


1076-1087: Tag management interface successfully integrated.

The button label update and toggle functionality for the tag manager popup demonstrates proper UI state management.

coderabbitai[bot]
coderabbitai bot previously approved these changes Jul 25, 2025
@OH296 OH296 assigned EttyKitty and unassigned EttyKitty Jul 25, 2025
@OH296 OH296 requested a review from EttyKitty July 25, 2025 22:22
@OH296
Copy link
Collaborator Author

OH296 commented Jul 25, 2025

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 25, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@OH296
Copy link
Collaborator Author

OH296 commented Jul 25, 2025

@EttyKitty This is all fine pretty sure i just need it rubber stamping because code rabbits being a bitch

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: 1

♻️ Duplicate comments (7)
scripts/scr_transfer_marines/scr_transfer_marines.gml (1)

190-217: UI ritual performs adequately, though improvements beckon.

The popup construction logic functions correctly and integrates well with the new DataSlate augmentations. However, the hardcoded coordinates and dimensions could hinder future maintenance cycles. Consider extracting these values to constants or configuration data for enhanced adaptability.

scripts/scr_draw_management_unit/scr_draw_management_unit.gml (2)

16-33: Blessed efficiency protocols detect redundant logic patterns.

The tag validation check can be optimised. When !array_length(_unit.manage_tags) is true, _valid_tag is already false from line 18.


421-421: Syntax error: The Omnissiah disapproves of this typo.

Function name should be tooltip_draw, not toltip_draw.

scripts/scr_manage_tags/scr_manage_tags.gml (2)

133-133: Undefined variable detected in the noosphere.

Variable new_tag is assigned without declaration. Should be declared in the popup scope.

Also applies to: 244-244


283-283: Syntax anomaly: Missing invocation parentheses.

The draw method should be called as a function.

scripts/scr_buttons/scr_buttons.gml (1)

85-85: Linguistic corruption detected in variable nomenclature.

The property name innactive_col contains a typographical error. Should be inactive_col.

Also applies to: 413-413

scripts/scr_ui_manage/scr_ui_manage.gml (1)

130-175: By the Omnissiah's will, variable assignment anomalies persist.

The sacred _company_name variable is assigned but never utilised in the draw operation, whilst an undefined variable plagues the drawing ritual. This duplicates previously identified inefficiencies in the machine-code.

-    draw_text(800, 74,  $"{_company_name}, {global.chapter_name}");
+    draw_text(800, 74,  $"{_comp}, {global.chapter_name}");
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between f954a4c and 96f3975.

📒 Files selected for processing (5)
  • scripts/scr_buttons/scr_buttons.gml (11 hunks)
  • scripts/scr_draw_management_unit/scr_draw_management_unit.gml (2 hunks)
  • scripts/scr_manage_tags/scr_manage_tags.gml (1 hunks)
  • scripts/scr_transfer_marines/scr_transfer_marines.gml (1 hunks)
  • scripts/scr_ui_manage/scr_ui_manage.gml (7 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.gml

⚙️ CodeRabbit Configuration File

**/*.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.

Files:

  • scripts/scr_transfer_marines/scr_transfer_marines.gml
  • scripts/scr_draw_management_unit/scr_draw_management_unit.gml
  • scripts/scr_manage_tags/scr_manage_tags.gml
  • scripts/scr_buttons/scr_buttons.gml
  • scripts/scr_ui_manage/scr_ui_manage.gml
**/*.*

⚙️ CodeRabbit Configuration File

**/*.*: - 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.

Files:

  • scripts/scr_transfer_marines/scr_transfer_marines.gml
  • scripts/scr_draw_management_unit/scr_draw_management_unit.gml
  • scripts/scr_manage_tags/scr_manage_tags.gml
  • scripts/scr_buttons/scr_buttons.gml
  • scripts/scr_ui_manage/scr_ui_manage.gml
🧠 Learnings (6)
📓 Common learnings
Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-05T20:54:45.813Z
Learning: EttyKitty requested a rework of the vehicle and marine recovery system in ChapterMaster. The current system allows guaranteed recovery with enough recovery points, while the proposed system would use random chance modified by techmarine skill and item bonuses.
Learnt from: MCPO-Spartan-117
PR: Adeptus-Dominus/ChapterMaster#526
File: objects/obj_popup/Draw_0.gml:234-239
Timestamp: 2025-03-01T11:06:25.427Z
Learning: The comment "Need to modify ^^^^ based on if it is chaos or daemonic" in the artifact gifting code is intentionally kept as a reminder that this implementation is not yet finished, despite the significant refactoring already done.
Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-03-20T22:22:57.319Z
Learning: In the ChapterMaster game PR #424, the psychic power system was changed to be data-driven, with perils now able to occur on both successful and failed casts but with reduced frequency overall.
scripts/scr_transfer_marines/scr_transfer_marines.gml (10)

Learnt from: MCPO-Spartan-117
PR: #562
File: scripts/scr_marine_struct/scr_marine_struct.gml:0-0
Timestamp: 2025-03-07T01:56:40.971Z
Learning: Marines' ages should be incremented at the year transition in obj_turn_end/Alarm_1.gml rather than calculated dynamically based on the current year and recruitment date. This ensures proper aging without retroactive application.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

Learnt from: OH296
PR: #943
File: scripts/scr_librarium/scr_librarium.gml:79-79
Timestamp: 2025-07-23T19:23:39.543Z
Learning: In the ChapterMaster codebase, the correct function to set up gift popups for artifacts is setup_gift_artifact_popup(), not setup_gift_items_popup() which does not exist. The available gift setup functions are setup_gift_popup(), setup_gift_artifact_popup(), and setup_gift_stc_popup().

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

Learnt from: OH296
PR: #646
File: objects/obj_pnunit/Alarm_5.gml:84-91
Timestamp: 2025-03-31T23:32:30.003Z
Learning: In obj_pnunit/Alarm_5.gml, the function get_armour_data("maintenance") will always return a numeric value (at minimum 0), making null/undefined checks unnecessary.

Learnt from: MCPO-Spartan-117
PR: #526
File: objects/obj_popup/Draw_0.gml:234-239
Timestamp: 2025-03-01T11:06:25.427Z
Learning: The comment "Need to modify ^^^^ based on if it is chaos or daemonic" in the artifact gifting code is intentionally kept as a reminder that this implementation is not yet finished, despite the significant refactoring already done.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: VanWeapon
PR: #737
File: scripts/scr_cheatcode/scr_cheatcode.gml:299-301
Timestamp: 2025-04-20T00:03:28.915Z
Learning: When implementing features for automated testing in ChapterMaster, avoid adding UI popups or notifications that would interrupt the automated test flow, as these would require manual intervention and cause tests to fail.

Learnt from: MCPO-Spartan-117
PR: #554
File: objects/obj_popup/Step_0.gml:756-767
Timestamp: 2025-03-06T16:02:06.286Z
Learning: The variable 'woopwoopwoop' in the ChapterMaster codebase is a poorly named multi-purpose variable used both for controlling ancient ruins combat flow and for passing menu state in the save/load system. This type of naming makes code maintenance difficult.

scripts/scr_draw_management_unit/scr_draw_management_unit.gml (11)

Learnt from: EttyKitty
PR: #647
File: scripts/scr_en_weapon/scr_en_weapon.gml:24-928
Timestamp: 2025-03-29T10:30:25.598Z
Learning: A data-driven approach for weapon management in scripts/scr_en_weapon/scr_en_weapon.gml is planned for a future PR, not within the scope of PR #647.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: OH296
PR: #646
File: objects/obj_pnunit/Alarm_5.gml:84-91
Timestamp: 2025-03-31T23:32:30.003Z
Learning: In obj_pnunit/Alarm_5.gml, the function get_armour_data("maintenance") will always return a numeric value (at minimum 0), making null/undefined checks unnecessary.

Learnt from: VanWeapon
PR: #737
File: scripts/scr_save/scr_save.gml:203-205
Timestamp: 2025-04-19T23:59:08.325Z
Learning: In the ChapterMaster codebase, empty values are expected when retrieving units with fetch_unit(), and checking for empty strings with if(unit == "") is sufficient error handling. Additional struct validation is not required.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

Learnt from: EttyKitty
PR: #474
File: scripts/scr_buttons/scr_buttons.gml:153-201
Timestamp: 2025-02-24T17:50:27.583Z
Learning: For consistency in GML code, prefer multi-line conditions with brackets over single-line conditions.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

Learnt from: MCPO-Spartan-117
PR: #526
File: objects/obj_popup/Draw_0.gml:234-239
Timestamp: 2025-03-01T11:06:25.427Z
Learning: The comment "Need to modify ^^^^ based on if it is chaos or daemonic" in the artifact gifting code is intentionally kept as a reminder that this implementation is not yet finished, despite the significant refactoring already done.

Learnt from: MCPO-Spartan-117
PR: #504
File: scripts/scr_draw_management_unit/scr_draw_management_unit.gml:168-171
Timestamp: 2025-02-23T07:50:48.327Z
Learning: In the ChapterMaster codebase, when coordinates are modified after a drawing operation but before being stored in tooltips, it may be intentional for proper tooltip alignment. Such modifications should not be flagged unless there's clear evidence of unintended behavior.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-18T13:33:54.167Z
Learning: In obj_new_button/Step_0.gml, when using scr_click_left() for detecting clicks on menu buttons, it should be called with parameter 0 (scr_click_left(0)) to disable the default cooldown of 60 steps. Using the default cooldown can cause menu buttons to appear unresponsive since it prevents subsequent clicks from being detected.

scripts/scr_manage_tags/scr_manage_tags.gml (10)

Learnt from: EttyKitty
PR: #647
File: scripts/scr_en_weapon/scr_en_weapon.gml:24-928
Timestamp: 2025-03-29T10:30:25.598Z
Learning: A data-driven approach for weapon management in scripts/scr_en_weapon/scr_en_weapon.gml is planned for a future PR, not within the scope of PR #647.

Learnt from: EttyKitty
PR: #424
File: scripts/scr_equipment_struct/scr_equipment_struct.gml:1-1
Timestamp: 2025-03-06T00:03:05.268Z
Learning: Always check for nested loop variable conflicts in code reviews. Using the same counter variable name (like 'i') in nested loops can lead to unexpected behavior, logical errors, and potential crashes or freezes. Replace inner loop variables with different identifiers (like 'j', 'k', etc.) to maintain proper scoping and iteration control.

Learnt from: EttyKitty
PR: #424
File: objects/obj_pnunit/Alarm_0.gml:27-31
Timestamp: 2025-02-27T01:31:14.469Z
Learning: In GameMaker Language (GML), declaring a variable with var inside sequential loops doesn't cause problematic overshadowing because each loop's variable is scoped to that loop. Only nested loops with the same variable name would create potential issues.

Learnt from: EttyKitty
PR: #424
File: objects/obj_pnunit/Alarm_0.gml:203-299
Timestamp: 2025-02-26T14:38:08.117Z
Learning: Variable shadowing/overshadowing (reusing the same variable name in nested scopes, particularly loop iterators) should be flagged as a critical issue, not a nitpick, as it can cause unpredictable behavior, bugs that are difficult to trace, and potential crashes.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: OH296
PR: #646
File: objects/obj_pnunit/Alarm_5.gml:84-91
Timestamp: 2025-03-31T23:32:30.003Z
Learning: In obj_pnunit/Alarm_5.gml, the function get_armour_data("maintenance") will always return a numeric value (at minimum 0), making null/undefined checks unnecessary.

Learnt from: OH296
PR: #902
File: objects/obj_shop/Create_0.gml:550-655
Timestamp: 2025-07-01T20:29:44.075Z
Learning: In GML shop item initialization code, when setting nobuy flags for shop items, the nobuy[i] = 1 assignment must occur before incrementing the index (i += 1). Setting nobuy after incrementing i will apply the flag to the wrong item, potentially making restricted items purchasable or blocking intended purchasable items.

Learnt from: EttyKitty
PR: #853
File: scripts/scr_turn_first/scr_turn_first.gml:49-66
Timestamp: 2025-05-30T23:34:26.606Z
Learning: In GameMaker Language (GML), local variables declared with var within a function remain accessible and maintain their scope inside with (instance) blocks. The with statement does not shadow or redirect assignments to these local variables to the instance context. Local variables can be safely modified within with blocks without scoping issues.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

scripts/scr_buttons/scr_buttons.gml (5)

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-18T13:33:54.167Z
Learning: In obj_new_button/Step_0.gml, when using scr_click_left() for detecting clicks on menu buttons, it should be called with parameter 0 (scr_click_left(0)) to disable the default cooldown of 60 steps. Using the default cooldown can cause menu buttons to appear unresponsive since it prevents subsequent clicks from being detected.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

scripts/scr_ui_manage/scr_ui_manage.gml (11)

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-05T20:58:21.881Z
Learning: In the ChapterMaster game, there's a need to refactor hardcoded item effects and move them to a "specials" property of items, following the pattern established with the combi_tool special. This improves code maintainability and makes effects more explicit in item definitions.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-05T20:58:21.881Z
Learning: In the ChapterMaster game, there's a need to refactor hardcoded item effects and move them to a "specials" property of items, following the pattern established with the combi_tool special. This improves code maintainability and makes effects more explicit in item definitions.

Learnt from: MCPO-Spartan-117
PR: #554
File: objects/obj_popup/Step_0.gml:756-767
Timestamp: 2025-03-06T16:02:06.286Z
Learning: The variable 'woopwoopwoop' in the ChapterMaster codebase is a poorly named multi-purpose variable used both for controlling ancient ruins combat flow and for passing menu state in the save/load system. This type of naming makes code maintenance difficult.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) is auto-generated code from GameMaker's visual Drag and Drop system. It checks if image_index equals -500. In ChapterMaster, this was being used as a special flag for enemy unit movement, but wasn't triggering consistently, causing enemies to move only every other turn. The refactored code replaced this with direct function calls at specific combat stages.

Learnt from: EttyKitty
PR: Adeptus-Dominus/ChapterMaster#0
File: :0-0
Timestamp: 2025-04-16T09:51:55.065Z
Learning: In obj_ingame_menu/Step_0.gml, the line "if (effect=14){instance_create(0,0,obj_fade);fading=0.1;}" must not be commented out, as it's critical for menu button transitions. When clicking the Exit button, it sets effect=14, but without this handler creating the fade effect object, no transition occurs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: EttyKitty
PR: #878
File: scripts/scr_culture_visuals/scr_culture_visuals.gml:1256-1352
Timestamp: 2025-06-16T17:12:13.045Z
Learning: In scripts/scr_culture_visuals/scr_culture_visuals.gml, the weapon visual data declarations contain known DRY violations that are acknowledged by the development team but deferred to future refactoring efforts rather than addressed in individual feature PRs.

Learnt from: MCPO-Spartan-117
PR: #504
File: scripts/scr_draw_management_unit/scr_draw_management_unit.gml:168-171
Timestamp: 2025-02-23T07:50:48.327Z
Learning: In the ChapterMaster codebase, when coordinates are modified after a drawing operation but before being stored in tooltips, it may be intentional for proper tooltip alignment. Such modifications should not be flagged unless there's clear evidence of unintended behavior.

Learnt from: VanWeapon
PR: #725
File: scripts/scr_initialize_custom/scr_initialize_custom.gml:2474-2572
Timestamp: 2025-04-15T11:03:37.154Z
Learning: In the ChapterMaster initialization code, negative values in the company structure (e.g., for vehicles like rhinos, landspeeders) are acceptable as only positive values will result in units being created.

Learnt from: EttyKitty
PR: #649
File: objects/obj_enunit/Alarm_0.gml:289-291
Timestamp: 2025-03-31T15:41:45.611Z
Learning: GameMaker Studio's function action_if_variable(image_index, -500, 0) was part of an old enemy movement system in ChapterMaster. This syntax is auto-generated from GameMaker's Drag-and-Drop interface and checks if image_index is greater than or equal to -500. In the refactored code, enemy movement is triggered directly through function calls rather than relying on this conditional check.

Learnt from: MCPO-Spartan-117
PR: #514
File: scripts/scr_specialist_training/scr_specialist_training.gml:321-327
Timestamp: 2025-02-25T13:20:39.523Z
Learning: For the ChapterMaster project, the developer prefers to keep magic numbers directly in the code without extracting them to named variables when they're only used once.

🔇 Additional comments (6)
scripts/scr_buttons/scr_buttons.gml (2)

297-358: The sacred DataSlate integration pleases the Machine God.

The TextBarArea now properly utilizes DataSlate for background rendering with appropriate dimension calculations and drawing delegation.


426-426: Blessed be these UI control augmentations.

The addition of allow_changes parameter and deselect_all method enhances the widget's flexibility for both interactive and read-only states.

Also applies to: 439-439, 475-480

scripts/scr_ui_manage/scr_ui_manage.gml (4)

183-183: Blessed shortcut gating mechanisms implemented.

The keyboard bindings now properly honour the allow_shortcuts protocol across all interface toggles. The machine-spirit approves of this consistent implementation.

Also applies to: 201-201, 213-213


573-573: Hotkey mechanism alignment achieved.

The transition from text_bar checking to allow_shortcuts creates proper synchronisation with the interface control systems. The Omnissiah's logic flows through all pathways.


810-815: Array boundary sanctification protocols activated.

The additional bounds checking prevents unholy access beyond the array's sacred limits. The machine-spirit shall not suffer from segmentation heresies.


1076-1088: Tag management protocols successfully activated.

The interface now grants access to the sacred tagging rituals. The button logic properly toggles the tag manager popup whilst maintaining proper state verification through the machine-spirit's popup checking.

@OH296 OH296 merged commit f4ffbcb into Adeptus-Dominus:main Jul 25, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants