-
Notifications
You must be signed in to change notification settings - Fork 150
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
Conversation
WalkthroughThe 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
Poem
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? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
RSI Diff Bot; head commit 5430f19 merging into 82904b8 Resources/Textures/Mobs/Animals/kobold.rsi
Resources/Textures/Mobs/Animals/monkey.rsi
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 12
🧹 Outside diff range and nitpick comments (23)
Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml (3)
19-20
: Review UI component placementThe 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 requirementsBoth entities are well-structured, but consider adding comments or documentation about:
- Required components for species dummies
- The relationship between these dummies and their non-dummy counterparts
- The purpose of the HumanoidMarkingModifier for these species
1-41
: Approve the implementation with architectural notesThe 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 configurationsResources/Prototypes/Body/Prototypes/monkey.yml (1)
1-4
: Improve code documentation and professionalismThe 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 attributionThe 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 namesAlso 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 descriptionsEntity 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 markerThe 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 anatomyMonkeyWearable
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 slotsWhile 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 commentThe 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 variantThe 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 valuesThe 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_mAlso applies to: 48-49, 54-55, 60-61, 66-67, 72-73
1-143
: Consider gameplay mechanics beyond visual representationWhile the visual configuration is well-structured, consider additional aspects needed for a fully playable species:
- Interaction capabilities (mentioned in PR objectives about equipping items)
- Species-specific abilities or traits
- 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 suggestionsThe 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 detailsThe comments
start-backmen: surgery
andend-backmen: surgery
should be expanded to explain the surgery-related functionality or removed if no longer needed.
217-234
: Consider adding vision-related propertiesThe 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 requirementsThe 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 effectsThe new Frezon effects add interesting gameplay mechanics but may need balance adjustments:
- The
boozePower: 500
seems extremely high for a drunk effect- 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
andhorns_argali_r
) while the base sprites use single stateshorns_demonic
,horns_kobold_ears
, andhorns_floppy_kobold_ears
exist only in the baseMobs/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 compatibilityThe changes reference sprites from multiple sources (
Mobs/Customization/
andBackmen/Mobs/Customization/
). Please ensure:
- All referenced sprite states exist and are compatible with Kobold models
- 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 doneLength 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
⛔ 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:
- Verify that all referenced Kobold parts (RightArmKobold, LeftArmKobold, etc.) are properly defined
- 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:
- Verify that
OrganAnimalBrain
andOrganAnimalEyes
are properly defined - 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 examinationOrganAnimalEyes
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:
- Ensure this body prototype properly integrates with the species system
- Verify the transformation mechanism from primates to Kobolds
- 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:
- The
full.png
sprite file exists in the RSI directory - The "full" state appears to be a composite/fallback sprite, while individual body parts (head, torso, arms, etc.) have directional states
- 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
andBasePart
- 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:
- Adding appropriate slot components to relevant parts (e.g., glasses slot in head, glove slots in hands)
- Verifying if these are inherited from base parts
17-48
: Verify sprite resources and state naming
The sprite references need verification:
- Ensure
monkey.rsi
exists in the specified path - 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.
- Replace informal comments ("the cat ear joke") with proper documentation explaining the purpose of Special markings.
- The "Corvax-Sponsors" comment needs clarification or should be removed.
- 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.
-
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)
-
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:
- The commented-out sexes configuration suggests incomplete female sprite implementation, which should be tracked.
- Replace informal comments with proper documentation.
- 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
ent-OrganAnimalBrain = мозг животного | ||
ent-OrganAnimalEyes = глаза животного |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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
- 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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
{ | ||
"name": "full" | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
{ | |
"name": "full" | |
}, | |
{ | |
"name": "full", | |
"directions": 4 | |
}, |
{ | ||
"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 | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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
- name: gloves | ||
slotTexture: gloves | ||
slotFlags: GLOVES | ||
uiWindowPos: 2,1 | ||
strippingWindowPos: 2,2 | ||
displayName: Gloves |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Special: # the cat ear joke | ||
points: 1 | ||
required: false | ||
Chest: | ||
points: 1 | ||
required: false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Remove unprofessional comments and standardize marking points
The verification reveals:
- The "cat ear joke" comment appears in multiple species files (human.yml, monkey.yml, kobold.yml), indicating it's a systemic issue
- Marking points configuration is consistent:
- Most species use 1 point for their markings
- The
Special
andChest
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 userequired: 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:
- Remove the unprofessional comment "the cat ear joke"
- 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
prototype: MobKobold | ||
sprites: MobKoboldSprites | ||
dollPrototype: MobKoboldDummy |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Missing prototype definitions need attention
Based on the verification results:
MobKobold
exists inResources/Prototypes/Entities/Mobs/NPCs/animals.yml
but relies on a parentMobBaseKobold
that isn't foundMobKoboldDummy
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
- 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 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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:
- All referenced sprite states exist in the kobold.rsi file
- 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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:
- This could significantly impact gameplay balance
- Players affected by NitrousOxide will be incapacitated for much longer
- 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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 inLizardHornsKoboldEars
marking - Remove "Reptilian" from the
speciesRestriction
list inLizardHornsFloppyKoboldEars
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 14
🧹 Outside diff range and nitpick comments (29)
Resources/Prototypes/_Backmen/Entities/Mobs/Species/primate.yml (2)
19-20
: Remove uncertain commentThe 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 configurationBoth 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: KoboldResources/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:
- Reduce duplication
- Make it easier to maintain common structures
- 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 noticeThe 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 conventionsThe 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 statesTo 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 statesResources/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:
- The entity name should be properly capitalized ("Kobold Body Part")
- 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 descriptionsThe 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 namingThe 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 slotThe 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 holisticallyTo 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' --multilineLength 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.ymlLength of output: 1059
Resources/Prototypes/_Backmen/Species/kobold.yml (3)
4-4
: Remove unnecessary commentThe 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 implementationHead 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:
- Implementing male/female variants for all body parts consistently
- Document why only certain parts need gender variants
138-140
: Improve marking point documentationThe 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:
- The comment "the cat ear joke" is informal and doesn't explain the purpose of the Special marking
- 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 sponsorsResources/Prototypes/Body/Organs/Animal/animal.yml (6)
177-178
: Consider using BaseAnimalOrgan instead of BaseAnimalOrganUnGibbableOther 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 descriptionThe 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 styleThe 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 quantitiesThe 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 styleThe 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 componentsThe eyes entity is missing some components that are common to other organs in this file:
SolutionContainerManager
for food/organ solutionsFlavorProfile
for consistencyStaticPrice
for economy balanceThis 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: 50Resources/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 speciesThe Frezon gas implementation has several powerful effects that could disproportionately affect the newly added monkey and kobold species:
- Cellular damage at relatively low concentrations (0.5+)
- Very high boozePower (500) which could be excessive
- Long-duration visual effects (500 time units)
Let's verify how these values compare to other gases and their effects on different species:
Consider:
- Implementing species-specific resistance or vulnerability factors
- Adding a scaling system for the boozePower based on species size/metabolism
- 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 1Length of output: 3277
Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml (2)
Line range hint
1-403
: Consider standardizing sprite paths and comment stylesThe file shows inconsistencies in:
- Sprite paths alternating between
Mobs/
andBackmen/Mobs/
- 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 assetsThe new animated tail markings have empty
speciesRestriction
arrays, making them available to all species. Consider:
- Whether this unrestricted access is intentional
- 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
⛔ 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:
- Find all .rsi files to understand the sprite structure
- 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:
- All these organs are required for Kobold gameplay mechanics
- 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:
- All referenced monkey body parts exist
- 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:
- All monkey body parts are properly defined in
Resources/Prototypes/Body/Parts/Animal/monkey.yml
with correct inheritance from base parts - 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:
-
Damage System Integration:
- Ensure the damage system recognizes these new body parts
- Verify damage propagation between connected parts
-
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:
-
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
- All body parts inherit from
-
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
- Species definition correctly references the body prototype in
-
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.
- The sprite state "torso_m" suggests male/female variants. If female variants are planned, consider adding a TODO comment.
- 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:
- The BaseHead parent provides necessary brain-related components
- 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:
- The hand entities have necessary components for item manipulation
- 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.ymlMobMonkeySprites
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 processesOrganRemovedFromBodyEvent
- 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:
- Find any RSI files specifically related to monkeys
- 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:
Resources/Textures/Mobs/Animals/monkey.rsi/
- Base monkey spritesResources/Textures/Clothing/OuterClothing/Suits/monkey.rsi/
- Monkey suit spritesResources/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
ent-OrganAnimalBrain = мозг животного | ||
ent-OrganAnimalEyes = глаза животного |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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
- 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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 theprototype: MobMonkey
in the species configurationMobKobold
entity definition is needed to match theprototype: 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
- type: Icon | ||
sprite: Mobs/Animals/kobold.rsi | ||
state: full |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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
{ | ||
"name": "full" | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
{ | |
"name": "full" | |
}, | |
{ | |
"name": "full", | |
"directions": 4 | |
}, |
"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 | ||
} | ||
] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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
- No
🔗 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
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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 hashead_m/head_f
- Prototype uses
MobKoboldTorso
but RSI hastorso_m/torso_f
- Prototype uses
MobKoboldLArm
but RSI hasl_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
orhead_f
MobKoboldTorso
->torso_m
ortorso_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
- type: humanoidBaseSprite | ||
id: MobMonkeyHeadFemale | ||
baseSprite: | ||
sprite: Mobs/Animals/monkey.rsi | ||
state: head_f | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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:
- Are female sprites actually missing or do they exist?
- If they exist, should the sexes section be uncommented?
- If they don't exist, should these female sprite definitions be removed?
Also applies to: 69-74
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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:
- Documenting the reasoning behind this significant increase
- Testing the impact on gameplay, particularly for the new species
- Implementing a more granular scaling system based on dosage
- Adding a maximum duration cap
- type: HumanoidAppearance | ||
species: Kobold | ||
- type: Body | ||
prototype: Kobold | ||
requiredLegs: 2 # finally 2 legs |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 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
📒 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:
- The monkey sprite resources exist at
Resources/Textures/Mobs/Animals/monkey.rsi
with all required states (head, torso, limbs, etc.) - 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.)
- 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
@Rxup пр готов к ревью |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
🧹 Outside diff range and nitpick comments (8)
Resources/Prototypes/_Backmen/Species/monkey.yml (2)
133-144
: Improve documentation and naming conventionsThe marking points configuration contains informal comments and unclear references:
- The "cat ear joke" comment should be more professional or removed
- 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 systemTo fully support the PR objectives of making monkeys have functional body parts that can receive damage, consider:
- 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
- Implementing a shared interface for damage-receiving body parts
- 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 commentThe 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 startResources/Prototypes/InventoryTemplates/monkey_inventory_template.yml (1)
1-127
: Overall implementation aligns well with PR objectivesThe 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:
- The reasoning behind different species restrictions for different roles
- 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:
- Creating a centralized configuration for species restrictions
- Implementing inheritance or composition for role-specific restrictions
- 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:
- Base body parts (chest, limbs) should be rendered first
- Clothing layers should be rendered next
- 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
⛔ 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:
- Remove the unprofessional comment "the cat ear joke"
- 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
:
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:
- The file exists
- The
horns_short
state is available - 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:
- The Monkey prototype exists and is properly configured
- The leg requirement aligns with the prototype's capabilities
✅ Verification successful
Monkey body prototype configuration is properly aligned
The verification confirms that:
- 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). - 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
andRightLegMonkey
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:
- The Kobold species is defined in the species configuration files
- The Kobold body prototype exists and is properly configured
- The leg requirement aligns with the prototype's capabilities
✅ Verification successful
Kobold species and body configurations are properly defined
The verification confirms that:
- The Kobold species is properly defined in
_Backmen/Species/kobold.yml
with appropriate sprites and markings - The Kobold body prototype exists in
Body/Prototypes/kobold.yml
with a complete humanoid structure - 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
- 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 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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) - missingMobMonkeyHead
- differs from existinghead_f
/head_m
MobMonkeyTorso
- differs from existingtorso_f
/torso_m
MobMonkeyTail
matchestail
MobMonkeyEyes
matcheseyes
MobMonkeyLArm
/RArm
differ from existingl_arm
/r_arm
MobMonkeyLHand
/RHand
differ from existingl_hand
/r_hand
MobMonkeyLLeg
/RLeg
differ from existingl_leg
/r_leg
MobMonkeyLFoot
/RFoot
differ from existingl_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
- type: species | ||
id: Monkey | ||
name: species-name-monkey | ||
roundStart: false # sad... | ||
prototype: MobMonkey | ||
sprites: MobMonkeySprites | ||
dollPrototype: MobMonkeyDummy | ||
skinColoration: Hues | ||
defaultSkinTone: "#ffffff" | ||
markingLimits: MobMonkeyMarkingLimits |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
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
- 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 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Roudenn ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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!
- 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
- 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 |
- name: eyes | ||
slotTexture: glasses | ||
slotFlags: EYES | ||
stripTime: 3 | ||
uiWindowPos: 0,3 | ||
strippingWindowPos: 0,0 | ||
displayName: Eyes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix UI position conflicts for eyes slot
The eyes slot has two position conflicts:
uiWindowPos: 0,3
conflicts with pocket1 slotstrippingWindowPos: 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.
- 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 |
- name: id | ||
slotTexture: id | ||
fullTextureName: template_small | ||
slotFlags: IDCARD | ||
slotGroup: SecondHotbar | ||
stripTime: 6 | ||
uiWindowPos: 2,1 | ||
strippingWindowPos: 2,4 | ||
dependsOn: jumpsuit | ||
displayName: ID |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
нет оно не конфликтует
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Roudenn, спасибо за уточнение. Если конфликта нет, то мое замечание можно проигнорировать.
Большое обновление для всех приматов, которое делает из них фактически 2 новые играбельные расы.
Big update for all genetic ancestors, wich remakes them as 2 new playable species. (not roundstart)
Текущие проблемы связаны с рандомизацией визуала, но мне слишком лень разбираться в глубинной работе систем ради этого. Поэтому пока что все кобольды будут серыми с обычными рогами
🆑 Rouden
Summary by CodeRabbit
Release Notes
New Features
Improvements
Bug Fixes