Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 10 Jun 2011
Offline Last Active Yesterday, 04:43 PM

#5274520 Beginner asking for advice

Posted by __SKYe on 05 February 2016 - 02:31 PM

Ok, to somewhat simplify the question of whether to use a tool (GMS, Contruct, Unity, etc) or a standard language + some API (think something like C++ and DirectX), one could say tools trade freedom (as in features available, and things like that) for simplicity of use.


You don't need to use C++ or C# and OpenGL/DirectX to be a "real" developer.

It is irrelevant what tool/language/API you use, as long as it works for you.


The main advantage of those tools, is that you focus mainly on the game creation part, instead of having to write code for every little thing your game does (like you would, if you use C++, for example).

The trade here is that the tool constraints what you can do (compared to, again, a language+API), but in turn allows to create stuff much faster and easier.


Oh, and what i meant for game design/architecture, is the game itself is composed (things like objects, how to do collision detection, impementing enemy AI, how to move your characters), and not code architecture.

Basically, this game developing knowledge will stay with you, even if you move to another language, because, although, you'd obviously have to learn the language and how to implement these things in that language, you'd already know how the game elements work together and how to make the game working.

This is knowledge that remains relevant regardless of whatever language or platform you use (like Looniper said, similar to cross-platform development).


There's one thing you could think about among those tools, and that is the basic language they use.

I mean, Unity uses C#, Flash uses AS3, Contruct 2 HTML5, so you could choose one that you think would be more useful in the future, although i must reiterate myself, and say that this is secondary to the experience you'll gain in the game design.


As a side note, although i mentioned Multimedia Fusion earlier, this is one i'd recommend not using, considering the alternatives.

This advice comes not from experience, but from the developer of the infamous I Wanna Be The Guy, who says he regrets using it.


As for Flash, from the tools mentioned, it's the only one i've used, and it's pretty awesome.

ActionScript3 is similar, in sintax, to C++/Java, which made it easier for me to get into, because i was already familiar with C++.

I can't say whether it is easy or hard to learn, but i think it wouldn't be much different from the other tools.

Another good point though, is that, pretty much like GameMaker, Flash has been around for a long time, so there are a lot of tutorials for it. Just make sure to search for ActionScript 3 tutorials, if you choose to use Flash, because AS2 is deprecated.


As a last note (and the fact that it is a SHMUP is a coincidence) here's a great game made in GameMaker, that i happen to discover recently.

It's like mix of Konami's Gradius and Irem's R-Type. You can find it here.

I just mention it here, so you can have an idea of what can be done with GameMaker.


Well, that's about it. I hope this is more comprehensive. smile.png

#5274393 Beginner asking for advice

Posted by __SKYe on 04 February 2016 - 10:14 PM

Well, to start of, there are platform games written in GameMaker, so given that they (the characters) require free movement (pixel by pixel), then i'm positive the movement you want would work too.

One that does uses only tile-by-tile movement is RPG Maker.


Do note that I'm not trying to sell you the idea of using GameMaker of Multimedia Fusion by any means.

In fact, i have not used either of them before, altough i am familiar with what they can achieve, and given that there are a lot of tutorials on how to use them, perhaps they would be easier for a beginner to get into.

I have used Flash before, and i have to say you can make any kind of 2D game with it, and it is pretty popular. Just check any flash games website to see what it is capable of.


About the SHMUP idea, i don't mean you have to make a carbon copy of Space Invaders, or the sort, especially if it doesn't interest you.

The thing is, altough the games are quite different, the principles are similar, it's just that a simple SHMUP is a self contained thing (think, single screen game, no overly complicated map/obstacles, etc). And these simple SHMUPS happen to be pretty popular in beginners tutorials.


A bit of a side thought here, but, i think that the biggest draw you'll get from this project, is the game design/architecture part, and not the actual tool/engine nuances themselves (unless you plan on using the same tool in the future).

I think this is especially true, if you them intend to learn an actual language later, like C++, C#, etc (as opposed to AS3, or whatever scripting language the tool uses) to use with more advances engines/APIs (like OpenGL, SDL, DirectX), because, although the language may be different, you'll already be familiar with how to structure your game and how it works.

So it's not like if you use GameMaker (or some other more simple tool) you'll be wasting time since it doesn't scale well with more advanced projects, because you'll still gain the experience of game design/structure.


So, once again, as long as the tool is capable of doing what you want, just go with the one that feels more comfortable, or looks/is more simple.


I hope this doesn't come out too confusing, and if it is, i'll be happy to (attempt) explain further.

#5274365 Beginner asking for advice

Posted by __SKYe on 04 February 2016 - 07:26 PM

Hello there, and welcome to the forums.


Perhaps, since it's your first project, and you're looking for a simple tool, you should consider something like Game Maker of Multimedia Fusion?

These are pretty limited (compared, of course, to Unity and such), but they are also easier to get into, and i think would suffice for a (relatively) simple project, although Construct seems user friendly enough (don't quote me though, i've never used it, just checked their website).


The good thing about something like Game Maker, is that it has been around for a long time, so there are plenty of tutorials to go with it.


You could also try you hand at Flash (using Action Script 3), which also has many tutorials. There's lots of great games written with it.


As a side note, since this IS your first project, may i suggest you try something simpler, like a Shoot 'Em Up (something simple, like a Space invaders clone)?

I only say this, because a zelda-like game is quite a bit more involved than a simple SHMUP, and you'd get a feel for moving sprites (your ship), basic AI (the enemies), collision detection (bullets against enemies/you), etc.


Either way, you can just try each for a bit, and then choose the one you like the most, since i'm pretty sure they all allow you to do what you intend to do.


Hope it helps.

#5114803 A newbie question

Posted by __SKYe on 06 December 2013 - 12:49 AM

I don't (and never did) work at a game company before, and i'm sure others who did can answer this much better than me, but the companies that you're talking about, that invest millions, they have, literally, hundreds of people working on a single game (you have programmers, artists, 3d modelers, animators, designers, script writers, audio editors, voice actors, game testers, marketing staff, business staff, etc), during the spawn of years, as some games take a year to be finished, others take as much as 10 years (games like Skyrim (even though it didn't take 10 years, it still took a long development time compared to annualy games), Starcraft 2, Diablo 3, etc).


Then, even though i'm not familiar with it, i'd assume that maintaining a studio of this magnitude (game company, or at least a branch) is costly, even without the game specific staff (things like office maintenance, R&D (i think of R&D here, as researching and developing the technology used for future games/engines, as oposed to direct development of a specific game, though if i'm wrong, please correct me).


Like i said i'm no expert in this but i think you can get an idea of how costly it is to run a business this big.


Hope it helps.

#5108578 writing 3D Model data to the game executable?

Posted by __SKYe on 11 November 2013 - 07:04 PM

One way to do it is to declare the 3D model data (vertices, normals, texture coordinates, etc) as variables inside the code.


Now, i don't know if you just want to know if it's possible, and if you even care about what i'll tell you, but you should never do something like that.

This may be okay for icons, but you should always separate your code (program) from your data (graphics, sounds, 3D models, etc).

#5090885 what textures to use filtering on?

Posted by __SKYe on 01 September 2013 - 04:11 PM

Assuming, I'm not misunderstanding your question and you want to use something like diffuse texture + normal map (and maybe a bump map), I'd say that a problem could arise if the normal map is much smaller than the diffuse texture, since if could convey incorrect vertex normals due to sampling.


In my opinion, if you don't see a difference, then use linear filtering, since it's the least expensive.


Hope it helps.

#5090880 Vsync with GLee

Posted by __SKYe on 01 September 2013 - 04:01 PM

Have you tried enabling VSync after creating the window (on GLUT i think it was called glutCreateWindow(), not sure though), if it was not created before?


I've never actually tried to having VSync enabled at startup, i only had it possible to enable it by pressing a key.

#5076280 How to tell if a context has been created?

Posted by __SKYe on 08 July 2013 - 10:16 PM

If you use GLEW, you can type:

//Initialize GLEW
if(glewInit() != GLEW_OK)
    //On failure

If this fails, then normally, the context has yet to be created.


Another way, is to call


If the context has yet to be created, then it will always return GL_INVALID_OPERATION (1282).

Note, however that multiple errors issued by OpenGL calls are saved by OpenGL, so the spec says that glGetError() should always be called in a loop, until it returns GL_NO_ERROR.

Since other OpenGL calls may have triggered an invalid operation, to be sure, you could call glGetError() a large number of times in a row (1000 maybe?), and if the last return value is still GL_INVALID_OPERATION, then you know the context is not created.


Hope it helps.

#5076278 Managing objects in different game states

Posted by __SKYe on 08 July 2013 - 09:58 PM

I think it is simpler to have a single ObjectManager class that manages all objects, and every state adds it's objects to that manager.

Each state should be, however, responsible for adding it's objects to the manager when it is created, and removing then when it is destroyed. In other words the global ObjectManager doesn't have to keep checking which objects are no longer needed.


L. Spiro has a very good article about managing game state (among other things), if you're interested: http://lspiroengine.com/?p=351


About your off-topic question:


If, when you say the entity is "dead", you're referring to something like, an enemy entity was just killed and has no purpose left in the game, then i'd say removing it from the ObjectManager is a good option, simply because it's one less update call the ObjectManager must make.

However, if the ObjectManager has to check for a variable to know if the object needs to be updated, then, on top of doing the same thing the above option does (issuing update calls), it will still have to execute a branching instruction for every entity (including the ones that are not updated), so it would be slower.


Note that this, however, probably won't even be noticed, with the speed of processors nowadays.


Hope it helps, and sorry if i misunderstood the question(s).

#5071548 Loading level information based on a parameter

Posted by __SKYe on 20 June 2013 - 01:10 PM

That's great you understood it.

Also if you need help with binary files, i can help too, they aren't that much harder than text files.


I have one final piece of advice, although it wasn't solicited.

Although binary files have the advantages of being more efficient in terms of speed and space, keep in mind that text files are much easier to edit by hand (which you'll probably do unless you make some level/map editor).

So perhaps during development, unless you build a custom level/map editor that creates the binary files automatically, you may want to use text file, for the easiness of use.


Good luck!

#5071457 Scale up an object on a plane

Posted by __SKYe on 20 June 2013 - 08:07 AM

You'll have to scale it and then translate (move) it in the direction of the plane's normal by some amount.

//You must know the distance (for each axis) from the center point of your object (it's origin) and the point that touches the plane
//I'll call this distance, and put some random value
vec3 distance = (0.0f, 3.0f, 0.0f);

//In this example the object is at the center of the world, but move up in the Y axis by 3.0.
//Now do the scaling (remember scaling by 1.0 means staying the same)
//We're just scaling in the Y axis
glScalef(1.0f, 2.0f, 1.0f);

//Calculate the amount to translate the object
vec3 move;

//The <scale.X>, etc are the values passed to glScalef()
//We subtract 1.0f from the scale value, again because 1.0f  is the starting value (identity).
move.x = distance.x * (<scale.x> - 1.0f);
move.y = distance.y * (<scale.y> - 1.0f);
move.z = distance.z * (<scale.z> - 1.0f);

//Translate the object
glTranslatef(move.x, move.y, move.z);

Hope you understand (and that it is correct... i think so),

#5071415 Trading Hits

Posted by __SKYe on 20 June 2013 - 05:51 AM

Well, i think a good option is the one you described, you could do all the collision tests between the players, and instead of executing the consequences of any collision immediately after any collision happens, just save the result of whether none, one or both players where hit, and execute whatever action at the end of all collision tests.




Player 1 punches player 2. When it's time to check for collisions you check player 1 first to check if he hit player 2, and it did. Now instead of immediately making player 2 hit (whatever you do, like changing to "hit" animation, decrease HP, etc), just have some boolean variable hold the result of the test.

Do the same for player 2 (check collision, etc).

At the end of the tests, check the boolean values and see if anyone was hit. If only one of the player was hit, then you do the normal thing when one takes damage, and if both have been hit, then it's the "trading hits" case.


This works equally for multiple hit-boxes, the only difference is that you check all hit-boxes for collisions and save all the results.


Basically delay the actions of collisions until all the tests are completed.

#5071411 Loading level information based on a parameter

Posted by __SKYe on 20 June 2013 - 05:34 AM

The best thing to do, in my opinion, is to separate the level data from the code (never hard-code things).


You should create a file for each level, that contains the data for that level.

If at level load you need to know what is the tileset for the background, then put it into the file, and when you load a level, open this file and read the appropriate data.

About the objects, it's also simple.


Imagine you can have multiple objects in your level that requires 2 things: a position and a sprite (this is just an example, you can have much more properties).

But you don't want to have a fixed number of objects for all levels (by doing this, you either waste space, if the level doesn't require all the objects, or you are limiting the number of objects you can have.

To solve this you could have this in your level file (again, just an example):


//Background stuff here

//As an example, using 2D position (x, y)
///he sprite here is the name of a texture/image, but you could put instead the coordinates for a specific tile from a tileset


OBJ_SPRITE = image

OBJ_SPRITE = image2

In your Level class, along with the background stuff, you would have a pointer to an array of objects (imagine your object struct/class is called object_s).

At the level load, you read the NUM_OBJECTS value from the level file, and allocate the required number of objects, and then loop through the number of objects to load their properties.

It could be something like this:

void LoadLevel(...)
    //Open file, read any other stuff you need first (could be level name, background tileset, etc...

    //Read the number of objects
    //This Read function doesn't exist, it's just an example
    int numObjects = Read("NUM_OBJECTS");
    //Allocate space for the objects
    //You should probably check if the number is valid (either 0, negative or just too large)
    object_s *objs = new object_s[numObjects];

      //Read each object's properties
      for(int A = 0; A < numObjects; A++)
      //Read position
      objs[A] = Read("OBJ_POSITION");

      //Read sprite
      objs[A] = Read("OBJ_SPRITE");

Note that this code is just an example, and obviously wouldn't work, but it demonstrates the process of reading an arbitrary number of objects from a file.

This way you don't have to limit the number of objects for all your levels.


The "read any other stuff you need first" part, just means that if your level file has other things that have to be read before the objects (it could be the level name, the background properties, what BGM should be played in that level, etc) you should read them first until you reach the objects part.


As an example, this is a possible level file:

File: Level.txt


BACKGROUND = BgTileset.png

BG_MUSIC = MyLevelMusic.wav


OBJ_SPRITE = image
OBJ_SPRITE = image2

Also, note that the level format is entirely up to you, as is the type of file (you could use a binary file instead of a text file).


I hope that this is understandable, if you don't understand something, i'll try to explain better.

#5071163 How on earth do I start a game?!

Posted by __SKYe on 19 June 2013 - 10:25 AM

And i really advise to spend a good amount of time on step 1, and getting a good grasp on the language (whichever you choose), before jumping to step 2.

#5058362 Scripting Language Choice

Posted by __SKYe on 01 May 2013 - 12:18 PM

There's also C#. I'm not sure, but i think C# is Windows only, so if cross-platform is an issue, you may want to use Python.


Edit: According to http://www.mono-project.com/Main_Page, it's also possible to use C# in Linux & Mac.