It’s been a while since I participated in any jam. I’ve been seeing a lot of good game jams hosted lately such as the a game by it’s cover jamand the annual js13kand I’d love to participate in those as well but I don’t really have the time or the idea to do something.
So instead, this time I will participate in the demake jam hosted over itch.io. It kind of made me realize of how few games I know that could be demaked, most of the games I like are franchises that already come from the 80s and 90s, so the demake would be more of going to those origins.
I was able to find a good idea for a small game, I’m not sure how much of the game will I be ale to demake (If any) considering that I only have 9 days to do anything.
My entry for the demake jam is the original Hitman. It’s one of my favorites and I have lots of memories playing this as a child.
The idea is to make this game using a NES palette to make it look more retro.
I didn’t have much time yesterday to do anything but at least I was able to sketch the first screen. The name will probably change though to something more appealing.
There is a lot of people participating in the demake jam. I’m really interested in seeing how many people complete their games and what types of games will they demake.
I’m making it using typescript and a custom engine, I was planning on using Game Maker Studio 1.4, since I have the license for exporting to HTML5. But my PC is having lots of issues running it.
That’s all for today, tomorrow I’ll post the next tutorial for Game Maker 3D.
I always wanted to talk about 3D development using game maker but I never really found a format that I liked. I made some small courses in spanish over Youtube but I never was quite happy with how it was scalling, so this is a new attempt to bring this topic to the people.
Now, I know, why would you even attempt to create 3D games with Game Maker when tools like Unity, Unreal and Godot are much better for this task and have very good license deals?
Well, I don’t really have an answer to that, those engines are obviously much better than Game Maker will ever be for 3D. with that being said, there is still knowledge to be gained with this experiment.
While Unity and the others are really powerful, they remove a big chuck of the pipeline involved in the 3D rendering. This is great for businesses obviously, since you want to use the shortest path possibble to release your product, but if you want to improve your skills as a programmer then you should really tackle this and many other difficult tasks.
This mini course is just going to talk about how to set up a 3D dev environment using Game Maker Studio 2, any tutorial beyond that will be made in a general OpenGL/WebGL engine.
You don’t need any previous experience doing 3D, but you should be confortable using the Game Maker Engine before continuing.
CREATING OUR FIRST TRIANGLE IN GAME MAKER
It may sound like a simple task, but this is the most important step. It happens more often than not that when you set up your 3D environment you don’t get to see anything you drew to the screen. Debugging an OpenGL application can be a real pain. That’s why it’s important to make sure you can draw things.
You can find a Github repo for this course in at the end of this post.
Let’s start by creating our assets in the project. Open Game Maker Studio 2, create a new project and add this files:
A script called scrInitSystem, this one will be used to initialize all the global variables needed for this project.
A shader called shd3D, Since Game Maker uses a 2D shader by default, we will create our own shader.
An object called objSystem, this is the main object for the game, it’s going to handle all the 3D functions.
An object called objTriangle, This is our object to be displayed.
A room should be added by default by the engine.
By now, your hierarchy should look like this:
Let’s start by modifying our shader. Now, if you don’t know how to use shaders, they are a whole topic on their own. We will discuss them on time but for now I just want you to copy what I’m going to show you.
This is how a shader looks by default when you create a new one:
What we are going to do is to eliminate all of the unnecesary data and leave only the attributes needed to place our triangle, and then add color to it.
Make sure you are on the first tab shd3D.vsh this is the vertex shader, and paste this code.
Then, go to the second tab shd3D.fsh which is the fragment shader, and add this.
As I said, don’t worry too much about what we just added, because we will talk about shaders in detail in another post. Basically what this shader does is: It receives 2 types of parameters: a position, and a color. Then, it interpolates between the colors from vertex (position) to vertex. Finally it draws it to the screen.
Let’s continue with this script, the objective is to initialize all the global variables that we are going to need, this script should be executed at the beginning of the game by the objSystem. This is how it should look:
Since we added a custom shader that receives a position and a color, we need to make sure that we are going to send that same data. So what this script does is to create a new format (vertex format) and then we tell it that we are going to first send a position (vertex_format_add_position_3d) and then a color (vertex_format_add_color). This order is extremely important because later when adding our primitives (the triangle in this case) we need to create it using the same order.
This is the object that will control how things are going to be draw in the future. For now it is a really simple object.
Add the create event for this object and add this lines:
The first line calls the scrInitSystem script and the second line creates the objTriangle. Nothing more.
Finally, the star of this tutorial. The objTriangle Is going to create the primitive and then it will send it to the shader where it will be draw.
Add the create event and add the next content:
Lines 2 and 3 are used to tell Game Maker that we are going to build a primitive. Note the use of global.VERTEX_FORMAT this is the format we created in the script scrInitSystem. Remember that it has an order that we need to respect.
The lines 6-7, 10-11 and 14-15 are used to create the geometry of the triangle, we will talk more about this in another post, but you can see that we kept the same order always: first position_3d, then color
The last line is to indicate that we are done building our object.
Now, let’s move onto the draw event
First, in line 2: we are setting our custom shader to be used.
After that in line 4: we are submitting our geometry (created in the create event of the objTriangle) to the shader, (don’t worry about the pr_trianglelist and the -1, we’ll talk about that in the primitives tutorial).
Finally we reset the shader to use the default of Game Maker, this is so to avoid any conflicts with other things being draw.
Adding things to the Room
The last thing left to do is to add the instances to the room. You only need to add the objSystem since that object is the one that creates the triangle after the global variables are initialiazed.
And that’s it! if everything was added correctly, this is how your game should look when you run it:
It may not look like much, but as I said, this is the most important step. The next tutorials will talk more in focus about specific topics: Matrices, Shaders, Cameras, Primitives, etc.
Congrats if you made it this far! If something maybe didn’t work then you can ask me in the comments section or you can download the source code for this and the other tutorials:
I was busy last week doing a game for a little challenge that took place over the YoYoGames forums. The idea was to create a pseudo 3D game using Game Maker without using any of the d3d functions that the program offers.
So I decided to go with something simple, a raycaster engine in GML, I’ve done many raycasters previously in JS so I’m very familiar to how it works, since the other participants were doing amazing 3D projects I decided to aim to the “fun” category so I took one of the pieces of my last current project (also in GM) Wraith and did a First Person Shooter / Tower Defense mix.
There were 3 categories in which the games were qualified and I made it at the top 3 of those 3 categories:
I continued the development of this project (now called Wraith) This is the end of the 3rd week and most of the work has been directed towards the optimization of the engine, it was running pretty well but I don’t really enjoy having so many instances doing nothing.
The first thing I did is to modify the way the geometry and solid instances were handled in GM, I had before one instance per block and the geometry was the same size of the block:
Each individual color is a collision mask and 3D geometry:
I merged the horizontal and vertical collisions and the geometry is merged by texture.
Finally, I started working on a single level to test enemies encounters and the gameplay elements. If everything goes well then I will have a demo version towards the end of February.
So this new year I decided to start a new project and take a step back from the RPGs I’ve been trying to develop for the last years… My favorite games are the first person shooter and they are actually what got me into game development in the beginning, since I had an old license for Game Maker Studio I decided to give it a try and start a new project.
I know there are far better tools than Game Maker to make a 3D game, but that’s also the reason I picked GMS, it’s because I know it has a great potential for this kind of task, I already tried to develop a 3D game with GM 6 years ago and it failed, but it was done with GM8 and it was poorly optimised so I want to make it better now.
I’ve been developing it for 2 weeks now, most of the time has been working in the engine itself but I’m aiming to have something playable towards the middle or end of February
The gameplay will be based on old fps (Doom, Quake, etc) in which the action is faster and there is few story elements during gameplay, the game itself will have a story although I’m still thinking on how to present it without taking much of the game. It will have a single player campaign and a multiplayer mode, the weapons and game are going to be futuristics but in a wasteland environment.
The textures I have now (except for the gun) are from the game hexen but I’m going to replace all of them with custom made textures, I’ve done so far the collision detection in 3D (very simplistic for now since the maps are made on a grid), picking up weapons and firing making bullet holes on the walls, a terminal (like quake) to make modifications to the game and system messages for when picking weapons or making actions.
That would be all for now, I will be posting updates on this game hopefully every week with the new features I added to it.
This year is going pretty fast, its been a long time since my last post for the 7DRL game. I’ve been busy working on different personal projects during the last 4 months but there is nothing really to show, here is what I’ve been to:
Perhaps the biggest project I’ve spend time is on learning graphics programming and developing a new WebGL library, it is going pretty well but it is a really big project so there is still a lot to do, I will try to upload demos in the next months while I work with it:
I’m also learning to work on the unreal engine, I like it a lot but I don’t think that I will develop a project any time soon:
And finally, I decided to retake the development on Lune, I was developing this project along with Slash but we kind of dropped it after the contest for the 7DRL challenge, anyway, since he is busy working on Ananias, I will work on it for now:
Graphics come directly from the Ultima IV and Ultima V tilesets, with some tweaks and original tiles being made.
This project is non-commercial, made just for fun from fans to fans.
So what’s next
While the challenge is over and we delivered the game, there is a lot of things that we originally intended to add but in order to meet the deadline of the 7 days we had to cut them out, I’m planning on adding those features (and some more) in the next weeks.
I’m also planning on redesign most of the sprites in the game: add more colour, increase the resolution of the creatures, redesign some enemies to make them look bigger, etc.
Another day is over and the endline is comming really fast, in this day I worked a little more in the collision (mostly for enemies with instances) and some extra work with the texture rendering and management, I also added the potion and started to work on the magic system:
Finally, I worked a little more on the enemies AI, but I think I’m going to leave it like this for now:
Meanwhile Slash started to work on the dungeon generator system, I’m hoping to implement it very soon.
Day 2 is over and things are starting to shape up, I worked on the collisions system and started to work on the AI of the enemy, right now is a very basic AI, if the enemy sees the player then go and try to kill it.
The player can now attack and kill the enemies, there is no death or hurt animation so the enemies flashes in red for a fraction of second:
If the enemy is close to the player then performs a melee attack, until the player is dead:
I still have a lot of work to do on the AI, and also i have to start to work on the general objective for each level of the dungeon.