2D RPG Development (Sword of Mana)

Recommended Posts

Hello gamedev.net, I am brand new here. I am not the best at articulating myself or at formatting forum posts so sorry ahead, but I want to try and make my first post count so I'll jump right in.

I love the time that we live in - I love that pixelated graphics have been so prominent in gaming these past years. I like to think that a lot of people developing 2D games these days have the same mentality as me, which is 2D graphics are beautiful (I've heard people call 2D development "lazy" which is possibly true for some, but I like my positive viewpoint). Sword of Mana for example, despite it's age and 2D graphics is a wonderful, whimsical, beauty. It has a fun hack and slash style of combat, addictive crafting (mob grinding for loot/seeds) and a creative housing system for the time. I've replayed this game many times throughout the years. Each time I play it I'm at a different level of maturity in my life (more or less lol). As I've aged my perspective has changed due to life and it's struggles, so the game means something different to me each time I play it.

To get to the point of why I created this account - I want to learn how to make a top-down, 2D, RPG that plays like Sword of Mana. I have no illusions that it will be easy and I'm hoping for some solid advice from the experienced users on this forum to get me pointed in the right direction. I have no skills with game programming, minimal music ability (I have three practice tunes on soundcloud if you want to check them out - bottom of post), and no skill with pixel art, but am willing to learn. So if you have any advice whatsoever I'm all ears!

 

 

Share this post


Link to post
Share on other sites

For a place to start or a better idea of how to start, please read this link - https://www.gamedev.net/page/resources/_/technical/game-programming/your-first-step-to-game-development-starts-here-r2976

Since your goal is to recreate a game, may I suggest Gamemaker. Easy to get into and get something up quickly.

Share this post


Link to post
Share on other sites

Technically speaking, Sword of Mana and similar games are quite straightforward. That doesn't mean they'll be trivial to make, though. You should first get started with making even simpler games like Pong or whatever. The blog Alpha_ProgDes linked above is a good starting point.

Game Maker is a good tool to consider using as well. Making top-down 2D games is well within its wheelhouse. 

The most important thing for you to do is practice: practice making simple games, building to more complex ones, and eventually to your 2D RPG. The same goes with art: if you're not going to try to find somebody to work with to create art, you're going to have to make it yourself, and that means spending time practicing it until you feel comfortable with your ability to produce the quality level you want for this game of yours.

Fortunately, the "pixel art" aesthetic of games like Sword of Mana is super popular right now, and it's fairly easy to find large lists of tutorials and guides just by poking around Google.

Share this post


Link to post
Share on other sites

Thanks everyone for the comments and advice. Another question I have is if I wanted to create everything from scratch - including a simple engine - are there tutorials for that? If I ever were to create a game and hypothetically put it to market, I would like to say I did it all myself, because that is the type of person that I am. Not out of, "I want more money for myself, greeeeeed," more so that I would like to have it as a main hobby/challenge for myself (I'll definitely be asking a lot of questions and sharing any progress I make).

I will absolutely check out Game Maker Studio 2 in the meantime and, "The Big List Of Pixel Art Tutorials," that jpetrie linked.

Share this post


Link to post
Share on other sites
5 minutes ago, Patapo said:

Thanks everyone for the comments and advice. Another question I have is if I wanted to create everything from scratch - including a simple engine - are there tutorials for that? 

No. This requires you to first invent the universe.

It's practically-speaking impossible to make something "from scratch." You're going to be using a computer somebody else built. You're going to be using a compiler somebody else built. And you're going to be using APIs somebody else built.

So the real question is when you say "from scratch," how much do you mean? If you mean not using tools like Game Maker, then absolutely there are tutorials for the whole host of various and sundry specific topics you will need to build a game (you do not need to build "an engine," that's not a requirement to have a game and building one well, for real, requires having built a bunch of games before, unless you want to delude yourself). Doing this is significantly more work, of course, especially if you have no skill at game programming. You'll be spending some non-trivial amount of time learning to program and writing basic text-based programs before you even get to learning how to put a window on the screen and draw graphics into it. But is certainly a path open to you, if developing that skill is more important to you than finishing your game.
 

9 minutes ago, Patapo said:

Not out of, "I want more money for myself, greeeeeed," more so that I would like to have it as a main hobby/challenge for myself (I'll definitely be asking a lot of questions and sharing any progress I make).

Good, because you'll actually, practically speaking, make less money this way. Mostly due to the opportunity cost if nothing else.

Share this post


Link to post
Share on other sites

I don't want this to get convoluted but I'll try to articulate what I mean in a better way -

37 minutes ago, jpetrie said:

No. This requires you to first invent the universe.

It's practically-speaking impossible to make something "from scratch." You're going to be using a computer somebody else built. You're going to be using a compiler somebody else built. And you're going to be using APIs somebody else built.

I understand that everything is interconnected and that nothing that I do will ever be from original or from scratch (thanks for reminding me how insignificant I am lol) - that being said, what I meant was more simple - I want to do it all myself. When I say, "myself," I don't mean, "all by myself." I learn better when I do it myself, using my own hands. When I press left on the control stick and my character, as well as the background behind him moves - I want to know what goes behind that and I want to be able to know how to program that.

40 minutes ago, jpetrie said:

Good, because you'll actually, practically speaking, make less money this way. Mostly due to the opportunity cost if nothing else.

I shouldn't have even brought up money haha, the only reason I did was to make the point that I want this more as a hobby, for fun, without the thought of ever trying to make money with it. More in line with the spirit of art, being creative, and disciplining myself enough to try and finish a goal.

I have a good idea where to start with the artwork (thanks again jpetrie), and with music. So, to get to the heart of it, and to make it simple for myself as a beginner - where should I begin learning for programming?

Share this post


Link to post
Share on other sites

Pick a language; I'd suggest C# or Python. Search the internet for "learning C#" or "learning Python" tutorials or whatnot. Follow them, practice building simple programs like a guess-the-number game, blackjack or hangman style game using the basic (usually text-based) IO available. 

Share this post


Link to post
Share on other sites
2 hours ago, jpetrie said:

Pick a language; I'd suggest C# or Python. Search the internet for "learning C#" or "learning Python" tutorials or whatnot. Follow them, practice building simple programs like a guess-the-number game, blackjack or hangman style game using the basic (usually text-based) IO available. 

Will do man! Thanks for all the advice!

Share this post


Link to post
Share on other sites

I would also find a level/map editor so you don't have to make your own.  Trust me when I say you don't want to tackle making your own on your first real project unless you have to.  Practice loading the map file format of your chosen map editor.

Share this post


Link to post
Share on other sites

I'll just repeat myself. And make a small change since we're talking about map editors.

On 10/10/2017 at 8:02 AM, Alpha_ProgDes said:

For a place to start or a better idea of how to start, please read this link - https://www.gamedev.net/page/resources/_/technical/game-programming/your-first-step-to-game-development-starts-here-r2976

Since your goal is to recreate a game, may I suggest Gamemaker 2. Easy to get into and get something up quickly.

 

Share this post


Link to post
Share on other sites

As a relative Noob to game development I'd say you need to know what you want in the long run. If you're planning on exclusively making 2D RPGS, you best bet is to use something like game maker, if you're planning on making any  3D Games in the future,  I'd suggest using unity. the 2D tools aren't half bad and the newest update added a tile map editor. The point is you don't want to have to learn to use a new engine when you want to make a 3D game. 

As for programming It doesn't really matter what the first language you learn is. The concepts are all the same but the syntax can be much different, I'd say C#/java are a good place to start. But whatever you do make sure to practice what you learn or it's a waste of time.  

When i't comes to art practice is the difference between the pros and the amateurs. The bets thing to do in my limited experience is to learn the basics and them practice, practice, practice. 

I think you got the music thing covered. 

 

Regardless, remember learning all this will take a lot of time and effort and in the end your first project will most likely be 70 shades of garbage but the next one might only be 60 shades of garbage, and it only gets better from there :) .

 

Have fun learning, hope this helps.

 

—Brua-1589

Share this post


Link to post
Share on other sites

I've decided to pursue C#/Unity because eventually (a LONG way down the road) if I am able, I would like to dabble in 3D. I found a book or two on amazon for it as well and from what I've researched (and been told here) is that it is one of the easiest languages to learn - as well, it is a good stepping stone if I ever want to pursue learning other languages.

Thanks again everybody for all the advice - I was expecting a lot less than I received!

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Forum Statistics

    • Total Topics
      628724
    • Total Posts
      2984404
  • Similar Content

    • By Dafu
      FES Retro Game Framework is now available on the Unity Asset Store for your kind consideration!
      FES was born when I set out to start a retro pixel game project. I was looking around for an engine to try next. I tried a number of things, from GameMaker, to Fantasy Consoles, to MonoGame and Godot and then ended up back at Unity. Unity is just unbeatable in it's cross-platform support, and ease of deployment, but it sure as heck gets in the way of proper retro pixel games!
      So I poured over the Unity pipeline and found the lowest levels I could tie into and bring up a new retro game engine inside of Unity, but with a completely different source-code-only, classic game-loop retro blitting and bleeping API. Months of polishing and tweaking later I ended up with FES.
      Some FES features:
      Pixel perfect rendering RGB and Indexed color mode, with palette swapping support Primitive shape rendering, lines, rectangles, ellipses, pixels Multi-layered tilemaps with TMX file support Offscreen rendering Text rendering, with text alignment, overflow settings, and custom pixel font support Clipping Sound and Music APIs Simplified Input handling Wide pixel support (think Atari 2600) Post processing and transition effects, such as scanlines, screen wipes, screen shake, fade, pixelate and more Deploy to all Unity supported platforms I've put in lots of hours into a very detail documentation, you can flip through it here to get an better glimpse at the features and general overview: http://www.pixeltrollgames.com/fes/docs/index.html
      FES is carefully designed and well optimized (see live stress test demo below). Internally it uses batching, it chunks tilemaps, is careful about memory allocations, and tries to be smart about any heavy operations.
      Please have a quick look at the screenshots and live demos below and let me know what you think! I'd love to hear some opinions, feedback and questions!
      I hope I've tickled your retro feels!



      More images at: https://imgur.com/a/LFMAc
      Live demo feature reel: https://simmer.io/@Dafu/fes
      Live blitting stress test: https://simmer.io/@Dafu/fes-drawstress
      Unity Asset Store: https://www.assetstore.unity3d.com/#!/content/102064

      View full story
    • By Dafu
      FES Retro Game Framework is now available on the Unity Asset Store for your kind consideration!
      FES was born when I set out to start a retro pixel game project. I was looking around for an engine to try next. I tried a number of things, from GameMaker, to Fantasy Consoles, to MonoGame and Godot and then ended up back at Unity. Unity is just unbeatable in it's cross-platform support, and ease of deployment, but it sure as heck gets in the way of proper retro pixel games!
      So I poured over the Unity pipeline and found the lowest levels I could tie into and bring up a new retro game engine inside of Unity, but with a completely different source-code-only, classic game-loop retro blitting and bleeping API. Months of polishing and tweaking later I ended up with FES.
      Some FES features:
      Pixel perfect rendering RGB and Indexed color mode, with palette swapping support Primitive shape rendering, lines, rectangles, ellipses, pixels Multi-layered tilemaps with TMX file support Offscreen rendering Text rendering, with text alignment, overflow settings, and custom pixel font support Clipping Sound and Music APIs Simplified Input handling Wide pixel support (think Atari 2600) Post processing and transition effects, such as scanlines, screen wipes, screen shake, fade, pixelate and more Deploy to all Unity supported platforms I've put in lots of hours into a very detail documentation, you can flip through it here to get an better glimpse at the features and general overview: http://www.pixeltrollgames.com/fes/docs/index.html
      FES is carefully designed and well optimized (see live stress test demo below). Internally it uses batching, it chunks tilemaps, is careful about memory allocations, and tries to be smart about any heavy operations.
      Please have a quick look at the screenshots and live demos below and let me know what you think! I'd love to hear some opinions, feedback and questions!
      I hope I've tickled your retro feels!



      More images at: https://imgur.com/a/LFMAc
      Live demo feature reel: https://simmer.io/@Dafu/fes
      Live blitting stress test: https://simmer.io/@Dafu/fes-drawstress
      Unity Asset Store: https://www.assetstore.unity3d.com/#!/content/102064
    • By Dafu
      Hello all,
      I've been hard at work on a new retro pixel-perfect framework called FES Retro Game Framework. It is now available on the Unity Asset Store for your kind consideration!
      FES was born when I set out to start a retro pixel game project. I was looking around for an engine to try next. I tried a number of things, from GameMaker, to Fantasy Consoles, to MonoGame and Godot and then ended up back at Unity. Unity is just unbeatable in it's cross-platform support, and ease of deployment, but it sure as heck gets in the way of proper retro pixel games!
      So I poured over the Unity pipeline and found the lowest levels I could tie into and bring up a new retro game engine inside of Unity, but with a completely different source-code-only, classic game-loop retro blitting and bleeping API. Months of polishing and tweaking later I ended up with FES.
      Some FES features:
      Pixel perfect rendering RGB and Indexed color mode, with palette swapping support Primitive shape rendering, lines, rectangles, ellipses, pixels Multi-layered tilemaps with TMX file support Offscreen rendering Text rendering, with text alignment, overflow settings, and custom pixel font support Clipping Sound and Music APIs Simplified Input handling Wide pixel support (think Atari 2600) Post processing and transition effects, such as scanlines, screen wipes, screen shake, fade, pixelate and more Deploy to all Unity supported platforms I've put in lots of hours into a very detail documentation, you can flip through it here to get an better glimpse at the features and general overview: http://www.pixeltrollgames.com/fes/docs/index.html
      FES is carefully designed and well optimized (see live stress test demo below). Internally it uses batching, it chunks tilemaps, is careful about memory allocations, and tries to be smart about any heavy operations.
      Please have a quick look at the screenshots and live demos below and let me know what you think! I'd love to hear some opinions, feedback and questions!
      I hope I've tickled your retro feels!



      More images at: https://imgur.com/a/LFMAc
      Live demo feature reel: https://simmer.io/@Dafu/fes
      Live blitting stress test: https://simmer.io/@Dafu/fes-drawstress
      My own game I started working on using FES, a roguelike, very early: https://simmer.io/@Dafu/merl
      Unity Asset Store: https://www.assetstore.unity3d.com/#!/content/102064
       
       
    • By ORmorni
      I am working on a multiplayer Android game using OpenGL ES in Android Studio. The game is planned as a 2d top-down shooter, in which the players survive while defeating waves of enemies. Coordination between the players is required to defeat the enemies, due to the enemy design - for an example, some enemies can be seen only by the player they target, and must be killed by others.
      I have already implemented basic menus and mechanics for the game, and am currently searching for a 2d artist to create graphics for the game.
      I can be contacted at ron_solan@walla.com
    • By alex1997
      I'm looking to render multiple objects (rectangles) with different shaders. So far I've managed to render one rectangle made out of 2 triangles and apply shader to it, but when it comes to render another I get stucked. Searched for documentations or stuffs that could help me, but everything shows how to render only 1 object. Any tips or help is highly appreciated, thanks!
      Here's my code for rendering one object with shader!
       
      #define GLEW_STATIC #include <stdio.h> #include <GL/glew.h> #include <GLFW/glfw3.h> #include "window.h" #define GLSL(src) "#version 330 core\n" #src // #define ASSERT(expression, msg) if(expression) {fprintf(stderr, "Error on line %d: %s\n", __LINE__, msg);return -1;} int main() { // Init GLFW if (glfwInit() != GL_TRUE) { std::cerr << "Failed to initialize GLFW\n" << std::endl; exit(EXIT_FAILURE); } // Create a rendering window with OpenGL 3.2 context glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); // assing window pointer GLFWwindow *window = glfwCreateWindow(800, 600, "OpenGL", NULL, NULL); glfwMakeContextCurrent(window); // Init GLEW glewExperimental = GL_TRUE; if (glewInit() != GLEW_OK) { std::cerr << "Failed to initialize GLEW\n" << std::endl; exit(EXIT_FAILURE); } // ----------------------------- RESOURCES ----------------------------- // // create gl data const GLfloat positions[8] = { -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, }; const GLuint elements[6] = { 0, 1, 2, 2, 3, 0 }; // Create Vertex Array Object GLuint vao; glGenVertexArrays(1, &vao); glBindVertexArray(vao); // Create a Vertex Buffer Object and copy the vertex data to it GLuint vbo; glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(positions), positions, GL_STATIC_DRAW); // Specify the layout of the vertex data glEnableVertexAttribArray(0); // layout(location = 0) glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0); // Create a Elements Buffer Object and copy the elements data to it GLuint ebo; glGenBuffers(1, &ebo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW); // Create and compile the vertex shader const GLchar *vertexSource = GLSL( layout(location = 0) in vec2 position; void main() { gl_Position = vec4(position, 0.0, 1.0); } ); GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexSource, NULL); glCompileShader(vertexShader); // Create and compile the fragment shader const char* fragmentSource = GLSL( out vec4 gl_FragColor; uniform vec2 u_resolution; void main() { vec2 pos = gl_FragCoord.xy / u_resolution; gl_FragColor = vec4(1.0); } ); GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentSource, NULL); glCompileShader(fragmentShader); // Link the vertex and fragment shader into a shader program GLuint shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram); glUseProgram(shaderProgram); // get uniform's id by name and set value GLint uRes = glGetUniformLocation(shaderProgram, "u_Resolution"); glUniform2f(uRes, 800.0f, 600.0f); // ---------------------------- RENDERING ------------------------------ // while(!glfwWindowShouldClose(window)) { // Clear the screen to black glClear(GL_COLOR_BUFFER_BIT); glClearColor(0.0f, 0.5f, 1.0f, 1.0f); // Draw a rectangle made of 2 triangles -> 6 vertices glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, NULL); // Swap buffers and poll window events glfwSwapBuffers(window); glfwPollEvents(); } // ---------------------------- CLEARING ------------------------------ // // Delete allocated resources glDeleteProgram(shaderProgram); glDeleteShader(fragmentShader); glDeleteShader(vertexShader); glDeleteBuffers(1, &vbo); glDeleteVertexArrays(1, &vao); return 0; }  
  • Popular Now