Streets of Rage 2X

In Progress Streets of Rage 2X By Kratus 2.3.1

No permission to download
The project is currently under development.
O Ilusionista
O Ilusionista said:
Kratus An idea crossed my mind and I think you are the perfect person to try it: Make the select menu works like on fighting games, where you can move the cursor left, right, up and down.
I know its doable because there was an old module which makes it (I think it was one of the Rocket Vipers). Then, after the character selected, you could choose the palette for it.

Its quite a challenge, but if someone manage to do it, this could be very useful for all OpenBOR coders.
Hey buddy, do you remember that? Finally it's possible  :)

After some months learning the OpenBOR source code and making tests, now I understand how the select screen works. I coded a custom select screen that works in the same way of the default one, except for the palette change.

To change palettes now is the same way as Street Fighter games. Once you confirm your character, every button is related to a map number. It already counts the total maps of each entity and automatically avoids two (or more) characters  with the same map. Below has a quick demonstration.

CUSTOM SELECT SCREEN
https://www.youtube.com/watch?v=4eoi6Z2DRU8

Another new debug tool in version 2.2 is the "debug_wall". Now you can adjust your walls on-the-fly smoothly. It will not write to any file, but after all adjustments are made, simply take a screenshot to save all values and write it in your level file. I'm planning to make it for platforms and holes too.
Even if you don't want to use the on-the-fly adjustment, you can use it as a visual feature only.

DEBUG WALL
https://www.youtube.com/watch?v=as3vNYVT9VE

The last addition in 2.2 is a scripted quake. I discovered some advantages over the default one:
- more customizable
- you can make an additional "decreasement" effect, who will decrease the shake gradually
- higher priority over the default engine quake, who can sometimes fail depending on how many entities are in the screen

Some effects aren't possible to see correctly in the video due to vsync and frame rate, but works fine in the game.

NOTE: It will not replace the automatic engine quake when any character falls in the ground. You need to create a quake entity and spawn it at any moment you want. The script needs to be called in the update entity event, inside the quake entity. You don't need to use the "quakeframe" function anymore.

CUSTOM QUAKE
https://www.youtube.com/watch?v=Tcz1OuluWEo

All customs are in experimental step and needs more tests. But if you like the idea, I can make a small example and you can add it to your tutorials.
I'm not good making tutorials  ;D

O Ilusionista said:
But it would be a cool addition :)
Yes, I agree with you. If someone draws this character, there's no problem to add him as an official, like Tracker.
 
Kratus: This select screen is nice. That's a pity that we can't see the palette the player chooses before the character is selected (or we can confirm the character + palette twice and return to selection?). My question is how many alternate palettes a character can have? Tracker has, for example a total of 8 palettes; all of them could be selectable?
DUcClj6.png

O Ilusionista: This SOR1 SMS boss is on my list and I will redraw him, but some characters will come before him, good things will come :).
 
Kratus wow buddy, this is incredible! I think you should apply to be part of the OpenBOR dev team, we would be happy to have you with us :)

Select: I loved the result. You even made a randomselect! Do you think its possible to add, after you select a player, the ability to cycle the palettes using up and down then pressing a buttom to choose the desired palette? If I am not mistaken, there was a mod by Volcanic which did something like that - I think it was one of the Rocket Vipers, I can't remember.

Walls: Great tool! And since it works directly on the stage code, its not dependent of any other thing, which is easier to use. I would like to try it.
If I am not wrong, Damon Caskey had the idea of adding walls to the engine debug.

Last time I talked with Fighter Factory dev, he was finishing some Mugen stuff before back to work on the OpenBOR module of FFS, but its on his plans this visual editor too.

Quake: To me, it was your best work. Quake is one of the very few things Mugen does better than OpenBOR - we have more control and it works better. The way you did is almost exactly what we have there, even with some extra steps.

It would be cool if we can spawn that entity while giving it custom values, so we don't need to edit the code every time we want to change something.

Can you send me this code? I really would like to use.

Congrats for all your hard work, buddy.
 
Kratus,

I'm with O Ilusionista, I think you'd be a great engine dev - I really like the way you work things out first, and then apply solutions. FYI I coded a feature into the engine a few years ago specifically for someone like you who wanted script their own quake feature. You might be using it already (I haven't looked at your script), but if not it might be something to consider.

It's a pair of global vars accessible though openborvariant named gfx_offset_adj_x and gfx_offset_adj_y. They let you mess with screen offset temporarily without interfering with the engine's hardcoded functions. The native quakeframe works by offsetting the screen pixels, so this gives you the same ability. It could be useful for a lot of other things too.

https://www.youtube.com/watch?v=mmZCfgIo_hY

Great work as always!
DC
 
Good start; I think that the face is too big. There is no black outline with SOR sprites.
He's walking  in his cape in your version: the black pixels under his feet is his shadow.
I suggest to compare your sprite with Axel or Blaze.
 
kimono said:
Kratus: This select screen is nice. That's a pity that we can't see the palette the player chooses before the character is selected (or we can confirm the character + palette twice and return to selection?). My question is how many alternate palettes a character can have? Tracker has, for example a total of 8 palettes; all of them could be selectable?
DUcClj6.png

kimono
Yes, I agree that adding palettes to each button will limit the maximum allowed colors. To solve this, I changed the code and made a "2-step" select screen. This way you can have how much palettes you want.

Step 1 - Select player
Step 2 - Select palette

https://www.youtube.com/watch?v=hdZceyP6pkg

O Ilusionista
Select: Yes, I changed the code and now it's possible to change palettes using up and down. For now I disabled the automatic palette cycle for the same players, because it's more complicated to apply it when all players are changing colors at same time. But at the first time the player enters in the select screen, the code will take every player index and apply the palette according to it. Even if two or more players with the same colors now are allowed, the game will recommend you to select a different color first.

Walls: Will be very cool if we can add it to the debug in future updates, but if the FFS devs add it to your functions will be very helpful

Quake: Thanks for your suggestion, I totally agree with you about editing quake properties inside the quake entity. I changed the code and now it's possible. Below I'm post all codes for animation and updateentity scripts:

UPDATE ENTITY SCRIPT
Code:
void main()
{//Custom scripted quake
 //You need to create a simple entity to use it and call this script at the "update entity" event, is more accurate
 //To use properly, you need to spawn the "quake" entity at any moment you want

	void self 		= getlocalvar("self");
	float intensity	= getglobalvar("intensity"+self); 	//HOW MUCH THE PANEL WILL GO DOWN IN PIXELS
	float duration 	= getglobalvar("duration"+self); 	//MAXIMUM DURATION WHEN USING A REGULAR TIMED QUAKE
	float reduction = getglobalvar("reduction"+self); 	//USED TO DECREASE THE SHAKE INTENSITY GRADUALLY, AT EACH SHAKE THE NEXT WILL BE WEAKER
	float rate 		= getglobalvar("rate"+self); 		//DELAY BETWEEN EACH SHAKE, SMALL NUMBERS WILL MAKE THE SCREEN SHAKE FASTER
	int smooth		= getglobalvar("smooth"+self); 		//THIS FLAG ACTIVATES A MORE SMOOTH MOVEMENT WHEN USING A HIGH RATE VALUE, LIKE AN EARTHQUAKE
	int reset 		= 0;								//DEFAULT SHAKE EFFECT VALUE WHEN DISABLED, DON'T CHANGE THIS!!!!!

	//START SHAKE VARIABLE IF NULL, ENABLE QUAKE DETECTION BY OTHER ENTITIES
	if(getglobalvar("quakePower"+self) == NULL()){setglobalvar("quakePower"+self, intensity);}
	if(getglobalvar("quakeTimer"+self) == NULL()){setglobalvar("quakeTimer"+self, duration);}

	//GRADUAL EFFECT, MANAGED BY INTENSITY
	if(duration == 0){ //NOT TIME BASED?? USES INTENSITY
		if(openborvariant("elapsed_time")%rate == 0){ //USED TO CONTROL SHAKE RATE
			if(getglobalvar("quakePower"+self) > 0){ //USED TO AVOID NEGATIVE NUMBERS
				changelevelproperty("quake", getglobalvar("quakePower"+self)); //APPLY SHAKE EFFECT IN THE CURRENT LEVEL
				setglobalvar("quakePower"+self, getglobalvar("quakePower"+self)-reduction); //REDUCE THE NEXT SHAKE INTENSITY
			}
			else
			{
				//CLEAR ALL QUAKE VARIABLES
				setglobalvar("quakePower"+self, NULL());
				setglobalvar("quakeTimer"+self, NULL());
				setglobalvar("intensity"+self, NULL());
				setglobalvar("duration"+self, NULL());
				setglobalvar("reduction"+self, NULL());
				setglobalvar("rate"+self, NULL());
				setglobalvar("smooth"+self, NULL());
				changelevelproperty("quake", reset);
				killentity(self); //SUICIDE
			}
		}
		else
		{
			if(smooth != 1){changelevelproperty("quake", reset);} //USED TO AVOID THE SMOOTH MOVEMENT IF THE FLAG IS NOT 1
		}
	}

	//REGULAR EFFECT, MANAGED BY TIME
	if(duration != 0){ //NOT INTENSITY BASED?? USES TIME
		if(openborvariant("elapsed_time")%rate == 0){ //USED TO CONTROL SHAKE RATE
			if(getglobalvar("quakeTimer"+self) > 0){ //USED TO AVOID NEGATIVE NUMBERS
				changelevelproperty("quake", getglobalvar("quakePower"+self)); //APPLY SHAKE EFFECT IN THE CURRENT LEVEL
			}
			else
			{
				//CLEAR ALL QUAKE VARIABLES
				setglobalvar("quakePower"+self, NULL());
				setglobalvar("quakeTimer"+self, NULL());
				setglobalvar("intensity"+self, NULL());
				setglobalvar("duration"+self, NULL());
				setglobalvar("reduction"+self, NULL());
				setglobalvar("rate"+self, NULL());
				setglobalvar("smooth"+self, NULL());
				changelevelproperty("quake", reset);
				killentity(self); //SUICIDE
			}
		}
		else
		{
			if(smooth != 1){changelevelproperty("quake", reset);} //USED TO AVOID THE SMOOTH MOVEMENT IF THE FLAG IS NOT 1
			setglobalvar("quakeTimer"+self, getglobalvar("quakeTimer"+self)-reduction); //TIME REDUCTION AT EACH CYCLE
		}
	}
}

ANIMATION SCRIPT
Code:
void setQuake(float intensity, float duration, float reduction, float rate, int smooth)
{//Adjust custom quake paremeters inside the entity by changing variables
	void self = getlocalvar("self"); 
	
	setglobalvar("intensity"+self, intensity);
	setglobalvar("duration"+self, duration);
	setglobalvar("reduction"+self, reduction);
	setglobalvar("rate"+self, rate);
	setglobalvar("smooth"+self, smooth);
}

QUAKE ENTITY
Code:
name			QuakeHigh
type			none
shadow			0
animationscript	data/scripts/animation/default.c
script			data/scripts/updateentity/quake.c

anim idle
	loop	0
	delay	32
	offset	1 1
	@cmd setQuake 6 0 0.1 2 0
	frame	data/chars/misc/quake/empty.gif

Damon Caskey
Thanks, it's good to know that it's possible to use "gfx_offset_adj_x and gfx_offset_adj_y" and make a custom quake, I think that this way we can have more control. For now I'm using the function changelevelproperty("quake") but will make tests using these functions.

Thank you Ilu and DC! Will be an honor to join the OpenBOR dev team in the future. It is a great responsibility and I need to learn more about C programming language before. Although I understand the logic and how the engine works, I need more practise in coding because I'm seeing that writing in C language directly is different from writing scripts.
 
I changed the code and made a "2-step" select screen.
Thank you for that and all that you have added to your mod, this is very inspiring :).
I hope that Rebellion set will let a place for some custom and/or remade characters ;).
The next enemy will be Abadede recolored with some new moves in order to make a nice SOR1 boss.
 
I'm really looking forward to all of the playable enemies having complete movesets. Seeing how many there are and knowing they'll all be complete characters someday - that's SO MUCH VARIETY.

As someone who is a huge fan of giant rosters in these kinds of games (think ZVitor's Infinity War), it excites me a lot :)

What are the chances of an SoR 2/3 style Cherry and Floyd (and even Estel) making it into the game someday? It would be amazing to see them in sprite form and really help the game to feel like a love letter to the entire series :) Of course it would be impossible to remake the stages from SoR 4 though, but still the characters alone would be a wonderful edition.
 
Kratus that is really cool! I should try this solution soon.
Thanks for all your hard work.

About the quake, I will modify the code a bit so we can spawn the quake entity and pass the desired values on the spawn, not inside the entity.

Thanks buddy.
 
Psykai: Everything seems to be impossible until you try to make something 😉. SOR4 content is possible to be downscaled and redrawed, but for me it's not the priority.
Moreover, I don't wish to have problems with Sega and DotEmu business so we'll see later.
There are enough to do with SOR1/2/3 serie and with Master System, Game Gear special levels and characters (including prototypes).
If you want to lend me a hand for small things, it would be great, as you wish.
 
Hi Guys,

I haven't been involved with any ideas yet here, but call me the phantom Big fan of this game. I've been playing the progress since the early days, loving this progress so far, it's becoming better than rage remake, and has me more hooked than rage 4.

Not sure if this is an available cheat, but there could surely be an option for 'weapon stays' when grabbing an enemy? Like in SOR 1.

I'm digging the entire thing, the game gets hard, I deal with it.

Also, I've brushed through the feed, noticed people are talking about enemy characters. It could be a lot of work but surely the entire enemy set could be made into fully playable characters, it would make for a great Tekken style basher with that many to select from, could even get back stories for each person like they do in Tekken, ya know? Galsia could be a father on a revengeful rampage because Axel accidently killed his dog, that sorta thing.

It would be a lot of work, but would be so awesome if Galsia and so on had full move sets, with power moves and matched abilities to that of the normal characters. If that hot completed, it would open up a huge area of potential when further modding too.

I'm hoping to see SOR 1 routes.

Also, anyone offered fresh music for this? It feels like rage 2x is in need of its own musical version of the tracks. I'm offering but only if Kratus will listen to a track and give me ideas on that. (I'm the best musician, I'd make it fresh)

Gaz (general ragemaster)
 
Also, I noticed some people calling out for SOR 4 enemies, that would be crap.

Also, there would be licence drama for the team making it. Stick to the original characters maaaan
 
Gary: Thanks for your support! After the Nightmare mod, I will work on a training camp where Galsia, Donovan and Signal will receive a full moveset (maybye SOR3 Slum and Vice too). There will be possible to beat eventually Mr.X with Galsia :).
 
kimono that's awesome to see, will be fresh to loop the game with Galsia lol, I'm still offering music to this game. Might post an example track later
 
So here's my offer, all three soundtracks from the genesis series of rage (1, 2 and 3).

This is an absolute rough mixdown, still have some engineering to do with the tones of the piano especially, but wanted to treat you guys to something fresh.

I've always been inspired by the music from the series, and I need a project to work on. I think this game would be stregnthened dramatically with enhanced and 'noired' music like this applied. Sometimes I only play the game to listen to the awesome melodies from Yozo.

Have a listen, with headphones, and tell me your thoughts, I'd love to get involved with this game, and I'm working on various foundations for my own personal developments.

https://youtu.be/WZuolaJrZbs

Gary (Cj Lee/General Rage master)
 
Gary said:
So here's my offer, all three soundtracks from the genesis series of rage (1, 2 and 3).

This is an absolute rough mixdown, still have some engineering to do with the tones of the piano especially, but wanted to treat you guys to something fresh.

I've always been inspired by the music from the series, and I need a project to work on. I think this game would be stregnthened dramatically with enhanced and 'noired' music like this applied. Sometimes I only play the game to listen to the awesome melodies from Yozo.

Have a listen, with headphones, and tell me your thoughts, I'd love to get involved with this game, and I'm working on various foundations for my own personal developments.

https://youtu.be/WZuolaJrZbs

Gary (Cj Lee/General Rage master)

Wow, nice job Gary
If you want to make all musics for SOR1/2/3, we can talk about to create a playlist exclusively for your musics, like I made for Bombergames.
 
Kratus really glad you like it Kratus, much like your idea, it can't quite achieve the originality of the game, but we certainly gave it some stregnth.

I'm a huge fan of the Bombergames music, but I've overplayed the tracks, still overpaying them tracks from when they released remake. Also, your teams version of the game deserves and needs it's own soundtrack to go with the quality, it will make the game next level serious in the openbor arena.

Any specifics just ask, I can create segments too, but will need to collaborate with you if you want these tracks to be separated into boss music or if you want me to create trigger points for the routes.

I'd be honoured to be on the credits for the music here. If you allow it, I can commit to the entire soundtrack, I'd need atleast 6 months, but I hope there would be no other musicians involved, the style of the music would be better as an entire piece. I'm gonna call the soundtrack 'Streets of Rage, the Cj Loop'

Glad to start talks here Kratus, you started a masterpiece.

Cj Lee
 
Back
Top Bottom