


Wrestling Empire Custom Content Loader
Loads custom content for Wrestling Empire.
WECCL is not officially supported by MDickie.
Updates may cause it to break. Use at your own risk.
Make sure to backup your save files.
WECCL collects anonymous data to help improve the mod.
This can be disabled in the config file by setting DataSharingLevel to None (or Basic for reduced data collection).
Data is anonymous and only contains information about state of the mod(s) and the game in case of errors.
If data sharing set to Full, a unique ID is generated and stored locally. There is no way to identify you from this ID. It only serves to prevent duplicate data.
No personal information or data about your computer is collected.
It is currently possible to add:
It is currently possible to override:
Additional features:
Experimental features:
This is the recommended way to install the mods.
Install with Mod Manager button on top of
the page (or install it through the mod manager directly)To install this mod manually, you first need to install BepInEx 5.4.21 as a mod loader for Wrestling Empire. A guide for this can be found here. It is recommended to use download BepInEx from here to ensure you get the correct version.
To install WECCL, you simply need to copy WECCL.dll from releases to ./BepInEx/plugins.
When using a mod manager, ./BepInEx can be found with Browse profile folder in the mod manager's settings.
When using BepInEx manually, ./BepInEx can be found in the game's root folder.
Assets, Overrides, etc. can be anywhere in the plugins folder, e.g. ./BepInEx/plugins/MyMod/Assets.
If you're stuck, you can always ask for help in the modding Discord.
You can add content by inserting images and audio files into ./BepInEx/plugins/Assets. Any audio file
here will be considered a theme. Image files must either be in a subfolder or prefixed by the costume texture name.
Example: body_material_abc.png or body_material/abc.png (_ before 01 is not required; abc can be anything)
| Supported Texture Names |
|---|
| arms_elbow_pad |
| arms_flesh |
| arms_glove |
| arms_material |
| arms_wristband |
| body_collar |
| body_flesh_female |
| body_flesh_male |
| body_material |
| body_pattern |
| face_beard |
| face_female |
| face_male |
| face_mask |
| hair_shave |
| hair_texture_solid |
| hair_texture_transparent |
| legs_flesh |
| legs_footwear |
| legs_kneepad |
| legs_laces |
| legs_material |
| legs_pattern |
Metadata files can be used to add additional information to assets, e.g. skin tone. Metadata files must be named the
same as the asset, but with the .meta extension.
Example: abc.png and abc.meta.
Meta files must be a newline-separated list of key-value pairs in the format key: value (space is optional).
The following keys are supported:
| Key | Description |
|---|---|
| skin_tone | The skin tone of the character. Must be formatted as r,g,b (e.g. 1.0, 0.0, 0.0) or an HTML string (e.g. #FF0000 or red). 1.0, 1.0, 1.0 is the default skin tone (white). 0.75, 0.75, 0.75 and 0.5, 0.45, 0.3 are the two other skin tones used in the vanilla game. |
As with textures, meshes can be added by placing them in ./BepInEx/plugins/Assets. Meshes must be in a subfolder by the mesh name.
Example: body_mesh/abc. The extension must be .assetbundle or no extension at all. (Note that .mesh works too, but is deprecated and may be removed in the future).
Meshes should be inside an asset bundle with it being the only mesh in the bundle. The first submesh will be the one affected by the game's mesh color setting. Others can be manually set in the metadata file.
| Supported Mesh Names |
|---|
| arms_shape |
| body_shape |
| face_headwear |
| face_shape |
| hair_extension |
| hair_hairstyle_solid |
| hair_hairstyle_transparent |
| legs_shape |
Metadata files can be used to add additional information to meshes, e.g. mesh color. Metadata files must be named the
same as the mesh, but with the .meta extension.
Example: abc and abc.meta.
Meta files must be a newline-separated list of key-value pairs in the format key: value (space is optional).
The following keys are supported:
| Key | Description |
|---|---|
| scale | The scale of the mesh. Must be formatted as x,y,z (e.g. 1.0, 1.0, 1.0). 1.0, 1.0, 1.0 is the default scale. |
| position | The position of the mesh. Must be formatted as x,y,z (e.g. 0.0, 0.0, 0.0). 0.0, 0.0, 0.0 is the default position. |
| rotation | The rotation of the mesh. Must be formatted as x,y,z (e.g. 0.0, 0.0, 0.0). 0.0, 0.0, 0.0 is the default rotation. |
| submeshXcolor | The color of submesh X. Must be formatted as r,g,b (e.g. 1,0, 0.0, 0.0) or an HTML string (e.g. #FF0000 or red). Overriding submesh 0 is not supported, as it is affected by the game's mesh color setting. |
Custom arenas work the same as meshes, but require a GameObject as the root object and should be placed in a subfolder named arena.
Example: arena/abc. The extension must be .assetbundle or no extension at all (Note that .mesh works too, but is deprecated and may be removed in the future).
There is functionality in place to automatically assign collision to the arena, but this doesn't work for diagonal walls, i.e. walls that are not aligned with the X or Z axis. It may also not work as expected with some wall shapes.
You can add custom promos by placing a .promo file inside ./BepInEx/plugins/Assets. The file must contain metadata in
the format key: value (space is optional), and newline-separated dialog lines in the
format "line1","line2",speaker,target(,taunt,demeanor,commands).
Example:
title: Test Promo
description: Promo between [P1] and [P2]
characters: 1,2
"Well, well, well, if it isn't $name2.","What brings you here, brother?",1,2
"I came to put an end to your reign of terror, $name1.","And I heard you're touting some newfangled gadget. What is it?",2,1,Point At Ground,-50
"Oh, it's no gadget, brother.","It's the future of wrestling: custom promos.",1,2,Shake Finger,50
"Custom promos? Sounds like a cheap ploy to me.","I'm not falling for it.",2,1,Thumbs Down,-50
"Cheap? Hardly, brother. Custom promos are the real deal. And speaking", "of deals, how about we settle things once and for all in the ring?",1,2
"You're on, $name1. And you'd better believe", "I'll be bringing my A-game.",2,1,Thumb Stampede,0,PlayAudio:Cheer
title must be a string.
description must be a string. [P1] and [P2] will be replaced with the names of the characters.
characters must be an comma-separated list of integers, or an integer prefixed by :. When using a prefixed integer,
an array from 1 to that integer will be created. When using a list, the list will be used as the array.
1 and 2 are the default characters as selected by the user, 3 is another character, -1 is the referee, and 11 and 22 are
the tag team partners of 1 and 2 respectively. Other values are not supported.
Optional use_names: True will allow you to use character names in surprise_entrants, speaker, target and commands instead of their ids. Their names can be used even if they are not selected in the characters field.
Optional surprise_entrants: will set these wrestlers (and their managers) as surprise entrants, who will only come out through the curtain once the promo ends. Must be an comma-separated list of match character ids.
Optional next_promo: will set another custom promo to happen once this one ends. Must be a title of another custom promo. This allows you to have surprise entrants have voice lines once they enter the ring.
"line1" and "line2" must be strings. The quotes are required. For quotes inside the string, use \".
$name# will be replaced with the name of the character with the corresponding id.
@him/his/etc# will be replaced with the pronoun of the character with the corresponding id,
e.g. @his1 friend -> his friend or her friend depending on wrestler #'s gender. Supported pronouns
are He, he, His, his, Male, male, Man, man, Guy, guy, Boy, boy.
$promotion#, $$belt(#1)_(#2), $$champ(#1)_(#2) will be replaced with the name of promotion #, the name of
promotion #1's belt #2, and the name of promotion #1's champion of belt #2 respectively.
speaker must be an integer.
target must be an integer.
taunt must be a string or integer. A list of taunts can be found in TauntAnims.md.
demeanor must be an integer. A positive value will make the character happy for the given number of frames, and a
negative value will make the character angry for the given number of frames.
commands must be a list in the format command:arg1:arg2:arg3.... Commands are separated by a semicolon.
Example: SetFace:1;SetRealFriend:1:2.
The following commands are supported:
| Command | Arguments | Description | Example |
|---|---|---|---|
| SetFace | wrestlerId | Sets the given wrestler to 'face' alignment. | SetFace:1 |
| SetHeel | wrestlerId | Sets the given wrestler to 'heel' alignment. | SetHeel:1 |
| SetRealEnemy | wrestlerId1, wrestlerId2 | Sets the given wrestlers to 'real enemy' relationship. | SetRealEnemy:1:2 |
| SetStoryEnemy | wrestlerId1, wrestlerId2 | Sets the given wrestlers to 'story enemy' relationship. | SetStoryEnemy:1:2 |
| SetRealFriend | wrestlerId1, wrestlerId2 | Sets the given wrestlers to 'real friend' relationship. | SetRealFriend:1:2 |
| SetStoryFriend | wrestlerId1, wrestlerId2 | Sets the given wrestlers to 'story friend' relationship. | SetStoryFriend:1:2 |
| SetRealNeutral | wrestlerId1, wrestlerId2 | Removes the relationship between the given wrestlers. | SetRealNeutral:1:2 |
| SetStoryNeutral | wrestlerId1, wrestlerId2 | Removes the relationship between the given wrestlers. | SetStoryNeutral:1:2 |
| PlayAudio | audioName/Id | Plays the given crowd audio. | PlayAudio:Cheer |
Commands and names are case-insensitive.
Custom moves are very experimental and may not work as intended. Use at your own risk.
Custom moves work the same way as meshes and arenas, but require an AnimationClip as the root object and should be placed in a subfolder named animation alongside a .meta file with the same name as the animation clip. The .meta file uses the following formats:
tag: value
[start(-(end))] command arg1 arg2 arg3...
[start(-(end))] condition?
[start(-(end))] command arg1 arg2 arg3...
tag must be name, types, or forwardspeedmultiplier. Valid typesareStrikeHigh, StrikeLow, BigAttack (== RunningAttack). Types should be separated by a space. forwardspeedmultipliermust be a float. This value is multiplied by the animation speed to determine the forward speed of the move. Default is 4. startandendmust be integers.endis optional and defaults tostart(without-) or *infinity* (with -). command` must be a string. The following commands are supported:
| Command | Arguments | Description | Example |
|---|---|---|---|
| StartAnimation | speed ticks per frame, buildupFrames, (forwardMomentum = 0) | Starts the animation "buildup" with the given parameters. Speed is ticks per frame | 0-99 StartAnimation -10 5 |
| SetAnimation | file, frame, duration | Sets the animation to the given file and frame. | 101- SetAnimation 100 2 |
| EnableHitbox | distance, damage, limb, (angle = 0) (particle = 0) | Enables a hitbox with the given parameters. | 110-129 EnableHitbox 8 1000 R_Hand 10 1 |
| PlayAudio | audio | Plays the given audio. | 110 PlayAudio -1 |
| SetAnimationId | id (id2, id3, etc.) | Sets the animation to the given id. If multiple ids are given, one will be chosen at random. | 130 SetAnimationId 9 10 |
| StopAnimation | Stops the animation. | 140 StopAnimation |
condition must be a string followed by a question mark.
If the condition is met, the script will continue with the next line one indentation level deeper.
If the condition is not met, the script will continue with the next line at the same indentation level.
Indentation is done with spaces and must always be 1 space per indentation level. Tabs are not supported.
The following conditions are supported:
| Condition | Description | Example |
|---|---|---|
| HitConnected | Checks if current attack connected with an opponent. | HitConnected? |
| StrengthCheck | Happens randomly based on the wrestler's strength (lower strength = higher chance). | StrengthCheck? |
Note that command and condition are case-insensitive, but limb (in EnableHitbox) is not.
Limbs are:
Base
Hips
Body
Head
R_Thigh
R_Leg
L_Thigh
L_Leg
R_Bicep
R_Arm
R_Hand
L_Bicep
L_Arm
L_Hand
R_Foot
L_Foot
Neck
Hair
H_Long
Headwear
HeadwearB
Full example:
name: Big Punch
types: BigAttack
forwardspeedmultiplier: 1.5
0-99 SetAnimation 100 1 -2
0-99 StartAnimation -10 5 0.5
101- SetAnimation 100 2
110-129 EnableHitbox 8 1000 R_Hand 10 1
110 Playaudio -1
130 HitConnected?
130 StrengthCheck?
130 SetAnimationId 9 10
140 StopAnimation
Files can be aliased by placing a .aliases file inside ./BepInEx/plugins/Assets. The file must contain a list of
aliases in the format alias=path.
Example:
song1.ogg=MyFirstSong
subfolder/song2.ogg=MySecondSong
path/to/song3.ogg=MyThirdSong
Left is file name, right is alias.
The path is relative to ./BepInEx/plugins/Assets (or ./BepInEx/plugins/{PluginName}/Assets).
This allows you to rename files without breaking the save file.
You can override content by placing any image or audio file inside ./BepInEx/plugins/Overrides
referenced by the internal name. A zip file containing all the overridable files can be found in
the Modding Discord
Characters are automatically exported to ./BepInEx/plugins/Export when the game is saved.
Characters can be imported by placing a JSON file inside ./BepInEx/plugins/Import with the .character extension.
The JSON file must contain a single object with:
characterData: The character data to import. Typically obtained by exporting a character.
Optional properties:
overrideMode: append, override, or merge.
append will add the imported character to the end of the character list.
override will override the character with the same name or id as the imported character.
merge will replace all non-default values of the character referenced by the name or id with the values of the
imported character.
Defaults to append.
findMode: Determines how the game will find the character to override/merge. id will use the id, name will use the
name, and name_then_id will first try to find the character by name, and if that fails, by id. Defaults
to name_then_id.
findName: Is the name of the character to find if findMode is set to name or name_then_id. If findMode is not
set, characterData.name will be used.
Imported JSON files will be automatically deleted after the game is saved (unless the config
option DeleteImportedCharacters is set to false).
You can upload your mods on Thunderstore. In order to do this, you first need to connect either your Discord or GitHub account to Thunderstore and create a team in your account settings ( if you haven't already). Thunderstore uses the following format:
📁ModName.zip
┣📂plugins (required if you want your mod to actually do something)
┃ ┣📂Assets
┃ ┃ ┣📂face_male
┃ ┃ ┃ ┗🖼️face.png
┃ ┃ ┗🔊theme.mp3
┃ ┗📂Overrides
┃ ┣🖼️Fed01.jpg
┃ ┗🔊Theme00.ogg
┣🖼️icon.png (required, 256x256)
┣📃manifest.json (required)
┣📃README.md (required)
┗📃CHANGELOG.md (optional)
* The files in Assets and Overrides are just examples. You can have any number of files with any name and valid extension in these folders. Neither of them is required.
plugins is a folder which contains all the files that your mod needs to function.
icon.png is a 256x256 PNG file which will be used as the icon for your mod on Thunderstore.
manifest.json is a JSON file which must contain the following:
{
"namespace": "IngoH",
"name": "NameOfMod",
"description": "This is a description of the mod.",
"version_number": "1.0.0",
"dependencies": [
"BepInEx-BepInExPack-5.4.2100",
"IngoH-WECCL-(LatestVersion)"
],
"website_url": "(Add GitHub link here, or leave empty)"
}
namespace must be your team name on Thunderstore.
name may only contain alphanumeric characters and underscores (A-Z, a-z, 0-9, _).
version_number must be in semver (semantic versioning) format.
dependencies is a list of dependencies. You can find the dependencies of mod on the Thunderstore page of the mod,
listed under "Dependency string".
website_url should be empty, or a link to the GitHub page of the mod or any other page where users can find more
information about the mod.
README.md is a Markdown file that will be displayed on the mod page. It
should contain the description of the mod, and any additional information that might be useful.
CHANGELOG.md is also a Markdown file that will be displayed on the mod page if it exists. It should contain a list of
changes for each version of the mod.
Join the modding Discord to receive support and talk with other modders and content creators!
Donations are always appreciated. You can donate on my Ko-fi page.
IngoH
GamingMaster
Street
Mat Dickie for generously donating €1,000
All the Discord Testers
Everyone who published mods using WECCL