From f814a641a91d98bb659fc506799e2eca0dae76eb Mon Sep 17 00:00:00 2001
From: Superstarxalien <ernesto_vallenilla@hotmail.com>
Date: Wed, 15 May 2024 19:11:21 -0400
Subject: [PATCH] add support for ring state added in 2.2

additionally, added more comments to code and some minor tweaks to the advanced instructions as well
---
 Advanced templates/advanced_instructions.txt  |  27 +++----
 .../sprites.png                               | Bin 27947 -> 0 bytes
 .../follower_sound.ogg                        | Bin
 .../properties.txt                            |  72 +++++++++++++++++-
 .../sprites.png                               | Bin 0 -> 31948 bytes
 .../sprites.png                               | Bin 21085 -> 0 bytes
 .../follower_sound.ogg                        | Bin
 .../properties.txt                            |  48 +++++++++++-
 .../sprites.png                               | Bin 0 -> 24076 bytes
 .../properties.txt                            |   2 +-
 src/main.c                                    |  59 ++++++++++++--
 11 files changed, 182 insertions(+), 26 deletions(-)
 delete mode 100644 Advanced templates/example_asymmetricalrotation_6states_animated/sprites.png
 rename Advanced templates/{example_asymmetricalrotation_6states_animated => example_asymmetricalrotation_7states_animated}/follower_sound.ogg (100%)
 rename Advanced templates/{example_asymmetricalrotation_6states_animated => example_asymmetricalrotation_7states_animated}/properties.txt (87%)
 create mode 100644 Advanced templates/example_asymmetricalrotation_7states_animated/sprites.png
 delete mode 100644 Advanced templates/example_symmetricalrotation_6states_animated/sprites.png
 rename Advanced templates/{example_symmetricalrotation_6states_animated => example_symmetricalrotation_7states_animated}/follower_sound.ogg (100%)
 rename Advanced templates/{example_symmetricalrotation_6states_animated => example_symmetricalrotation_7states_animated}/properties.txt (87%)
 create mode 100644 Advanced templates/example_symmetricalrotation_7states_animated/sprites.png

diff --git a/Advanced templates/advanced_instructions.txt b/Advanced templates/advanced_instructions.txt
index d563a50..6db0755 100644
--- a/Advanced templates/advanced_instructions.txt	
+++ b/Advanced templates/advanced_instructions.txt	
@@ -1,6 +1,6 @@
 This text file provides instructions on how to edit templates under the "advanced" folder. It contains instructions, FAQ and troubleshooting, and an example of how to do it.
 
-The advanced templates are 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 (idle, following, hurt, lose, win, hitconfirm), and an asymmetrical appearance.
+The advanced templates are 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 seven states (idle, following, hurt, lose, win, hitconfirm, ring), and frames for a follower of either symmetrical or asymmetrical appearance.
  
 By default, each animation lasts for two frames. To add more, first increase the height of your spritesheet by 128 for each frame you want to add. If you're adding frames to several animations, increase the height based on whichever has the most. For example, if your most fluid animation is 4 frames, you'll be adding two new frames: that's two counts of 128, plus the original height of 256, which means your final spritesheet height should be 512.
 
@@ -22,23 +22,23 @@ FAQ and troubleshooting:
 The solid horizontal line represents the origin point for sprites. You can treat it as "ground level" if you'd like, but it's not mandatory. The vertical dotted line simply indicates the center of each sprite's 128x128 box, to help with symmetry.
 
 "Followermaker.exe won't open/won't read my file."
-Opening followermaker is possible, but not required: dragging a completed folder onto it in your file explorer is enough. If you've done this, and it still will not create a .wad, check the following:
-That your commas are properly placed in properties.txt
-That your files are named: 
-followersound.ogg 
-properties.txt
-sprites.png
-That your followersound is a .ogg file, as opposed to a .wav or .mp4 or other file type
+Opening Followermaker is possible, but not required: dragging a completed folder onto it in your file explorer is enough. If you've done this, and it still will not create a .wad, check the following:
+- That your commas are properly placed in properties.txt
+- That your files are named: 
+  - follower_sound.ogg 
+  - properties.txt
+  - sprites.png
+- That your follower_sound is a .ogg file, as opposed to a .wav or .mp4 or other file type
 If none of these work, then feel free to shout Superstarxalien about it on Discord or Twitter
 
-"Does followermaker support 16 angle rotation?"
-16 angle rotation is not supported, but it is possible. Essentially, if you can work out how to name the frames and order the template, you can do it: however, followermaker does not currently have a template or guide for it.
+"Does Followermaker support 16 angle rotation?"
+16 angle rotation is supported by the program, though there aren't any templates included with it. Essentially, if you can work out how to name the frames and order the template, you can do it.
 
 "Can I edit the simple templates in the same way as the advanced ones?"
 The short answer is no. The simple templates are in a grid format that's easier on the eyes, but the animations not being horizontally uniform on the spritesheet means adding new frames would either involve creating entire new rows or moving existing ones: the former means you would have to figure out layer steps on your own, and the latter breaks the sheet entirely unless you redid the whole thing. If you want a follower with more frames but less states, simply take an advanced template and remove the states you don't want from .properties. You don't even have to remove the relevant sections from your sprites.png: indeed, you should probably keep them, because the states you keep will be expecting their sprites to be in the same place, and so maintaining the empty space at exactly the same size can cause confusion.
 
 "Is 128x128 the maximum size? What about the intended size?"
-Ring racers does not inherently have a maximum size. However, followermaker's templates use 128x128 because it is the largest any base game followers use, and upscaling the templates will cause them to break. If you're set on making a follower greater than 128x128, you'll need to alter  "sprite_size" and "layer_step_size" to the new max size of your frames, and you'll need to substantially alter the template in order to make it the same size. (Multiplying the scale of the template skips having to rearrange it yourself, but you'll still have to change sprite_size and layer_step_size.) If you do alter the template like this, or in any way that involves changing the width of the template, remember to set graphics_icon back to normal. To change graphics_icon's location, simply indicate the coordinates of the top left of its box, and followermaker will take a 16x16 space starting from there as the follower's icon. graphics_icon overides layer steps, so "the coordinates" are the actual pixel coordinates on your sheet.
+Ring racers does not inherently have a maximum size. However, Followermaker's templates use 128x128 because it is the largest any base game followers use, and upscaling the templates will cause them to break. If you're set on making a follower greater than 128x128, you'll need to alter  "sprite_size" and "layer_step_size" to the new max size of your frames, and you'll need to substantially alter the template in order to make it the same size. (Multiplying the scale of the template skips having to rearrange it yourself, but you'll still have to change sprite_size and layer_step_size.) If you do alter the template like this, or in any way that involves changing the width of the template, remember to set graphics_icon back to normal. To change graphics_icon's location, simply indicate the coordinates of the top left of its box, and Followermaker will take a 16x16 space starting from there as the follower's icon. graphics_icon overides layer steps, so "the coordinates" are the actual pixel coordinates on your sheet.
 As for the intended size, it trends much smaller. For reference, a "small" follower might be something like 40x40. Really, though, it depends on your follower, so use your best judgement.
 
 Example:
@@ -68,7 +68,4 @@ Here is an example of adding a single new frame of animation to the "following"
 On the symmetrical template, the left number in Layers starts at 5 and ends at 9, and so has been left unchanged. Because the template has a default of 2 frames, this is the 3rd, so the right number in Layers is 3 - 1, which is 2.
 Each instance of "A" has been replaced with "C." Which letter you choose to copy is not particularly relevant, but it is easier to always copy "A", so that when making many frames you only need to remove one comma. As opposed to copying "B", where you would need to add a comma to almost every new frame.
 The offset is unchanged, and should never be changed unless you're altering the size of the 128x128 box, which is not recommended unless you know what you're doing.
-Finally, because this is the only new frame being added to "following", the final right square brackets does not a comma. It is not depicted here, but "B5" should have a comma added to it in this instance.
- 
-
-
+Finally, because this is the only new frame being added to "following", the final right square brackets does not a comma. It is not depicted here, but "B5" should have a comma added to it in this instance.
\ No newline at end of file
diff --git a/Advanced templates/example_asymmetricalrotation_6states_animated/sprites.png b/Advanced templates/example_asymmetricalrotation_6states_animated/sprites.png
deleted file mode 100644
index ab205c4f1b219e8baa353ee22940468c0d3d66fc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 27947
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

diff --git a/Advanced templates/example_asymmetricalrotation_6states_animated/follower_sound.ogg b/Advanced templates/example_asymmetricalrotation_7states_animated/follower_sound.ogg
similarity index 100%
rename from Advanced templates/example_asymmetricalrotation_6states_animated/follower_sound.ogg
rename to Advanced templates/example_asymmetricalrotation_7states_animated/follower_sound.ogg
diff --git a/Advanced templates/example_asymmetricalrotation_6states_animated/properties.txt b/Advanced templates/example_asymmetricalrotation_7states_animated/properties.txt
similarity index 87%
rename from Advanced templates/example_asymmetricalrotation_6states_animated/properties.txt
rename to Advanced templates/example_asymmetricalrotation_7states_animated/properties.txt
index 784aa3d..0b1ead9 100644
--- a/Advanced templates/example_asymmetricalrotation_6states_animated/properties.txt	
+++ b/Advanced templates/example_asymmetricalrotation_7states_animated/properties.txt	
@@ -52,9 +52,11 @@
 	"win_animation_speed_explanation": "(in Tics) Number of Tics it takes to cycle through an animated sprite in the win state.",
 	"hitconfirm_animation_speed": 35,
 	"hitconfirm_animation_speed_explanation": "(in Tics) Number of Tics it takes to cycle through an animated sprite in the hit confirm state.",
+	"ring_animation_speed": 35,
+	"ring_animation_speed_explanation": "(in Tics) Number of Tics it takes to cycle through an animated sprite in the ring state.",
 	
 	
-	"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.",
+	"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 7 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), a \"hit confirm\" state (occurs when you hit another racer with an item), and a \"ring\" state (used whenever Auto Ring is enabled as the follower spends your rings). 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.",
 
@@ -459,12 +461,78 @@
 				"layers": [[47, 1]]
 			}
 		},
+		"ring": {
+			"A1": {
+				"offset": [64, 112],
+				"layers": [[48, 0]]
+			},
+			"A2": {
+				"offset": [64, 112],
+				"layers": [[49, 0]]
+			},
+			"A3": {
+				"offset": [64, 112],
+				"layers": [[50, 0]]
+			},
+			"A4": {
+				"offset": [64, 112],
+				"layers": [[51, 0]]
+			},
+			"A5": {
+				"offset": [64, 112],
+				"layers": [[52, 0]]
+			},
+			"A6": {
+				"offset": [64, 112],
+				"layers": [[53, 0]]
+			},
+			"A7": {
+				"offset": [64, 112],
+				"layers": [[54, 0]]
+			},
+			"A8": {
+				"offset": [64, 112],
+				"layers": [[55, 0]]
+			},
+			"B1": {
+				"offset": [64, 112],
+				"layers": [[48, 1]]
+			},
+			"B2": {
+				"offset": [64, 112],
+				"layers": [[49, 1]]
+			},
+			"B3": {
+				"offset": [64, 112],
+				"layers": [[50, 1]]
+			},
+			"B4": {
+				"offset": [64, 112],
+				"layers": [[51, 1]]
+			},
+			"B5": {
+				"offset": [64, 112],
+				"layers": [[52, 1]]
+			},
+			"B6": {
+				"offset": [64, 112],
+				"layers": [[53, 1]]
+			},
+			"B7": {
+				"offset": [64, 112],
+				"layers": [[54, 1]]
+			},
+			"B8": {
+				"offset": [64, 112],
+				"layers": [[55, 1]]
+			}
+		},
 
 		"graphics": {
 			"icon": {
 				"overwrite_sprite_size": [16, 16],
 				"overwrite_layer_step_size": [1, 1],
-				"layers": [[6154, 10]]
+				"layers": [[7178, 10]]
 			}
 		}
 	}
diff --git a/Advanced templates/example_asymmetricalrotation_7states_animated/sprites.png b/Advanced templates/example_asymmetricalrotation_7states_animated/sprites.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a3e4201bd3b08de800bc8582a6f2906b1f8a531
GIT binary patch
literal 31948
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
KpUXO@geCyUOR~%W

literal 0
HcmV?d00001

diff --git a/Advanced templates/example_symmetricalrotation_6states_animated/sprites.png b/Advanced templates/example_symmetricalrotation_6states_animated/sprites.png
deleted file mode 100644
index adfaef7e8b79441143bb18318f20842ac35e9dce..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21085
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
T!;f-_f#S&1)z4*}Q$iB}%E}rx

diff --git a/Advanced templates/example_symmetricalrotation_6states_animated/follower_sound.ogg b/Advanced templates/example_symmetricalrotation_7states_animated/follower_sound.ogg
similarity index 100%
rename from Advanced templates/example_symmetricalrotation_6states_animated/follower_sound.ogg
rename to Advanced templates/example_symmetricalrotation_7states_animated/follower_sound.ogg
diff --git a/Advanced templates/example_symmetricalrotation_6states_animated/properties.txt b/Advanced templates/example_symmetricalrotation_7states_animated/properties.txt
similarity index 87%
rename from Advanced templates/example_symmetricalrotation_6states_animated/properties.txt
rename to Advanced templates/example_symmetricalrotation_7states_animated/properties.txt
index 8676dc6..4097e3f 100644
--- a/Advanced templates/example_symmetricalrotation_6states_animated/properties.txt	
+++ b/Advanced templates/example_symmetricalrotation_7states_animated/properties.txt	
@@ -52,9 +52,11 @@
 	"win_animation_speed_explanation": "(in Tics) Number of Tics it takes to cycle through an animated sprite in the win state.",
 	"hitconfirm_animation_speed": 35,
 	"hitconfirm_animation_speed_explanation": "(in Tics) Number of Tics it takes to cycle through an animated sprite in the hit confirm state.",
+	"ring_animation_speed": 35,
+	"ring_animation_speed_explanation": "(in Tics) Number of Tics it takes to cycle through an animated sprite in the ring state.",
 	
 	
-	"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.",
+	"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 7 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), a \"hit confirm\" state (occurs when you hit another racer with an item), and a \"ring\" state (used whenever Auto Ring is enabled as the follower spends your rings). 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.",
 
@@ -315,12 +317,54 @@
 				"layers": [[29, 1]]
 			}
 		},
+		"ring": {
+			"A1": {
+				"offset": [64, 112],
+				"layers": [[30, 0]]
+			},
+			"A2A8": {
+				"offset": [64, 112],
+				"layers": [[31, 0]]
+			},
+			"A3A7": {
+				"offset": [64, 112],
+				"layers": [[32, 0]]
+			},
+			"A4A6": {
+				"offset": [64, 112],
+				"layers": [[33, 0]]
+			},
+			"A5": {
+				"offset": [64, 112],
+				"layers": [[34, 0]]
+			},
+			"B1": {
+				"offset": [64, 112],
+				"layers": [[30, 1]]
+			},
+			"B2B8": {
+				"offset": [64, 112],
+				"layers": [[31, 1]]
+			},
+			"B3B7": {
+				"offset": [64, 112],
+				"layers": [[32, 1]]
+			},
+			"B4B6": {
+				"offset": [64, 112],
+				"layers": [[33, 1]]
+			},
+			"B5": {
+				"offset": [64, 112],
+				"layers": [[34, 1]]
+			}
+		},
 
 		"graphics": {
 			"icon": {
 				"overwrite_sprite_size": [16, 16],
 				"overwrite_layer_step_size": [1, 1],
-				"layers": [[3850, 10]]
+				"layers": [[4490, 10]]
 			}
 		}
 	}
diff --git a/Advanced templates/example_symmetricalrotation_7states_animated/sprites.png b/Advanced templates/example_symmetricalrotation_7states_animated/sprites.png
new file mode 100644
index 0000000000000000000000000000000000000000..81671dff44b4dc187d15bb3467d30b7a5fbb4d6e
GIT binary patch
literal 24076
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
HQ$iB}yrMoE

literal 0
HcmV?d00001

diff --git a/Basic templates/example_symmetricalrotation_2states_animated/properties.txt b/Basic templates/example_symmetricalrotation_2states_animated/properties.txt
index 1ac4726..e54b26e 100644
--- a/Basic templates/example_symmetricalrotation_2states_animated/properties.txt	
+++ b/Basic templates/example_symmetricalrotation_2states_animated/properties.txt	
@@ -44,7 +44,7 @@
 	"following_animation_speed_explanation": "(in Tics) Number of Tics it takes to cycle through an animated sprite in the following state.",
 	
 	
-	"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.",
+	"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 7 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), a \"hit confirm\" state (occurs when you hit another racer with an item), and a \"ring\" state (used whenever Auto Ring is enabled as the follower spends your rings). Of these, the idle state is obligatory in all followers.",
 
 	"template_explanation": "This specific template is designed for followers with an idle and following state, with 2-frame animations for each state 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.",
 
diff --git a/src/main.c b/src/main.c
index 77fbb31..c5c0cca 100644
--- a/src/main.c
+++ b/src/main.c
@@ -78,10 +78,11 @@ struct followerstructthingwhatever {
 	char loseanimationspeed;
 	char winanimationspeed;
 	char hitconfirmanimationspeed;
+	char ringanimationspeed;
 
 	char numstates;
 	uint8_t highestanimframeletter;
-	uint8_t followerstateanimframestart[6];
+	uint8_t followerstateanimframestart[7];
 	struct state {
 		uint8_t idle:1;
 		uint8_t following:1;
@@ -89,7 +90,8 @@ struct followerstructthingwhatever {
 		uint8_t lose:1;
 		uint8_t win:1;
 		uint8_t hitconfirm:1;
-		uint8_t padding:2;
+		uint8_t ring:1;
+		uint8_t padding:1;
 	} states;
 };
 
@@ -224,6 +226,7 @@ void SetDefaultFollowerValues(void)
 	kfollower.loseanimationspeed = 35;
 	kfollower.winanimationspeed = 35;
 	kfollower.hitconfirmanimationspeed = 35;
+	kfollower.ringanimationspeed = 35;
 
 	kfollower.numstates = 0;
 	kfollower.highestanimframeletter = 0x41;
@@ -234,6 +237,7 @@ void SetDefaultFollowerValues(void)
 	kfollower.states.lose = 0;
 	kfollower.states.win = 0;
 	kfollower.states.hitconfirm = 0;
+	kfollower.states.ring = 0;
 }
 
 // processes sprites on the template, which are separated by regions (usually visualized on the template image as squares)
@@ -301,6 +305,8 @@ void processSprites(void) {
 				kfollower.states.win = 1;
 			if (strcmp(item->string, "hitconfirm") == 0)
 				kfollower.states.hitconfirm = 1;
+			if (strcmp(item->string, "ring") == 0)
+				kfollower.states.ring = 1;
 		}
 		lastanimframeletterinstate = 0;
 
@@ -367,8 +373,11 @@ void processSprites(void) {
 
 				lastanimframeletterinstate = nesteditem->string[0];
 
+				// once all alphabet letters are exhausted in the JSON file, the program simply uses whatever's next on the ascii table
+				// obviously the game won't like that, so those entries get converted to the proper format after the fact
 				nesteditem->string[0] = getFixedAnimationIndex(curanimframeletter);
 				
+				// for flipped sprites (e.g. A2A8)
 				if (strlen(nesteditem->string) > 3)
 					nesteditem->string[2] = nesteditem->string[0];
 			}
@@ -691,6 +700,7 @@ unsigned char* imageInDoomFormat(struct RGB_Sprite* image, size_t* size)
 	return img;
 }
 
+// generate SOC
 void addFollower(struct wadfile* wad)
 {
 	char buf[1<<16];
@@ -771,6 +781,8 @@ void addFollower(struct wadfile* wad)
 		kfollower.winanimationspeed = cJSON_GetObjectItem(metadata, "win_animation_speed")->valueint;
 	if (cJSON_GetObjectItem(metadata, "hitconfirm_animation_speed"))
 		kfollower.hitconfirmanimationspeed = cJSON_GetObjectItem(metadata, "hitconfirm_animation_speed")->valueint;
+	if (cJSON_GetObjectItem(metadata, "ring_animation_speed"))
+		kfollower.winanimationspeed = cJSON_GetObjectItem(metadata, "ring_animation_speed")->valueint;
 
 	sprintf(prebuf, "FREESLOT\nSPR_%s\nsfx_FH%s\nS_%sIDLE\n", prefix, prefix, prefix);
 
@@ -784,6 +796,8 @@ void addFollower(struct wadfile* wad)
 		sprintf(prebuf, "%sS_%sWIN\n", prebuf, prefix);
 	if (kfollower.states.hitconfirm)
 		sprintf(prebuf, "%sS_%sHITCONFIRM\n", prebuf, prefix);
+	if (kfollower.states.ring)
+		sprintf(prebuf, "%sS_%sRING\n", prebuf, prefix);
 
 	if (kfollower.highestanimframeletter > 0x41 && !(kfollower.numstates > 0))
 	{
@@ -934,18 +948,49 @@ void addFollower(struct wadfile* wad)
 		}
 		if (kfollower.states.hitconfirm)
 		{
-			if (kfollower.highestanimframeletter > kfollower.followerstateanimframestart[5])
+			if (kfollower.numstates > 5)
+			{
+				if ((kfollower.followerstateanimframestart[6] - kfollower.followerstateanimframestart[5]) > 1)
+				{
+					sprintf(ff_animate, "A|FF_ANIMATE");
+					var1 = (kfollower.followerstateanimframestart[6] - kfollower.followerstateanimframestart[5]) - 1;
+				}
+				else
+				{
+					sprintf(ff_animate, "A");
+					var1 = 0;
+				}
+			}
+			else
+			{
+				if (kfollower.highestanimframeletter > kfollower.followerstateanimframestart[5])
+				{
+					sprintf(ff_animate, "A|FF_ANIMATE");
+					var1 = kfollower.highestanimframeletter - kfollower.followerstateanimframestart[5];
+				}
+				else
+				{
+					sprintf(ff_animate, "A");
+					var1 = 0;
+				}
+			}
+			ff_animate[0] = getFixedAnimationIndex(kfollower.followerstateanimframestart[5]);
+			sprintf(prebuf, "%s\nSTATE S_%sHITCONFIRM\nSpriteName = SPR_%s\nSpriteFrame = %s\nDuration = -1\nVar1 = %d #no. of sprites (starts from 0)\nVar2 = %d #animation speed\nNext = S_%sHITCONFIRM\n", prebuf, prefix, prefix, ff_animate, var1, kfollower.hitconfirmanimationspeed, prefix);
+		}
+		if (kfollower.states.ring)
+		{
+			if (kfollower.highestanimframeletter > kfollower.followerstateanimframestart[6])
 			{
 				sprintf(ff_animate, "A|FF_ANIMATE");
-				var1 = kfollower.highestanimframeletter - kfollower.followerstateanimframestart[5];
+				var1 = kfollower.highestanimframeletter - kfollower.followerstateanimframestart[6];
 			}
 			else
 			{
 				sprintf(ff_animate, "A");
 				var1 = 0;
 			}
-			ff_animate[0] = getFixedAnimationIndex(kfollower.followerstateanimframestart[5]);
-			sprintf(prebuf, "%s\nSTATE S_%sHITCONFIRM\nSpriteName = SPR_%s\nSpriteFrame = %s\nDuration = -1\nVar1 = %d #no. of sprites (starts from 0)\nVar2 = %d #animation speed\nNext = S_%sHITCONFIRM\n", prebuf, prefix, prefix, ff_animate, var1, kfollower.hitconfirmanimationspeed, prefix);
+			ff_animate[0] = getFixedAnimationIndex(kfollower.followerstateanimframestart[6]);
+			sprintf(prebuf, "%s\nSTATE S_%sRING\nSpriteName = SPR_%s\nSpriteFrame = %s\nDuration = -1\nVar1 = %d #no. of sprites (starts from 0)\nVar2 = %d #animation speed\nNext = S_%sRING\n", prebuf, prefix, prefix, ff_animate, var1, kfollower.ringanimationspeed, prefix);
 		}
 	}
 
@@ -984,6 +1029,8 @@ void addFollower(struct wadfile* wad)
 			sprintf(prebuf, "%sWinState = S_%sWIN\n", prebuf, prefix);
 		if (kfollower.states.hitconfirm)
 			sprintf(prebuf, "%sHitConfirmState = S_%sHITCONFIRM\n", prebuf, prefix);
+		if (kfollower.states.ring)
+			sprintf(prebuf, "%sRingState = S_%sRING\n", prebuf, prefix);
 	}
 
 	size = sprintf(buf, prebuf);
-- 
GitLab