diff --git a/Advanced templates/example_asymmetrical_6states_animated/properties.txt b/Advanced templates/example_asymmetrical_6states_animated/properties.txt new file mode 100644 index 0000000000000000000000000000000000000000..a41fa133af27f5a7552ede987919ac8231f94ec8 --- /dev/null +++ b/Advanced templates/example_asymmetrical_6states_animated/properties.txt @@ -0,0 +1,459 @@ +{ + "transparent_colors": [ + 115, 115, 255, + 82, 82, 255 + ], + "transparent_colors_description": "The above colors will be made transparent upon processing the template image for sprite conversion. You can add up to 4 colors to be set to transparent.", + + "name": "example", + "name_description": "The name of your follower. The names of followers appear on the main menu, upon toggling \"extrainfo mode\" with the drift button.", + "prefix": "EXMP", + "prefix_description": "A set of 4 characters used to internally identify your follower, mainly used for its files.", + "category": "Fanworks", + "category_description": "The category your follower will appear under. Followermaker doesn't allow for the creation of custom categories, though you can still enter one.", + + "prefcolor": "red", + "prefcolor_description": "Default follower color. Must use the name of a spray can, as seen on the main menu in extrainfo mode.", + "mode": 0, + "mode_description": "If floating (0) or on the ground (1).", + "scale": 1, + "scale_description": "(in Fracunits) Scale relative to the player's.", + "bubblescale": 0, + "bubblescale_description": "(in Fracunits) Bubble scale relative to the player scale. If not set, no bubble will spawn.", + "atangle": 230, + "atangle_description": "Angle the follower will be at around the player. The follower will always face the same direction as the player.", + "distance": 40, + "distance_description": "(in Fracunits) Distance relative to the player (in a circle).", + "height": 32, + "height_description": "(in Fracunits) Height of the follower, this is mostly important for Z-flipping.", + "zoffs": 32, + "zoffs_description": "(in Fracunits) Z-offset relative to the player's height. Cannot be negative.", + "horzlag": 3, + "horzlag_description": "(in Fracunits) Lag for X/Y displacement. Must be > 0 because we divide by this number.", + "vertlag": 6, + "verlag_description": "(in Fracunits) Lag for Z displacement. Must be > 0 because we divide by this number.", + "anglelag": 8, + "anglelag_description": "(in Fracunits) Angle rotation lag. Must be > 0 because we divide by this number.", + "bobamp": 4, + "bobamp_description": "(in Fracunits) Bob amplitude.", + "bobspeed": 70, + "bobspeed_description": "(in Tics) Arbitrary modifier for bobbing speed. Default is TICRATE*2 (70 Fracunits)", + "hitconfirmtime": 1, + "hitconfirmtime_description": "(in Tics) Time to keep the hit confirm state playing for.", + + + "follower_states_help": "As you may know, followers have several animations for things that can occur during the race; these are described as \"states\". Followers can have up to 6 states, in order: an idle state, a following state (as in, following the player), a hurt state (when you get hit by an item), a lose state (when you lose the race), a win state (win the race), and a \"hit confirm\" state (occurs when you hit another racer with an item). Of these, the idle state is obligatory in all followers. Additionally, the duration of the hit confirm state is controlled by a variable which can be edited above.", + + "sprite_help": "The template is divided into several regions, each for a unique sprite, described by the below values. These sprite regions are each categorized according to the follower state in which they belong, and are further split into frames detailing both the rotation angle (indicated by numbers) and animation index (indicated by letters) of the follower. The \"sprite_size\" field determines the general size for each sprite region. \"Layers\" refers to the exact location of each sprite, with \"layer_step_size\" indicating how many pixels are stepped over for the position of the layer; layers also allow for literal layer functionality, allowing you to insert up to four sets of sprite locations, with the first sprite location being applied on top of following locations. You can also edit the offset of sprites, with the default templates providing automatic X axis centering for sprites, offset 16 pixels down on the Y axis.", + + "template_description": "This specific template is uniquely designed to allow it to be edited by users, in order to add more frames to any follower state's animation. It provides every possible distinct sprite: all six states, and an asymmetrical appearance. By default, each animation lasts for two frames. To add more, first increase the height of sprites.png by 256 for each frame you want to add. Then, copy every angle of the animation you want to increase at once, and paste it directly below the original. Make sure the top of your new rows are flush with the bottom of the original! Maintaining the checkerboard background can be helpful but is unnecessary. Do this for each state you want to add frames to. Different states can have different frame counts. In this properties file, for each new frame of an animation, copy a set of layers (which means from A1 to A8) and paste it at the end of that state. Now change it in the following ways: firstly, change the letter A to the letter corresponding to the what frame of the animation this is. For instance, because the original ends at B, the first new set would be C, and the second would be D. Note that this caps at Z, with 26 frames of animation. Then, change the second number in layers for each sprite. As with the letter, this should correspond with when in the animation the frame plays, except this number should be subtracted by one, because the count starts at zero. For instance, for the first new set, layers should read [[0, 2]], [[1, 2]], and so on until [[7, 2]]. Do not change the left number, as copy/pasting leaves it as already correct. Lastly, ensure that you do not move any pre-existing sprites: you should not need to, and leaving them in place ensures you do not need to edit anything further in this template.", + + "sprite_size": [128, 128], + "layer_step_size": [128, 128], + "sprites": { + "idle": { + "A1": { + "offset": [64, 112], + "layers": [[0, 0]] + }, + "A2": { + "offset": [64, 112], + "layers": [[1, 0]] + }, + "A3": { + "offset": [64, 112], + "layers": [[2, 0]] + }, + "A4": { + "offset": [64, 112], + "layers": [[3, 0]] + }, + "A5": { + "offset": [64, 112], + "layers": [[4, 0]] + }, + "A6": { + "offset": [64, 112], + "layers": [[5, 0]] + }, + "A7": { + "offset": [64, 112], + "layers": [[6, 0]] + }, + "A8": { + "offset": [64, 112], + "layers": [[7, 0]] + }, + "B1": { + "offset": [64, 112], + "layers": [[0, 1]] + }, + "B2": { + "offset": [64, 112], + "layers": [[1, 1]] + }, + "B3": { + "offset": [64, 112], + "layers": [[2, 1]] + }, + "B4": { + "offset": [64, 112], + "layers": [[3, 1]] + }, + "B5": { + "offset": [64, 112], + "layers": [[4, 1]] + }, + "B6": { + "offset": [64, 112], + "layers": [[5, 1]] + }, + "B7": { + "offset": [64, 112], + "layers": [[6, 1]] + }, + "B8": { + "offset": [64, 112], + "layers": [[7, 1]] + } + }, + "following": { + "A1": { + "offset": [64, 112], + "layers": [[8, 0]] + }, + "A2": { + "offset": [64, 112], + "layers": [[9, 0]] + }, + "A3": { + "offset": [64, 112], + "layers": [[10, 0]] + }, + "A4": { + "offset": [64, 112], + "layers": [[11, 0]] + }, + "A5": { + "offset": [64, 112], + "layers": [[12, 0]] + }, + "A6": { + "offset": [64, 112], + "layers": [[13, 0]] + }, + "A7": { + "offset": [64, 112], + "layers": [[14, 0]] + }, + "A8": { + "offset": [64, 112], + "layers": [[15, 0]] + }, + "B1": { + "offset": [64, 112], + "layers": [[8, 1]] + }, + "B2": { + "offset": [64, 112], + "layers": [[9, 1]] + }, + "B3": { + "offset": [64, 112], + "layers": [[10, 1]] + }, + "B4": { + "offset": [64, 112], + "layers": [[11, 1]] + }, + "B5": { + "offset": [64, 112], + "layers": [[12, 1]] + }, + "B6": { + "offset": [64, 112], + "layers": [[13, 1]] + }, + "B7": { + "offset": [64, 112], + "layers": [[14, 1]] + }, + "B8": { + "offset": [64, 112], + "layers": [[15, 1]] + } + }, + "hurt": { + "A1": { + "offset": [64, 112], + "layers": [[16, 0]] + }, + "A2": { + "offset": [64, 112], + "layers": [[17, 0]] + }, + "A3": { + "offset": [64, 112], + "layers": [[18, 0]] + }, + "A4": { + "offset": [64, 112], + "layers": [[19, 0]] + }, + "A5": { + "offset": [64, 112], + "layers": [[20, 0]] + }, + "A6": { + "offset": [64, 112], + "layers": [[21, 0]] + }, + "A7": { + "offset": [64, 112], + "layers": [[22, 0]] + }, + "A8": { + "offset": [64, 112], + "layers": [[23, 0]] + }, + "B1": { + "offset": [64, 112], + "layers": [[16, 1]] + }, + "B2": { + "offset": [64, 112], + "layers": [[17, 1]] + }, + "B3": { + "offset": [64, 112], + "layers": [[18, 1]] + }, + "B4": { + "offset": [64, 112], + "layers": [[19, 1]] + }, + "B5": { + "offset": [64, 112], + "layers": [[20, 1]] + }, + "B6": { + "offset": [64, 112], + "layers": [[21, 1]] + }, + "B7": { + "offset": [64, 112], + "layers": [[22, 1]] + }, + "B8": { + "offset": [64, 112], + "layers": [[23, 1]] + } + }, + "lose": { + "A1": { + "offset": [64, 112], + "layers": [[24, 0]] + }, + "A2": { + "offset": [64, 112], + "layers": [[25, 0]] + }, + "A3": { + "offset": [64, 112], + "layers": [[26, 0]] + }, + "A4": { + "offset": [64, 112], + "layers": [[27, 0]] + }, + "A5": { + "offset": [64, 112], + "layers": [[28, 0]] + }, + "A6": { + "offset": [64, 112], + "layers": [[29, 0]] + }, + "A7": { + "offset": [64, 112], + "layers": [[30, 0]] + }, + "A8": { + "offset": [64, 112], + "layers": [[31, 0]] + }, + "B1": { + "offset": [64, 112], + "layers": [[24, 1]] + }, + "B2": { + "offset": [64, 112], + "layers": [[25, 1]] + }, + "B3": { + "offset": [64, 112], + "layers": [[26, 1]] + }, + "B4": { + "offset": [64, 112], + "layers": [[27, 1]] + }, + "B5": { + "offset": [64, 112], + "layers": [[28, 1]] + }, + "B6": { + "offset": [64, 112], + "layers": [[29, 1]] + }, + "B7": { + "offset": [64, 112], + "layers": [[30, 1]] + }, + "B8": { + "offset": [64, 112], + "layers": [[31, 1]] + } + }, + "win": { + "A1": { + "offset": [64, 112], + "layers": [[32, 0]] + }, + "A2": { + "offset": [64, 112], + "layers": [[33, 0]] + }, + "A3": { + "offset": [64, 112], + "layers": [[34, 0]] + }, + "A4": { + "offset": [64, 112], + "layers": [[35, 0]] + }, + "A5": { + "offset": [64, 112], + "layers": [[36, 0]] + }, + "A6": { + "offset": [64, 112], + "layers": [[37, 0]] + }, + "A7": { + "offset": [64, 112], + "layers": [[38, 0]] + }, + "A8": { + "offset": [64, 112], + "layers": [[39, 0]] + }, + "B1": { + "offset": [64, 112], + "layers": [[32, 1]] + }, + "B2": { + "offset": [64, 112], + "layers": [[33, 1]] + }, + "B3": { + "offset": [64, 112], + "layers": [[34, 1]] + }, + "B4": { + "offset": [64, 112], + "layers": [[35, 1]] + }, + "B5": { + "offset": [64, 112], + "layers": [[36, 1]] + }, + "B6": { + "offset": [64, 112], + "layers": [[37, 1]] + }, + "B7": { + "offset": [64, 112], + "layers": [[38, 1]] + }, + "B8": { + "offset": [64, 112], + "layers": [[39, 1]] + } + }, + "hitconfirm": { + "A1": { + "offset": [64, 112], + "layers": [[40, 0]] + }, + "A2": { + "offset": [64, 112], + "layers": [[41, 0]] + }, + "A3": { + "offset": [64, 112], + "layers": [[42, 0]] + }, + "A4": { + "offset": [64, 112], + "layers": [[43, 0]] + }, + "A5": { + "offset": [64, 112], + "layers": [[44, 0]] + }, + "A6": { + "offset": [64, 112], + "layers": [[45, 0]] + }, + "A7": { + "offset": [64, 112], + "layers": [[46, 0]] + }, + "A8": { + "offset": [64, 112], + "layers": [[47, 0]] + }, + "B1": { + "offset": [64, 112], + "layers": [[40, 1]] + }, + "B2": { + "offset": [64, 112], + "layers": [[41, 1]] + }, + "B3": { + "offset": [64, 112], + "layers": [[42, 1]] + }, + "B4": { + "offset": [64, 112], + "layers": [[43, 1]] + }, + "B5": { + "offset": [64, 112], + "layers": [[44, 1]] + }, + "B6": { + "offset": [64, 112], + "layers": [[45, 1]] + }, + "B7": { + "offset": [64, 112], + "layers": [[46, 1]] + }, + "B8": { + "offset": [64, 112], + "layers": [[47, 1]] + } + }, + + "graphics": { + "icon": { + "overwrite_sprite_size": [16, 16], + "overwrite_layer_step_size": [1, 1], + "layers": [[6154, 10]] + } + } + } +} \ No newline at end of file diff --git a/Advanced templates/example_asymmetrical_6states_animated/sprites.png b/Advanced templates/example_asymmetrical_6states_animated/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f8080dd27ec938911124bc10886f1b707bdca1 Binary files /dev/null and b/Advanced templates/example_asymmetrical_6states_animated/sprites.png differ diff --git a/example_asymmetrical/follower_sound.ogg b/Advanced templates/example_symmetrical_6states_animated/follower_sound.ogg similarity index 100% rename from example_asymmetrical/follower_sound.ogg rename to Advanced templates/example_symmetrical_6states_animated/follower_sound.ogg diff --git a/example_symmetrical_6states/properties.txt b/Advanced templates/example_symmetrical_6states_animated/properties.txt similarity index 73% rename from example_symmetrical_6states/properties.txt rename to Advanced templates/example_symmetrical_6states_animated/properties.txt index 672f44e2ee49ac304aee5f4e12643fe1c21560a6..13e94b8328cfb43cec3d8155ff55c2addccb9126 100644 --- a/example_symmetrical_6states/properties.txt +++ b/Advanced templates/example_symmetrical_6states_animated/properties.txt @@ -3,50 +3,50 @@ 115, 115, 255, 82, 82, 255 ], - "transparent_colors_explanation": "The above colors will be made transparent upon processing the template image for sprite conversion. You can add up to 4 colors to be set to transparent.", + "transparent_colors_description": "The above colors will be made transparent upon processing the template image for sprite conversion. You can add up to 4 colors to be set to transparent.", "name": "example", - "name_explanation": "The name of your follower. The names of followers appear on the main menu, upon toggling \"extrainfo mode\" with the drift button.", + "name_description": "The name of your follower. The names of followers appear on the main menu, upon toggling \"extrainfo mode\" with the drift button.", "prefix": "EXMP", - "prefix_explanation": "A set of 4 characters used to internally identify your follower, mainly used for its files.", + "prefix_description": "A set of 4 characters used to internally identify your follower, mainly used for its files.", "category": "Fanworks", - "category_explanation": "The category your follower will appear under. Followermaker doesn't allow for the creation of custom categories, though you can still enter one.", + "category_description": "The category your follower will appear under. Followermaker doesn't allow for the creation of custom categories, though you can still enter one.", "prefcolor": "red", - "prefcolor_explanation": "Default follower color. Must use the name of a spray can, as seen on the main menu in extrainfo mode.", + "prefcolor_description": "Default follower color. Must use the name of a spray can, as seen on the main menu in extrainfo mode.", "mode": 0, - "mode_explanation": "If floating (0) or on the ground (1).", + "mode_description": "If floating (0) or on the ground (1).", "scale": 1, - "scale_explanation": "(in Fracunits) Scale relative to the player's.", + "scale_description": "(in Fracunits) Scale relative to the player's.", "bubblescale": 0, - "bubblescale_explanation": "(in Fracunits) Bubble scale relative to the player scale. If not set, no bubble will spawn.", + "bubblescale_description": "(in Fracunits) Bubble scale relative to the player scale. If not set, no bubble will spawn.", "atangle": 230, - "atangle_explanation": "Angle the follower will be at around the player. The follower will always face the same direction as the player.", + "atangle_description": "Angle the follower will be at around the player. The follower will always face the same direction as the player.", "distance": 40, - "distance_explanation": "(in Fracunits) Distance relative to the player (in a circle).", + "distance_description": "(in Fracunits) Distance relative to the player (in a circle).", "height": 32, - "height_explanation": "(in Fracunits) Height of the follower, this is mostly important for Z-flipping.", + "height_description": "(in Fracunits) Height of the follower, this is mostly important for Z-flipping.", "zoffs": 32, - "zoffs_explanation": "(in Fracunits) Z-offset relative to the player's height. Cannot be negative.", + "zoffs_description": "(in Fracunits) Z-offset relative to the player's height. Cannot be negative.", "horzlag": 3, - "horzlag_explanation": "(in Fracunits) Lag for X/Y displacement. Must be > 0 because we divide by this number.", + "horzlag_description": "(in Fracunits) Lag for X/Y displacement. Must be > 0 because we divide by this number.", "vertlag": 6, - "verlag_explanation": "(in Fracunits) Lag for Z displacement. Must be > 0 because we divide by this number.", + "verlag_description": "(in Fracunits) Lag for Z displacement. Must be > 0 because we divide by this number.", "anglelag": 8, - "anglelag_explanation": "(in Fracunits) Angle rotation lag. Must be > 0 because we divide by this number.", + "anglelag_description": "(in Fracunits) Angle rotation lag. Must be > 0 because we divide by this number.", "bobamp": 4, - "bobamp_explanation": "(in Fracunits) Bob amplitude.", + "bobamp_description": "(in Fracunits) Bob amplitude.", "bobspeed": 70, - "bobspeed_explanation": "(in Tics) Arbitrary modifier for bobbing speed. Default is TICRATE*2 (70 Fracunits)", + "bobspeed_description": "(in Tics) Arbitrary modifier for bobbing speed. Default is TICRATE*2 (70 Fracunits)", "hitconfirmtime": 1, - "hitconfirmtime_explanation": "(in Tics) Time to keep the hit confirm state playing for.", + "hitconfirmtime_description": "(in Tics) Time to keep the hit confirm state playing for.", - "follower_states_help": "As you may know, followers have several animations for things that can occur during the race; these are described as \"states\". Followers can have up to 6 states, in order: an idle state, a following state (as in, following the player), a hurt state (when you get hit by an item), a lose state (when you lose the race), a win state (win the race), and a \"hit confirm\" state (occurs when you hit another racer with an item). Of these, the idle state is obligatory in all followers. Additionally, the duration of the hit confirm state is controlled by a variable which can be edited above. You can add or remove follower states, though they all must follow the same hierarchy mentioned beforehand.", + "follower_states_help": "As you may know, followers have several animations for things that can occur during the race; these are described as \"states\". Followers can have up to 6 states, in order: an idle state, a following state (as in, following the player), a hurt state (when you get hit by an item), a lose state (when you lose the race), a win state (win the race), and a \"hit confirm\" state (occurs when you hit another racer with an item). Of these, the idle state is obligatory in all followers. Additionally, the duration of the hit confirm state is controlled by a variable which can be edited above.", "sprite_help": "The template is divided into several regions, each for a unique sprite, described by the below values. These sprite regions are each categorized according to the follower state in which they belong, and are further split into frames detailing both the rotation angle (indicated by numbers) and animation index (indicated by letters) of the follower. The \"sprite_size\" field determines the general size for each sprite region. \"Layers\" refers to the exact location of each sprite, with \"layer_step_size\" indicating how many pixels are stepped over for the position of the layer; layers also allow for literal layer functionality, allowing you to insert up to four sets of sprite locations, with the first sprite location being applied on top of following locations. You can also edit the offset of sprites, with the default templates providing automatic X axis centering for sprites, offset 16 pixels down on the Y axis.", - "template_explanation": "This specific template is designed for followers with all six states a follower can have, each having 2-frame animations and 5 unique degrees of rotation. The second, third, and fourth rotation sprites are duplicated and mirrored, thus this template assumes a follower of symmetrical appearance.", + "template_description": "This specific template is designed for followers with all six states a follower can have, each having 2-frame animations and 5 unique degrees of rotation. The second, third, and fourth rotation sprites are duplicated and mirrored, thus this template assumes a follower of symmetrical appearance.", "sprite_size": [128, 128], "layer_step_size": [128, 128], @@ -138,169 +138,169 @@ "hurt": { "A1": { "offset": [64, 112], - "layers": [[0, 2]] + "layers": [[10, 0]] }, "A2A8": { "offset": [64, 112], - "layers": [[1, 2]] + "layers": [[11, 0]] }, "A3A7": { "offset": [64, 112], - "layers": [[2, 2]] + "layers": [[12, 0]] }, "A4A6": { "offset": [64, 112], - "layers": [[3, 2]] + "layers": [[13, 0]] }, "A5": { "offset": [64, 112], - "layers": [[4, 2]] + "layers": [[14, 0]] }, "B1": { "offset": [64, 112], - "layers": [[0, 3]] + "layers": [[10, 1]] }, "B2B8": { "offset": [64, 112], - "layers": [[1, 3]] + "layers": [[11, 1]] }, "B3B7": { "offset": [64, 112], - "layers": [[2, 3]] + "layers": [[12, 1]] }, "B4B6": { "offset": [64, 112], - "layers": [[3, 3]] + "layers": [[13, 1]] }, "B5": { "offset": [64, 112], - "layers": [[4, 3]] + "layers": [[14, 1]] } }, "lose": { "A1": { "offset": [64, 112], - "layers": [[5, 2]] + "layers": [[15, 0]] }, "A2A8": { "offset": [64, 112], - "layers": [[6, 2]] + "layers": [[16, 0]] }, "A3A7": { "offset": [64, 112], - "layers": [[7, 2]] + "layers": [[17, 0]] }, "A4A6": { "offset": [64, 112], - "layers": [[8, 2]] + "layers": [[18, 0]] }, "A5": { "offset": [64, 112], - "layers": [[9, 2]] + "layers": [[19, 0]] }, "B1": { "offset": [64, 112], - "layers": [[5, 2]] + "layers": [[15, 0]] }, "B2B8": { "offset": [64, 112], - "layers": [[6, 2]] + "layers": [[16, 0]] }, "B3B7": { "offset": [64, 112], - "layers": [[7, 2]] + "layers": [[17, 0]] }, "B4B6": { "offset": [64, 112], - "layers": [[8, 2]] + "layers": [[18, 0]] }, "B5": { "offset": [64, 112], - "layers": [[9, 2]] + "layers": [[19, 0]] } }, "win": { "A1": { "offset": [64, 112], - "layers": [[0, 4]] + "layers": [[20, 0]] }, "A2A8": { "offset": [64, 112], - "layers": [[1, 4]] + "layers": [[21, 0]] }, "A3A7": { "offset": [64, 112], - "layers": [[2, 4]] + "layers": [[22, 0]] }, "A4A6": { "offset": [64, 112], - "layers": [[3, 4]] + "layers": [[23, 0]] }, "A5": { "offset": [64, 112], - "layers": [[4, 4]] + "layers": [[24, 0]] }, "B1": { "offset": [64, 112], - "layers": [[0, 5]] + "layers": [[20, 1]] }, "B2B8": { "offset": [64, 112], - "layers": [[1, 5]] + "layers": [[21, 1]] }, "B3B7": { "offset": [64, 112], - "layers": [[2, 5]] + "layers": [[22, 1]] }, "B4B6": { "offset": [64, 112], - "layers": [[3, 5]] + "layers": [[23, 1]] }, "B5": { "offset": [64, 112], - "layers": [[4, 5]] + "layers": [[24, 1]] } }, "hitconfirm": { "A1": { "offset": [64, 112], - "layers": [[5, 4]] + "layers": [[25, 0]] }, "A2A8": { "offset": [64, 112], - "layers": [[6, 4]] + "layers": [[26, 0]] }, "A3A7": { "offset": [64, 112], - "layers": [[7, 4]] + "layers": [[27, 0]] }, "A4A6": { "offset": [64, 112], - "layers": [[8, 4]] + "layers": [[28, 0]] }, "A5": { "offset": [64, 112], - "layers": [[9, 4]] + "layers": [[29, 0]] }, "A1": { "offset": [64, 112], - "layers": [[5, 5]] + "layers": [[25, 1]] }, "A2A8": { "offset": [64, 112], - "layers": [[6, 5]] + "layers": [[26, 1]] }, "A3A7": { "offset": [64, 112], - "layers": [[7, 5]] + "layers": [[27, 1]] }, "A4A6": { "offset": [64, 112], - "layers": [[8, 5]] + "layers": [[28, 1]] }, "A5": { "offset": [64, 112], - "layers": [[9, 5]] + "layers": [[29, 1]] } }, @@ -308,7 +308,7 @@ "icon": { "overwrite_sprite_size": [16, 16], "overwrite_layer_step_size": [1, 1], - "layers": [[10, 778]] + "layers": [[3850, 10]] } } } diff --git a/Advanced templates/example_symmetrical_6states_animated/sprites.png b/Advanced templates/example_symmetrical_6states_animated/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..610a1e1497e0893335752c7d27c33e2674fc25f1 Binary files /dev/null and b/Advanced templates/example_symmetrical_6states_animated/sprites.png differ diff --git a/example_symmetrical_2states/follower_sound.ogg b/Basic templates/example_asymmetrical/follower_sound.ogg similarity index 100% rename from example_symmetrical_2states/follower_sound.ogg rename to Basic templates/example_asymmetrical/follower_sound.ogg diff --git a/example_asymmetrical/properties.txt b/Basic templates/example_asymmetrical/properties.txt similarity index 99% rename from example_asymmetrical/properties.txt rename to Basic templates/example_asymmetrical/properties.txt index 4d203e456ef8f10ef1c281c6c693abaac32509b4..0f7ed768ed065f96307b01d4f598689ef01ad76d 100644 --- a/example_asymmetrical/properties.txt +++ b/Basic templates/example_asymmetrical/properties.txt @@ -46,7 +46,7 @@ "sprite_help": "The template is divided into several regions, each for a unique sprite, described by the below values. These sprite regions are each categorized according to the follower state in which they belong, and are further split into frames detailing both the rotation angle (indicated by numbers) and animation index (indicated by letters) of the follower. The \"sprite_size\" field determines the general size for each sprite region. \"Layers\" refers to the exact location of each sprite, with \"layer_step_size\" indicating how many pixels are stepped over for the position of the layer; layers also allow for literal layer functionality, allowing you to insert up to four sets of sprite locations, with the first sprite location being applied on top of following locations. You can also edit the offset of sprites, with the default templates providing automatic X axis centering for sprites, offset 16 pixels down on the Y axis.", - "template_explanation": "This specific template is designed for a follower of asymmetrical appearance, allowing for 8 unique degrees of rotation, with a 2-frame animation.", + "template_explanation": "This specific template is designed for a follower of asymmetrical appearance, allowing for 8 unique degrees of rotation.", "sprite_size": [128, 128], "layer_step_size": [128, 128], diff --git a/Basic templates/example_asymmetrical/sprites.png b/Basic templates/example_asymmetrical/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..9a0f9d96ef48d814b940eec5d324a4080d044dd8 Binary files /dev/null and b/Basic templates/example_asymmetrical/sprites.png differ diff --git a/example_symmetrical_6states/follower_sound.ogg b/Basic templates/example_asymmetrical_animated/follower_sound.ogg similarity index 100% rename from example_symmetrical_6states/follower_sound.ogg rename to Basic templates/example_asymmetrical_animated/follower_sound.ogg diff --git a/Basic templates/example_asymmetrical_animated/properties.txt b/Basic templates/example_asymmetrical_animated/properties.txt new file mode 100644 index 0000000000000000000000000000000000000000..5eaa1cc09c666a5256a1bd4a82640d9fd3354eee --- /dev/null +++ b/Basic templates/example_asymmetrical_animated/properties.txt @@ -0,0 +1,129 @@ +{ + "transparent_colors": [ + 115, 115, 255, + 82, 82, 255 + ], + "transparent_colors_explanation": "The above colors will be made transparent upon processing the template image for sprite conversion. You can add up to 4 colors to be set to transparent.", + + "name": "example", + "name_explanation": "The name of your follower. The names of followers appear on the main menu, upon toggling \"extrainfo mode\" with the drift button.", + "prefix": "EXMP", + "prefix_explanation": "A set of 4 characters used to internally identify your follower, mainly used for its files.", + "category": "Fanworks", + "category_explanation": "The category your follower will appear under. Followermaker doesn't allow for the creation of custom categories, though you can still enter one.", + + "prefcolor": "red", + "prefcolor_explanation": "Default follower color. Must use the name of a spray can, as seen on the main menu in extrainfo mode.", + "mode": 0, + "mode_explanation": "If floating (0) or on the ground (1).", + "scale": 1, + "scale_explanation": "(in Fracunits) Scale relative to the player's.", + "bubblescale": 0, + "bubblescale_explanation": "(in Fracunits) Bubble scale relative to the player scale. If not set, no bubble will spawn.", + "atangle": 230, + "atangle_explanation": "Angle the follower will be at around the player. The follower will always face the same direction as the player.", + "distance": 40, + "distance_explanation": "(in Fracunits) Distance relative to the player (in a circle).", + "height": 32, + "height_explanation": "(in Fracunits) Height of the follower, this is mostly important for Z-flipping.", + "zoffs": 32, + "zoffs_explanation": "(in Fracunits) Z-offset relative to the player's height. Cannot be negative.", + "horzlag": 3, + "horzlag_explanation": "(in Fracunits) Lag for X/Y displacement. Must be > 0 because we divide by this number.", + "vertlag": 6, + "verlag_explanation": "(in Fracunits) Lag for Z displacement. Must be > 0 because we divide by this number.", + "anglelag": 8, + "anglelag_explanation": "(in Fracunits) Angle rotation lag. Must be > 0 because we divide by this number.", + "bobamp": 4, + "bobamp_explanation": "(in Fracunits) Bob amplitude.", + "bobspeed": 70, + "bobspeed_explanation": "(in Tics) Arbitrary modifier for bobbing speed. Default is TICRATE*2 (70 Fracunits)", + "hitconfirmtime": 1, + "hitconfirmtime_explanation": "(in Tics) Time to keep the hit confirm state playing for.", + + + "follower_states_help": "As you may know, followers have several animations for things that can occur during the race; these are described as \"states\". Followers can have up to 6 states, in order: an idle state, a following state (as in, following the player), a hurt state (when you get hit by an item), a lose state (when you lose the race), a win state (win the race), and a \"hit confirm\" state (occurs when you hit another racer with an item). Of these, the idle state is obligatory in all followers. Additionally, the duration of the hit confirm state is controlled by a variable which can be edited above. You can add or remove follower states, though they all must follow the same hierarchy mentioned beforehand.", + + "sprite_help": "The template is divided into several regions, each for a unique sprite, described by the below values. These sprite regions are each categorized according to the follower state in which they belong, and are further split into frames detailing both the rotation angle (indicated by numbers) and animation index (indicated by letters) of the follower. The \"sprite_size\" field determines the general size for each sprite region. \"Layers\" refers to the exact location of each sprite, with \"layer_step_size\" indicating how many pixels are stepped over for the position of the layer; layers also allow for literal layer functionality, allowing you to insert up to four sets of sprite locations, with the first sprite location being applied on top of following locations. You can also edit the offset of sprites, with the default templates providing automatic X axis centering for sprites, offset 16 pixels down on the Y axis.", + + "template_explanation": "This specific template is designed for a follower of asymmetrical appearance, allowing for 8 unique degrees of rotation, with a 2-frame animation.", + + "sprite_size": [128, 128], + "layer_step_size": [128, 128], + "sprites": { + "idle": { + "A1": { + "offset": [64, 112], + "layers": [[0, 0]] + }, + "A2": { + "offset": [64, 112], + "layers": [[1, 0]] + }, + "A3": { + "offset": [64, 112], + "layers": [[2, 0]] + }, + "A4": { + "offset": [64, 112], + "layers": [[3, 0]] + }, + "A5": { + "offset": [64, 112], + "layers": [[4, 0]] + }, + "A6": { + "offset": [64, 112], + "layers": [[5, 0]] + }, + "A7": { + "offset": [64, 112], + "layers": [[6, 0]] + }, + "A8": { + "offset": [64, 112], + "layers": [[7, 0]] + }, + "B1": { + "offset": [64, 112], + "layers": [[0, 1]] + }, + "B2": { + "offset": [64, 112], + "layers": [[1, 1]] + }, + "B3": { + "offset": [64, 112], + "layers": [[2, 1]] + }, + "B4": { + "offset": [64, 112], + "layers": [[3, 1]] + }, + "B5": { + "offset": [64, 112], + "layers": [[4, 1]] + }, + "B6": { + "offset": [64, 112], + "layers": [[5, 1]] + }, + "B7": { + "offset": [64, 112], + "layers": [[6, 1]] + }, + "B8": { + "offset": [64, 112], + "layers": [[7, 1]] + } + } + + "graphics": { + "icon": { + "overwrite_sprite_size": [16, 16], + "overwrite_layer_step_size": [1, 1], + "layers": [[10, 266]] + } + } + } +} \ No newline at end of file diff --git a/example_asymmetrical/sprites.png b/Basic templates/example_asymmetrical_animated/sprites.png similarity index 100% rename from example_asymmetrical/sprites.png rename to Basic templates/example_asymmetrical_animated/sprites.png diff --git a/Basic templates/example_symmetrical/follower_sound.ogg b/Basic templates/example_symmetrical/follower_sound.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ad6c52e55e8d2fe8a6f46d42bb7df05803266f92 Binary files /dev/null and b/Basic templates/example_symmetrical/follower_sound.ogg differ diff --git a/Basic templates/example_symmetrical/properties.txt b/Basic templates/example_symmetrical/properties.txt new file mode 100644 index 0000000000000000000000000000000000000000..958f58b2f0c759c8507af7d126ea009187e4bbe0 --- /dev/null +++ b/Basic templates/example_symmetrical/properties.txt @@ -0,0 +1,85 @@ +{ + "transparent_colors": [ + 115, 115, 255, + 82, 82, 255 + ], + "transparent_colors_explanation": "The above colors will be made transparent upon processing the template image for sprite conversion. You can add up to 4 colors to be set to transparent.", + + "name": "example", + "name_explanation": "The name of your follower. The names of followers appear on the main menu, upon toggling \"extrainfo mode\" with the drift button.", + "prefix": "EXMP", + "prefix_explanation": "A set of 4 characters used to internally identify your follower, mainly used for its files.", + "category": "Fanworks", + "category_explanation": "The category your follower will appear under. Followermaker doesn't allow for the creation of custom categories, though you can still enter one.", + + "prefcolor": "red", + "prefcolor_explanation": "Default follower color. Must use the name of a spray can, as seen on the main menu in extrainfo mode.", + "mode": 0, + "mode_explanation": "If floating (0) or on the ground (1).", + "scale": 1, + "scale_explanation": "(in Fracunits) Scale relative to the player's.", + "bubblescale": 0, + "bubblescale_explanation": "(in Fracunits) Bubble scale relative to the player scale. If not set, no bubble will spawn.", + "atangle": 230, + "atangle_explanation": "Angle the follower will be at around the player. The follower will always face the same direction as the player.", + "distance": 40, + "distance_explanation": "(in Fracunits) Distance relative to the player (in a circle).", + "height": 32, + "height_explanation": "(in Fracunits) Height of the follower, this is mostly important for Z-flipping.", + "zoffs": 32, + "zoffs_explanation": "(in Fracunits) Z-offset relative to the player's height. Cannot be negative.", + "horzlag": 3, + "horzlag_explanation": "(in Fracunits) Lag for X/Y displacement. Must be > 0 because we divide by this number.", + "vertlag": 6, + "verlag_explanation": "(in Fracunits) Lag for Z displacement. Must be > 0 because we divide by this number.", + "anglelag": 8, + "anglelag_explanation": "(in Fracunits) Angle rotation lag. Must be > 0 because we divide by this number.", + "bobamp": 4, + "bobamp_explanation": "(in Fracunits) Bob amplitude.", + "bobspeed": 70, + "bobspeed_explanation": "(in Tics) Arbitrary modifier for bobbing speed. Default is TICRATE*2 (70 Fracunits)", + "hitconfirmtime": 1, + "hitconfirmtime_explanation": "(in Tics) Time to keep the hit confirm state playing for.", + + + "follower_states_help": "As you may know, followers have several animations for things that can occur during the race; these are described as \"states\". Followers can have up to 6 states, in order: an idle state, a following state (as in, following the player), a hurt state (when you get hit by an item), a lose state (when you lose the race), a win state (win the race), and a \"hit confirm\" state (occurs when you hit another racer with an item). Of these, the idle state is obligatory in all followers. Additionally, the duration of the hit confirm state is controlled by a variable which can be edited above. You can add or remove follower states, though they all must follow the same hierarchy mentioned beforehand.", + + "sprite_help": "The template is divided into several regions, each for a unique sprite, described by the below values. These sprite regions are each categorized according to the follower state in which they belong, and are further split into frames detailing both the rotation angle (indicated by numbers) and animation index (indicated by letters) of the follower. The \"sprite_size\" field determines the general size for each sprite region. \"Layers\" refers to the exact location of each sprite, with \"layer_step_size\" indicating how many pixels are stepped over for the position of the layer; layers also allow for literal layer functionality, allowing you to insert up to four sets of sprite locations, with the first sprite location being applied on top of following locations. You can also edit the offset of sprites, with the default templates providing automatic X axis centering for sprites, offset 16 pixels down on the Y axis.", + + "template_explanation": "This specific template is designed for a simple follower with 5 unique degrees of rotation. The second, third, and fourth rotation sprites are duplicated and mirrored, thus this template assumes a follower of symmetrical appearance.", + + "sprite_size": [128, 128], + "layer_step_size": [128, 128], + "sprites": { + "idle": { + "A1": { + "offset": [64, 112], + "layers": [[0, 0]] + }, + "A2A8": { + "offset": [64, 112], + "layers": [[1, 0]] + }, + "A3A7": { + "offset": [64, 112], + "layers": [[2, 0]] + }, + "A4A6": { + "offset": [64, 112], + "layers": [[3, 0]] + }, + "A5": { + "offset": [64, 112], + "layers": [[4, 0]] + } + }, + + "graphics": { + "icon": { + "overwrite_sprite_size": [16, 16], + "overwrite_layer_step_size": [1, 1], + "layers": [[10, 522]] + } + } + } +} \ No newline at end of file diff --git a/Basic templates/example_symmetrical/sprites.png b/Basic templates/example_symmetrical/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..f576ec18ee83510958f095772c2919b753e796c1 Binary files /dev/null and b/Basic templates/example_symmetrical/sprites.png differ diff --git a/Basic templates/example_symmetrical_2states_animated/follower_sound.ogg b/Basic templates/example_symmetrical_2states_animated/follower_sound.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ad6c52e55e8d2fe8a6f46d42bb7df05803266f92 Binary files /dev/null and b/Basic templates/example_symmetrical_2states_animated/follower_sound.ogg differ diff --git a/example_symmetrical_2states/properties.txt b/Basic templates/example_symmetrical_2states_animated/properties.txt similarity index 100% rename from example_symmetrical_2states/properties.txt rename to Basic templates/example_symmetrical_2states_animated/properties.txt diff --git a/example_symmetrical_2states/sprites.png b/Basic templates/example_symmetrical_2states_animated/sprites.png similarity index 100% rename from example_symmetrical_2states/sprites.png rename to Basic templates/example_symmetrical_2states_animated/sprites.png diff --git a/Basic templates/example_symmetrical_animated/follower_sound.ogg b/Basic templates/example_symmetrical_animated/follower_sound.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ad6c52e55e8d2fe8a6f46d42bb7df05803266f92 Binary files /dev/null and b/Basic templates/example_symmetrical_animated/follower_sound.ogg differ diff --git a/Basic templates/example_symmetrical_animated/properties.txt b/Basic templates/example_symmetrical_animated/properties.txt new file mode 100644 index 0000000000000000000000000000000000000000..9f5368b19a801ee711ebe53c356e8a22241d1948 --- /dev/null +++ b/Basic templates/example_symmetrical_animated/properties.txt @@ -0,0 +1,147 @@ +{ + "transparent_colors": [ + 115, 115, 255, + 82, 82, 255 + ], + "transparent_colors_explanation": "The above colors will be made transparent upon processing the template image for sprite conversion. You can add up to 4 colors to be set to transparent.", + + "name": "example", + "name_explanation": "The name of your follower. The names of followers appear on the main menu, upon toggling \"extrainfo mode\" with the drift button.", + "prefix": "EXMP", + "prefix_explanation": "A set of 4 characters used to internally identify your follower, mainly used for its files.", + "category": "Fanworks", + "category_explanation": "The category your follower will appear under. Followermaker doesn't allow for the creation of custom categories, though you can still enter one.", + + "prefcolor": "red", + "prefcolor_explanation": "Default follower color. Must use the name of a spray can, as seen on the main menu in extrainfo mode.", + "mode": 0, + "mode_explanation": "If floating (0) or on the ground (1).", + "scale": 1, + "scale_explanation": "(in Fracunits) Scale relative to the player's.", + "bubblescale": 0, + "bubblescale_explanation": "(in Fracunits) Bubble scale relative to the player scale. If not set, no bubble will spawn.", + "atangle": 230, + "atangle_explanation": "Angle the follower will be at around the player. The follower will always face the same direction as the player.", + "distance": 40, + "distance_explanation": "(in Fracunits) Distance relative to the player (in a circle).", + "height": 32, + "height_explanation": "(in Fracunits) Height of the follower, this is mostly important for Z-flipping.", + "zoffs": 32, + "zoffs_explanation": "(in Fracunits) Z-offset relative to the player's height. Cannot be negative.", + "horzlag": 3, + "horzlag_explanation": "(in Fracunits) Lag for X/Y displacement. Must be > 0 because we divide by this number.", + "vertlag": 6, + "verlag_explanation": "(in Fracunits) Lag for Z displacement. Must be > 0 because we divide by this number.", + "anglelag": 8, + "anglelag_explanation": "(in Fracunits) Angle rotation lag. Must be > 0 because we divide by this number.", + "bobamp": 4, + "bobamp_explanation": "(in Fracunits) Bob amplitude.", + "bobspeed": 70, + "bobspeed_explanation": "(in Tics) Arbitrary modifier for bobbing speed. Default is TICRATE*2 (70 Fracunits)", + "hitconfirmtime": 1, + "hitconfirmtime_explanation": "(in Tics) Time to keep the hit confirm state playing for.", + + + "follower_states_help": "As you may know, followers have several animations for things that can occur during the race; these are described as \"states\". Followers can have up to 6 states, in order: an idle state, a following state (as in, following the player), a hurt state (when you get hit by an item), a lose state (when you lose the race), a win state (win the race), and a \"hit confirm\" state (occurs when you hit another racer with an item). Of these, the idle state is obligatory in all followers. Additionally, the duration of the hit confirm state is controlled by a variable which can be edited above. You can add or remove follower states, though they all must follow the same hierarchy mentioned beforehand.", + + "sprite_help": "The template is divided into several regions, each for a unique sprite, described by the below values. These sprite regions are each categorized according to the follower state in which they belong, and are further split into frames detailing both the rotation angle (indicated by numbers) and animation index (indicated by letters) of the follower. The \"sprite_size\" field determines the general size for each sprite region. \"Layers\" refers to the exact location of each sprite, with \"layer_step_size\" indicating how many pixels are stepped over for the position of the layer; layers also allow for literal layer functionality, allowing you to insert up to four sets of sprite locations, with the first sprite location being applied on top of following locations. You can also edit the offset of sprites, with the default templates providing automatic X axis centering for sprites, offset 16 pixels down on the Y axis.", + + "template_explanation": "This specific template is designed for a simple follower with a 2-frame animation and 5 unique degrees of rotation. The second, third, and fourth rotation sprites are duplicated and mirrored, thus this template assumes a follower of symmetrical appearance.", + + "sprite_size": [128, 128], + "layer_step_size": [128, 128], + "sprites": { + "idle": { + "A1": { + "offset": [64, 112], + "layers": [[0, 0]] + }, + "A2A8": { + "offset": [64, 112], + "layers": [[1, 0]] + }, + "A3A7": { + "offset": [64, 112], + "layers": [[2, 0]] + }, + "A4A6": { + "offset": [64, 112], + "layers": [[3, 0]] + }, + "A5": { + "offset": [64, 112], + "layers": [[4, 0]] + }, + "B1": { + "offset": [64, 112], + "layers": [[0, 1]] + }, + "B2B8": { + "offset": [64, 112], + "layers": [[1, 1]] + }, + "B3B7": { + "offset": [64, 112], + "layers": [[2, 1]] + }, + "B4B6": { + "offset": [64, 112], + "layers": [[3, 1]] + }, + "B5": { + "offset": [64, 112], + "layers": [[4, 1]] + } + }, + "following": { + "A1": { + "offset": [64, 112], + "layers": [[0, 2]] + }, + "A2A8": { + "offset": [64, 112], + "layers": [[1, 2]] + }, + "A3A7": { + "offset": [64, 112], + "layers": [[2, 2]] + }, + "A4A6": { + "offset": [64, 112], + "layers": [[3, 2]] + }, + "A5": { + "offset": [64, 112], + "layers": [[4, 2]] + }, + "B1": { + "offset": [64, 112], + "layers": [[0, 3]] + }, + "B2B8": { + "offset": [64, 112], + "layers": [[1, 3]] + }, + "B3B7": { + "offset": [64, 112], + "layers": [[2, 3]] + }, + "B4B6": { + "offset": [64, 112], + "layers": [[3, 3]] + }, + "B5": { + "offset": [64, 112], + "layers": [[4, 3]] + } + }, + + "graphics": { + "icon": { + "overwrite_sprite_size": [16, 16], + "overwrite_layer_step_size": [1, 1], + "layers": [[10, 522]] + } + } + } +} \ No newline at end of file diff --git a/Basic templates/example_symmetrical_animated/sprites.png b/Basic templates/example_symmetrical_animated/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..346ff440b0b04977b4f7aab133c5a25f70c8ef22 Binary files /dev/null and b/Basic templates/example_symmetrical_animated/sprites.png differ diff --git a/example_symmetrical_6states/sprites.png b/example_symmetrical_6states/sprites.png deleted file mode 100644 index feff089c5a998f39f32f23311a271c7f5f52bb88..0000000000000000000000000000000000000000 Binary files a/example_symmetrical_6states/sprites.png and /dev/null differ diff --git a/followermaker.exe b/followermaker.exe new file mode 100644 index 0000000000000000000000000000000000000000..d36c6ee5dd91c7423015d63cf8d0f72b7b6b6f1a Binary files /dev/null and b/followermaker.exe differ