This guide will walk you through creating new skins for Stickforge. Skins change the appearance of the player's character and can be customized with unique models, sounds, and physics.
To create a new skin, you must first create a new folder inside your mod's skins/
directory. For example: your_mod_folder/skins/my_awesome_skin/
.
Important: The name of this folder becomes the skin's unique model
ID. This ID is used in the skin's data.json
file and must match the folder name exactly.
A skin must be placed within a skins
folder inside your mod's main directory. The folder containing your skin's files should have a unique name, which will be used as the skin's model
identifier.
your_mod_folder/
└── skins/
└── your_skin_model_name/
├── data.json
├── body_down.png
├── body_up.png
├── head.png
├── head_blink.png
├── head_dead.png
├── head_hurt.png
├── left_down_arm.png
├── left_down_leg.png
├── left_up_arm.png
├── left_up_leg.png
├── right_down_arm.png
├── right_down_leg.png
├── right_up_arm.png
├── right_up_leg.png
├── your_skin_model_name_overview.png
├── warcry.ogg
└── ... (other sound files)
data.json
PropertiesThe data.json
file contains the metadata for your skin. Here are the available properties:
Property | Type | Description | Example |
---|---|---|---|
_id |
string |
This is the ID of your item. It must be unique and 24 characters. You can generate one here : https://nddapp.com/object-id-generator.html (click on generate then copy paste the ID)
|
6275323c2b18123cbc564236 |
name |
object |
The display name of the skin, with localizations. en is mandatory. |
{ "en": "Classical", "fr": "Classique" } |
model |
string |
The unique identifier for the skin. Must match the skin's folder name. | "classical" |
version |
string |
The version of your skin (e.g., "1.0.0"). This is crucial for the game's caching system. Increment this version whenever you update the skin's assets (images, sounds) or its data.json to ensure players receive the latest changes. |
"1.0.1" |
available |
boolean |
If the skin is available in the game. Defaults to true . |
true |
visible |
boolean |
If the skin is visible in the armoury. Defaults to true . |
true |
rarity |
string |
The rarity of the skin, which affects its display in the UI. Common values are "common" , "uncommon" , "rare" , "epic" , "legendary" . |
"epic" |
new |
boolean |
If true , marks the skin with a "new" tag in the UI. |
false |
levelRequired |
number |
The minimum player level required to use the skin. | 1 |
coinsRequired |
number |
The price of the skin in coins. | 100 |
diamondsRequired |
number |
The price of the skin in diamonds. | 10 |
passiveSounds |
string[] |
A list of sound file names (without extension) to be played passively. | ["passive_01", "passive_02"] |
deathSounds |
string[] |
A list of sound file names to be played on death. Can also reference internal game sounds (e.g., "sf_internal_death0" ). If none given it will play default Stickforge sound. |
["death_scream", "sf_internal_death0"] |
hasHair |
boolean |
Set to true if your skin has a separate hair.png file. This can be used to display a backpack, a cape, or anything that the stickman can have in its back. |
true |
physics |
object |
Defines physics properties for hair. See details below. | { "hair": { ... } } |
type |
string |
Category of the skin, e.g. "miscellaneous", "space". | "miscellaneous" |
category |
string |
Used in the armoury for compatibility. | "humanoid" |
hideHealthBar |
boolean |
Allow to hide health bar for enemies (used by Zombie skin) | |
hideNickname |
boolean |
Allow to hide nickname for enemies (used by Zombie skin) | |
hideLevel |
boolean |
Allow to hide level for enemies (used by Zombie skin) | |
hasZombieArms |
boolean |
Allow to put the two arms of the skin forward, like a Zombie! | |
event |
string |
If set, this skin is only available during a specific event. | "halloween" |
eventStartDate |
string |
Start date for event availability (ISO 8601 format). | "2024-10-20T00:00:00.000Z" |
eventEndDate |
string |
End date for event availability (ISO 8601 format). | "2024-11-05T00:00:00.000Z" |
physics.hair
)If hasHair
is true, you can add a physics
object to data.json
to control how the hair behaves.
Property | Type | Description |
---|---|---|
showForHeadgears |
boolean or string[] |
If true , hair is always shown. If false , hair is hidden with headgear. Provide an array of headgear IDs (e.g. ["5ece5d4d1aea8b19f04b6a6c_none"] ) to show hair only for specific headgears. |
attachment |
object |
{x, y} coordinates to offset the hair's attachment point on the head. |
forefrontDepth |
boolean |
If true , renders the hair in front of the character. |
.png
)These image files are mandatory and must be named exactly as follows. They represent the different parts and states of the character.
Asset Dimensions: For best results, all your image parts should have the same dimensions as the template files found in the sf_base
mod.
your_skin_model_name_overview.png
: An overview image of the skin, shown in the armoury. (300x300 pixels)head.png
: Default head.head_blink.png
: Head during a blink.head_hurt.png
: Head when taking damage.head_dead.png
: Head when dead.body_up.png
: Upper part of the torso.body_down.png
: Lower part of the torso.left_up_arm.png
: Upper left arm.left_down_arm.png
: Lower left arm.right_up_arm.png
: Upper right arm.right_down_arm.png
: Lower right arm.left_up_leg.png
: Upper left leg.left_down_leg.png
: Lower left leg.right_up_leg.png
: Upper right leg.right_down_leg.png
: Lower right leg.hair.png
: (Optional) Only required if hasHair
is true
. NOTE: This can be used to display a backpack, a cape, or anything that the stickman can have in its back. Not necessarily hair..ogg
)Sounds must be in the .ogg
format.
warcry.ogg
: A sound played for the war cry action.passiveSounds
in data.json
.deathSounds
in data.json
.