Yosh!! Rukiri here

If you're new, post here and introduce yourself
Post Reply
Rukiri
Newbie
Posts: 5
Joined: Sun Jun 10, 2018 2:47 am

Yosh!! Rukiri here

Post by Rukiri » Sun Jun 10, 2018 3:36 am

Hey what's up?

My name is Rukiri and many of you probably have seen me on other boards over the years if you're in the RPG Maker community (which is weird as I don't use RPG Maker anymore for anything serious... mainly as I develop Action/Adventure RPGs which is a real big nono for RPG Maker. RPG Maker XP out of all engines is the closest thing and still get's regular ABS updates so maybe as of now sure but... it's a 14 year old engine which IS fine if you're working on snes RPGs.

I mainly use Game Maker Studio 2, I do keep an eye out on Godot as it's shaping up nicely, while others say C# is fine the fact that export isn't available yet and the fact it's still a bit buggy is a turnoff for me. C# would be the language I'd use period and is the ONLY reason I'm looking at Godot.

That brings me here, now funny thing is I actually purchased RPGDev.com years ago which was going to be a similar website similar to RPGMaker.net but built with Ruby on Rails which I may still end up doing but tribute to my own projects.

For RPG Dev to be successful it has to do a few more things than RPG Maker MV.
- Triangular tile collision (here's code to actually do that in Game Maker, run this in a while loop)

Code: Select all

if (place_meeting(x,y,obj_Parent_Solid)) {
			for (_i = _cornerY; _i > 0; _i--;) {
					_corner = !place_meeting(x,y+_i,obj_Parent_Solid) - !place_meeting(x,y-_i,obj_Parent_Solid);
				if (!kbu or !kbd) {
					_moveH = _spd[3];
					if (_corner !=0) { 
						y += _corner; break; 
					}
				}
			}
			if (place_meeting(x,y,obj_Parent_Solid)) { 
				x -= _moveV; 
			}
			if (y != yprevious) {
				_moveH = _spd[3];
			}
			_moveH = _spd[1];
		}
if (place_meeting(x,y,obj_Parent_Solid)) {
			for (_i = _cornerX; _i > 0; _i--;) {
				_corner = !place_meeting(x+_i,y,obj_Parent_Solid) - !place_meeting(x-_i,y,obj_Parent_Solid);
				if (!kbl or !kbr) {
					_moveH = _spd[3];
					if (_corner !=0) { 
						x += _corner; break; 
					}
				}
			}
			if (place_meeting(x,y,obj_Parent_Solid)) { 
				y -= _moveV; 
			}
			if (x != xprevious) {
				_moveH = _spd[3];
			}
			_moveH = _spd[1];
		}
- Grid movement is basically a simple edit (just posting entire code for simplicity)

Code: Select all

var delta = max(1,(obj_fps/1000000*delta_time));

var o_spd = m_spd;
var smooth_diag = .4142135620;

var x_input = (Xen_Input.Right - Xen_Input.Left) * m_spd;
var y_input = (Xen_Input.Down - Xen_Input.Up) * m_spd;

var move_x = abs(x_input);
var move_y = abs(y_input);

if (move_x == _mx && move_y == _my) {
	_sx = _sy;	
}

if place_snapped(_tilew,_tileh) {
	if (move_x) {
		if (move_y) {
			o_spd = smooth_diag + m_spd;
		} else { 
			if (move_x == _mx) {
				_sx = 0;
			}
			o_spd = m_spd;
	}
		_sx += move_x;
		while (_sx >= 1) {
			if (x = _tile_x * _tilew) {
				if (Xen_Input.Left && !place_meeting((_tile_x - 1) * _tileSize, y, obj_Parent_Solid)) {
					_tile_x -= 1 * delta;
				} else if (Xen_Input.Right && !place_meeting((_tile_x + 1) * _tileSize, y, obj_Parent_Solid)) {
					_tile_x += 1 * delta;
				}
			}
			if (y != yprevious) {
				o_spd = smooth_diag + m_spd;
			}
			_sx -= o_spd;
		}
	}
	if (move_y) {
		if (move_x) {
			o_spd = smooth_diag + m_spd;
		} else { 
			if (move_y == _my) {
				_sy = 0;
			}
			o_spd = m_spd;
		}
		_sy += move_y;
		while (_sy >= 1) {
			if (y = _tile_y * _tileh) {
				if (Xen_Input.Up && !place_meeting(x, (_tile_y - 1) * _tileSize, obj_Parent_Solid)) {
					_tile_y -= 1 * delta;
				} else if (Xen_Input.Down && !place_meeting(x, (_tile_y + 1) * _tileSize, obj_Parent_Solid)) {
					_tile_y += 1 * delta;
				}
			}
			if (x != xprevious) {
				o_spd = smooth_diag + m_spd;
			}
		
			_sy -= o_spd;
		}
	}
}

if (_canMove) {
	if (_tile_x * _tilew > x) { 
		x += m_spd * delta;  
	} else if (_tile_x * _tilew < x) { 
		x -= m_spd * delta;  
	}
	
	if (_tile_y  * _tileh > y) {  
		y += m_spd * delta;   
	} else if (_tile_y  * _tileh < y) {  
		y -= m_spd * delta;  
	}
}
- Independent API calls for movement behavior, take a look at a RPG Maker MV javascript plugin for pixel-movement, it's pretty long for a reason as it's a major class re-write and a problem if you're wanting to do a A-RPG and not to mention collision checking is a lot more complex as you also have to include triangular tiles into the mix (don't know if such a collision plugin exists yet) - Custom movement per object is another idea which would make things easier.

- ACTUALLY CARE ABOUT THE DESKTOP!! MVs editor may be desktop software but it's basically a webapp using node.js to create an executable, unlike other versions of RPG Maker this has also caused audio issues which is a hit or miss.

- Don't make the IDE look like a phone app... Godot, Game Maker, Unity are good examples of UI if you need examples.

- Dark Blue theme(visual Studio got this right)...please?!

- Strike a balance between complex and ease of use, Game Maker... got this right. You only need to make objects(events), scripts, and a awesome room(level) editor that are easily accessible and easy to use and you're good to go!

RPG Maker MV would be a good A-RPG engine if it wasn't so much more complex to make one in MV... the main issues are triangular collision detection, knock-back (Zelda/Seiken Densetsu would have used something like this

Code: Select all

 var spd = 2;
var degree = -1;
var dir = degree;

degree=radtodeg(arctan2(vec1.y - vect2.y, vect2.x - vect1.x));
x += cos(dir) * spd;
y += sin(dir) * spd; 

)

Edit: so it seems they condensed the object to rpg_object.js so it's easier to manage but haven't tested anything tho and GM is still far easier "and way more customizable" for a-rpgs.

Dan
Developer
Posts: 14
Joined: Mon Jun 04, 2018 12:09 am

Re: Yosh!! Rukiri here

Post by Dan » Sun Jun 10, 2018 5:59 pm

Hey! Welcome to the forums :)

That's a funny thing about you having the RpgDev.com domain name. To be honest I wasn't the most inventive but I wanted RPG in the name as I come from an RPG Maker background (I even used RPG Maker 95 back in the old Windows 98 days).

I definitely agree with your point on MV abandoning the desktop which is one of the main reasons I decided to start this project. The editor is built with the same technology as Visual Studio and is easily customisable (You can already have dark/light themes).

I am actually seriously considering integrating a full-blown 2D physics engine as it would allow for the most flexibility when it comes to the type of games people want to make. Modern hardware can run it, (Full 3D games are doing GPU physics).

With the way I have been building the engine it shouldn't be complex to do; the current system for movement is just a simple Grid system but is not heavily integrated so at this point anything is possible in terms of choosing how far to go with physics.

Honestly I personally think Javascript is a poor choice for a scripting language in a game. It's great for portability but doesn't offer the same performance benefits that languages like C# offer. This whole solution is built entirely on C# meaning it can be ported to almost any platform.

The IDE is a key component and I have already put in place several components you might see in Visual Studio (Like being able to drag out tabs into other windows for multi-screen setups).

Almost every component of the editor will be draggable/dockable and you'll be able to drag them into new windows.

Rukiri
Newbie
Posts: 5
Joined: Sun Jun 10, 2018 2:47 am

Re: Yosh!! Rukiri here

Post by Rukiri » Sun Jun 10, 2018 10:16 pm

Javascript is fine for 2D which is why a lot of 2D engines use it, sphere is a good example of using Javascript but gasp actually cares about the desktop! I do think Pixel Game Maker is using CoCos2D-X as a backend so it's capabilities will be pretty good for 2D stuff.

C# is great but but you don't need much overhead for 2D games unless you want to go crazy... then you need a damn good backend which I usually find Game Maker Studio 2 or Godot perfect for 2D games. GMS2 is a C/C++ engine, the IDE is written in C# and I do really think C# will possibly be a scripting option by Game maker Studio 3 but that's like a decade away... Extensions are written in C# so if you need custom tools that's an options, it's not widespread as Unity is for awhile custom tools was the only way to do 2D games without hacking your way around it.

Dan
Developer
Posts: 14
Joined: Mon Jun 04, 2018 12:09 am

Re: Yosh!! Rukiri here

Post by Dan » Wed Jun 13, 2018 6:17 pm

Well it's partially down to preference, but there are many performance benefits to using C#.

There is no overhead in terms of the scripting interface as is in the native language of the engine, this means you can demand more from the engine, you can have more complex and intensive scripts. 3D is also a possibility in the future.

I am confident that I can find a balance between simplicity, performance and flexibility.

Post Reply