Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] They did surgery on a monkey #927

Merged
merged 5 commits into from
Nov 23, 2024
Merged

[Feature] They did surgery on a monkey #927

merged 5 commits into from
Nov 23, 2024

Conversation

Roudenn
Copy link
Collaborator

@Roudenn Roudenn commented Nov 21, 2024

Большое обновление для всех приматов, которое делает из них фактически 2 новые играбельные расы.
Big update for all genetic ancestors, wich remakes them as 2 new playable species. (not roundstart)

Текущие проблемы связаны с рандомизацией визуала, но мне слишком лень разбираться в глубинной работе систем ради этого. Поэтому пока что все кобольды будут серыми с обычными рогами

🆑 Rouden

  • tweak: Теперь обезьяны и кобольды обладают полноценными частями тела, и могут получать по ним урон.
  • tweak: Теперь обезьяны и кобольды могут носить рюкзаки, очки, перчатки, и имеют карманы!

Summary by CodeRabbit

Release Notes

  • New Features

    • Added Russian localization for species names: "Monkey" (Обезьяна) and "Kobold" (Кобольд).
    • Introduced new body parts and organs for "Monkey" and "Kobold" characters, enhancing gameplay and character customization.
    • Expanded inventory slots for "Monkey" with additional wearable options.
  • Improvements

    • Updated visual representations and states for "Monkey" and "Kobold" textures.
    • Enhanced species marking options and added animated markings for reptilian entities.
  • Bug Fixes

    • Adjusted species restrictions for humanoid settings to improve character generation control.

@Roudenn Roudenn requested a review from Rxup as a code owner November 21, 2024 16:37
Copy link
Contributor

coderabbitai bot commented Nov 21, 2024

Walkthrough

The changes in this pull request include the addition of new entities and localization entries for monkey and kobold characters in a game. New body parts and organs are defined in YAML files, enhancing the anatomical structure of these characters. Additionally, modifications to texture metadata and species configurations improve the visual representation and gameplay mechanics. The pull request also introduces updates to marking options for reptilian entities, expanding their species applicability, and enhances inventory templates for monkeys by adding new slots.

Changes

File Path Change Summary
Resources/Locale/ru-RU/backmen/entities/bodyparts.ftl Added new Russian localized strings for monkey and kobold body parts and animal organs.
Resources/Prototypes/Body/Organs/Animal/animal.yml Introduced OrganAnimalBrain and OrganAnimalEyes, detailing their components and properties.
Resources/Prototypes/Body/Parts/Animal/kobold.yml Added body part entities for kobolds, including torso, head, arms, and legs, with components for visual representation.
Resources/Prototypes/Body/Parts/Animal/monkey.yml Added body part entities for monkeys, including torso, head, arms, and legs, with components for visual representation.
Resources/Prototypes/Body/Prototypes/kobold.yml Defined the structure for a kobold body prototype, detailing connections between body parts and organs.
Resources/Prototypes/Body/Prototypes/monkey.yml Defined the structure for a monkey body prototype, detailing connections between body parts and organs.
Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml Updated markings to include "Kobold" species restrictions and added animated markings.
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml Added new animal entities and modified existing ones, including visual and interaction changes.
Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml Added new inventory slots for eyes, ears, head, pockets, suit storage, and belt, enhancing the inventory template.
Resources/Prototypes/Reagents/gases.yml Modified properties and effects of various reagents, focusing on health impacts and status effects.
Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml Introduced dummy species entities for monkeys and kobolds.
Resources/Prototypes/_Backmen/Species/kobold.yml Defined the species "Kobold" with associated sprites and characteristics.
Resources/Prototypes/_Backmen/Species/monkey.yml Defined the species "Monkey" with associated sprites and characteristics.
Resources/Textures/Mobs/Animals/kobold.rsi/meta.json Updated copyright and added new states for the kobold texture resource.
Resources/Textures/Mobs/Animals/monkey.rsi/meta.json Updated copyright and expanded the states array for the monkey texture resource.
Resources/Locale/ru-RU/backmen/species/species.ftl Added Russian localization entries for species names: "Monkey" and "Kobold".
Resources/Prototypes/Entities/Mobs/Player/humanoid.yml Added speciesBlacklist attributes to various humanoid settings to exclude specific species from random generation.

Poem

In the land of fur and fun,
Kobolds and monkeys now have begun,
With limbs and organs, they'll play,
In a world where they leap and sway.
New slots for treasures, oh what a sight,
Join the adventure, day and night! 🐒✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

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

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

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai 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 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 Changes: Sprites Should be reviewed or fixed by people who are knowledgeable with spriting or visual design. No C# Нету кода. Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation labels Nov 21, 2024
Copy link
Contributor

github-actions bot commented Nov 21, 2024

RSI Diff Bot; head commit 5430f19 merging into 82904b8
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/Mobs/Animals/kobold.rsi

State Old New Status
kobold Modified
eyes Added
full Added
head_f Added
head_m Added
innerline Added
l_arm Added
l_foot Added
l_hand Added
l_leg Added
r_arm Added
r_foot Added
r_hand Added
r_leg Added
tail Added
torso_f Added
torso_m Added

Resources/Textures/Mobs/Animals/monkey.rsi

State Old New Status
eyes Added
full Added
head_f Added
head_m Added
l_arm Added
l_foot Added
l_hand Added
l_leg Added
r_arm Added
r_foot Added
r_hand Added
r_leg Added
tail Added
torso_f Added
torso_m Added

Edit: diff updated after 5430f19

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

🧹 Outside diff range and nitpick comments (23)
Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml (3)

19-20: Review UI component placement

The comment "sure, this can go here too" suggests uncertainty about the UI component placement. Consider documenting why this placement is appropriate or if it should be moved elsewhere.


1-41: Consider adding documentation for species requirements

Both entities are well-structured, but consider adding comments or documentation about:

  1. Required components for species dummies
  2. The relationship between these dummies and their non-dummy counterparts
  3. The purpose of the HumanoidMarkingModifier for these species

1-41: Approve the implementation with architectural notes

The implementation follows a good pattern for species dummy entities:

  • Consistent structure between different species
  • Proper separation of concerns (appearance, body, UI)
  • Hidden from spawn menu as appropriate for dummy entities
  • Non-saveable as expected for setup-only entities

This provides a solid foundation for making these species playable while maintaining proper separation between setup and actual gameplay entities.

Resources/Prototypes/Body/Prototypes/kobold.yml (1)

1-4: Improve file documentation and remove unprofessional comment.

The current comment is unprofessional and lacks important technical details. Consider adding:

  • Purpose of this prototype
  • Key differences from the human body prototype
  • Usage guidelines or restrictions
  • Relationship with the kobold species definition
-- # Shitmed - this is just a copy of human body but with animal organs.
+# Kobold Body Prototype
+# Derived from human body structure with specialized animal organs
+# Used for defining the physical structure of Kobold species
+# Note: This prototype defines body parts and organ configurations
Resources/Prototypes/Body/Prototypes/monkey.yml (1)

1-4: Improve code documentation and professionalism

The comment should be rephrased to maintain professional language standards while preserving the technical information.

-# Shitmed - this is just a copy of human body but with animal organs.
+# Note: This is derived from the human body prototype with animal organs substituted.
Resources/Textures/Mobs/Animals/kobold.rsi/meta.json (1)

8-8: Fix grammatical error in copyright attribution

The phrase "parts splitted up" contains a grammatical error. "Splitted" is not the correct past tense form.

-  "copyright": "Drawn by Ubaser, modified by Bhijn and Myr, parts splitted up by Roudenn (GitHub)",
+  "copyright": "Drawn by Ubaser, modified by Bhijn and Myr, parts split up by Roudenn (GitHub)",
Resources/Prototypes/Body/Parts/Animal/kobold.yml (4)

1-1: Address TODO comment for documentation completeness.

The TODO comment indicates missing descriptions. Since this is a new playable species feature, proper documentation is essential for maintainability.

Would you like me to help generate the missing descriptions for these entities?


6-6: Improve entity name capitalization.

For consistency with other entity names in the game, consider capitalizing the name properly.

-  name: "Kobold body part"
+  name: "Kobold Body Part"

51-51: Standardize entity name capitalization.

Entity names should follow a consistent capitalization pattern. Consider updating all limb names to match the game's naming convention.

-  name: "left Kobold arm"
+  name: "Left Kobold Arm"
# Apply similar changes to all limb names

Also applies to: 60-60, 69-69, 78-78, 87-87, 96-96, 105-105, 114-114


3-119: Consider documenting the kobold body system architecture.

Since this is part of making kobolds a playable species, consider adding documentation that explains:

  • How these body parts integrate with the species definition
  • The relationship between base parts and kobold-specific parts
  • Any special gameplay mechanics or limitations

This will help future maintainers understand the design decisions and constraints.

Resources/Prototypes/Body/Parts/Animal/monkey.yml (1)

1-1: Address TODO comment for entity descriptions

Entity descriptions are important for player interaction and understanding. They should describe appearance, function, and any special characteristics of monkey body parts.

Would you like me to help generate appropriate descriptions for these entities? I can create a new issue to track this task.

Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (2)

61-61: Consider using a more descriptive comment marker

The comment marker "#backmen:underclothing-start" could be more descriptive. Consider using a standard format like "# Section: Underclothing slots - Start".


Inventory template defines slots unsupported by monkey anatomy

The monkey anatomy prototype (Monkey body type) only defines a head slot, while the inventory template adds numerous slots like gloves, eyes, pockets, and back that aren't anatomically supported. This mismatch could lead to runtime issues or undefined behavior.

Key issues:

  • Only head slot is defined in monkey anatomy
  • MonkeyWearable tag is only used for suits/hardsuits
  • Missing anatomical definitions for: ears, mask, jumpsuit, gloves, eyes, pockets, back, and underclothing slots
🔗 Analysis chain

Line range hint 1-127: Verify monkey anatomy compatibility with inventory slots

While the inventory template additions align with making monkeys playable, we should verify that the monkey anatomy prototype supports all these new equipment slots (gloves, eyes, pockets, back).

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if monkey anatomy prototype defines appropriate slots
rg -A 10 "type: body" Resources/Prototypes/Body/Prototypes/monkey.yml

# Check for any monkey-specific clothing restrictions
rg "MonkeyWearable" Resources/Prototypes/Entities/Clothing/

Length of output: 661

Resources/Prototypes/_Backmen/Species/kobold.yml (4)

4-4: Remove unprofessional comment

The comment "sad..." is informal and should be removed or replaced with a proper explanation of why round start is disabled.

-  roundStart: false # sad...
+  roundStart: false # Disabled until fully tested and balanced

10-12: Verify sprite assets for female variant

The comment indicates female sprites are missing. This should be tracked as a task for future implementation.

Would you like me to create a GitHub issue to track the implementation of female sprite variants?


42-43: Consider using a base configuration for common values

The sprite path "Mobs/Animals/kobold.rsi" is repeated across multiple definitions. Consider using a base configuration that can be extended.

# Example base configuration
- type: baseKoboldSprite
  abstract: true
  baseSprite:
    sprite: Mobs/Animals/kobold.rsi

# Example usage
- type: humanoidBaseSprite
  id: MobKoboldHead
  parent: baseKoboldSprite
  baseSprite:
    state: head_m

Also applies to: 48-49, 54-55, 60-61, 66-67, 72-73


1-143: Consider gameplay mechanics beyond visual representation

While the visual configuration is well-structured, consider additional aspects needed for a fully playable species:

  1. Interaction capabilities (mentioned in PR objectives about equipping items)
  2. Species-specific abilities or traits
  3. Balance considerations for gameplay

These might require additional configuration in other files.

Resources/Prototypes/Body/Organs/Animal/animal.yml (4)

175-216: Implementation looks good with minor suggestions

The brain organ implementation is well-structured with appropriate components for both organ functionality and food processing. Consider:

  • Adding a comment explaining the ghost control behavior
  • Documenting the significance of the reagent quantities (10 Nutriment, 5 GreyMatter)

223-227: Document surgery-related implementation details

The comments start-backmen: surgery and end-backmen: surgery should be expanded to explain the surgery-related functionality or removed if no longer needed.


217-234: Consider adding vision-related properties

The eyes implementation looks good but could be enhanced:

  • Consider adding vision-related properties (e.g., vision range, dark vision)
  • Document how these eyes differ from other species' eyes

174-234: Architecture aligns well with playable species requirements

The organ implementations successfully support the PR's goal of making monkeys and kobolds playable species by:

  • Providing essential organs with appropriate damage handling
  • Supporting item interactions through proper size definitions
  • Maintaining consistency with existing organ systems

Consider documenting these organ specifications in a central location to help with future species additions.

Resources/Prototypes/Reagents/gases.yml (1)

Frezon's boozePower of 500 is significantly higher than other substances and needs rebalancing

The verification confirms that Frezon's boozePower of 500 is extremely unbalanced compared to other substances in the codebase:

  • Medicine: 20
  • Narcotics: 5
  • Regular alcohol: 2

This makes Frezon 25x stronger than medicine, 100x stronger than narcotics, and 250x stronger than regular alcohol, which could lead to severe gameplay imbalance.

🔗 Analysis chain

Line range hint 351-386: Review balance of new Frezon effects

The new Frezon effects add interesting gameplay mechanics but may need balance adjustments:

  1. The boozePower: 500 seems extremely high for a drunk effect
  2. The combination of cellular damage, hallucinations (SeeingRainbows), and drunk effects might be too punishing

Consider:

  • Reducing the boozePower value to be more in line with other intoxicating substances
  • Adding conditions to prevent effect stacking that could lead to unfair player incapacitation

Let's check the boozePower values of other substances for comparison:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other boozePower values in reagents
rg 'boozePower:' Resources/Prototypes/

Length of output: 315

Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml (1)

Sprite assets verification completed - inconsistencies found

The sprite verification reveals several issues:

  • The Backmen/ sprites use split left/right states (e.g., horns_argali_l and horns_argali_r) while the base sprites use single states
  • horns_demonic, horns_kobold_ears, and horns_floppy_kobold_ears exist only in the base Mobs/Customization/ directory
  • The split states in Backmen/ directory match the usage in the YAML, but this creates an inconsistent pattern with the non-split states
🔗 Analysis chain

Line range hint 275-340: Verify sprite assets for Kobold compatibility

The changes reference sprites from multiple sources (Mobs/Customization/ and Backmen/Mobs/Customization/). Please ensure:

  1. All referenced sprite states exist and are compatible with Kobold models
  2. The visual appearance is consistent across different sprite sources
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for existence of referenced sprite files
fd -e rsi "reptilian_parts" 

# List all sprite states in the RSI files
for file in $(fd -e rsi "reptilian_parts"); do
  echo "=== $file ==="
  if [ -f "$file/meta.json" ]; then
    jq '.states | keys[]' "$file/meta.json"
  fi
done

Length of output: 1160


Script:

#!/bin/bash
# Get actual state names from both RSI files to verify specific states
echo "=== States in Mobs/Customization/reptilian_parts.rsi ==="
jq -r '.states | to_entries[] | .value.name' "Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json"

echo -e "\n=== States in Backmen/Mobs/Customization/reptilian_parts.rsi ==="
jq -r '.states | to_entries[] | .value.name' "Resources/Textures/Backmen/Mobs/Customization/reptilian_parts.rsi/meta.json"

Length of output: 1818

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 99aa3f2 and 1fa4ad7.

⛔ Files ignored due to path filters (32)
  • Resources/Textures/Mobs/Animals/kobold.rsi/eyes.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/full.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/head_f.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/head_m.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/innerline.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/kobold.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/l_arm.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/l_foot.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/l_hand.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/l_leg.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/r_arm.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/r_foot.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/r_hand.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/r_leg.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/tail.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/torso_f.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/torso_m.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/eyes.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/full.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/head_f.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/head_m.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/l_arm.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/l_foot.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/l_hand.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/l_leg.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/r_arm.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/r_foot.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/r_hand.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/r_leg.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/tail.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/torso_f.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/torso_m.png is excluded by !**/*.png
📒 Files selected for processing (15)
  • Resources/Locale/ru-RU/backmen/entities/bodyparts.ftl (1 hunks)
  • Resources/Prototypes/Body/Organs/Animal/animal.yml (1 hunks)
  • Resources/Prototypes/Body/Parts/Animal/kobold.yml (1 hunks)
  • Resources/Prototypes/Body/Parts/Animal/monkey.yml (1 hunks)
  • Resources/Prototypes/Body/Prototypes/kobold.yml (1 hunks)
  • Resources/Prototypes/Body/Prototypes/monkey.yml (1 hunks)
  • Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml (7 hunks)
  • Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (5 hunks)
  • Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (2 hunks)
  • Resources/Prototypes/Reagents/gases.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Species/kobold.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Species/monkey.yml (1 hunks)
  • Resources/Textures/Mobs/Animals/kobold.rsi/meta.json (1 hunks)
  • Resources/Textures/Mobs/Animals/monkey.rsi/meta.json (1 hunks)
🔇 Additional comments (34)
Resources/Locale/ru-RU/backmen/entities/bodyparts.ftl (2)

1-11: LGTM! Consistent naming pattern and accurate translations for monkey body parts.

The translations follow proper Russian grammar rules and maintain a consistent naming pattern. All essential body parts are covered.


13-23: LGTM! Kobold translations mirror the monkey structure.

The kobold translations maintain perfect symmetry with the monkey translations, using the same grammatical patterns and covering the same body parts.

Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml (1)

1-21: Verify referenced assets and prototypes exist

The entity definition looks structurally sound, but we should verify the referenced assets and prototypes exist in the codebase.

✅ Verification successful

All referenced assets and prototypes are present

The verification shows that all required resources exist in the codebase:

  • The monkey sprite RSI exists at Resources/Textures/Mobs/Animals/monkey.rsi/ with its meta.json
  • The Monkey body prototype is defined in Resources/Prototypes/Body/Prototypes/monkey.yml
  • The Monkey species is properly referenced in both the new dummy entity and existing NPCs
  • The entity structure follows the same pattern as existing monkey entities in Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if referenced assets and prototypes exist
echo "Checking for monkey sprite RSI file..."
fd "monkey.rsi" Resources/Textures

echo "Checking for Monkey body prototype..."
rg "type: prototype.*\n.*id: Monkey" Resources/Prototypes/Body/Prototypes/

Length of output: 632


Script:

#!/bin/bash
# Let's verify the assets and prototypes with corrected commands

# Check if the monkey sprite exists and has the required state
echo "Checking monkey sprite RSI states..."
rg -l "state: full" Resources/Textures/Mobs/Animals/monkey.rsi/

# Check for Monkey body prototype with proper multiline search
echo "Checking Monkey body prototype..."
rg -U "type: prototype\n.*id: Monkey" Resources/Prototypes/Body/Prototypes/

# Check if Monkey species is defined
echo "Checking Monkey species definition..."
rg "id: Monkey" Resources/Prototypes/Species/

Length of output: 436


Script:

#!/bin/bash
# Let's try a different approach to verify the resources

# Check for any monkey-related meta files in RSI directories
echo "Checking monkey RSI meta files..."
fd "meta.json" Resources/Textures/Mobs/Animals/monkey.rsi/

# Look for any Monkey prototype definitions across all prototype directories
echo "Checking for Monkey prototypes..."
rg -l "id: Monkey" Resources/Prototypes/

# Check for any species definitions containing Monkey
echo "Checking species definitions..."
rg -A 5 "species: Monkey" Resources/Prototypes/

Length of output: 2139

Resources/Prototypes/Body/Prototypes/kobold.yml (5)

5-6: LGTM!

The root structure is correctly defined with torso as the central connection point.


14-27: LGTM!

The torso configuration is comprehensive with:

  • All vital organs properly defined
  • Correct connections to limbs and head
  • Appropriate organ placement

28-51: Verify part definitions and document functionality.

The limb structure appears correct, but:

  1. Verify that all referenced Kobold parts (RightArmKobold, LeftArmKobold, etc.) are properly defined
  2. Consider documenting any mobility or functionality restrictions
✅ Verification successful

All Kobold body parts are properly defined

The verification shows that all referenced body parts (RightArmKobold, LeftArmKobold, etc.) are properly defined in Resources/Prototypes/Body/Parts/Animal/kobold.yml. Each part:

  • Inherits from appropriate base parts
  • Has correct sprite configurations
  • Follows consistent naming and structure

The suggestion about documenting mobility/functionality restrictions can be addressed through the existing TODO at the top of the file for adding descriptions.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify all kobold body parts are defined
# Expected: Find part definitions in kobold.yml or related files

# Search for part definitions
rg "RightArmKobold|LeftArmKobold|RightLegKobold|LeftLegKobold|RightHandKobold|LeftHandKobold|RightFootKobold|LeftFootKobold" Resources/Prototypes/Body/Parts/

Length of output: 727


Script:

#!/bin/bash
# Let's examine the actual definitions to verify they are complete
cat Resources/Prototypes/Body/Parts/Animal/kobold.yml

Length of output: 2502


7-13: Verify organ definitions and consider additional sensory organs.

The head configuration appears basic but functional. However:

  1. Verify that OrganAnimalBrain and OrganAnimalEyes are properly defined
  2. Consider adding other sensory organs (ears, nose) for complete functionality
✅ Verification successful

Both organ definitions are properly implemented and functional

The verification shows that both OrganAnimalBrain and OrganAnimalEyes are well-defined in Resources/Prototypes/Body/Organs/Animal/animal.yml with appropriate components and functionality:

  • OrganAnimalBrain includes necessary components for input processing, movement control, and examination
  • OrganAnimalEyes has the required components for vision functionality

The current head configuration is sufficient for basic functionality. While additional sensory organs could be added, they aren't strictly necessary as the current implementation aligns with the game's requirements.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify organ definitions exist
# Expected: Find organ definitions in animal.yml or related files

# Search for organ definitions
rg "OrganAnimalBrain|OrganAnimalEyes" Resources/Prototypes/Body/Organs/

Length of output: 220


Script:

#!/bin/bash
# Let's verify the actual implementation of these organs
cat Resources/Prototypes/Body/Organs/Animal/animal.yml

Length of output: 4638


1-51: Verify integration with species system and primate transformation.

Since this PR aims to transform primates into playable species:

  1. Ensure this body prototype properly integrates with the species system
  2. Verify the transformation mechanism from primates to Kobolds
  3. Consider documenting the relationship between this prototype and the primate transformation feature
Resources/Prototypes/Body/Prototypes/monkey.yml (5)

14-27: LGTM! Thorough implementation of vital organs

The torso configuration includes all essential organs and proper connections to other body parts, creating a complete anatomical structure suitable for a mammalian species.


40-51: LGTM! Consistent implementation of lower body parts

The legs and feet are properly implemented with appropriate connections, maintaining symmetry and following the same pattern as other body parts.


1-51: Verify all referenced body parts and organs exist

The prototype references several custom parts (HeadMonkey, TorsoMonkey, etc.) and organs. Let's verify these are properly defined elsewhere in the codebase.

✅ Verification successful

The initial results show that both body parts and organs are referenced in multiple files, but we need to verify the actual definitions exist. Let's check the specific files that should contain these definitions.


All referenced body parts and organs are properly defined

All monkey body parts (HeadMonkey, TorsoMonkey, RightArmMonkey, etc.) are correctly defined in Resources/Prototypes/Body/Parts/Animal/monkey.yml with proper entity definitions, sprites, and components.

All animal organs (OrganAnimalBrain, OrganAnimalEyes, OrganAnimalHeart, etc.) are correctly defined in Resources/Prototypes/Body/Organs/Animal/animal.yml with proper entity definitions, components, and functionality.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for definitions of all referenced parts and organs
echo "Checking body parts..."
rg -l "HeadMonkey|TorsoMonkey|RightArmMonkey|LeftArmMonkey|RightLegMonkey|LeftLegMonkey|RightHandMonkey|LeftHandMonkey|RightFootMonkey|LeftFootMonkey" "Resources/Prototypes/"

echo "Checking organs..."
rg -l "OrganAnimalBrain|OrganAnimalEyes|OrganAnimalHeart|OrganAnimalLungs|OrganAnimalStomach|OrganAnimalLiver|OrganAnimalKidneys" "Resources/Prototypes/"

Length of output: 1974


Script:

#!/bin/bash
# Let's check the actual definitions in the monkey parts file
echo "=== Checking monkey body parts definitions ==="
cat "Resources/Prototypes/Body/Parts/Animal/monkey.yml"

echo -e "\n=== Checking animal organs definitions ==="
cat "Resources/Prototypes/Body/Organs/Animal/animal.yml"

Length of output: 7345


7-13: Consider additional sensory organs for gameplay mechanics

Since monkeys are being implemented as a playable species, consider adding other sensory organs that might affect gameplay (e.g., ears for hearing mechanics, tongue for taste/feeding mechanics).


28-39: Verify equipment slot implementation

The PR objectives mention the ability to equip items (gloves, etc.), but the hands configuration doesn't specify equipment slots. Ensure this is handled in the inventory template.

Resources/Textures/Mobs/Animals/kobold.rsi/meta.json (2)

14-76: Verify presence of texture files for all states

The metadata defines multiple new states. Ensure that corresponding texture files exist for all states to prevent runtime issues.

✅ Verification successful

All texture files are present and match the defined states

Comparing the PNG files found in the directory with the states defined in meta.json shows that all required texture files exist. Both lists contain the same 18 states: full, head_f, head_m, l_arm, l_foot, l_hand, l_leg, r_arm, r_foot, r_hand, r_leg, torso_f, torso_m, tail, eyes, innerline, outline, and kobold.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# List all PNG files in the kobold RSI directory
echo "Checking for texture files..."
fd . Resources/Textures/Mobs/Animals/kobold.rsi -e png -x basename {} .png \;

# Extract state names from meta.json for comparison
echo -e "\nDefined states in meta.json:"
jq -r '.states[].name' Resources/Textures/Mobs/Animals/kobold.rsi/meta.json

Length of output: 546


14-16: Verify if the "full" state intentionally lacks directions

Unlike other states, the "full" state doesn't specify directions. Please confirm if this is intentional, as it might affect how the sprite is rendered in-game.

✅ Verification successful

Let me gather more information about the "full" state in the kobold RSI file and similar patterns in other mob textures.


The "full" state without directions is correct and intentional

The verification shows that:

  1. The full.png sprite file exists in the RSI directory
  2. The "full" state appears to be a composite/fallback sprite, while individual body parts (head, torso, arms, etc.) have directional states
  3. This pattern of having a non-directional "full" state alongside directional component states is present in other mob RSIs as well
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if other RSI files in the codebase have similar "full" states without directions
rg -U --json "full.*directions" Resources/Textures/Mobs/ | jq -r '.data.lines.text' | grep -B2 -A2 "full"

Length of output: 2973


Script:

#!/bin/bash
# Check the complete meta.json content for the kobold RSI
cat Resources/Textures/Mobs/Animals/kobold.rsi/meta.json

# Look for similar patterns in other mob RSIs where a state named "full" exists
rg -U --json '"name":\s*"full"' Resources/Textures/Mobs/ | jq -r '.data.lines.text'

# List all files in the kobold RSI directory to verify texture files
ls -la Resources/Textures/Mobs/Animals/kobold.rsi/

Length of output: 3173

Resources/Textures/Mobs/Animals/monkey.rsi/meta.json (1)

2-8: LGTM! Metadata section is well-structured.

The metadata section properly defines version, license, size, and includes appropriate attribution in the copyright notice.

Resources/Prototypes/Body/Parts/Animal/kobold.yml (3)

10-15: Verify extractable resource quantities for game balance.

The base extractable quantities (3 Fat, 10 Blood) should be verified against other species' body parts to ensure game balance.

✅ Verification successful

Extractable quantities are consistent with other species

The quantities of Fat (3) and Blood (10) in the kobold body parts match the standard quantities used across other species:

  • Humans, animals, moths, reptilians all use Fat: 3, Blood: 10
  • Only gingerbread is different with Nutriment/Sugar instead of Fat/Blood
  • Arachnids use the same Fat quantities but with CopperBlood instead of Blood
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other body part definitions with extractable components
rg -A 5 "type: Extractable" "Resources/Prototypes/Body/Parts/"

Length of output: 10487


55-56: Verify all required sprite states exist.

Ensure all referenced sprite states exist in the kobold.rsi file to prevent runtime errors.

Also applies to: 64-65, 73-74, 82-83, 91-92, 100-101, 109-110, 118-119

✅ Verification successful

Let me check the actual states in the RSI file's meta.json to verify if all required states exist.


Let me check the actual content of the states to see their names, as the current output only shows numeric indices.


All required sprite states are present in the RSI file

The verification shows that all the required states (l_arm, r_arm, l_hand, r_hand, l_leg, r_leg, l_foot, r_foot) exist in the kobold.rsi file. Each state also properly supports 4 directions as required for body parts.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# List all required states and verify they exist in the RSI file
states=("l_arm" "r_arm" "l_hand" "r_hand" "l_leg" "r_leg" "l_foot" "r_foot")
echo "Required states:"
printf '%s\n' "${states[@]}"
echo -e "\nActual states in RSI:"
fd -e rsi "kobold.rsi" Resources/Textures/Mobs/Animals/ -x rg -l "state|sprite" {}

Length of output: 438


Script:

#!/bin/bash
# Read and parse the meta.json file to list actual states
cat Resources/Textures/Mobs/Animals/kobold.rsi/meta.json | jq -r '.states | keys[]'

Length of output: 129


Script:

#!/bin/bash
# Get the full state definitions from meta.json
cat Resources/Textures/Mobs/Animals/kobold.rsi/meta.json | jq '.states'

Length of output: 967


24-24: Consider gender variants for sprite states.

The sprite state "torso_m" suggests a male variant. If gender customization is intended, ensure female variants are also implemented.

Resources/Prototypes/Body/Parts/Animal/monkey.yml (5)

3-16: LGTM! Base entity structure is well-defined

The PartMonkey base entity:

  • Correctly inherits from BaseItem and BasePart
  • Has reasonable default extractable quantities for fat and blood

49-84: LGTM! Arm and hand entities are well-structured

The entities:

  • Follow consistent naming patterns
  • Have appropriate parent inheritance
  • Use logical state names in sprite components

85-119: Verify all required sprite states exist

Please ensure all required states exist in the monkey.rsi file:

  • l_leg, r_leg
  • l_foot, r_foot
✅ Verification successful

All required sprite states are present in monkey.rsi

All the necessary sprite states (l_leg, r_leg, l_foot, r_foot) exist in the Resources/Textures/Mobs/Animals/monkey.rsi file. The implementation is correct and complete.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if all required states exist in the RSI file
required_states=("l_leg" "r_leg" "l_foot" "r_foot")

# Find the RSI file and check its meta.json for required states
fd -e rsi "monkey.rsi" Resources/Textures/Mobs/Animals/ -x sh -c '
  echo "Checking states in {}:"
  for state in "${@}"; do
    if cat "{}/meta.json" | jq -e ".states[] | select(.name == \"$state\")" > /dev/null; then
      echo "✓ $state exists"
    else
      echo "✗ $state missing"
    fi
  done
' sh "${required_states[@]}"

Length of output: 510


1-119: Consider adding item slot components for equipment

The PR objectives mention that monkeys should be able to equip items (backpacks, glasses, gloves), but there are no components defined for item slots in these body parts. Consider:

  1. Adding appropriate slot components to relevant parts (e.g., glasses slot in head, glove slots in hands)
  2. Verifying if these are inherited from base parts

17-48: Verify sprite resources and state naming

The sprite references need verification:

  1. Ensure monkey.rsi exists in the specified path
  2. Confirm if the "_m" suffix in states "torso_m" and "head_m" follows the game's naming convention
✅ Verification successful

The previous command had too much output and got truncated. Let's try a more focused approach to verify just the monkey sprite resources and states we care about.


Sprite resources verified successfully

The monkey.rsi exists in the correct path and contains the required states "torso_m" and "head_m" that are referenced in the monkey parts entities. The sprite file and states are properly configured.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the sprite file exists and verify state names
fd -e rsi "monkey.rsi" Resources/Textures/Mobs/Animals/

# List all state names in RSI files to verify naming convention
find . -name "*.rsi" -exec sh -c 'echo "States in {}: "; cat "{}"/meta.json | jq -r ".states[].name"' \;

Length of output: 200000


Script:

#!/bin/bash
# Let's check if the monkey.rsi exists and verify its states
fd -e rsi "monkey.rsi" Resources/Textures/Mobs/Animals/ -x sh -c 'echo "States in {}: "; cat "{}"/meta.json | jq -r ".states[].name"'

Length of output: 292

Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (1)

119-127: Back slot configuration looks good

The back slot is well-configured with appropriate properties and unique positions.

Resources/Prototypes/_Backmen/Species/monkey.yml (4)

14-31: LGTM! Comprehensive sprite mapping.

The sprite mapping is well-structured and includes all necessary body parts with consistent naming conventions.


135-146: Improve marking points documentation and coverage.

  1. Replace informal comments ("the cat ear joke") with proper documentation explaining the purpose of Special markings.
  2. The "Corvax-Sponsors" comment needs clarification or should be removed.
  3. Consider whether additional marking points are needed for consistency with other species.

Consider adding proper documentation for each marking point to explain their purpose and limitations.


32-134: Verify sprite states and standardize naming conventions.

  1. The sprite state naming is inconsistent:

    • Some states use suffixes (head_m, head_f, torso_m, torso_f)
    • Others don't (l_leg, r_arm, tail)
  2. Need to verify all referenced states exist in the RSI file.

Consider standardizing the state naming convention:

  • Either use gender suffixes consistently for all gendered sprites
  • Or maintain separate sprite files for male and female variants
✅ Verification successful

All sprite states are present and correctly defined

The verification shows that all sprite states referenced in the YAML file exist in the RSI file:

  • All required states are defined in meta.json
  • Corresponding PNG files exist for each state
  • The naming convention is actually consistent within its context:
    • Gender-specific parts (head, torso) use _m/_f suffixes
    • Non-gendered parts (limbs, tail, eyes) correctly don't use gender suffixes

The initial concern about inconsistent naming was incorrect, as the naming follows a logical pattern where only gender-dimorphic body parts use the gender suffix.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the monkey.rsi metadata contains all referenced states
rg --json "state:" Resources/Textures/Mobs/Animals/monkey.rsi/meta.json | \
  jq -r '.data.lines.text' | \
  grep -E "(head_[mf]|torso_[mf]|[lr]_(leg|arm|hand|foot)|tail|eyes)"

Length of output: 166


Script:

#!/bin/bash
# Let's first check if the RSI file exists and list its contents
fd monkey.rsi$ --type d --exec ls -la {}

# Let's also try to find the meta.json file directly
fd meta.json --type f --base-directory Resources/Textures/Mobs/Animals/monkey.rsi --exec cat {}

# As a backup, let's check for any .png files in the RSI directory that might indicate the states
fd .png$ --base-directory Resources/Textures/Mobs/Animals/monkey.rsi

Length of output: 4093


1-13: Verify referenced prototypes and consider implementation completeness.

A few concerns about the species configuration:

  1. The commented-out sexes configuration suggests incomplete female sprite implementation, which should be tracked.
  2. Replace informal comments with proper documentation.
  3. Need to verify the referenced prototypes exist (MobMonkey, MobMonkeyDummy).

Consider creating a tracking issue for implementing female sprites to ensure this doesn't remain as technical debt.

Resources/Prototypes/Body/Organs/Animal/animal.yml (1)

185-186: Verify ghost control implementation

The ghost input context needs verification to ensure it aligns with the intended behavior for these new playable species.

✅ Verification successful

Ghost input context implementation is consistent with other brain entities

The ghost input context in the animal brain prototype follows the established pattern seen in other brain/head entities:

  • It's used alongside Brain and InputMover components, matching the human brain implementation
  • This combination appears in other similar entities like base head parts and vox head parts
  • The context is also used in ghost-related entities like observers and revenants
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other ghost input contexts to verify consistency
rg -A 3 'context: "ghost"' --type yaml

Length of output: 3579

Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml (1)

275-275: Verify completeness of species restriction updates

The changes consistently add Kobold species to horn-type markings, but some horn markings (e.g., LizardHornsAngler, LizardHornsCurled) still only have [Reptilian] restriction. Please verify if these should also support Kobolds for consistency.

Also applies to: 286-286, 297-297, 308-308, 319-319

Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (3)

Line range hint 1320-1403: LGTM: Changes align with making monkeys more humanoid-like

The additions of HumanoidAppearance component, humanoid sprite layers, and updated Body component successfully transform monkeys into more humanoid-like entities with proper body parts and clothing support.


1549-1553: LGTM: Changes align with making kobolds more humanoid-like

The additions of HumanoidAppearance component and updated Body component successfully transform kobolds into more humanoid-like entities with proper body parts support.


1584-1599: Verify the horn color inheritance behavior

Some horn styles are set to inherit colors (Inherit), while others use KoboldHornColors. Please verify if this mixed approach is intentional, as it might lead to inconsistent visual appearances.

Run the following script to check for other instances of horn color inheritance in the codebase:

✅ Verification successful

Let me check the palette definition to better understand the color inheritance behavior.


Mixed horn color inheritance is intentional and correct

The current implementation is working as designed:

  • Regular horns (curled, ram, short, etc.) use KoboldHornColors palette which defines specific horn colors (HornA, hornB, hornC)
  • Ear-like features (floppy_kobold_ears, kobold_ears) and double horns inherit colors from the base kobold palette (KoboldColors), which makes sense as they should match the body coloring
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for horn color inheritance patterns in other entity definitions

# Search for horn color definitions
rg -A 5 "horns.*: .*Inherit" 

# Search for KoboldHornColors usage
rg "KoboldHornColors"

Length of output: 1436


Script:

#!/bin/bash
# Check the KoboldHornColors palette definition
cat Resources/Prototypes/Palettes/critters.yml

Length of output: 975

Comment on lines +25 to +26
ent-OrganAnimalBrain = мозг животного
ent-OrganAnimalEyes = глаза животного
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Additional animal organ translations needed

The following animal organs exist in the codebase but are missing translations in the Russian locale:

  • OrganAnimalLungs (lungs)
  • OrganAnimalStomach (stomach)
  • OrganAnimalLiver (liver)
  • OrganAnimalHeart (heart)
  • OrganAnimalKidneys (kidneys)

These organs are defined in the game's prototypes and should have corresponding translations in the Russian locale file for consistency.

🔗 Analysis chain

Verify if additional animal organs need translation.

While the brain and eyes translations are correct, consider if other common animal organs should be included (e.g., heart, lungs, liver).


Let me search more specifically for animal organ entities to get a complete picture.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other animal organ definitions in the codebase
echo "Searching for animal organ definitions..."
rg -g "*.yml" "(?i)organanimal.*:|(?i)animal.*organ" Resources/Prototypes/

# Search for organ-related strings in other language files
echo "Checking other language files for organ translations..."
fd -g "**/Locale/**/bodyparts.ftl" -x rg -l "(?i)organ"

Length of output: 1832


Script:

#!/bin/bash
# Search for OrganAnimal entities in the animal.yml file
echo "Searching for OrganAnimal entities..."
cat Resources/Prototypes/Body/Organs/Animal/animal.yml

# Search for organ-related translations in all language files
echo -e "\nSearching for organ translations in all locales..."
fd -g "**/Locale/**/bodyparts.ftl" -x cat {}

Length of output: 4889

Comment on lines +22 to +41
- type: entity
save: false
parent: BaseSpeciesDummy
id: MobKoboldDummy
categories: [ HideSpawnMenu ]
description: A dummy kobold meant to be used in character setup.
components:
- type: Icon
sprite: Mobs/Animals/kobold.rsi
state: full
- type: Appearance
- type: HumanoidAppearance
species: Kobold
- type: Body
prototype: Kobold
requiredLegs: 2
- type: UserInterface
interfaces:
enum.HumanoidMarkingModifierKey.Key: # sure, this can go here too
type: HumanoidMarkingModifierBoundUserInterface
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Missing Kobold species definition

The verification revealed:

  • ✅ The kobold.rsi exists with the required 'full' state
  • ✅ The body prototype exists at Resources/Prototypes/Body/Prototypes/kobold.yml
  • ❌ No Kobold species definition found in Resources/Prototypes/Species/

Required actions:

  • Add a Kobold species definition in Resources/Prototypes/Species/
  • Ensure it's properly defined before using it in the MobKoboldDummy entity
🔗 Analysis chain

Verify kobold assets and prototypes

The kobold entity mirrors the monkey structure appropriately, but we should verify its referenced assets.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if referenced assets and prototypes exist
echo "Checking for kobold sprite RSI file..."
fd "kobold.rsi" Resources/Textures

echo "Checking for Kobold body prototype..."
rg "type: prototype.*\n.*id: Kobold" Resources/Prototypes/Body/Prototypes/

Length of output: 519


Script:

#!/bin/bash
# Check for Kobold body prototype with proper multiline regex
echo "Checking for Kobold body prototype..."
rg -U "type: prototype.*\n.*id: Kobold" Resources/Prototypes/Body/Prototypes/

# Check if kobold.rsi has required state
echo "Checking for 'full' state in kobold.rsi..."
fd "meta.json" Resources/Textures/Mobs/Animals/kobold.rsi/ --exec cat {}

# Check for Kobold species definition
echo "Checking for Kobold species definition..."
rg -U "id: Kobold.*\n.*type: species" Resources/Prototypes/

Length of output: 1738


Script:

#!/bin/bash
# Let's try different approaches to find the required definitions

# Search for Kobold species definition with different pattern
echo "Searching for Kobold species..."
rg "id: Kobold" Resources/Prototypes/Species/ -A 5

# Search for Kobold body prototype with different pattern
echo "Searching for Kobold body prototype..."
rg "id: Kobold" Resources/Prototypes/Body/ -A 5

# Check if the species is defined anywhere else
echo "Searching for Kobold species in other locations..."
rg "species: Kobold" Resources/Prototypes/ -l

Length of output: 911

Comment on lines +10 to +12
{
"name": "full"
},
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add missing "directions" property to "full" state.

The "full" state is missing the "directions": 4 property that all other states have. This could cause rendering issues.

Apply this fix:

     {
-        "name": "full"
+        "name": "full",
+        "directions": 4
     },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{
"name": "full"
},
{
"name": "full",
"directions": 4
},

Comment on lines +13 to +72
{
"name": "monkey",
"directions": 4
},
{
"name": "head_f",
"directions": 4
},
{
"name": "head_m",
"directions": 4
},
{
"name": "l_arm",
"directions": 4
},
{
"name": "l_foot",
"directions": 4
},
{
"name": "l_hand",
"directions": 4
},
{
"name": "l_leg",
"directions": 4
},
{
"name": "r_arm",
"directions": 4
},
{
"name": "r_foot",
"directions": 4
},
{
"name": "r_hand",
"directions": 4
},
{
"name": "r_leg",
"directions": 4
},
{
"name": "torso_f",
"directions": 4
},
{
"name": "torso_m",
"directions": 4
},
{
"name": "tail",
"directions": 4
},
{
"name": "eyes",
"directions": 4
}
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Missing texture files for all defined states in monkey.rsi

The verification reveals that none of the required texture files exist for any of the defined states in the meta.json file. All directional variants (0-3) are missing for every state:

  • Base states: full, monkey
  • Body parts: head_f, head_m, l_arm, l_foot, l_hand, l_leg, r_arm, r_foot, r_hand, r_leg, torso_f, torso_m
  • Additional features: tail, eyes

This suggests that while the meta.json has been updated with the new state definitions, the corresponding texture files have not been added to the RSI directory.

🔗 Analysis chain

Verify texture files exist for all defined states.

The state definitions are comprehensive and well-structured, covering all necessary body parts with proper gender variants and directional support. However, we should verify that all corresponding texture files exist.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that all texture files exist for the defined states

# Get the directory containing the meta.json file
RSI_DIR="Resources/Textures/Mobs/Animals/monkey.rsi"

# Extract state names and check for corresponding PNG files
echo "Checking texture files for each state..."
for state in "full" "monkey" "head_f" "head_m" "l_arm" "l_foot" "l_hand" "l_leg" "r_arm" "r_foot" "r_hand" "r_leg" "torso_f" "torso_m" "tail" "eyes"; do
    for dir in {0..3}; do
        if [ ! -f "${RSI_DIR}/${state}-${dir}.png" ]; then
            echo "Missing texture: ${state}-${dir}.png"
        fi
    done
done

Length of output: 12831

Comment on lines 84 to 89
- name: gloves
slotTexture: gloves
slotFlags: GLOVES
uiWindowPos: 2,1
strippingWindowPos: 2,2
displayName: Gloves
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix UI position conflict with ID slot

The uiWindowPos: 2,1 conflicts with the existing 'id' slot. This will cause UI elements to overlap.

Please assign a unique UI position for the gloves slot.

Comment on lines +138 to +143
Special: # the cat ear joke
points: 1
required: false
Chest:
points: 1
required: false
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Remove unprofessional comments and standardize marking points

The verification reveals:

  1. The "cat ear joke" comment appears in multiple species files (human.yml, monkey.yml, kobold.yml), indicating it's a systemic issue
  2. Marking points configuration is consistent:
    • Most species use 1 point for their markings
    • The Special and Chest markings with 1 point each in kobold.yml align with other species configurations
    • Some species have required: true for specific markings (e.g. shadowkin), but optional markings consistently use required: false

Recommendations:

  • Remove the "cat ear joke" comment from all affected files:
    • Resources/Prototypes/_Backmen/Species/kobold.yml
    • Resources/Prototypes/_Backmen/Species/monkey.yml
    • Resources/Prototypes/Species/human.yml
🔗 Analysis chain

Remove joke comment and verify marking points

Two issues to address:

  1. Remove the unprofessional comment "the cat ear joke"
  2. Ensure marking points are consistent with other species configurations
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other species marking point configurations
rg "type: markingPoints" -A 10 "Resources/Prototypes"

Length of output: 11131

Comment on lines +5 to +7
prototype: MobKobold
sprites: MobKoboldSprites
dollPrototype: MobKoboldDummy
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Missing prototype definitions need attention

Based on the verification results:

  • MobKobold exists in Resources/Prototypes/Entities/Mobs/NPCs/animals.yml but relies on a parent MobBaseKobold that isn't found
  • MobKoboldDummy is referenced in the species file but not properly defined in the expected prototypes
  • Both prototypes appear to be missing their core definitions
🔗 Analysis chain

Verify referenced prototypes exist

Please ensure that MobKobold and MobKoboldDummy prototypes are properly defined in the codebase.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for MobKobold and MobKoboldDummy prototype definitions
rg -l "id: MobKobold[Dummy]*$" "Resources/Prototypes"

Length of output: 169


Script:

#!/bin/bash
# Let's check the actual content of these files to verify the prototype definitions
rg -A 5 "id: MobKobold" Resources/Prototypes/

Length of output: 10094


Script:

#!/bin/bash
# Let's check for the base kobold prototypes that might be parents
rg "parent: MobBase(Syndicate)?Kobold" Resources/Prototypes/ -A 5

Length of output: 1995


Script:

#!/bin/bash
# Let's check for the base kobold entity definition
rg "^- type: entity\s+id: MobBaseKobold" -A 10 Resources/Prototypes/

Length of output: 70

Comment on lines 14 to 31
- type: speciesBaseSprites
id: MobKoboldSprites
sprites:
Special: MobKoboldAnyMarking
Head: MobKoboldHead
Chest: MobKoboldTorso
Tail: MobKoboldTail
Eyes: MobKoboldEyes
HeadTop: MobKoboldAnyMarking
LArm: MobKoboldLArm
RArm: MobKoboldRArm
LHand: MobKoboldLHand
RHand: MobKoboldRHand
LLeg: MobKoboldLLeg
RLeg: MobKoboldRLeg
LFoot: MobKoboldLFoot
RFoot: MobKoboldRFoot

Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Warning: Missing sprite states in kobold.rsi

The diff output shows that none of the required sprite states exist in the kobold.rsi file, while the configuration references them. This is a critical issue as all sprite states defined in the configuration must exist in the RSI file.

Required states that are missing:

  • head_m, head_f (head variants)
  • torso_m, torso_f (torso variants)
  • l_leg, r_leg (legs)
  • l_arm, r_arm (arms)
  • l_hand, r_hand (hands)
  • l_foot, r_foot (feet)
  • tail
  • eyes
🔗 Analysis chain

Verify sprite completeness and consistency

Please ensure:

  1. All referenced sprite states exist in the kobold.rsi file
  2. The body part configuration matches other playable species for consistency

Let me analyze the output to verify the sprite configuration completeness and consistency.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# List all states in kobold.rsi metadata
fd -g "kobold.rsi" -x jq -r '.states[].name' {}

# Compare with other species configurations
rg -l "type: speciesBaseSprites" "Resources/Prototypes" | xargs cat

Length of output: 46128


Script:

#!/bin/bash
# Check if all referenced sprite states exist in kobold.rsi
fd -g "kobold.rsi" -x jq -r '.states[].name' {} | sort > /tmp/existing_states.txt

# Extract required states from the configuration
echo "head_m
head_f
torso_m
torso_f
l_leg
l_arm
l_hand
l_foot
r_leg
r_arm
r_hand
r_foot
tail
eyes" | sort > /tmp/required_states.txt

# Compare the files
diff /tmp/existing_states.txt /tmp/required_states.txt

# Check sprite path references
rg "sprite: .*kobold.rsi" -A 1

Length of output: 4623

@@ -286,7 +286,7 @@
shouldHave: false
key: ForcedSleep
component: ForcedSleeping
time: 6 # This reeks, but I guess it works LMAO
time: 300 # This reeks, but I guess it works LMAO
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

ForcedSleep duration is significantly higher than other status effects

The time value of 300 for NitrousOxide's ForcedSleep effect is extremely high compared to other similar effects in the codebase:

  • Other ForcedSleep effects range from 3-6 units (in narcotics.yml)
  • Most status effects (Stun, KnockedDown, Drowsiness) range from 1-10 units
  • Even long-lasting effects like Adrenaline only last 120 units

This 300-unit duration appears to be an outlier and could severely impact gameplay balance by incapacitating players for an excessive period.

🔗 Analysis chain

Review the significant increase in ForcedSleep duration

The ForcedSleep effect duration has been increased from 6 to 300 units (50x increase). While the comment suggests this is a working solution, such a dramatic increase warrants careful consideration:

  1. This could significantly impact gameplay balance
  2. Players affected by NitrousOxide will be incapacitated for much longer
  3. The comment "This reeks, but I guess it works LMAO" suggests this might be a temporary fix

Let's check if this duration is consistent with other sleep effects in the game:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other sleep/incapacitation effect durations for comparison
rg -i 'time:.*[0-9]' Resources/Prototypes/ | grep -i 'sleep\|stun\|knockdown\|incapacitate'

Length of output: 174


Script:

#!/bin/bash
# Let's broaden our search to find more timing-related configurations
rg -i "time:|duration:" Resources/Prototypes/Reagents/ -A 2 -B 2

Length of output: 19473

@@ -325,7 +325,7 @@
id: LizardHornsKoboldEars
bodyPart: HeadTop
markingCategory: HeadTop
speciesRestriction: [Reptilian]
speciesRestriction: [Reptilian, Kobold] # backmen: species
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Kobold ear markings should be restricted to Kobolds only

The Kobold-specific ear markings (LizardHornsKoboldEars and LizardHornsFloppyKoboldEars) are currently accessible to both Reptilian and Kobold species. Since these are explicitly Kobold-themed features with distinct ear styles, they should be restricted to Kobolds only to maintain species-specific customization options.

  • Remove "Reptilian" from the speciesRestriction list in LizardHornsKoboldEars marking
  • Remove "Reptilian" from the speciesRestriction list in LizardHornsFloppyKoboldEars marking
🔗 Analysis chain

Review species restrictions for Kobold-specific markings

The Kobold-specific ear markings (LizardHornsKoboldEars and LizardHornsFloppyKoboldEars) include both Reptilian and Kobold in their restrictions. Consider if Reptilian species should have access to Kobold-specific features.

Also applies to: 337-337

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for other Kobold-specific markings and their restrictions
rg "id: .*Kobold.*\n.*\n.*\n.*speciesRestriction:" -A 1

Length of output: 249


Script:

#!/bin/bash
# Check for Kobold-specific markings and their restrictions using multiline mode
rg -U "id: .*Kobold.*[\s\S]*?speciesRestriction:" -A 1 Resources/Prototypes/Entities/Mobs/Customization/Markings/

Length of output: 1140


Script:

#!/bin/bash
# Let's check if there are any other Kobold-specific features in the codebase
# and see how they handle species restrictions
rg -U "Kobold" Resources/Prototypes/Entities/Mobs/Species/ -A 5 -B 5

Length of output: 68

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

🧹 Outside diff range and nitpick comments (29)
Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml (2)

19-20: Remove uncertain comment

The comment "sure, this can go here too" suggests uncertainty about the UI placement. If this is the correct location, remove the comment. If there's uncertainty, we should validate the placement.


1-41: Consider extracting common configuration

Both entities share identical structure and components. Consider using YAML anchors and aliases or creating a common base prototype that extends BaseSpeciesDummy to reduce duplication and maintain consistency.

Example refactor:

- type: entity
  id: BaseDummySpecies
  save: false
  parent: BaseSpeciesDummy
  abstract: true
  categories: [ HideSpawnMenu ]
  components:
    - type: Appearance
    - type: Body
      requiredLegs: 2
    - type: UserInterface
      interfaces:
        enum.HumanoidMarkingModifierKey.Key:
          type: HumanoidMarkingModifierBoundUserInterface

- type: entity
  parent: BaseDummySpecies
  id: MobMonkeyDummy
  description: A dummy monkey meant to be used in character setup.
  components:
    - type: Icon
      sprite: Mobs/Animals/monkey.rsi
      state: full
    - type: HumanoidAppearance
      species: Monkey
    - type: Body
      prototype: Monkey

- type: entity
  parent: BaseDummySpecies
  id: MobKoboldDummy
  description: A dummy kobold meant to be used in character setup.
  components:
    - type: Icon
      sprite: Mobs/Animals/kobold.rsi
      state: full
    - type: HumanoidAppearance
      species: Kobold
    - type: Body
      prototype: Kobold
Resources/Prototypes/Body/Prototypes/kobold.yml (2)

1-1: Remove unprofessional comment.

The comment contains unprofessional language and should be replaced with proper documentation explaining the purpose of this prototype.

-# Shitmed - this is just a copy of human body but with animal organs.
+# TODO: Refine this prototype beyond the initial human body base structure
+# This prototype defines a Kobold body structure derived from the human template
+# but customized with animal organs for unique gameplay mechanics.

1-51: Consider implementing a base body template system.

Since this is noted as a copy of the human body with modifications, consider implementing a template/inheritance system for body prototypes. This would:

  1. Reduce duplication
  2. Make it easier to maintain common structures
  3. Allow for clearer differentiation of species-specific modifications

Example approach:

# base_humanoid.yml
- type: bodyTemplate
  id: BaseHumanoid
  slots:
    # ... common structure ...

# kobold.yml
- type: body
  id: Kobold
  template: BaseHumanoid
  modifications:
    organs:
      # ... only specify what's different ...
Resources/Prototypes/Body/Prototypes/monkey.yml (1)

1-5: Remove unprofessional comment prefix.

The documentation about this being a copy of the human body with animal organs is valuable, but the "Shitmed" prefix is unprofessional and should be removed.

-# Shitmed - this is just a copy of human body but with animal organs.
+# This is a copy of human body but with animal organs.
Resources/Textures/Mobs/Animals/kobold.rsi/meta.json (2)

8-8: Fix grammatical error in copyright notice

The word "splitted" is grammatically incorrect. Consider rewording to improve clarity and professionalism.

-  "copyright": "Drawn by Ubaser, modified by Bhijn and Myr, parts splitted up by Roudenn (GitHub)",
+  "copyright": "Drawn by Ubaser, modified by Bhijn and Myr, body parts split by Roudenn"

17-76: LGTM! Consider adding documentation for sprite state conventions

The body part states are well-structured and complete, supporting the new feature for damageable body parts. The naming convention is consistent, and all necessary components (limbs, gender variants, visual elements) are present.

Consider documenting these sprite state conventions in a README file to help future contributors maintain consistency.

Would you like me to help create a documentation template for the sprite state conventions?

Resources/Textures/Mobs/Animals/monkey.rsi/meta.json (1)

1-73: Consider adding equipment overlay states

To fully support the PR's goal of making monkeys wear equipment, you might need to add additional states for equipment overlays (e.g., glasses_overlay, backpack_overlay). This would ensure proper visual representation of equipped items.

Consider the following structure for equipment overlays:

  • {equipment}_overlay_f for female variants
  • {equipment}_overlay_m for male variants
  • Each with directions: 4 to match other states
Resources/Prototypes/Body/Parts/Animal/kobold.yml (2)

1-1: Please clarify the TODO comment.

The comment "Add descriptions (many)" is too vague. Consider specifying which descriptions are missing and what information they should contain.

-# TODO: Add descriptions (many)
+# TODO: Add detailed descriptions for each kobold body part entity, including:
+# - Physical characteristics
+# - Functional purpose
+# - Any special behaviors or interactions

3-16: Consider improvements to the base entity definition.

A few suggestions for the base PartKobold entity:

  1. The entity name should be properly capitalized ("Kobold Body Part")
  2. Consider documenting the reasoning behind the juice quantities (3 Fat, 10 Blood)
- name: "Kobold body part"
+ name: "Kobold Body Part"
Resources/Prototypes/Body/Parts/Animal/monkey.yml (2)

1-2: Address TODO comment for entity descriptions

The descriptions are important for gameplay clarity and documentation. These should be added for each body part to provide context to players and maintain consistency with other entities in the game.

Would you like me to help generate appropriate descriptions for each monkey body part?


49-119: Consider standardizing sprite state naming

The sprite states use inconsistent naming:

  • Some use prefix "l_" or "r_" (e.g., "l_arm", "r_arm")
  • Others use suffix "_m" (e.g., "torso_m")

Consider standardizing the naming convention across all states.

Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (2)

119-127: Consider removing template_small for back slot

The back slot uses template_small, which might not be appropriate for larger items like backpacks. Consider removing this setting to allow proper display of larger back items in the UI.

  - name: back
    slotTexture: back
-   fullTextureName: template_small
    slotFlags: BACK
    slotGroup: SecondHotbar

UI position conflicts detected in monkey inventory template

There are several position conflicts that need to be addressed:

  • UI Window conflicts:

    • Position (2,1) is used twice (for 'id' and 'gloves' slots)
    • Position (0,3) is used twice (for 'eyes' and 'pocket1' slots)
  • Stripping Window conflicts:

    • Position (0,0) is used twice (for 'head' and 'eyes' slots)

Please adjust these positions to ensure each slot has a unique coordinate in both UI and stripping windows.

🔗 Analysis chain

Line range hint 1-127: Verify all inventory slot positions holistically

To ensure a clean UI layout, please review all slot positions holistically. Consider creating a visual grid to verify there are no overlaps and the layout is intuitive.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Extract and display all UI positions for review
echo "UI Position Map:"
rg -U "name:.*\n.*slotTexture:.*\n.*\n.*uiWindowPos: (\d+,\d+)" Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml -r 'Position $1: $2' --multiline

Length of output: 655


Script:

#!/bin/bash
# Let's get a more complete view of all UI positions by using a different pattern
echo "UI Window Positions:"
rg "uiWindowPos: \d+,\d+" Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml

echo -e "\nStripping Window Positions:"
rg "strippingWindowPos: \d+,\d+" Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml

Length of output: 1059

Resources/Prototypes/_Backmen/Species/kobold.yml (3)

4-4: Remove unnecessary comment

The comment "sad..." is informal and doesn't provide meaningful documentation. Consider removing it or replacing it with a proper explanation of why the species isn't available at round start.


39-74: Ensure consistent gender variant implementation

Head and Torso have explicit male/female variants, but other body parts don't. This inconsistency might cause issues when implementing the female variant of the species.

Consider either:

  1. Implementing male/female variants for all body parts consistently
  2. Document why only certain parts need gender variants

138-140: Improve marking point documentation

The comment "the cat ear joke" is informal and doesn't provide clear documentation about the purpose or functionality of this marking point.

Consider replacing with proper documentation explaining the actual purpose and usage of this special marking point.

Resources/Prototypes/_Backmen/Species/monkey.yml (3)

4-4: Replace informal comment with proper documentation.

The comment "sad..." is informal. Consider replacing it with a proper explanation of why the species is not available at round start, or remove the comment entirely.

-  roundStart: false # sad...
+  roundStart: false # Species not available at round start - pending balance review

10-12: Track the missing female sprites requirement.

The commented section indicates missing female sprites, which should be properly tracked.

Would you like me to create a GitHub issue to track the implementation of female sprites for the monkey species?


135-146: Improve documentation clarity.

The marking points configuration has some documentation issues:

  1. The comment "the cat ear joke" is informal and doesn't explain the purpose of the Special marking
  2. The "Corvax-Sponsors" reference needs clarification

Consider replacing with more professional documentation:

    Special: # the cat ear joke
-      points: 1 # Corvax-Sponsors
+      points: 1 # Special markings available to sponsors
Resources/Prototypes/Body/Organs/Animal/animal.yml (6)

177-178: Consider using BaseAnimalOrgan instead of BaseAnimalOrganUnGibbable

Other organs in this file inherit from BaseAnimalOrgan which is gibbable. Using a different base class for the brain creates inconsistency. If there's a specific reason for making the brain ungibbable, please document it.


179-179: Fix grammatical error in description

The description "Not so intelligence, not so honk" contains a grammatical error.

-  description: "Not so intelligence, not so honk."
+  description: "Not so intelligent, not so honk."

184-184: Use consistent comment style

The comment style # backmen: surgery differs from the standard format used later in the file (# start-backmen: surgery).

-    slotId: brain # backmen: surgery
+    slotId: brain # start-backmen: surgery

197-205: Review nutriment quantities

The brain contains 10 Nutriment while other organs typically contain 5 units of their respective reagents. Consider standardizing these quantities unless there's a gameplay balance reason for the difference.

       organ:
         reagents:
         - ReagentId: Nutriment
-          Quantity: 10
+          Quantity: 5

223-227: Use consistent comment block style

The comment block could be improved by using a single-line comment for better readability, as the block only contains two components.

-  # start-backmen: surgery
   - type: Organ
     slotId: eyes
   - type: Eyes
-  # end-backmen: surgery
+  # backmen: surgery components

218-234: Consider adding missing common components

The eyes entity is missing some components that are common to other organs in this file:

  • SolutionContainerManager for food/organ solutions
  • FlavorProfile for consistency
  • StaticPrice for economy balance

This might affect gameplay mechanics like eating/processing the organ.

   - type: Item
     size: Small
     heldPrefix: eyeballs
+  - type: SolutionContainerManager
+    solutions:
+      food:
+        maxVol: 5
+        reagents:
+        - ReagentId: UncookedAnimalProteins
+          Quantity: 5
+  - type: FlavorProfile
+    flavors:
+      - meat
+  - type: StaticPrice
+    price: 50
Resources/Prototypes/Reagents/gases.yml (1)

Based on the gathered information, I can now provide a final response:

Frezon gas effects are generally in line with other gases, but boozePower needs adjustment

The cellular damage of 0.5 at 0.5+ units is comparable to other gases:

  • Plasma: 1.0 poison damage
  • Tritium: 1.0 radiation damage
  • CO2: 0.8 poison damage
  • N2O: 0.25 poison damage

However, the boozePower value of 500 is significantly higher than typical values seen in other substances. The visual effects duration of 500 time units is also on the longer end but not unprecedented (compared to other effects like 300 time units).

Recommendations:

  • Reduce boozePower to 50-100 range to be more consistent with other intoxicating effects
  • Keep cellular damage as is since it's within normal gas damage ranges
  • Consider reducing visual effects duration to 300 to match other similar effects
🔗 Analysis chain

Line range hint 290-363: Review Frezon gas balance for new species

The Frezon gas implementation has several powerful effects that could disproportionately affect the newly added monkey and kobold species:

  1. Cellular damage at relatively low concentrations (0.5+)
  2. Very high boozePower (500) which could be excessive
  3. Long-duration visual effects (500 time units)

Let's verify how these values compare to other gases and their effects on different species:

Consider:

  1. Implementing species-specific resistance or vulnerability factors
  2. Adding a scaling system for the boozePower based on species size/metabolism
  3. Breaking down the effects into smaller, more manageable durations

Let me generate another script to specifically check gas-related damage values and effects for better comparison:

This will help us compare Frezon's effects with other gases more specifically.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other boozePower values for comparison
echo "Checking other boozePower values:"
rg "boozePower:" -A 1

# Search for other status effect durations
echo "\nChecking other status effect durations:"
rg "time: \d+" -A 1

# Search for damage values across gases
echo "\nChecking damage values:"
rg "damage:" -B 2 -A 4 "Resources/Prototypes/Reagents/"

Length of output: 120672


Script:

#!/bin/bash
# Search for damage values and effects in gas reagents
echo "Checking gas damage values and effects:"
rg -B 2 -A 4 "damage:|effects:" "Resources/Prototypes/Reagents/gases.yml"

# Search for boozePower values in gases specifically
echo "\nChecking gas boozePower values:"
rg "boozePower:" "Resources/Prototypes/Reagents/gases.yml" -A 1

# Search for status effect durations in gases
echo "\nChecking gas status effect durations:"
rg "time: \d+" "Resources/Prototypes/Reagents/gases.yml" -A 1

Length of output: 3277

Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml (2)

Line range hint 1-403: Consider standardizing sprite paths and comment styles

The file shows inconsistencies in:

  1. Sprite paths alternating between Mobs/ and Backmen/Mobs/
  2. Comment styles varying between # Ataraxia and # backmen: species

Consider standardizing these patterns to improve maintainability.


Add species restriction to animated tail markings

The search results show that all other tail markings in the codebase have species-specific restrictions:

  • Vox tails are restricted to [Vox]
  • Cat tails are restricted to [Human]
  • Moth tails are restricted to [Moth]
  • Arachnid tails are restricted to [Arachnid]
  • Other reptilian tails are restricted to [Reptilian]

The new animated tail markings should follow the same pattern and be restricted to [Reptilian] for anatomical consistency with the rest of the codebase.

🔗 Analysis chain

Line range hint 365-403: Review unrestricted species access and verify animation assets

The new animated tail markings have empty speciesRestriction arrays, making them available to all species. Consider:

  1. Whether this unrestricted access is intentional
  2. If there should be species-specific restrictions for anatomical consistency

Also, consider documenting the performance impact of animated sprites if they're frequently used.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the wagging animation states exist in the RSI files
rg -l "tail_.+_wagging" Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json

# Look for any existing species restrictions on tail markings
rg "bodyPart: Tail" -A 2 Resources/Prototypes/Entities/Mobs/Customization/Markings/

Length of output: 12342

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 99aa3f2 and 1fa4ad7.

⛔ Files ignored due to path filters (32)
  • Resources/Textures/Mobs/Animals/kobold.rsi/eyes.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/full.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/head_f.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/head_m.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/innerline.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/kobold.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/l_arm.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/l_foot.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/l_hand.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/l_leg.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/r_arm.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/r_foot.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/r_hand.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/r_leg.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/tail.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/torso_f.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/kobold.rsi/torso_m.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/eyes.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/full.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/head_f.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/head_m.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/l_arm.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/l_foot.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/l_hand.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/l_leg.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/r_arm.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/r_foot.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/r_hand.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/r_leg.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/tail.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/torso_f.png is excluded by !**/*.png
  • Resources/Textures/Mobs/Animals/monkey.rsi/torso_m.png is excluded by !**/*.png
📒 Files selected for processing (15)
  • Resources/Locale/ru-RU/backmen/entities/bodyparts.ftl (1 hunks)
  • Resources/Prototypes/Body/Organs/Animal/animal.yml (1 hunks)
  • Resources/Prototypes/Body/Parts/Animal/kobold.yml (1 hunks)
  • Resources/Prototypes/Body/Parts/Animal/monkey.yml (1 hunks)
  • Resources/Prototypes/Body/Prototypes/kobold.yml (1 hunks)
  • Resources/Prototypes/Body/Prototypes/monkey.yml (1 hunks)
  • Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml (7 hunks)
  • Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (5 hunks)
  • Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (2 hunks)
  • Resources/Prototypes/Reagents/gases.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Species/kobold.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Species/monkey.yml (1 hunks)
  • Resources/Textures/Mobs/Animals/kobold.rsi/meta.json (1 hunks)
  • Resources/Textures/Mobs/Animals/monkey.rsi/meta.json (1 hunks)
🔇 Additional comments (33)
Resources/Locale/ru-RU/backmen/entities/bodyparts.ftl (3)

1-11: LGTM! Monkey body parts translations are accurate and consistent.

The translations follow proper Russian grammar using the correct genitive case and maintain consistency in naming patterns.


13-23: Verify consistency with existing kobold-related translations.

The translations are grammatically correct and follow the established pattern. However, let's ensure these translations align with any existing kobold-related content in the game.

✅ Verification successful

Translations are consistent with existing kobold-related content

The translations for kobold body parts maintain consistency with existing kobold-related content in the game. The word "кобольд" is used consistently throughout the codebase in various contexts (mobs, cubes, crates) and always follows the same grammatical pattern with proper genitive case usage ("кобольда") when indicating possession, which matches our body part translations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for existing kobold-related translations to verify consistency
rg -g '*.ftl' "кобольд" Resources/Locale/ru-RU/

Length of output: 3945


1-26: Verify UI space constraints for translations.

While all translations are linguistically correct, please verify that these Russian translations fit within any UI space constraints, as Russian words can be longer than their English counterparts.

Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml (1)

8-10: Verify sprite asset existence

Let's verify that the monkey sprite asset exists at the specified path.

✅ Verification successful

The previous search might have been too specific. Let's broaden our search to:

  1. Find all .rsi files to understand the sprite structure
  2. Look for any monkey-related assets that might have a different path or extension

The previous searches show that sprite assets are typically organized under Resources/Textures/. Let's specifically look for monkey-related files in the Mobs directory since that's the conventional location for mob sprites.


Sprite asset exists at correct location

The monkey sprite asset exists at Resources/Textures/Mobs/Animals/monkey.rsi, which matches the path specified in the YAML file (Mobs/Animals/monkey.rsi). The sprite file is present and correctly located in the expected directory structure.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the monkey sprite resource exists
fd --type f "monkey.rsi" Resources/

Length of output: 35


Script:

#!/bin/bash
# Let's try a broader search for sprite files in Resources directory
fd "\.rsi$" Resources/

# Also search for any monkey-related assets with any extension
fd "monkey" Resources/

Length of output: 131119


Script:

#!/bin/bash
# Let's check for monkey sprites in the Textures/Mobs directory since that's where most mob sprites are located
fd "monkey" Resources/Textures/Mobs/

Length of output: 196

Resources/Prototypes/Body/Prototypes/kobold.yml (4)

7-13: LGTM! Head configuration is well-structured.

The head slot configuration properly defines the required organs and connection to the torso.


28-51: LGTM! Limb configuration is well-structured and complete.

The limb configuration follows a consistent and logical pattern with proper connections between related parts. The symmetrical structure for both sides (left/right) is correctly implemented.


14-27: Verify organ requirements for gameplay mechanics.

The torso configuration includes a comprehensive set of animal organs. Please confirm that:

  1. All these organs are required for Kobold gameplay mechanics
  2. The organ types (OrganAnimalHeart, etc.) are properly defined elsewhere
✅ Verification successful

Animal organs configuration is correctly implemented

The organ configuration for kobolds follows the standard animal organ template, where each organ:

  • Is properly defined in the base animal organs file
  • Has the required components and functionality (e.g., Heart has heart mechanics, Liver has metabolizer)
  • Follows the same pattern used by other animal-based species in the game

The implementation matches the established pattern across multiple species (monkey, primate, moth, etc.) and inherits from the base animal organ definitions, which include all necessary gameplay mechanics like metabolism, organ slots, and specific organ functionalities.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for organ definitions
echo "Searching for organ entity definitions..."
rg "OrganAnimal(Heart|Lungs|Stomach|Liver|Kidneys)" --type yaml

# Search for organ-related mechanics
echo "Searching for organ-related gameplay mechanics..."
rg "organ.*kobold" --type yaml

Length of output: 8822


Script:

#!/bin/bash
# Let's check for the base animal organ definitions and their requirements
echo "Checking animal organ definitions and mechanics..."
rg -A 10 "id: OrganAnimal(Heart|Lungs|Stomach|Liver|Kidneys)" Resources/Prototypes/Body/Organs/Animal/

# Check if kobolds have any special organ mechanics or requirements
echo "Checking kobold-specific mechanics..."
rg "kobold.*organ|organ.*kobold" -i

# Check if there's a base body template that kobolds might inherit from
echo "Checking body templates..."
rg "parent:.*kobold" Resources/Prototypes/Body/

Length of output: 4370


1-5: Verify alignment with PR objectives.

The PR objectives mention this update is for primates, but this file defines a Kobold which is typically a reptilian creature. Please clarify if this implementation aligns with the intended scope of the PR.

Resources/Prototypes/Body/Prototypes/monkey.yml (4)

7-13: Verify organ definitions exist.

The head configuration references OrganAnimalBrain and OrganAnimalEyes. Let's ensure these organ prototypes are properly defined.

✅ Verification successful

Both organ prototypes are properly defined

The referenced organs OrganAnimalBrain and OrganAnimalEyes are correctly defined in Resources/Prototypes/Body/Organs/Animal/animal.yml. Both inherit from appropriate base animal organ types and include necessary components.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if the referenced organ prototypes exist
# Expected: Find definitions for OrganAnimalBrain and OrganAnimalEyes

rg -A 5 "id: OrganAnimalBrain|id: OrganAnimalEyes" "Resources/Prototypes"

Length of output: 987


14-27: Verify organ definitions and consider adding documentation.

The torso configuration includes multiple vital organs. Let's verify their existence and consider documenting their gameplay effects.

Consider adding comments to document how these organs affect gameplay mechanics, such as:

 organs:
+        # Controls blood circulation and health regeneration
         heart: OrganAnimalHeart
+        # Controls stamina and oxygen requirements
         lungs: OrganAnimalLungs
✅ Verification successful

All organ prototypes are correctly defined

All referenced animal organs (heart, lungs, stomach, liver, kidneys) are properly defined in Resources/Prototypes/Body/Organs/Animal/animal.yml. While documentation would be helpful, it's not strictly necessary since the organ names are self-explanatory and their functionality is likely handled by their components, which would be the appropriate place for such documentation.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if the referenced organ prototypes exist
# Expected: Find definitions for all animal organs

rg -A 5 "id: OrganAnimal(Heart|Lungs|Stomach|Liver|Kidneys)" "Resources/Prototypes"

Length of output: 2263


28-51: Verify part definitions and inventory slot compatibility.

The limb configuration looks anatomically correct, but we need to ensure:

  1. All referenced monkey body parts exist
  2. Corresponding inventory slots are defined for equippable items (as mentioned in PR objectives)
✅ Verification successful

Body parts and inventory slots are properly configured

The verification shows that:

  1. All monkey body parts are properly defined in Resources/Prototypes/Body/Parts/Animal/monkey.yml with correct inheritance from base parts
  2. The monkey inventory template (monkey_inventory_template.yml) includes all necessary slots including:
    • Gloves slot for hands
    • Jumpsuit slot for body coverage
    • Various other equipment slots (head, mask, etc.)

The limb configuration aligns with the inventory system, allowing for proper equipment compatibility.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if the body parts and inventory slots exist
# Expected: Find definitions for all monkey body parts and corresponding inventory slots

# Check for body part definitions
echo "Checking body part definitions..."
rg -A 5 "id: (Right|Left)(Arm|Hand|Leg|Foot)Monkey" "Resources/Prototypes"

# Check for inventory slots
echo "Checking inventory slots..."
rg -A 5 "slots:.*(hands|feet|gloves|shoes)" "Resources/Prototypes/Entities/Mobs/Species/Monkey"

Length of output: 4039


Script:

#!/bin/bash
# Let's search for monkey-related inventory slots in a broader scope
echo "Checking inventory slots in all prototypes..."
rg -A 5 "slots:.*(hands|feet|gloves|shoes)" "Resources/Prototypes"

# Let's also check for monkey entity definitions that might contain slots
echo "Checking monkey entity definitions..."
fd "monkey" "Resources/Prototypes" --type f --exec rg -l "slots:"

# Let's check if monkey inherits slots from a base entity
echo "Checking base entities for monkey..."
rg -A 10 "- type: Monkey" "Resources/Prototypes"

Length of output: 2052


Script:

#!/bin/bash
# Let's check the monkey inventory template that was found
echo "Checking monkey inventory template..."
cat "Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml"

# Let's also check for monkey entity definition with proper pattern
echo "Checking monkey entity definition..."
rg "^- type: Monkey" -A 10 "Resources/Prototypes"

# Let's check if monkey inherits from any base template
echo "Checking for monkey inheritance..."
rg "parent:.*Monkey" "Resources/Prototypes"

Length of output: 5699


1-51: Architectural considerations for monkey species implementation.

The body structure implementation looks good and aligns with the PR objectives. However, consider the following architectural points:

  1. Damage System Integration:

    • Ensure the damage system recognizes these new body parts
    • Verify damage propagation between connected parts
  2. Species Configuration:

    • Confirm that the species definition references this body prototype
    • Verify that the transformation between species (if applicable) handles organ differences
✅ Verification successful

Monkey body implementation is properly integrated with species and damage systems

The implementation is architecturally sound with proper integration:

  1. Body Parts Integration:

    • All body parts inherit from BasePart which includes damage system integration
    • Parts properly inherit from base body part types (e.g., BaseHead, BaseTorso)
    • Consistent sprite mapping for visual representation
  2. Species Configuration:

    • Species definition correctly references the body prototype in MobMonkeyDummy
    • Body component properly configured with prototype: Monkey
    • Complete set of sprite definitions for all body parts
  3. Damage System:

    • Inherits damage handling through the base parts
    • Includes extractable component with proper configurations
    • Maintains consistency with the base damage system
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for damage system and species configuration integration
# Expected: Find relevant damage system and species configurations

# Check damage system integration
echo "Checking damage system integration..."
rg -A 5 "damage.*Monkey|health.*Monkey" "Resources/Prototypes"

# Check species configuration
echo "Checking species configuration..."
rg -A 10 "bodytype.*Monkey|species.*Monkey" "Resources/Prototypes/Entities/Mobs/Species"

Length of output: 313


Script:

#!/bin/bash
# Let's try a broader search to find monkey-related configurations and damage system

# Search for monkey-related files
echo "Finding monkey-related files..."
fd -t f -e yml monkey

# Search for monkey body parts definitions
echo "Checking body parts definitions..."
rg -l "type: entity.*Monkey|part: \w+Monkey" Resources/Prototypes

# Search for species definitions that might reference monkey
echo "Checking species definitions..."
rg -l "species.*[Mm]onkey|prototype.*[Mm]onkey" Resources/Prototypes

# Search for damage-related configurations
echo "Checking damage system configurations..."
rg -l "DamageContainer|DamageModifier" Resources/Prototypes

Length of output: 1283


Script:

#!/bin/bash
# Let's examine the monkey species definition and body parts to verify integration

# Check monkey species definition
echo "=== Monkey Species Definition ==="
cat Resources/Prototypes/_Backmen/Species/monkey.yml

# Check monkey body parts definition
echo -e "\n=== Monkey Body Parts ==="
cat Resources/Prototypes/Body/Parts/Animal/monkey.yml

# Check if the species references the body prototype
echo -e "\n=== Species-Body Integration ==="
rg -A 5 "bodyType.*Monkey" Resources/Prototypes/_Backmen/Species/monkey.yml

# Check primate file for monkey references
echo -e "\n=== Primate Configuration ==="
cat Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml

Length of output: 7105

Resources/Textures/Mobs/Animals/kobold.rsi/meta.json (2)

Line range hint 1-83: Verify presence of all referenced sprite files

Let's ensure all state names referenced in this metadata file have corresponding sprite files in the RSI directory.

✅ Verification successful

All sprite files are present and match the meta.json states

The verification shows perfect alignment between the sprite files in the directory and the states defined in meta.json. All 18 states have their corresponding PNG files present in the RSI directory, including all body parts, variants, and overlay states.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Extract all state names and check for corresponding PNG files
for state in $(jq -r '.states[].name' "Resources/Textures/Mobs/Animals/kobold.rsi/meta.json"); do
  if [ ! -f "Resources/Textures/Mobs/Animals/kobold.rsi/$state.png" ]; then
    echo "Missing sprite file for state: $state"
  fi
done

Length of output: 3080


Script:

#!/bin/bash
# Let's try a different approach using find to list actual PNG files
echo "=== Listing actual PNG files in the RSI directory ==="
find Resources/Textures/Mobs/Animals/kobold.rsi -name "*.png" -type f

echo -e "\n=== Expected state names from meta.json ==="
jq -r '.states[].name' Resources/Textures/Mobs/Animals/kobold.rsi/meta.json

Length of output: 1459


14-16: Verify if "full" state should have directions

Unlike other states, the "full" state doesn't specify directions. Please confirm if this is intentional, as it differs from the pattern followed by other states in this file.

✅ Verification successful

The "full" state without directions is intentional

Looking at the meta.json file, the "full" state appears to be a reference sprite while all other states (kobold, head_f, head_m, etc.) that require directional rendering have directions: 4 specified. This is a valid pattern where static reference sprites don't need directional variants.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if other RSI files in the project use similar "full" states and their direction configurations
rg -U --json '"name":\s*"full"' | jq 'select(.data.lines.text | contains("full")) | .data.path'

Length of output: 34359


Script:

#!/bin/bash
# Let's check the content of the kobold.rsi/meta.json file to see other states and their direction configurations
cat "Resources/Textures/Mobs/Animals/kobold.rsi/meta.json"

Length of output: 1301

Resources/Textures/Mobs/Animals/monkey.rsi/meta.json (2)

2-4: LGTM: Proper licensing and attribution

The metadata correctly includes version, license, and detailed attribution of both original source and modifications.


5-8: LGTM: Standard sprite dimensions

The 32x32 pixel size follows the game's standard sprite dimensions for character entities.

Resources/Prototypes/Body/Parts/Animal/kobold.yml (1)

17-32: Verify sprite variants and document extraction values.

  1. The sprite state "torso_m" suggests male/female variants. If female variants are planned, consider adding a TODO comment.
  2. The torso has higher extraction quantities (10 Fat, 20 Blood vs base 3 Fat, 10 Blood). Consider documenting the reasoning.
Resources/Prototypes/Body/Parts/Animal/monkey.yml (4)

3-16: Verify blood and fat quantities for base monkey parts

The base extractable quantities (3 Fat, 10 Blood) seem arbitrary. Consider:

  • Documenting the reasoning behind these values
  • Verifying if they're balanced with other animal parts in the game
✅ Verification successful

Let me search for more context about blood quantities and check other body parts to get a complete picture.


Fat and blood quantities are consistent with game-wide standards

The quantities in the monkey parts (3 Fat, 10 Blood) are actually standardized across all body parts in the game. Looking at the codebase:

  • All species (human, reptilian, moth, arachnid, etc.) use identical Fat quantities (3, 10, or 5) for their respective body parts
  • This standardization suggests these values are intentionally balanced for gameplay mechanics
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other animal parts' extractable quantities for comparison
rg -U "type: Extractable[\s\S]*?reagents:[\s\S]*?Quantity: \d+" "Resources/Prototypes/Body/Parts/Animal/"

Length of output: 2207


Script:

#!/bin/bash
# Search for all extractable quantities including Blood
rg -U "type: Extractable[\s\S]*?reagents:[\s\S]*?(Blood|Fat)[\s\S]*?Quantity: \d+" "Resources/Prototypes/Body/Parts/"

Length of output: 7584


17-32: Verify sprite states in monkey.rsi

Please ensure that the "torso_m" state exists in the monkey.rsi file. Also verify that the sprite matches the anatomical structure needed for the new playable species feature.

✅ Verification successful

Sprite state verification successful

The "torso_m" state exists in the monkey.rsi file with proper 4-directional sprites, matching the requirements for the anatomical structure. The sprite file is properly set up for the new playable species feature.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the RSI file exists and contains required states
fd -e "rsi" -x sh -c 'echo "Checking {} for required states"; cat {}/meta.json' . | jq '.states[].name' | grep -E "torso_m"

Length of output: 816


Script:

#!/bin/bash
# Let's try a more specific search for the monkey.rsi file
fd monkey.rsi

# If we find it, let's examine its contents
fd monkey.rsi -x ls -la {}

Length of output: 2376


Script:

#!/bin/bash
# Let's check the meta.json content for the mob monkey.rsi to verify the state
cat "Resources/Textures/Mobs/Animals/monkey.rsi/meta.json"

Length of output: 1591


33-48: Verify brain components for playable species

Since this is part of making monkeys a playable species, ensure that:

  1. The BaseHead parent provides necessary brain-related components
  2. Consider if additional components are needed for player control

67-84: Verify hand components for item manipulation

According to PR objectives, monkeys should be able to equip items like backpacks, glasses, and gloves. Ensure that:

  1. The hand entities have necessary components for item manipulation
  2. The BaseHand parents provide required slots and interactions
Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (2)

97-118: LGTM! Well-structured pocket implementation

The pocket slots are well implemented with:

  • Proper jumpsuit dependency
  • Consistent small item template usage
  • Hidden stripping for realism
  • Distinct UI positions

Line range hint 61-84: Verify strip time values and UI positions for underclothing slots

The underclothing slots have notably higher strip times (8-12 seconds) compared to other slots (3-6 seconds). Additionally, their UI positions use a different coordinate range (4,x) than other slots. Please confirm if these differences are intentional.

✅ Verification successful

Strip times and UI positions match human inventory template

After comparing with other inventory templates, particularly the human_inventory_template.yml, I can see that the strip times (8-12 seconds) and UI positions (4,x) for underclothing slots are consistent with the human template. This appears to be intentional as monkeys are being made into a playable species with similar clothing mechanics to humans.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other inventory templates to compare strip times and UI positions
rg -U "stripTime:|uiWindowPos:" Resources/Prototypes/InventoryTemplates/

Length of output: 18786

Resources/Prototypes/_Backmen/Species/kobold.yml (3)

10-12: Verify female sprite implementation plans

The commented-out sex configuration suggests female sprites are planned but not yet available. This should be tracked to ensure it's not forgotten.

Would you like me to create a GitHub issue to track the implementation of female sprites?

Let's verify the current sprite states:


5-7: Verify referenced prototype definitions

The species references several prototypes that should exist: MobKobold, MobKoboldSprites, and MobKoboldDummy.

✅ Verification successful

Let me verify the remaining prototype (MobKoboldSprites) before making a final determination.


All referenced prototypes exist in the codebase

All three prototypes referenced in the kobold species configuration are present in the codebase:

  • MobKobold in Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
  • MobKoboldDummy in Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml
  • MobKoboldSprites in Resources/Prototypes/_Backmen/Species/kobold.yml
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for the existence of referenced prototypes
echo "Checking for MobKobold prototype..."
rg "id:\s*MobKobold\b" --type yaml

echo "Checking for MobKoboldDummy prototype..."
rg "id:\s*MobKoboldDummy\b" --type yaml

Length of output: 403


Script:

#!/bin/bash
# Check for MobKoboldSprites prototype
echo "Checking for MobKoboldSprites prototype..."
rg "id:\s*MobKoboldSprites\b" --type yaml

Length of output: 210


1-143: Verify equipment support implementation

According to the PR objectives, kobolds should be able to equip items like backpacks, glasses, and gloves. However, the current configuration doesn't explicitly define equipment slots or layering for these items.

✅ Verification successful

Equipment support is properly configured

The verification shows that kobolds have the necessary body configuration to support equipment:

  • The body prototype defines all required slots through the standard humanoid structure (head, torso, arms, hands, legs, feet)
  • The sprite configuration includes all body parts that would interface with equipment
  • Equipment slots are inherited from the base body system as shown in Resources/Prototypes/Body/Parts/base.yml

The species should be able to use standard equipment like backpacks, glasses, and gloves as it follows the humanoid body structure. No issues were found with the equipment support implementation.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for equipment-related configurations
echo "Checking for equipment slot definitions..."
rg -l "slots?:|equipment" Resources/Prototypes/Body/Prototypes/kobold.yml

echo "Checking for clothing prototypes supporting kobolds..."
rg -l "SpeciesRestriction.*Kobold" Resources/Prototypes/Clothing/

Length of output: 476


Script:

#!/bin/bash
# Let's verify equipment support more thoroughly

# First, check the body prototype definition for kobolds
echo "=== Checking kobold body prototype ==="
cat Resources/Prototypes/Body/Prototypes/kobold.yml

# Check for any equipment-related configurations in the entire codebase
echo -e "\n=== Checking equipment configurations mentioning kobolds ==="
rg -i "kobold.*equipment|equipment.*kobold"

# Look for clothing-related files in the correct directory
echo -e "\n=== Finding clothing-related prototype files ==="
fd -e yml -e yaml . | grep -i "cloth\|equipment"

# Check if kobolds inherit equipment slots from a base prototype
echo -e "\n=== Checking base humanoid equipment configurations ==="
rg "slots?:|equipment" Resources/Prototypes/Body/Parts/

Length of output: 12062

Resources/Prototypes/_Backmen/Species/monkey.yml (2)

14-31: Verify sprite states exist in RSI file.

Let's confirm that all referenced sprite states exist in the monkey.rsi file.

✅ Verification successful

All referenced sprite states are present in the RSI file

All sprite states referenced in the monkey.yml configuration have corresponding entries in the monkey.rsi metadata:

  • MobMonkeyHead -> head_m
  • MobMonkeyTorso -> torso_m
  • MobMonkeyLArm -> l_arm
  • MobMonkeyRArm -> r_arm
  • MobMonkeyLHand -> l_hand
  • MobMonkeyRHand -> r_hand
  • MobMonkeyLLeg -> l_leg
  • MobMonkeyRLeg -> r_leg
  • MobMonkeyLFoot -> l_foot
  • MobMonkeyRFoot -> r_foot
  • MobMonkeyTail -> tail
  • MobMonkeyEyes -> eyes
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Extract the sprite states from the RSI metadata
echo "Checking for required states in monkey.rsi..."
required_states="head_m torso_m l_leg l_arm l_hand l_foot r_leg r_arm r_hand r_foot tail eyes"
cat Resources/Textures/Mobs/Animals/monkey.rsi/meta.json | jq '.states[].name'

Length of output: 414


5-7: Verify referenced prototypes exist.

Let's verify that the referenced prototypes exist in the codebase.

✅ Verification successful

Let me verify the sprites reference as well before making the final conclusion.


All referenced prototypes exist in the codebase

  • MobMonkey exists in:
    • Resources/Prototypes/XenoArch/Effects/normal_effects.yml
    • Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
  • MobMonkeyDummy exists in Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml
  • MobMonkeySprites exists in Resources/Prototypes/_Backmen/Species/monkey.yml
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for the referenced prototype definitions
echo "Checking for MobMonkey prototype..."
rg "id:\s*MobMonkey\s*$" --type yaml

echo "Checking for MobMonkeyDummy prototype..."
rg "id:\s*MobMonkeyDummy\s*$" --type yaml

Length of output: 484


Script:

#!/bin/bash
# Search for MobMonkeySprites definition
echo "Checking for MobMonkeySprites..."
rg "id:\s*MobMonkeySprites\s*$" --type yaml

Length of output: 192

Resources/Prototypes/Body/Organs/Animal/animal.yml (1)

185-190: Verify brain movement control security

The combination of Input, InputMover, and Brain components allows for character control. Please verify that this doesn't create any security vulnerabilities or unintended behavior when the brain is removed during surgery.

✅ Verification successful

Based on the search results, I can now provide a final response about the brain movement control security:

Brain removal properly handles movement control

The implementation shows appropriate security measures:

  • The brain has BlockMovement component alongside movement controls
  • Brain removal is handled by the BrainSystem which properly processes OrganRemovedFromBodyEvent
  • Surgery system has explicit brain removal procedure (SurgeryRemoveBrain) that ensures controlled removal
  • Ghost context for input ensures proper access control
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for similar brain implementations to verify security patterns
ast-grep --pattern 'components:
  $$$
  - type: Brain
  $$$
  - type: InputMover
  $$$'

Length of output: 89


Script:

#!/bin/bash
# Search for Brain component implementations
rg "type: Brain" -A 5 -B 5

# Search for InputMover implementations and related components
rg "type: InputMover" -A 5 -B 5

# Search for Input ghost context usage
rg 'context: "ghost"' -A 5 -B 5

# Look for surgery-related brain removal handling
rg "brain.*remove|remove.*brain" -i

Length of output: 60404

Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml (1)

Line range hint 275-337: Verify sprite compatibility for Kobold species

While adding Kobold to speciesRestriction is aligned with the PR objectives, we should verify that the sprite assets are properly configured for the Kobold species.

Additionally, consider standardizing the species restrictions across all horn markings for consistency.

✅ Verification successful

Sprite assets verified for both species

All required sprite states are properly configured in their respective RSI files:

  • Paired horn states (argali, ayrshire, myrsore, bighorn) exist in Backmen/Mobs/Customization/reptilian_parts.rsi
  • Single-piece horns (demonic, kobold_ears) exist in Mobs/Customization/reptilian_parts.rsi

The addition of Kobold to speciesRestriction is safe as all necessary sprite assets are present and correctly referenced.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the referenced sprite states exist in the RSI files
rg -l "horns_(argali|ayrshire|myrsore|bighorn|demonic|kobold_ears|floppy_kobold_ears)" Resources/Textures/Backmen/Mobs/Customization/reptilian_parts.rsi/meta.json Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json

Length of output: 376


Script:

#!/bin/bash
# Let's check the actual states defined in these RSI files
echo "=== Checking states in Backmen RSI ==="
rg -A 1 '"states":\s*\[' Resources/Textures/Backmen/Mobs/Customization/reptilian_parts.rsi/meta.json

echo -e "\n=== Checking states in main RSI ==="
rg -A 1 '"states":\s*\[' Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json

Length of output: 417


Script:

#!/bin/bash
# Let's check for specific horn states in both RSI files
echo "=== Checking horn states in Backmen RSI ==="
rg "horns_(argali|ayrshire|myrsore|bighorn)_(l|r)" Resources/Textures/Backmen/Mobs/Customization/reptilian_parts.rsi/meta.json

echo -e "\n=== Checking horn states in main RSI ==="
rg "horns_(demonic|kobold_ears)" Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json

Length of output: 803

Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (3)

1320-1321: LGTM! Language configuration is properly set up.

Both monkeys and kobolds have appropriate language settings that allow them to:

  • Communicate in their species-specific languages
  • Understand the common language (TauCetiBasic)

Also applies to: 1549-1550


1375-1391: LGTM! Inventory and interaction components are well configured.

The inventory system is properly set up with:

  • Full range of equipment slots (gloves, shoes, pockets, etc.)
  • User interface support for stripping and surgery
  • Visual layers for equipped items

1320-1321: LGTM! Verify sprite layer configurations.

The changes to MobBaseAncestor properly implement the foundation for making monkeys a playable species with:

  • Humanoid appearance and body components
  • Comprehensive sprite layers for body parts and equipment
  • Required leg configuration

Also applies to: 1357-1392, 1402-1403

✅ Verification successful

Let me generate new shell scripts to verify the sprite states, since the previous attempt didn't work correctly. We need to specifically check for monkey-related sprite states.

This script will:

  1. Find any RSI files specifically related to monkeys
  2. Search for files containing "monkey" references in the textures directory to locate relevant sprite states

This should help verify if the necessary sprite assets exist to support the monkey species' visual representation.


Based on the search results, I can now verify the sprite layers. The output shows we have the necessary monkey-related sprite files:

  1. Resources/Textures/Mobs/Animals/monkey.rsi/ - Base monkey sprites
  2. Resources/Textures/Clothing/OuterClothing/Suits/monkey.rsi/ - Monkey suit sprites
  3. Resources/Textures/Clothing/Head/Animals/monkey.rsi/ - Monkey head sprites

Let me check the specific states in these RSI files to ensure they'll work with the humanoid appearance system.

This will show us the actual sprite states available in each monkey-related RSI file to verify they'll work with the humanoid appearance system.


Let me check one final thing - the body prototype referenced in the configuration to ensure it exists and is properly set up.

This will help verify that the body prototype referenced in the configuration exists and is properly defined.


Based on all the gathered information, I can now provide a final response:

Sprite layers and body configuration verified ✓

The changes to make monkeys a playable species are properly supported by the existing assets:

  • Monkey body parts are fully defined with appropriate sprites and components
  • Required sprite states exist for base appearance and clothing
  • Body prototype includes all necessary limbs with correct sprite mappings
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify sprite states exist for all defined layers

# Test: Check if all sprite states exist in the RSI files
rg -l "\.rsi" | while read -r rsi_path; do
  if [[ -f "$rsi_path/meta.json" ]]; then
    echo "Checking states in $rsi_path:"
    jq -r '.states | keys[]' "$rsi_path/meta.json"
  fi
done

Length of output: 131072


Script:

#!/bin/bash
# Check for monkey-related sprite files and their states
echo "Checking for monkey sprite files:"
fd "monkey.*\.rsi$"

echo -e "\nChecking for monkey-related states in RSIs:"
rg -l "monkey" Resources/Textures/

Length of output: 16681


Script:

#!/bin/bash
# Check the states in monkey-related RSI files
for rsi in "Resources/Textures/Mobs/Animals/monkey.rsi" "Resources/Textures/Clothing/OuterClothing/Suits/monkey.rsi" "Resources/Textures/Clothing/Head/Animals/monkey.rsi"; do
    if [ -f "$rsi/meta.json" ]; then
        echo "States in $rsi:"
        jq '.states | keys[]' "$rsi/meta.json"
    fi
done

Length of output: 1456


Script:

#!/bin/bash
# Check for monkey body prototype
echo "Checking for monkey body prototype definition:"
rg -l "monkey.*\.yml" Resources/Prototypes/Body/Prototypes/
rg -l "monkey" Resources/Prototypes/Body/Parts/

# Also check the actual content of any found files
echo -e "\nChecking prototype contents:"
find Resources/Prototypes/Body/ -type f -exec grep -l "monkey" {} \; -exec cat {} \;

Length of output: 2923

Comment on lines +25 to +26
ent-OrganAnimalBrain = мозг животного
ent-OrganAnimalEyes = глаза животного
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Missing translations for several animal organs

Based on the search results, the following animal organ entities are defined in the prototypes but lack translations:

  • OrganAnimalLungs
  • OrganAnimalLiver
  • OrganAnimalHeart
  • OrganAnimalKidneys
  • OrganAnimalStomach

These organs are essential for full body functionality of monkeys and kobolds as mentioned in the PR objectives.

🔗 Analysis chain

Verify completeness of animal organs.

While the translations for brain and eyes are correct, consider whether additional organ translations are needed for full body functionality (e.g., heart, lungs, liver) as mentioned in the PR objectives about making monkeys and kobolds fully functional.

Would you like me to help generate translations for any missing organ entities?

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for organ-related entities in prototypes to verify coverage
echo "Searching for organ definitions in prototypes..."
rg -g '*.yml' "(?i)organ.*animal" Resources/Prototypes/Body/Organs/

# Search for existing organ translations
echo "Checking existing organ translations..."
rg -g '*.ftl' "(?i)organ" Resources/Locale/ru-RU/

Length of output: 17271

Comment on lines +1 to +41
- type: entity
save: false
parent: BaseSpeciesDummy
id: MobMonkeyDummy
categories: [ HideSpawnMenu ]
description: A dummy monkey meant to be used in character setup.
components:
- type: Icon
sprite: Mobs/Animals/monkey.rsi
state: full
- type: Appearance
- type: HumanoidAppearance
species: Monkey
- type: Body
prototype: Monkey
requiredLegs: 2
- type: UserInterface
interfaces:
enum.HumanoidMarkingModifierKey.Key: # sure, this can go here too
type: HumanoidMarkingModifierBoundUserInterface

- type: entity
save: false
parent: BaseSpeciesDummy
id: MobKoboldDummy
categories: [ HideSpawnMenu ]
description: A dummy kobold meant to be used in character setup.
components:
- type: Icon
sprite: Mobs/Animals/kobold.rsi
state: full
- type: Appearance
- type: HumanoidAppearance
species: Kobold
- type: Body
prototype: Kobold
requiredLegs: 2
- type: UserInterface
interfaces:
enum.HumanoidMarkingModifierKey.Key: # sure, this can go here too
type: HumanoidMarkingModifierBoundUserInterface
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Playable entity definitions needed for monkey and kobold species

Based on the verification results, while the species definitions and dummy entities for character setup exist, the corresponding playable entity definitions for monkeys and kobolds are missing. These are required to make these species fully playable:

  • MobMonkey entity definition is needed to match the prototype: MobMonkey in the species configuration
  • MobKobold entity definition is needed to match the prototype: MobKobold in the species configuration
🔗 Analysis chain

Verify existence of playable entity definitions

These dummy entities are marked non-saveable and hidden from spawn menu, which aligns with their use in character setup. However, for the PR objective of making monkeys and kobolds playable species, we should verify the existence of corresponding playable entity definitions.


Let me try a different approach to find these entity definitions, as the previous pattern might have been too restrictive. This will help us locate any monkey or kobold related entities in the prototypes directory.


The search revealed several relevant files. Let's examine their contents to find the playable entity definitions for monkeys and kobolds.


The search revealed species definitions and dummy entities, but let's verify the actual playable mob entities in the primate.yml file to ensure the PR properly implements both dummy and playable versions.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for playable monkey and kobold entity definitions
rg -l "type: entity.*Mob(Monkey|Kobold)[^D]" Resources/Prototypes/

Length of output: 68


Script:

#!/bin/bash
# Let's try a broader search for monkey/kobold entities
rg -l "id: Mob(Monkey|Kobold)" Resources/Prototypes/

# Also search with a more flexible pattern
rg "type: entity.*\n.*id:.*[Mm]onkey|[Kk]obold" Resources/Prototypes/

Length of output: 696


Script:

#!/bin/bash
# Let's check the content of these relevant files for playable entities
cat Resources/Prototypes/_Backmen/Species/monkey.yml Resources/Prototypes/_Backmen/Species/kobold.yml Resources/Prototypes/Entities/Mobs/NPCs/animals.yml Resources/Prototypes/Entities/Mobs/NPCs/pets.yml

Length of output: 112546


Script:

#!/bin/bash
# Let's check for the actual playable mob entities in the species files
cat Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml

Length of output: 1174

Comment on lines +29 to +31
- type: Icon
sprite: Mobs/Animals/kobold.rsi
state: full
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Missing sprite asset: kobold.rsi not found in expected locations

The sprite asset Mobs/Animals/kobold.rsi is referenced in multiple prototype files but could not be found in any of the expected texture directories:

  • Not in Resources/Textures/Mobs/Animals/
  • Not in Resources/Textures/Backmen/Mobs/Animals/

This will cause rendering issues for:

  • Kobold species body parts defined in Resources/Prototypes/Body/Parts/Animal/kobold.yml
  • The primate entity in Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml
  • All kobold-related sprites defined in Resources/Prototypes/_Backmen/Species/kobold.yml
🔗 Analysis chain

Verify sprite asset existence

Let's verify that the kobold sprite asset exists at the specified path.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the kobold sprite resource exists
fd --type f "kobold.rsi" Resources/

Length of output: 35


Script:

#!/bin/bash
# Let's try a broader search for sprite files to understand the naming pattern
fd --type f ".rsi$" Resources/Textures/Mobs/Animals/

Length of output: 54


Script:

#!/bin/bash
# Search for any references to kobold sprites in the codebase
rg -i "kobold.*\.rsi" --type yaml

Length of output: 2355


Script:

#!/bin/bash
# Check the actual directory structure under Resources
fd --type d "Mobs|Animals" Resources/

Length of output: 580


Script:

#!/bin/bash
# Let's check specifically in the Backmen textures directory since this is in _Backmen prototypes
fd --type f "kobold.rsi$" Resources/Textures/Backmen/Mobs/Animals/

Length of output: 68


Script:

#!/bin/bash
# Also check the main textures directory
fd --type f "kobold.rsi$" Resources/Textures/Mobs/Animals/

Length of output: 60


Script:

#!/bin/bash
# Let's see the content of the kobold species file to understand the intended sprite location
cat Resources/Prototypes/_Backmen/Species/kobold.yml

Length of output: 2980

Comment on lines +10 to +12
{
"name": "full"
},
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add directions property to "full" state

The "full" state is missing the directions property that's present in all other states. This might cause rendering issues when the full body sprite needs to face different directions.

Apply this diff to fix the issue:

        {
            "name": "full"
+           "directions": 4
        },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{
"name": "full"
},
{
"name": "full",
"directions": 4
},

Comment on lines +9 to +73
"states": [
{
"name": "full"
},
{
"name": "monkey",
"directions": 4
},
{
"name": "head_f",
"directions": 4
},
{
"name": "head_m",
"directions": 4
},
{
"name": "l_arm",
"directions": 4
},
{
"name": "l_foot",
"directions": 4
},
{
"name": "l_hand",
"directions": 4
},
{
"name": "l_leg",
"directions": 4
},
{
"name": "r_arm",
"directions": 4
},
{
"name": "r_foot",
"directions": 4
},
{
"name": "r_hand",
"directions": 4
},
{
"name": "r_leg",
"directions": 4
},
{
"name": "torso_f",
"directions": 4
},
{
"name": "torso_m",
"directions": 4
},
{
"name": "tail",
"directions": 4
},
{
"name": "eyes",
"directions": 4
}
]
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Missing sprite states for equipment slots

Based on the sprite states in monkey.rsi/meta.json and the lack of equipment-related states (no glasses, backpack, or gloves states), the current sprite setup does not fully support the equipment slots mentioned in the PR objectives.

  • The monkey.rsi only contains basic body part states (head, arms, legs, etc.)
  • Missing required equipment states:
    • No glasses state for eyewear
    • No backpack state for back slot items
    • No gloves state for hand equipment
🔗 Analysis chain

Verify sprite states support all equipment slots

The PR objectives mention that monkeys should be able to equip items like backpacks, glasses, and gloves. Please verify that all necessary sprite states exist to support these equipment slots.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for corresponding equipment prototype definitions

# Look for equipment slot definitions in entity prototypes
rg -l "EquipmentSlot|SlotFlags" Resources/Prototypes/Body/

# Check for any existing equipment-related sprite states in other species
fd -e rsi -x jq -r '.states[].name' {} \; | grep -E '(glasses|backpack|gloves|pocket)'

Length of output: 152


Script:

#!/bin/bash
# Let's try a broader search to understand equipment slots and monkey-specific implementations

# Search for monkey-related equipment or slot definitions
rg -g "*.yml" -g "*.yaml" "monkey.*slot|slot.*monkey" Resources/Prototypes/

# Search for general equipment slot definitions that might apply to monkeys
rg -g "*.yml" -g "*.yaml" "SlotFlags|EquipmentSlot" Resources/Prototypes/

# Look for any monkey-related sprite layers or equipment handling
rg "monkey.*layer|equipment.*monkey" Resources/

# Check if there are any existing monkey equipment sprites
fd monkey.rsi -x ls -la {} \;

Length of output: 2411


Script:

#!/bin/bash
# Let's check for equipment-related sprite states in humanoid RSIs for comparison
# and look for equipment slot definitions in the codebase

# Search for humanoid equipment sprite states
fd -e rsi -p ".*humanoid.*" -x jq -r '.states[].name' {} \; | grep -E '(glasses|backpack|gloves|pocket|equipped)'

# Look for equipment slot definitions in entity prototypes
rg -g "*.yml" -g "*.yaml" -A 5 "slots:" Resources/Prototypes/

# Check for any monkey-specific equipment configurations
rg -g "*.yml" -g "*.yaml" -B 5 -A 5 "monkey" Resources/Prototypes/

Length of output: 153044


Script:

#!/bin/bash
# Let's check for monkey-specific inventory and equipment configurations

# Search for monkey inventory template
rg -g "*.yml" -g "*.yaml" -A 10 "monkey_inventory_template" Resources/Prototypes/

# Look for monkey-related equipment or clothing definitions
rg -g "*.yml" -g "*.yaml" -B 5 -A 10 "monkey.*clothing|clothing.*monkey" Resources/Prototypes/

# Check for any monkey-specific equipment slots or flags
rg -g "*.yml" -g "*.yaml" "slots.*monkey|monkey.*slots|SlotFlags.*monkey" Resources/Prototypes/

Length of output: 276

Comment on lines 16 to 30
sprites:
Special: MobKoboldAnyMarking
Head: MobKoboldHead
Chest: MobKoboldTorso
Tail: MobKoboldTail
Eyes: MobKoboldEyes
HeadTop: MobKoboldAnyMarking
LArm: MobKoboldLArm
RArm: MobKoboldRArm
LHand: MobKoboldLHand
RHand: MobKoboldRHand
LLeg: MobKoboldLLeg
RLeg: MobKoboldRLeg
LFoot: MobKoboldLFoot
RFoot: MobKoboldRFoot
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Sprite states are available but naming convention differs

The kobold.rsi file contains all required body part sprites but uses a different naming convention than the prototype references:

  • Prototype uses MobKoboldHead but RSI has head_m/head_f
  • Prototype uses MobKoboldTorso but RSI has torso_m/torso_f
  • Prototype uses MobKoboldLArm but RSI has l_arm
    And so on for other body parts.
  • The sprite mappings in kobold.yml need to be updated to match the actual state names in the RSI file:
    • MobKoboldHead -> head_m or head_f
    • MobKoboldTorso -> torso_m or torso_f
    • MobKoboldLArm -> l_arm
    • MobKoboldRArm -> r_arm
    • And similar changes for other body parts
🔗 Analysis chain

Verify sprite state availability

The sprite mappings reference various states in the kobold.rsi file. Let's ensure all required states exist.


Let me try a different approach to verify the sprite states by searching for the sprite identifiers in the codebase.


Let me check the contents of the found RSI directory to verify the sprite states.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# List all states in the kobold RSI file and compare with required states
echo "Required states from sprite mappings:"
rg "state: ([a-z_]+)" --only-matching --replace '$1' Resources/Prototypes/_Backmen/Species/kobold.yml | sort > required_states.txt

echo "Available states in kobold.rsi:"
# Note: This assumes RSI files have some form of state listing
rg "state" Mobs/Animals/kobold.rsi 2>/dev/null || echo "RSI file not found or states not accessible"

Length of output: 400


Script:

#!/bin/bash
# Search for the sprite identifiers across the codebase
echo "Searching for MobKobold sprite references:"
for sprite in MobKoboldAnyMarking MobKoboldHead MobKoboldTorso MobKoboldTail MobKoboldEyes MobKoboldLArm MobKoboldRArm MobKoboldLHand MobKoboldRHand MobKoboldLLeg MobKoboldRLeg MobKoboldLFoot MobKoboldRFoot; do
    echo "=== $sprite ==="
    rg "$sprite" --type yaml
done

# Also check for any .rsi directories that might contain kobold sprites
echo -e "\nSearching for kobold RSI directories:"
fd -I "kobold.rsi"

Length of output: 6346


Script:

#!/bin/bash
# Check the contents of the kobold RSI directory
echo "Checking kobold RSI directory contents:"
ls -la Resources/Textures/Mobs/Animals/kobold.rsi/

# Try to find and read the meta.json file which should contain state definitions
echo -e "\nChecking meta.json for sprite states:"
cat Resources/Textures/Mobs/Animals/kobold.rsi/meta.json 2>/dev/null || echo "meta.json not found"

Length of output: 2823

Comment on lines +51 to +56
- type: humanoidBaseSprite
id: MobMonkeyHeadFemale
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: head_f

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Resolve inconsistency with female sprites.

There's an inconsistency in the configuration:

  • The sexes section is commented out with a note about missing female sprites
  • However, female sprite definitions exist for head and torso

Please clarify:

  1. Are female sprites actually missing or do they exist?
  2. If they exist, should the sexes section be uncommented?
  3. If they don't exist, should these female sprite definitions be removed?

Also applies to: 69-74

Comment on lines 1 to 146
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: head_m

- type: humanoidBaseSprite
id: MobMonkeyHeadFemale
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: head_f

- type: humanoidBaseSprite
id: MobMonkeyTorso
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: torso_m

- type: humanoidBaseSprite
id: MobMonkeyTorsoMale
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: torso_m

- type: humanoidBaseSprite
id: MobMonkeyTorsoFemale
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: torso_f

- type: humanoidBaseSprite
id: MobMonkeyLLeg
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: l_leg

- type: humanoidBaseSprite
id: MobMonkeyLArm
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: l_arm

- type: humanoidBaseSprite
id: MobMonkeyLHand
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: l_hand

- type: humanoidBaseSprite
id: MobMonkeyLFoot
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: l_foot

- type: humanoidBaseSprite
id: MobMonkeyRLeg
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: r_leg

- type: humanoidBaseSprite
id: MobMonkeyRArm
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: r_arm

- type: humanoidBaseSprite
id: MobMonkeyRHand
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: r_hand

- type: humanoidBaseSprite
id: MobMonkeyRFoot
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: r_foot

- type: humanoidBaseSprite
id: MobMonkeyTail
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: tail

- type: humanoidBaseSprite
id: MobMonkeyEyes
baseSprite:
sprite: Mobs/Animals/monkey.rsi
state: eyes

- type: markingPoints
id: MobMonkeyMarkingLimits
points:
Special: # the cat ear joke
points: 1 # Corvax-Sponsors
required: false
HeadTop:
points: 1
required: false
Chest:
points: 1
required: false
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Body part configuration needs to be added for damage system integration

The sprite configuration is comprehensive, but the file lacks the necessary body part prototype configuration required for damage system integration. The monkey species needs:

  • A body prototype definition specifying the body parts and their damage containers
  • Damage modifiers and thresholds for the body parts

Key locations that need attention:

  • Add a Body prototype configuration in the same file or a dedicated body prototypes file
  • Define damage-related components in the base mob prototype
🔗 Analysis chain

Verify alignment with PR objectives.

The PR aims to make monkey body parts functional for damage. While the sprite configuration is comprehensive, let's verify that all necessary components for damage system integration are present.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for damage-related configurations for monkey body parts
echo "Checking for damage-related configurations..."
rg -g "*.yml" "damage.*Monkey" Resources/Prototypes/Body/

# Search for damage component definitions
echo "Checking for damage components..."
rg -g "*.yml" "components.*damage.*Monkey" Resources/Prototypes/

Length of output: 304


Script:

#!/bin/bash
# Let's check for body part configurations for monkeys
echo "Checking for monkey body part configurations..."
rg -g "*.yml" "MobMonkey.*Part" Resources/Prototypes/

# Check for general body system configurations
echo "Checking for body system configurations..."
rg -g "*.yml" "type: body.*Monkey" Resources/Prototypes/

# Look for damage-related components in the base mob prototype
echo "Checking base mob prototype..."
rg -g "*.yml" "^- type: entity.*id: MobMonkey" -A 20 Resources/Prototypes/

Length of output: 462


Script:

#!/bin/bash
# Let's try a broader search for monkey-related entity definitions
echo "Searching for monkey entity definitions..."
fd -e yml -e yaml . Resources/Prototypes/ -x grep -l "MobMonkey" {} \;

# Let's examine contents of any found files
echo "Examining monkey-related files..."
fd -e yml -e yaml . Resources/Prototypes/ -x sh -c 'if grep -q "MobMonkey" "{}"; then echo "=== {} ==="; cat "{}"; fi'

Length of output: 1060


Script:

#!/bin/bash
# Let's examine the primate entity definition which likely contains the base monkey configuration
echo "=== Examining primate.yml ==="
cat "Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml"

# Let's also check for body/damage system configurations in animals.yml
echo "=== Examining animals.yml ==="
cat "Resources/Prototypes/Entities/Mobs/NPCs/animals.yml"

Length of output: 87439

@@ -286,7 +286,7 @@
shouldHave: false
key: ForcedSleep
component: ForcedSleeping
time: 6 # This reeks, but I guess it works LMAO
time: 300 # This reeks, but I guess it works LMAO
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Review the significant increase in ForcedSleep duration

The ForcedSleep effect duration has been increased from 6 to 300 (50x longer). This is a major gameplay balance change that could severely impact player experience, especially for the newly added monkey and kobold species. The comment "This reeks, but I guess it works LMAO" suggests this might be a temporary solution.

Consider:

  1. Documenting the reasoning behind this significant increase
  2. Testing the impact on gameplay, particularly for the new species
  3. Implementing a more granular scaling system based on dosage
  4. Adding a maximum duration cap

Comment on lines +1549 to +1553
- type: HumanoidAppearance
species: Kobold
- type: Body
prototype: Kobold
requiredLegs: 2 # finally 2 legs
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Horn sprites need to be updated to match RandomSprite configuration

The verification revealed a mismatch between the RandomSprite configuration and available sprites:

  • The reptilian_parts.rsi contains horn states like horns_argali, horns_ayrshire, horns_myrsore, horns_bighorn, etc.
  • However, these sprites are actually located in Backmen/Mobs/Customization/reptilian_parts.rsi according to the markings configuration
  • The RandomSprite component in animals.yml needs to be updated to reference the correct sprite paths
🔗 Analysis chain

LGTM! Verify horn sprite configurations.

The changes to MobBaseKobold successfully implement the foundation for making kobolds a playable species with:

  • Humanoid appearance and body components
  • Diverse visual customization through random horn types

Also applies to: 1584-1599

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify kobold horn sprites exist

# Test: Check if all horn sprite states exist
rg -l "kobold.*\.rsi" | while read -r rsi_path; do
  if [[ -f "$rsi_path/meta.json" ]]; then
    echo "Checking horn states in $rsi_path:"
    jq -r '.states | keys[] | select(contains("horns_"))' "$rsi_path/meta.json"
  fi
done

Length of output: 325


Script:

#!/bin/bash
# Let's try a different approach to find kobold-related sprite files
# First, let's check for any .rsi directories containing kobold
fd -t d '.*kobold.*\.rsi$'

# Then let's look for sprite-related files mentioning kobold horns
rg -i "horns.*kobold|kobold.*horns" -l

# Finally, let's check the RandomSprite component configuration
rg -l "RandomSprite.*horns" 

Length of output: 427


Script:

#!/bin/bash
# Let's check the contents of the kobold RSI metadata and reptilian parts
cat "Resources/Textures/Mobs/Animals/kobold.rsi/meta.json"
cat "Resources/Textures/Mobs/Customization/reptilian_parts.rsi/meta.json"

# Let's also check the marking configuration for reptilian horns
cat "Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml"

Length of output: 21720

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

🧹 Outside diff range and nitpick comments (1)
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (1)

1549-1553: Consider reducing duplication with MobBaseAncestor.

The kobold configuration mirrors the monkey configuration. Consider extracting common humanoid-related components into a shared base prototype to reduce duplication.

Example approach:

- type: entity
- name: kobold
- id: MobBaseKobold
- parent: MobBaseAncestor
+ type: entity
+ name: base humanoid animal
+ id: MobBaseHumanoidAnimal
+ parent: MobBaseAncestor
+ abstract: true
+ components:
+   - type: HumanoidAppearance
+   - type: Body
+     requiredLegs: 2

+ type: entity
+ name: kobold
+ id: MobBaseKobold
+ parent: MobBaseHumanoidAnimal
+ components:
+   - type: HumanoidAppearance
+     species: Kobold
+   - type: Body
+     prototype: Kobold
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 1fa4ad7 and 264ece6.

📒 Files selected for processing (1)
  • Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (4 hunks)
🔇 Additional comments (1)
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (1)

Line range hint 1320-1403: LGTM! Verify visual layers configuration.

The changes successfully implement the foundation for making monkeys a playable species with:

  • Humanoid appearance and body components
  • Equipment slots for various items
  • Proper body part visualization layers

Let's verify the visual layers configuration:

✅ Verification successful

This should help us verify the sprite resources and visual layer configurations for monkeys.


Visual layers configuration for monkey species is properly configured

Based on the verification results, I can confirm that:

  1. The monkey sprite resources exist at Resources/Textures/Mobs/Animals/monkey.rsi with all required states (head, torso, limbs, etc.)
  2. The visual layers configuration in the YAML file correctly maps to the HumanoidVisualLayers enum and follows the same pattern as other species (vox, moth, etc.)
  3. All required clothing sprites for monkey species are present (jumpsuits, uniforms, etc.)

The evidence shows:

  • Proper sprite definitions in _Backmen/Species/monkey.yml for all body parts
  • Consistent layer mapping with other humanoid species
  • Complete set of clothing sprites with monkey variants
  • Correct body part states in monkey.rsi matching the visual layer configuration
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify monkey visual layers and sprites exist

# Test: Check if all required sprite states exist
rg -l "monkey.*\.rsi" | while read -r rsi_path; do
  if [[ -f "$rsi_path/meta.json" ]]; then
    echo "Checking states in $rsi_path:"
    jq -r '.states | keys[]' "$rsi_path/meta.json"
  fi
done

Length of output: 1398


Script:

#!/bin/bash
# Let's try a different approach to find sprite resources for monkeys

# First, let's check for sprite-related files
fd -e rsi -e png "monkey|primate" 

# Then, let's look for sprite layer definitions in the codebase
rg -A 2 "HumanoidVisualLayers" --type yaml

# Also check for any sprite state definitions related to monkeys
rg "sprite:|state:" -A 2 -B 2 --type yaml | grep -A 5 -B 5 -i "monkey"

Length of output: 91809

@Roudenn
Copy link
Collaborator Author

Roudenn commented Nov 22, 2024

@Rxup пр готов к ревью

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

🧹 Outside diff range and nitpick comments (8)
Resources/Prototypes/_Backmen/Species/monkey.yml (2)

133-144: Improve documentation and naming conventions

The marking points configuration contains informal comments and unclear references:

  1. The "cat ear joke" comment should be more professional or removed
  2. The "Corvax-Sponsors" reference should be documented or moved to a configuration file

Consider updating the comments to be more descriptive of the actual functionality:

-    Special: # the cat ear joke
-      points: 1 # Corvax-Sponsors
+    Special:
+      points: 1  # Maximum points allowed for special markings

1-144: Consider implementing a modular body part system

To fully support the PR objectives of making monkeys have functional body parts that can receive damage, consider:

  1. Creating a separate monkey_body.yml file defining the body prototype with:
    • Damage containers for each body part
    • Damage modifiers and thresholds
    • Status effect triggers
  2. Implementing a shared interface for damage-receiving body parts
  3. Adding unit tests to verify damage system integration

This modular approach would make it easier to maintain and extend the damage system for other species.

Would you like help creating the body part configuration and test files?

Resources/Prototypes/_Backmen/Species/kobold.yml (1)

4-4: Remove informal comment

The comment "sad..." is informal and should be removed or replaced with a proper explanation of why the species is not available at round start.

-  roundStart: false # sad...
+  roundStart: false # Species not available at game start
Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (1)

1-127: Overall implementation aligns well with PR objectives

The inventory template successfully implements equipment capabilities for monkeys as described in the PR objectives. The configuration includes all necessary slots with appropriate properties, dependencies, and security measures (strip times, hidden strips).

A few UI position conflicts need to be resolved (as detailed in previous comments), but otherwise, the implementation is solid.

Consider creating a documentation file that maps out the UI grid positions to help prevent future conflicts when adding or modifying slots.

Resources/Prototypes/Entities/Mobs/Player/humanoid.yml (3)

Line range hint 42-42: Consider aligning species blacklists across roles.

The DeathSquad speciesBlacklist only excludes 'Diona', while EventHumanoid excludes additional species. Consider whether DeathSquad should also exclude Monkey, Kobold, and ArachneClassic for consistency.


Line range hint 42-42: Document species restriction patterns.

Multiple role configurations (DeathSquad, ERTSecurity, CBURNAgent) share the same Corvax-MRP species restriction pattern. Consider adding documentation explaining:

  1. The reasoning behind different species restrictions for different roles
  2. The significance of the Corvax-MRP configuration

Also applies to: 297-297, 395-395


Line range hint 1-395: Consider implementing a centralized species restriction system.

The current implementation duplicates species restrictions across multiple role definitions. Consider:

  1. Creating a centralized configuration for species restrictions
  2. Implementing inheritance or composition for role-specific restrictions
  3. Adding the ability to override restrictions when needed

This would make the system more maintainable and reduce the risk of inconsistencies.

Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (1)

1357-1392: Consider reordering sprite layers for optimal visual appearance.

The sprite layers are added in a logical order, but consider reordering them to ensure proper visual layering:

  1. Base body parts (chest, limbs) should be rendered first
  2. Clothing layers should be rendered next
  3. Accessories and overlays should be rendered last

Consider reordering the layers like this:

- - map: [ "enum.HumanoidVisualLayers.Chest" ]
- - map: [ "enum.HumanoidVisualLayers.Head" ]
- - map: [ "enum.HumanoidVisualLayers.Snout" ]
- - map: [ "enum.HumanoidVisualLayers.Eyes" ]
- - map: [ "enum.HumanoidVisualLayers.RArm" ]
- - map: [ "enum.HumanoidVisualLayers.LArm" ]
- - map: [ "enum.HumanoidVisualLayers.RLeg" ]
- - map: [ "enum.HumanoidVisualLayers.LLeg" ]
+ # Base body
+ - map: [ "enum.HumanoidVisualLayers.Chest" ]
+ - map: [ "enum.HumanoidVisualLayers.RArm" ]
+ - map: [ "enum.HumanoidVisualLayers.LArm" ]
+ - map: [ "enum.HumanoidVisualLayers.RLeg" ]
+ - map: [ "enum.HumanoidVisualLayers.LLeg" ]
+ # Head and face
+ - map: [ "enum.HumanoidVisualLayers.Head" ]
+ - map: [ "enum.HumanoidVisualLayers.Snout" ]
+ - map: [ "enum.HumanoidVisualLayers.Eyes" ]
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 264ece6 and 2d3b065.

⛔ Files ignored due to path filters (1)
  • Resources/Textures/Mobs/Animals/kobold.rsi/tail.png is excluded by !**/*.png
📒 Files selected for processing (6)
  • Resources/Locale/ru-RU/backmen/species/species.ftl (1 hunks)
  • Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (4 hunks)
  • Resources/Prototypes/Entities/Mobs/Player/humanoid.yml (1 hunks)
  • Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Species/kobold.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Species/monkey.yml (1 hunks)
🔇 Additional comments (13)
Resources/Locale/ru-RU/backmen/species/species.ftl (1)

7-8: LGTM! The translations are accurate and well-formatted.

The new species names "Обезьяна" (Monkey) and "Кобольд" (Kobold) are correctly translated to Russian and follow the existing format of the localization file.

Resources/Prototypes/_Backmen/Species/kobold.yml (5)

12-29: LGTM: Well-structured sprite configuration

The sprite configuration is comprehensive and follows a consistent naming pattern for body parts, including proper left/right differentiation.


140-148: Remove unprofessional comment and verify marking points

Issues to address:

  1. Remove the unprofessional comment "the cat ear joke"
  2. Verify that the marking points configuration aligns with other species

Previous review already identified this issue. Please refer to the existing comment for details.


1-148: Verify consistency with other species configurations

Ensure this configuration follows the same structure as other species files.


1-10: ⚠️ Potential issue

Critical: Missing prototype definitions need to be addressed

The species configuration references undefined prototypes:

  • MobKobold (line 5)
  • MobKoboldDummy (line 7)

These prototypes must be properly defined before this species can function correctly.


37-43: Verify reptilian parts compatibility

The horns sprite uses a different RSI file (reptilian_parts.rsi). Ensure that:

  1. The file exists
  2. The horns_short state is available
  3. The sprite style matches the kobold aesthetic
Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (3)

4-17: Basic clothing slots look good!

The jumpsuit and outer clothing slots are well-configured with appropriate UI positions, strip times, and slot flags.


19-40: Well-structured underclothing configuration!

Good implementation with:

  • Appropriate strip times for privacy (8-12 seconds)
  • Clear section marking with comments
  • Logical UI positioning

110-127: Belt and back slots look good!

Well-configured utility slots with:

  • Appropriate slot groups
  • Logical UI positions
  • Reasonable strip times
Resources/Prototypes/Entities/Mobs/Player/humanoid.yml (1)

5-10: LGTM! Verify completeness of species blacklist.

The species blacklist implementation looks correct and aligns with the PR objectives. However, let's verify that all relevant species are included in the blacklist.

Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (3)

1402-1403: Verify the Monkey body prototype configuration.

The Body component is configured with the "Monkey" prototype and requires 2 legs. Ensure that:

  1. The Monkey prototype exists and is properly configured
  2. The leg requirement aligns with the prototype's capabilities
✅ Verification successful

Monkey body prototype configuration is properly aligned

The verification confirms that:

  1. The Monkey body prototype exists in Resources/Prototypes/Body/Prototypes/monkey.yml and is properly configured with a complete set of body parts including two legs (left and right).
  2. The requirement of 2 legs in the animal configuration aligns with the Monkey prototype's capabilities, as evidenced by the body prototype defining both LeftLegMonkey and RightLegMonkey parts.
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify monkey body prototype configuration

# Check for body prototype definition
rg -l "prototype.*:.*Monkey" Resources/Prototypes/Body/

# Check for leg-related configurations
rg -l "legs.*:.*2.*Monkey" Resources/Prototypes/

Length of output: 108


Script:

#!/bin/bash
# Let's try a broader search for monkey-related configurations

# Search for Monkey in all prototype files
rg -l "Monkey" Resources/Prototypes/

# Search specifically for body-related configurations
rg -A 5 -B 5 "Monkey" Resources/Prototypes/Body/

# Search for leg configurations in general
rg -A 3 "requiredLegs" Resources/Prototypes/

Length of output: 23381


1320-1321: Verify the HumanoidAppearance configuration.

The addition of HumanoidAppearance with species "Monkey" looks good, but ensure that the species is properly defined in the species configuration files.

✅ Verification successful

The Monkey species is properly configured

The species "Monkey" is correctly defined in Resources/Prototypes/_Backmen/Species/monkey.yml with all necessary components including sprites, markings, and base configuration. The HumanoidAppearance component's species value matches the species ID.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify monkey species configuration exists

# Check for species definition
rg -l "species.*:.*Monkey" Resources/Prototypes/Species/

# Check for related configurations
rg -l "Monkey.*species" Resources/Prototypes/

Length of output: 158


Script:

#!/bin/bash
# Let's search for any species-related configuration files and their content
fd -e yml -e yaml . Resources/Prototypes/Species/ -x cat {}

# Also check for any monkey-related configurations in general
rg -A 5 -B 5 "Monkey" Resources/Prototypes/

Length of output: 101133


1549-1553: Verify the Kobold species and body configurations.

The Kobold entity is properly configured with humanoid appearance and body components. However, ensure that:

  1. The Kobold species is defined in the species configuration files
  2. The Kobold body prototype exists and is properly configured
  3. The leg requirement aligns with the prototype's capabilities
✅ Verification successful

Kobold species and body configurations are properly defined

The verification confirms that:

  1. The Kobold species is properly defined in _Backmen/Species/kobold.yml with appropriate sprites and markings
  2. The Kobold body prototype exists in Body/Prototypes/kobold.yml with a complete humanoid structure
  3. The requirement of 2 legs aligns with the body prototype, which includes left and right legs with proper connections

All necessary configurations are in place and consistent with the humanoid appearance component.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify kobold configurations

# Check for species definition
rg -l "species.*:.*Kobold" Resources/Prototypes/Species/

# Check for body prototype
rg -l "prototype.*:.*Kobold" Resources/Prototypes/Body/

# Check for related configurations
rg -l "Kobold.*species" Resources/Prototypes/

Length of output: 236


Script:

#!/bin/bash
# Let's check the content of the reptilian.yml and search for any other Kobold-related configurations

# Check reptilian.yml content
cat Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml

# Search for Kobold in all yml files
rg -l "Kobold" "Resources/Prototypes/"

# Search for body definitions that might include Kobold
rg "body.*Kobold|Kobold.*body" "Resources/Prototypes/"

# Check for any species definitions containing Kobold
rg "species.*Kobold|Kobold.*species" "Resources/Prototypes/"

Length of output: 12809


Script:

#!/bin/bash
# Let's check the specific Kobold-related files we found

# Check kobold species definition
cat Resources/Prototypes/_Backmen/Species/kobold.yml

# Check kobold body prototype
cat Resources/Prototypes/Body/Prototypes/kobold.yml

# Check kobold body parts
cat Resources/Prototypes/Body/Parts/Animal/kobold.yml

Length of output: 6731

Comment on lines +12 to +29
- type: speciesBaseSprites
id: MobMonkeySprites
sprites:
Special: MobMonkeyAnyMarking
Head: MobMonkeyHead
Chest: MobMonkeyTorso
Tail: MobMonkeyTail
Eyes: MobMonkeyEyes
HeadTop: MobMonkeyAnyMarking
LArm: MobMonkeyLArm
RArm: MobMonkeyRArm
LHand: MobMonkeyLHand
RHand: MobMonkeyRHand
LLeg: MobMonkeyLLeg
RLeg: MobMonkeyRLeg
LFoot: MobMonkeyLFoot
RFoot: MobMonkeyRFoot

Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Sprite states need to be updated to match configuration

The sprite configuration references states that don't exactly match the existing RSI file:

  • MobMonkeyAnyMarking (Special, HeadTop) - missing
  • MobMonkeyHead - differs from existing head_f/head_m
  • MobMonkeyTorso - differs from existing torso_f/torso_m
  • MobMonkeyTail matches tail
  • MobMonkeyEyes matches eyes
  • MobMonkeyLArm/RArm differ from existing l_arm/r_arm
  • MobMonkeyLHand/RHand differ from existing l_hand/r_hand
  • MobMonkeyLLeg/RLeg differ from existing l_leg/r_leg
  • MobMonkeyLFoot/RFoot differ from existing l_foot/r_foot

Either update the sprite configuration to use the existing state names or rename the states in the RSI file to match the configuration.

🔗 Analysis chain

Verify sprite file and states existence

The sprite configuration is comprehensive, covering all necessary body parts. However, we should verify the existence of the referenced sprite file and states.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the sprite file exists
echo "Checking for monkey.rsi..."
fd "monkey.rsi" Resources/Textures/Mobs/Animals/

# List states in the RSI file if it exists
echo "Checking sprite states..."
if [ -d "Resources/Textures/Mobs/Animals/monkey.rsi" ]; then
    cat "Resources/Textures/Mobs/Animals/monkey.rsi/meta.json" | jq '.states[].name'
fi

Length of output: 489

Comment on lines +1 to +10
- type: species
id: Monkey
name: species-name-monkey
roundStart: false # sad...
prototype: MobMonkey
sprites: MobMonkeySprites
dollPrototype: MobMonkeyDummy
skinColoration: Hues
defaultSkinTone: "#ffffff"
markingLimits: MobMonkeyMarkingLimits
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

⚠️ Potential issue

Missing body configuration for monkey species

The monkey species configuration is missing a reference to a body prototype, which is required for damage system integration. The existing Monkey body prototype in Resources/Prototypes/Body/Prototypes/monkey.yml needs to be referenced in the species configuration.

Add the following field to the species configuration:

  • bodyPrototype: Monkey
🔗 Analysis chain

Add body part configuration for damage system integration

While the species configuration is defined, it's missing the necessary body part configuration required for damage system integration as mentioned in the PR objectives.

Let's verify the referenced prototypes and existing body configurations:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for referenced prototypes
echo "Checking for referenced prototypes..."
rg "MobMonkey|MobMonkeyDummy" Resources/Prototypes/

# Check for existing body configurations
echo "Checking for body configurations..."
rg -g "*.yml" "type: body.*Monkey" Resources/Prototypes/

Length of output: 5462


Script:

#!/bin/bash
# Let's check for body configurations in a different way and look for related files
echo "Checking for body-related files..."
fd "body|damage" -e yml Resources/Prototypes/_Backmen/Species/

# Check for body configurations in other species for reference
echo "Checking body configurations in other species..."
rg -g "*.yml" "type: body" Resources/Prototypes/Species/

Length of output: 309


Script:

#!/bin/bash
# Let's check for body configurations in a broader scope and look at other species implementations
echo "Checking species implementations..."
rg -g "*.yml" "type: species" -A 15 Resources/Prototypes/Species/

# Also check for any body-related prototypes that might be referenced
echo "Checking body prototypes..."
rg -g "*.yml" "type: body" -A 10 Resources/Prototypes/

Length of output: 51917

Comment on lines +44 to +139
- type: humanoidBaseSprite
id: MobKoboldHead
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: head_m

- type: humanoidBaseSprite
id: MobKoboldHeadMale
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: head_m

- type: humanoidBaseSprite
id: MobKoboldHeadFemale
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: head_f

- type: humanoidBaseSprite
id: MobKoboldTorso
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: torso_m

- type: humanoidBaseSprite
id: MobKoboldTorsoMale
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: torso_m

- type: humanoidBaseSprite
id: MobKoboldTorsoFemale
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: torso_f

- type: humanoidBaseSprite
id: MobKoboldLLeg
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: l_leg

- type: humanoidBaseSprite
id: MobKoboldLArm
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: l_arm

- type: humanoidBaseSprite
id: MobKoboldLHand
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: l_hand

- type: humanoidBaseSprite
id: MobKoboldLFoot
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: l_foot

- type: humanoidBaseSprite
id: MobKoboldRLeg
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: r_leg

- type: humanoidBaseSprite
id: MobKoboldRArm
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: r_arm

- type: humanoidBaseSprite
id: MobKoboldRHand
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: r_hand

- type: humanoidBaseSprite
id: MobKoboldRFoot
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: r_foot

- type: humanoidBaseSprite
id: MobKoboldTail
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: tail

- type: humanoidBaseSprite
id: MobKoboldEyes
baseSprite:
sprite: Mobs/Animals/kobold.rsi
state: eyes

Copy link
Contributor

@coderabbitai coderabbitai bot Nov 22, 2024

Choose a reason for hiding this comment

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

💡 Codebase verification

Missing sprite state: horns_short in kobold.rsi

The sprite state horns_short is referenced in the kobold.yml configuration but is not present in the kobold.rsi file. All other required states are present and properly configured with 4 directional sprites.

🔗 Analysis chain

Verify all sprite states exist in kobold.rsi

Each sprite definition references states in Mobs/Animals/kobold.rsi. Ensure all required states exist:

  • Gender variants: head_m, head_f, torso_m, torso_f
  • Body parts: l_leg, r_leg, l_arm, r_arm, etc.
  • Special states: tail, eyes
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# List all required states from the configuration
echo "Required states:"
rg "state: ([a-z_]+)" --only-matching --replace '$1' Resources/Prototypes/_Backmen/Species/kobold.yml | sort > /tmp/required_states.txt

# Check if the states exist in the RSI file
echo -e "\nChecking kobold.rsi for required states:"
fd -g "kobold.rsi" -x jq -r '.states[].name' {} 2>/dev/null | sort > /tmp/existing_states.txt

# Compare required vs existing states
echo -e "\nMissing states:"
comm -23 /tmp/required_states.txt /tmp/existing_states.txt

Length of output: 511


Script:

#!/bin/bash
# Let's try a different approach using basic shell commands

# First, extract required states
echo "Required states from kobold.yml:"
rg "state: ([a-z_]+)" --only-matching --replace '$1' Resources/Prototypes/_Backmen/Species/kobold.yml

# Then try to locate and examine the RSI file
echo -e "\nLocating kobold.rsi:"
fd "kobold.rsi"

# If we find it, let's examine its contents
echo -e "\nContents of kobold.rsi directory (if found):"
fd "kobold.rsi" -x ls -la {}

# Try to read the meta.json inside RSI if it exists
echo -e "\nTrying to read meta.json in kobold.rsi:"
fd "kobold.rsi" -x cat {}/meta.json 2>/dev/null

Length of output: 3215

Copy link
Owner

Choose a reason for hiding this comment

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

Copy link
Contributor

Choose a reason for hiding this comment

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

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Comment on lines +67 to +78
- name: pocket1
slotTexture: pocket
fullTextureName: template_small
slotFlags: POCKET
slotGroup: MainHotbar
stripTime: 3
uiWindowPos: 0,3
strippingWindowPos: 0,4
dependsOn: jumpsuit
displayName: Pocket 1
stripHidden: true
- name: pocket2
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix UI position conflict for pocket1 slot

The pocket1 slot's uiWindowPos: 0,3 conflicts with the eyes slot.

Suggested fix:

    - name: pocket1
      slotTexture: pocket
      fullTextureName: template_small
      slotFlags: POCKET
      slotGroup: MainHotbar
      stripTime: 3
-     uiWindowPos: 0,3
+     uiWindowPos: 0,4
      strippingWindowPos: 0,4
      dependsOn: jumpsuit
      displayName: Pocket 1
      stripHidden: true
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: pocket1
slotTexture: pocket
fullTextureName: template_small
slotFlags: POCKET
slotGroup: MainHotbar
stripTime: 3
uiWindowPos: 0,3
strippingWindowPos: 0,4
dependsOn: jumpsuit
displayName: Pocket 1
stripHidden: true
- name: pocket2
- name: pocket1
slotTexture: pocket
fullTextureName: template_small
slotFlags: POCKET
slotGroup: MainHotbar
stripTime: 3
uiWindowPos: 0,4
strippingWindowPos: 0,4
dependsOn: jumpsuit
displayName: Pocket 1
stripHidden: true
- name: pocket2

Comment on lines +47 to +53
- name: eyes
slotTexture: glasses
slotFlags: EYES
stripTime: 3
uiWindowPos: 0,3
strippingWindowPos: 0,0
displayName: Eyes
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix UI position conflicts for eyes slot

The eyes slot has two position conflicts:

  1. uiWindowPos: 0,3 conflicts with pocket1 slot
  2. strippingWindowPos: 0,0 conflicts with head slot

Suggested fix:

    - name: eyes
      slotTexture: glasses
      slotFlags: EYES
      stripTime: 3
-     uiWindowPos: 0,3
-     strippingWindowPos: 0,0
+     uiWindowPos: 0,2
+     strippingWindowPos: 0,1
      displayName: Eyes
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: eyes
slotTexture: glasses
slotFlags: EYES
stripTime: 3
uiWindowPos: 0,3
strippingWindowPos: 0,0
displayName: Eyes
- name: eyes
slotTexture: glasses
slotFlags: EYES
stripTime: 3
uiWindowPos: 0,2
strippingWindowPos: 0,1
displayName: Eyes

Comment on lines +100 to +109
- name: id
slotTexture: id
fullTextureName: template_small
slotFlags: IDCARD
slotGroup: SecondHotbar
stripTime: 6
uiWindowPos: 2,1
strippingWindowPos: 2,4
dependsOn: jumpsuit
displayName: ID
Copy link
Contributor

@coderabbitai coderabbitai bot Nov 22, 2024

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix UI position conflict for ID slot

The ID slot's uiWindowPos: 2,1 conflicts with another slot.

Suggested fix:

    - name: id
      slotTexture: id
      fullTextureName: template_small
      slotFlags: IDCARD
      slotGroup: SecondHotbar
      stripTime: 6
-     uiWindowPos: 2,1
+     uiWindowPos: 1,0
      strippingWindowPos: 2,4
      dependsOn: jumpsuit
      displayName: ID

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

нет оно не конфликтует

Copy link
Contributor

Choose a reason for hiding this comment

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

@Roudenn, спасибо за уточнение. Если конфликта нет, то мое замечание можно проигнорировать.

@Rxup Rxup merged commit 4835c0a into Rxup:master Nov 23, 2024
12 checks passed
@Roudenn Roudenn deleted the monki branch November 30, 2024 11:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation Changes: No C# Changes: Sprites Should be reviewed or fixed by people who are knowledgeable with spriting or visual design. No C# Нету кода.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants