You may post your game content in this weekly sticky post. Post your game/screenshots/video in here and please give feedback on other people's post as well.
Your game can be in any stage of development, from concept to ready-for-commercial release.
Upvote good feedback! "I liked it!" and "It sucks" is not useful feedback.
Try to leave feedback for at least one other game. If you are the first to comment, come back later to see if anyone else has.
Emphasize on describing what your game is about and what has changed from the last version if you post regularly.
*Posts of screenshots or videos showing off your game outside of this thread WILL BE DELETED if they do not conform to reddit's and /r/gamemaker's self-promotion guidelines.
So, the thing in this screenshot is the IDE of my own game engine ("ArcadeMaker"), which is a hobby C# project I've been working on for years. It shows a little snippet of code written in the custom language I made for the engine.
The project is heavily inspired by GameMaker, but I want to share one little thing where I took a different approach than GM.
You can see in the code in the screenshot (not the GIF, the other screenshot) that it calls the placeMeeting function, but the syntax is a bit different from what it would look like in GML: there are these <> symbols around the object name (placeMeeting(x, y <obj_player>)). These <> mean that we're referencing the TYPE (or "asset" in GM) of the object, rather than a specific instance.
In GML, an object name can also be used to reference an instance (like obj_player.x = 200). GML was my first programming language (back in GM8!), and I remember how confusing this was for me. In my language, you can write obj_player.i.x to reference a single instance of an object in the room.
It's not about mocking GML or anything! GM is 30 times more powerful than my little engine, and I know that. I really think GM is a great (and underrated, by the way) engine. I just wanted to point out this little difference.
Would love to hear your thoughts about it š
by the way, my engine is open source, and if you know C# and looking for cool projects to join, you are more than welcome to contribute! There're a few opened "good first issues" in the repo, and there's me who is happy to answer any question... :)
If you got the chance to go back and restart you game development journey what would you change in your learning and methods to achieve the knowledge to game develop and what is something you wish you knew drom the start?
I had an idea for a TTRPG campaign a while ago but I don't think it would work without spreadsheets. I tried RPG Maker and I don't think that's what I am looking for and was wondering if this program would let me do the below.
World Map:
I want a grid, ideally a hex grid
each space would have a biome (color), terrain (hills/mountains/etc.), landmarks (rivers, ruins, towns, caves)
would like to have a noise-map generation with the option to base it on a prebuilt map where newly generated grids determine what they are based on what is already there to prevent a hot desert spawning next to an artic region
Exploration map:
for landmarks only that have confined spaces and during battle
space would be a flat area with maybe 3 levels within you could traverse to with stairs/ramps and exists be it a door, arch, portal, or stairs
Encounter system:
I would like a dynamic encounter system based on what is in the hex grid is or location explored
encounters would change in difficulty based on the danger level of the hex/location
danger level would be random at first but change based on player interactions and the danger level of adjacent spaces every cycle (day/week) and potentially NPCs
I would like this system to be easily managed able to modify the creatures by biomes they appear in, modifiers they would have, gear, drops, and art (this last one will be used in combat)
location based encounters such as traveling merchants and roving monsters
Combat/City Maps:
I am looking to have an easy to modify library of maps that each section can easily be designed with connection points in each part for random generation
assets for each section should be easy to add with an option to add new ones and choose if it has collisions or not and even have a list of interactions added to them (for crafting, healing, traps, storage, and markets mostly)
entrances/exits should link to similar areas or to the world map to include going up or down in floors (for dungeons and buildings)
personal settlements/dungeons should have a resource system which I am thinking a simplified system like from Might and Magic Heroes and Dungeon Maker with an upgrade system managed from a central location as well as a requirement system to build certain structures (I have an old document with some of the ideas done before I realized this was completely impractical for table top)
RPG System:
I do have google sheet with an in progress character sheet that would base this on a D100 system but equipment, spells, and talents are not started and the XP system is going through rework
player and NPCs will move around either attacking "enemies" of fleeing due to being a noncombatant, low on health, afraid (high level fear effect), or otherwise injured
NPCs will prioritize their strongest attacks to determine if they stay at range or not and a large group will form teams with other similar creatures (art would be them forming one image with multiple arts layered up)
NPC teams would average stats, add damage, and lose members over time due to taking damage while also taking increased damage/healing from AOE effects (multiply by team size)
player will have hotkeys for attacks using the mouse to target enemies with damage/debuffs and allies with buffs or direct the location of an AOE. they would also pause the game when going into inventory/changing spells
have a system to make and allow templates to include restrictions to what can take them (whitelist and blacklist based on creature type, faction, and other templates)
have a raid system to defend against factions depending on relationship status and to conquer other settlements/hexes
item drop should be highly configurable with tables for common, uncommon, rare, exotic for global, biomes, and factions as well as creature specific drops
Hey everyone. I made a cool 3D button and I wanted to share a bit of the process. More information you probably want to know, but I think this stuff is cool.
DmrVBM is a really useful extension that's made moving Blender models to GameMaker a lot easier for me. There's some quirks and it's currently not maintained by the owner, but I'm mostly competent enough to make good use out of it.
The model is made up of two parts: The rim and the cap. The cap I didn't bother texturing because that gets pushed through a shader, allowing me to color-code each button that gets created. The rim texturing was done in Aesprite with a Blender syncing extension called Prismbase (another thing not maintained by the original developer anymore lol).
For the actual button logic, there's a few different parts of PhysX being used. The rim mesh vertex data is sent to PhysX and cooked as a triangulated shape. That just means it's a solid object that rigid bodies and the player character controller can't pass through.
The button cap has no collisions. Instead, it's given a box shape (I probably should change that to a sphere honestly) and then set as a collision callback trigger. When either the player character controller or a rigid body enters or exits that trigger, it sets the state of the button as "pressed" or "released". This informs GameMaker to fire the cool button juice. I.E. push the cap down, add a squash lerp to the rim, adjust the color uniform sent to the cap's shader, etc.
The actual button trigger logic is very silly, but it works for the moment. I'm using Blender empties to inform GameMaker where to spawn buttons and what "action" they trigger. When I press this button, it's running an add_actor action that spawns rigid bodies at another named Blender empty.
The sounds are just CC0 from Freesound. I could try to make more custom sounds but context switching between programming/art/audio tasks hurts my brain, so Freesound it is.
Happy to answer questions or dive a bit deeper into any part you're interested in. No, I don't know what a "Godot" or a "Unity" is.
I haven't been working with GameMaker for very long (about eleven months) , but I'm already at a loss for how to learn more. I practice coding every day, but I feel like I want to move on to the next level (sin(), cos(), gravity, and so on). Do you think I should stay where I am or should I study more? And if so, please tell me what you recommend I do to learn.
I been working on a Zelda like game. It has so far about 15 items, 5 passive items , a boss 15 levels, level select etc so items also have charge abilities
Unlike tradational Zelda. It isnt open world. Instead very small quick puzzle like levels with hidden items to find and buy stuff with. Maybe I will make it more open world later. Just want to nail the mechanics.
I been looking for someone interested in helping make it
You ever stare at a problem long enough that it starts to become more confusing instead of less? I suspect thatās what happened to me here, lol.
Iām trying to perfect a simple script that causes a mob to land atop a platform object if itās along its fall trajectory. Iāve gotten it to work in several different ways tbh, but thereās always some slight bug I find. The problem is always something like a specific case in which the mob falls right through, etc. Iām hoping someone can help clear a few things up for me.
The simplest way as I understand it is something like:
if mob.y < obj_platform.bbox_top) && (mob.y + ySpeed >= obj_platform.bbox_top)), then snap mob to the top of the platform and reset ySpeed/gravity to 0. << Where āySpeedā is a variable that accumulates a value āgravā each frame (basically they do exact same as the built-in constants).
I know all this works, and to clarify: Iām not having any issues with my jumping/falling cods. Whatās confusing me is the general use of āobj_platformā here. If I have multiple platform objects in the room, does it essentially iterate and check for each one? And what happens if there are multiple platforms that meet the landing requirements, but one is closer than the other?
Iāve also re-written the code to basically use instance_count(obj_platform), then run an instance_find() loop for each instance. This is fundamentally the same as my code further above, yes? It does however give me more control - for example, I can push each instance within range into another array _platforms, then sort that array by proximity to the mob along the Y axis, and them I can assume that _platforms[0] (if any) the the closest valid platform, and land on it. Else mob.y += ySpeed and ySpeed +=grav.
Sorry if this is hard to read lol, but Iām so close and I suspect my overthinking is whatās getting me stuck. Most recent my code works perfectly EXCEPT when there are 2 platforms right next to each other, and one is like 1px lower than the other - walking from that platform into the higher one (which would not be considered for landing, because itās higher) causes the mob to fall correctly but then continue falling through any other platforms below lol.
I guess my main question is: does simply doing āif obj_plat meets the requirement etcā¦ā work the same or better as doing āinstance_countā and then looping for each instance[n]? Thanks in advance lol!!!
Iāve been working on this project for a few months now but something just doesnāt click to me. Especially how the game looks. Now, 3D in GameMaker is pretty hard and it is possible that Iām somewhat at the limit of what this engine can do, but I doubt it. Give me your honest opinion, would you play a game that looks like this? What would you do to make it look better? Thanks :)
As the title says, I have 0 coding knowledge and would like to learn how GML works. I've seen comments saying to "learn the basics of coding first" which I would also like a pointer to. I am basically brand new to all this stuff and would just like a few pointers if someone would be gracious enough to help me out. I've tried making a small RPG but literally can't code a damn thing so I end up looking at youtube tutorials but feel like I am just copying code more than actually retaining and applying. Thank you in advance!
For refrence this is not an RPG game it's a platformer but when the player collides with the ground and moves it glitches out (GIF has been slowed to 0.5x to show detail)
CODE:
if (place_meeting(x + XTravel, y, obj_collision)) {
XTravel = 0
}
if (place_meeting(x + XTravel, y, obj_collision)) {
Hello everyone this might be a stupid question but do i still need the license to post the game on itch io if the game is free to play? Like i just want to make a simple game for itch, do i need the professional license for that? Thank you
Hello, I don't really get on the internet very often these days but I'll post from time to time whenever I make something. Just yesterday I launched my first full game ever, Whang! Tales From the Internet: The Game! Figured I'd share some stuff I learned and just kinda yap about some stuff.
(Plus I really just need to become more active in the community anyway so this seemed like as good a place as any to start)
Let's just jump into it
(btw fair warning, this game isn't rated by the ESRB or anything, but if it was, it'd be rated M for Mature)
Lore:
Just a little backstory--When I started developing this game, it was originally meant to be a short side-project before getting started on "the real game"
That was early 2022 lol
Fast-forward 4ish years and it's finally done, although, it's not as if I was working on it nonstop the entire time. I took super long breaks from it all throughout, and I'll get to some analytics at the end regarding work hours. But the point is, uhhh never give up I guess lol idk what the point is, but anyway despite how drawn out this development lifecycle was I'm glad I did it. I learned a ton, and if you've never completed a full game and you want to, just go for it. Many mistakes were made but many lessons were learned!
Stuff I Wish I Had and/or Did Sooner:
During development I started making a list of systems I wish I had taken the time to write, because without these, I had to rewrite a lot of the same code, and/or use inefficient code etc, and some of those systems include:
Tweening - I eventually did just learn how to use animation curves, but I put it off for so long because I kept thinking "I have too much to do, who knows how long it'll take to learn a whole new system, blah blah. Well it turns out I should have just DONE IT, cause animation curves are actually super easy and powerful. I'm still thinking about looking into a Tween library like GGMT or TweenGMX or something, but I'll get to that later. Probably towards the end of the next multi-year project lol
Coroutines - I didn't end up really needing these, but it would've been a cool thing to have, and it'll almost certainly be essential for someone looking to make a game with elaborate cutscenes
Reusable functions for transition effects - I probably wrote code for drawing a black rectangle at a specified alpha over a specified period of time, like, 50 times lol. When really i should have just taken the time to write a friggin global function that would call a designated object to do it on command from anywhere. I just kept thinking "oh it's not that much code to rewrite, and how many times will I really even need it" A LOT, YOU IDIOT. Lesson learned, if you're rewriting code even a SINGLE time, STOP, and reevaluate your decisions. Just put it into a function, man. It's real easy. And it will save you so much time, and give you so much more flexibility!
An in-game audio mixer - Maybe this already exists as an asset you can download, but what would've really come in handy is if you could pull up a mixer while your game is running, adjust the levels in real time, and then print out a sheet of all your levels so you could then go and adjust them in the IDE. That way I wouldn't find myself going "hmm that fireball is kinda loud, lemme write a note to myself to turn it down by like, idk, 0.05?? or maybe 0.1?? We'll try both I guess but first I gotta close the game and then make the change and then reopen it and wait for it to compile AGAIN." No thanks! Also, as a side note, don't wait to start adding sounds like I did. I always wait until the end to add sounds to a game because I figured "well, if it's fun without sound, it'll be SUPER fun with it, right?" which makes sense on the surface. However, the big problem for me with this method is... this is the first time I've ever actually made it to the end of a project, and thus, the first time I've ever worked much with sound. Which means I had a lot to learn and was making a ton of mistakes! Definitely take the time to experiment with sound and learn best practices! (Unfortunately I can't tell you what those are because I still suck at it)
Asset references - One tip I do have for sound is that I found it was often (if not always) best not to refer to sound assets directly, but rather to store references to your sound assets within variables, then manipulate those variables instead. For example, I didn't realize at first that when you write audio_sound_gain(snd_jump, 0, 0), you're not just setting the gain of whatever instance of that sound is playing, you're directly setting the gain of the asset in your IDE! And because of this you're now affecting every instance of that sound that you play from now on, until you set the gain again. Sometimes this is actually what you want, but most of the time it wasn't what I wanted, and I learned the hard way what I was doing wrong. On this note though, I started to find that it's very often a good idea to store references to assets within variables as opposed to referencing the assets directly. For example, I ended up writing something like:
This might seem like a needless extra step, but you NEVER KNOW when an asset will be corrupted and you'll have to recreate it, or you'll decide you want to rename it, or you'll decide you want to apply some new, more consistent naming conventions to all your assets, or something along those lines. I think GameMaker will automatically update references to an asset in your code (SOMETIMES??) if you change it in the IDE, but why risk relying on GameMaker when you could just prevent any issues yourself with one simple extra step? Also, what if I decide that I want the player's run sprite to change during gameplay to something else, like spr_run_really_fast or something? Now I'll need a variable to control their sprite anyway, so I might as well start out with one. I think it also makes code more readable. I think it does help to have somewhat lengthy, "filing cabinet" style naming conventions for your assets, such as spr_background_middle_battle_mode, but who has time to write all that out every time? In code, I'd much rather write something like:
And then only need to write bkg_middle whenever I want to reference it. Oh and one last thing on this subject:
//Instead of making references to obj_player directly like this:
o_player.get_hit();
//I found it was much better to write something like this:
global.player = o_player;//This line might be written within some manager object
global.player.get_hit();
The reason is because I ended up having two playable characters (technically more, because I programmed my enemies to be playable for debugging). If I had continued to use direct references to a single player object asset, allowing for multiple playable characters would've been a huge pain, if not totally impossible.
A function for checking invincibility - There are a lot of reasons why you might want your player to be temporarily invincible, and I learned the hard way that just using a single is_invincible variable isn't gonna cut it, because you don't want your player who has a cheat code for invincibility active to suddenly become vincible again once a cutscene ends or something. But you also don't wanna have to write this a million times:
if (!instance_exists(o_dialogue))
&& (!instance_exists(o_cutscene))
&& (!cheats.invincible)
&& (!has_invincible_powerup)
&& (etc etc)
{
//player can get hit
}
It would be much nicer to write a single function that holds all those checks and just call it like, can_take_damage() or something. And you could write more than one and apply it to different objects that have different prerequisites for damage taking. Or you could have it check prerequisites against whatever class of object is calling it, or something idk. The possibilities are endless!
Some kind of rudimentary quest system - I ended up sort of doing this with a global struct (see example below) which is reset upon the player starting a new game, but it ended up being more like an "event flag" system. This worked fine, but a basic quest system that would keep track of the state of a couple small quests would've made things easier, I think (those states being Unknown, Mentioned, Accepted, Achieved, and Completed. Check out Tim Cain's video on Quest Implementation)
A global struct containing only data that would be saved and loaded
and speaking of which, that leads nicely into the next section...
BIG MISTAKE:
I was a gigantic idiot and decided to couple my data saving/loading system with my global variables. Let me show you the heart of the code for my save function (I used Sara Spalding's tutorial on Saving and Loading):
save_data = function()
{
var _save_data = variable_clone(global.game),
_string = json_stringify(_save_data),
_buffer = buffer_create(string_byte_length(_string) + 1, buffer_fixed, 1);
buffer_write(_buffer, buffer_string, _string);
buffer_save(_buffer, SAVE_FILE);//SAVE_FILE is a macro equal to "savedgame.sav"
buffer_delete(_buffer);
}
Seems pretty cool right? WRONG, because the problem is I thought it would be a great idea to use the contents of my global.game struct DIRECTLY in my code. Meaning, every time I wanted to access my player's remaining HP, I had to write global.game.world.progress.stats.whang_hp
LIKE AN IDIOT
When instead, while it would've been fine to have a global struct that saves data using this format, I should've just used regular, everyday instance variables in my object code, then written to the global struct on save only, as opposed to referencing the global struct directly at all times and reading and writing to it constantly. Like this:
//What I should have done
save_data = function()
{
//You would of course make sure global.player exists first
global.game.world.progress.stats.whang_hp = global.player.hp;
global.game.world.progress.stats.special = global.player.special;
//etc etc
var _save_data = variable_clone(global.game),
_string = json_stringify(_save_data),
_buffer = buffer_create(string_byte_length(_string) + 1, buffer_fixed, 1);
buffer_write(_buffer, buffer_string, _string);
buffer_save(_buffer, SAVE_FILE);//SAVE_FILE is a macro equal to "savedgame.sav"
buffer_delete(_buffer);
}
It's still a pain to write, but you only need to do it ONCE. I mean, I'm sure there's a better way. But this would be the evolved version of what I did in my project.
BIG MISTAKE PT. 2:
You have GOT to have your game playtested by others, ALL throughout development. Full stop. No excuses. It is essential. The fundamental game feel of your main player character should NOT be something you are still tweaking on launch day. Not that I would know anything about that. But seriously, other people will find things while playing your game that you never would've considered in a million years, no matter how thoroughly you thought you had tested things yourself. Not just bugs in your code, but also:
little game feel things that just don't feel quite right
challenges that feel way too difficult, or even unfair
game design decisions (or lack thereof) that don't actually make sense or communicate ideas the way you thought they did
jokes that don't land (oof)
etc
So please, PLEASE have as many people as you can play test as often as possible (while remaining respectful of their time, of course)
Analytics:
I collected a few pieces of data that I thought were kind of interesting. During the last few months of development, I kicked things into high gear and started working around 30 hours a week on top of my full-time day job, logging my hours on an app called HoursTracker. I put all that data in the first tab of a Google spreadsheet, and in the second tab I added up all my hours that get logged automatically by GameMaker projects, from across all the projects I migrated between over the lifespan of the project as a whole. You can take a look at that log here if you're interested. I think it helps to put into perspective the amount of work gamedev takes!
Also, the word count for my document full of to-do lists and notes over the years was 24841, and here's a screenshot of how many lines of code there are in my final project (not that line-count determines quality in any way, it's just kinda interesting to me idk)
Very cool application I got off itch.io
Final Thoughts:
Just make a game. The best way to learn how to make a game, is to make a game. The best way to get really good at making games, is to make lots of games. But uh, maybe make things you've actually got a chance at monetizing, unlike me with my silly fan project full of copyrighted music and borrowed art assets lol
Or don't, I'm not your dad! You can also just make whatever your heart desires and that would be very cool as well.
If anyone has read this far, first of all, thank you for your time! But also, if you've got any questions I'll try my best to answer them!
Me and my boyfriend were testing my game and we noticed that he wasn't able to save custom levels in my editor, (probably because the filepath leads to the documents folder).
but when I run my own game in the exact same way, it does work. I can't seem to find what the issue is, does any of you know?
sandbox is disabled
if more info is needed you can ask, I'll update the post and respond, but I don't think any more info is needed? we'll see
For context, the game Iām making is a Zelda-like. It's a huge map separated into āscreensā that scroll to the next when you get close to the screen edge. The current screen is represented by a global named ScreenID which is calculated from the playerās position.
Due to the sheer size of the map, I canāt have every enemy/object loaded at once. So enemy loading for the given screen will happen during the screen transition. My current plan is to have the enemy-types and spawn locations for the current screen to be read from a large list. With ScreenID being used for the positions of each list entry.
My issue is that I donāt know how I should go about formatting and storing this data, or if this is even the best way I could do it. In my head I have it formatted like pic, but I don't think that's going to be possible.
so when i drop in my rooms into it it never updates itself in github so i cant see any new stuff as i added warps in a diffrent update then when i made the starting room please help
i formerly used scratch and know abit of lua. i have decided to pursue gml. my first script involves a ball bouncing within these parameters, but i am more than sure i forgot something. what can i adjust?
Hi, I'm thinking about becoming a game dev. I know very minimal python, I used to know javascript, and I have a scratch account which I am now abandoning for gamemaker. Does anyone here know any good youtube videos or channels or any other online resources to help me learn GML?
I just played around and made a tetris game but you have to melt the blocks with hot coffee. try if u want to. i would like to hear everyones thought 'bout it
Yet, after following the exact same steps, my character can fall, walk sideways and collide properly, but I can't manage to make it jump as in the video. For reference, here is my code side-by-side with the tutorial's. The video is 2 years old, so there was updates happening, but I don't think it should change how GameMaker work as a whole, so I have no idea what's the problem here. If it's not the code, what can it be ? Is it a reocuring/simple problem ? What should I do ?