Game Maker Studio?

edited in Questions and Answers
Hi awesome community!

I'm embarking on this game making quest, and I've just dropped by Ye Olde Shoppe. On the shelves behind Ye Olde Shopkeep was this thing Game Maker Studio that was recommended to me by some knowledgeable PCs, so I explored some in the Google tomes.

It looks fantastic, as my coding experience was limited to Turbo Pascal (made space invaders with a twist and Tiltris in high school) and Actionscript 2.0. (Fuuuuu Adobe for messing up my code world). Rusty doesn't even begin to describe it.

Anyhoo, I'm looking to start prototyping some of my ideas, as physical "representations" just doesn't really cut it since it's a real time affair, but I have some questions that I haven't been able to find answers for, neither on Google nor here (try searching for "Game maker" lol)

1) Do I need a Mac to create games for iOS, or will a PC be able to compile stuff I can put onto my iPad?
2) Can Game Maker output/creations be hacked to compensate for additional functionality that Game Maker doesn't natively have? Like Game Centre multiplayer, bluetooth multiplayer, wifi multiplayer, etc? (I've heard of custom plug-ins but haven't found a plug-in that did any of the above mentioned). Reason I ask is potentially getting a start in Game Maker and getting help for stuff I absolutely can't get done there.
3) How does licensing work for more than one people wanting to work together on Game Maker? Separate copies have to be bought? Licenses? I couldn't find that info anywhere.

Thanks for the assist guys!

Comments

  • 1. Quick googling says yes, you need a Mac to export anything to iOS with GM:S (you might have to remotely log in to said Mac to do that). Which makes sense, seeing as you need to have a Mac to be a registered iOS developer and thus be able to put anything on an iOS device in the first place anyway.

    2. Yes. GM has always been able to handle linking to DLLs that offer outside functionality. I've used that for multiplayer before, although if you're talking DLLs on iOS, I'm not entirely sure what the state of that feature is there - I presume you can pretty much package anything somehow so that it can be accessed. Eventually.

    3. Each person needs their own GM:S license. You can now use version control software with GM:S, so collaboration is easier. If you're looking for a multi-seat license I think you can email YoYo Games and ask? Generally, get the game working on PC, then move over to iOS once you know it's fun. You should only need 1 machine with an iOS license that way.
  • Cool, thanks :) looks like I'm gonna dive into game maker and see what happens from there :) thanks Danny (I have trouble calling people by nicknames once I know their real ones, makes me feel all.... Cyber and shit. what's the convention around here?)

    One last one - if I buy Studio for PC and later get a Mac, do I have to buy another copy or is it same license? Thing is I'm developing a touch centric game.
  • edited
    Just to emphasize (and +1 if you are that way inclined) @dislekcia's answer to 3, you get a lot of power and functionality from Game Maker 8.1 Lite, and you shouldn't hesitate to work on your game in that entirely until you get the right feel and you are ready to actually start testing on multiple platforms with a proven idea. (Proven here might not necessarily mean that you have hundreds of fans or downloads, but you need to have that fun idea, and have it well polished and working)

    What I ended up doing when I collaborated with ShadowMaster way back when using GM7 we found a neat trick for working together (as the projects are single files), we would each make sure to work on different sections of the game, and then to incorporate the changes we would strip the project of the things we didnt change, and merge that into the "master" copy of the game. If you are working with a small team this could very well work for you, it also means you can have incremental "build" version of the project backed up (I had ~20 .gmk files for Pea Adventures at one point), and you can even do rudimentary tracking of who changed what, and when they did (I probably still have the email trail after that contest sitting in my gmail inbox so I could give a detailed report back on what we did, when we did it, and what happened (which I need to get around to doing for the G.D comp thread still...) ).

    Im also looking at buying GM:S (+ added extras) when I have an idea fleshed out and polished to the point that it would actually be worth doing something notable with, I already have the funds set aside, but I dont think I should spend the money until I actually have the working game idea (for the reason in paragraph 1) that people like, that achieves what I want to achieve.

    In before "you never finish things these days", thats exactly why I shouldnt just buy something despite it being awesome!
    Tuism said:

    One last one - if I buy Studio for PC and later get a Mac, do I have to buy another copy or is it same license? Thing is I'm developing a touch centric game
    If it is anything like their previous licensing you will be able to use the licensing on two (or more) PCs if they are your own. (I had it installed on my desktop and my dad's laptop for GM7), I dont see why they would make you rebuy it for Mac to deploy on Mac, it should fall under the same licence for yourself, but it is probably a good idea to email them and ask before you do (and let us know what they say if you do :P )
  • I haven't booted up our Mac for ages, but I'm pretty sure that I can have the same license on both my PC and the Mac. Also, I know that you can create an iOS "release" on PC and then simply push that file to your phone via the Mac, I don't think you need GM actually installed on the Mac side...
  • Ah, nice, though I would still recommend only buying when you have something "complete".
  • @Tuism you're doing really well in game maker (made a pretty close to complete prototype in just a few hours!). I can't wait to see what cool stuff you are going to start making once you realize that Unity is better than Game maker ;).
  • Ha! Thanks man, that prototype is nowhere near complete, has a ton of logic to still put in, and block matching, and different types of blocks, and and and :)

    Will get onto making more when @edg3 mails me the file, major fail for me not bringing an USB stick :p
  • OK so I bit it and got Studio :) and already I'm running into something I can't solve with google :(

    I'm having a hell of a time with their collision and physics engine, and I want to track individual element's y value (generated at runtime) on screen. What I would do in flash is to drop a text field and let it update to this._y, but how do I do this with objects in game maker?

    Any assist would be awesome!!! Thanks! :)
  • make yourself some control object (o_control), and have it have 2 variables, an array (list) and a counter (amount), you can then whenever an object is created that you want to track use
    o_control.list[o_control.amount] = "identifier you choose: " + string(y);
    my_pos = o_control.amount;
    o_control.amount += 1;
    in the create, and in its update use
    o_control.list[my_pos] = "identifier you choose: " + string(y);

    and when it is removed you can use:
    o_control.list[my_pos] = "";


    Your o_control just initialises the list and amount in create:
    list[0] = 1;
    amount = 0;

    and then has a draw which goes:
    p_x = 0;
    for (i = 0; i < amount; i+= 1)
    {
      if (list[i] != "")
      {
        draw_string(x + p_x, y, list[i]);
        p_x += 16;
      }
    }


    You could do some more complex systems, but this should be easy enough to implement I think, and you can easily remove it later.
  • edited
    @Tuism: Is this for debug purposes? If so, you can just run the game in debug mode and add an expression to the tracker window. Easiest thing to do is pause the game, hover your mouse over the object you want to inspect and write down the number that appears in the tracker when you do that (it's always greater than 10000). That's the object's id.

    Then you can just add (<id>).y and the tracker will display that every frame :)

    Note: Replace <id> with that number, so it would look like (10045).y

    I also use quick and dirty outputs to the room_caption if it's just a case of simply needing to know what a value is at a particular point. In that case I just use something like room_caption = string(y); somewhere in that object's step event.
    Thanked by 1edg3
  • @Tuism: If you're having problems with the collisions it might be because you're using the inbuilt solid system which is not a great idea as it is indeed broken.

    This guy provides a great alternative, namely:

    {
    if (place_meeting(x+hspeed,y,objBlock1)) hspeed=0;
    if (place_meeting(x,y+vspeed,objBlock1)) vspeed=0;
    }


    It is pretty much coding your own collisions, but it is more effective than the solid system and you essentially collide without truly colliding. The place_meeting() function is quite powerful, so perhaps tweak it to do what you need it to?

    Also, if you are changing between sprites for a single object, check the collisions masks of the sprites. The change of collision masks on the fly often results in objects getting stuck inside walls and so on. Instead, of the automatic mask, untick precise collision checking so that you use a standard bounding box that is the same size for each sprite.

    I'm giving advice from a pretty basic level myself, but hopefully it helps you out :).
  • edited
    Cool, thanks for the tip, I'll look into that collision code! Indeed it's giving me all kinds of hassles. Now, is there an easy way to move to contact? I find that's the thing I actually need when collision occurs. See I'm doing a stacking blocks type game, and I'm finding that I get bloody inconsistent collision detection so even if I move to contact it would have things eventually overlap or be off by a pixel or something. Super frustrating... EDIT: OK I found the move to contact script. Figuring more stuff out now :)

    Also all my sprites are the same height - 60px. I've even discovered that if I "place" an object precisely on top of another, it won't allow me to. So I cheated it and placed it at y-2 (2 is the gravity constant), and that works. Sometimes. Sometimes it doesn't. It's the seemingly random nature of the thing that makes me wanna place variable on each object that I can track visually to see if they're all on the values they're supposed to be.

    @edg3 & @dislekcia lemme try those codes out :) Thanks guys :)
  • Well there is a move_contact_all() function with parameters of direction and the max distance you want the object to move. If it's still not working try -1 as the distance between the colliding objects might be quite small

    Hopefully that does the trick :).

  • LOL ok after trying out move_contact_all, it works completely different from how I thought it did. I thought it moved the object in the direction until it hit something, THEN it will place it right up against that object.

    Now if I move_contact_all() and it finds something, it'll just remain X away from it - X being related to the speed (vspeed) of movement.

    How do I make sure that after the collision the object "lands" against the obstruction?
  • I think you could try the place_meeting function again, just against each other? So the blocks will always be solid and therefore will 'land'.

    But it also sounds like a grid based system would be useful in your game. There is a function where you 'snap' the objects to the grid, thus helping with your landing after the collision issue.
  • edited
    YAY I figured out a collision that places the object right up close to the obstruction... and I also figured out how to reinstate gravity automatically when stuff gets pulled out from under the item :)

    As far as I can tell, this is a perfectly functional box gravity system with zero room for error :)

    global.box_width is the width of all boxes.
    obj_grid_area is a bunch of 60x60 gridded objects I've placed in the room, and is defined as where a box is allowed to be picked up and dropped, and is the grid to which the objects will snap to when at rest.

    //collide with wall
    col_item = (instance_place(x,y+vspeed,obj_wall));
    if  col_item {
        if (col_item.y > y) {
            fall = 0;
            gravity=0;
            vspeed=0;
            //y += (col_item.y-y)-global.box_width;
            target_grid = (instance_position(x+30,y+30,obj_grid_area));
            y = target_grid.y;
        }
    }
    //collide with other items
    col_item = (instance_place(x,y+vspeed,obj_item));
    if  col_item {
        if (col_item.y > y) {
            fall = 0;
            gravity=0;
            vspeed=0;
            //y += (col_item.y-y)-global.box_width;
            target_grid = (instance_position(x+30,y+30,obj_grid_area));
            y = target_grid.y;
        }
    }
    //check under item to restart gravity
    if ((!(place_meeting(x,y+gravity,obj_wall))) or (!(place_meeting(x,y+gravity,obj_item)))){
        gravity = 2;
    }


    If it seems like I'm talking to myself here it's ok, I'll refrain from this in the future :P
  • edited
    Just as an aside here: GM's speed/direction/gravity stuff is very simple and not really designed as a physics system. As far as I know, there's actually a complete physics solution built into GMS (I haven't used it yet) and I assume you need to use other commands to make that work with what you need. You will, most likely, have to define what your physics objects are like in a whole bunch of other ways, just like you would with any of the external DLLs that handle physics for GM :)

    Solid objects are actually pretty simple in GM: All that happens if an object is marked solid is that if it interpenetrates with any other object marked solid at the end of its move step, it gets moved back to where it started. That's it. That could be one of the reasons that your move to contact position stuff wasn't working (I've always just used a function that steps 1 pixel at a time until it collides instead of move_contact_X). The other could be that GM's doesn't use 0 as down, so you're looking for 270 there... Many people don't notice the difference ;)

    That said, your code above makes sense and is pretty similar to what I do with platforming in GM.
  • In case anyone else has been trying to download GM's update... And failing silently like 6 times in a row (like I did) cos all it does is ask you again on restarting the thing...

    http://csanyk.com/rants/2012/06/game-maker-studio-automatic-updates-failures-and-workaround/

    Turns out it seems to be a heavy serverload problem combined with inability to resume on the server. Using "Orbit" solves it but I think I'll wait till the traffic dies down a bit.
  • I didn't want to make a new thread, but I assume everyone who attended the GGJ has received their email giving them a free copy of the gm studio base version.
    I've just redeemed my code and this has been a most welcomed surprise.
  • Wait, WHAT?? You got a free copy of the thing?? I had to shell out $99 for it! Darnit :P (what is GGJ?)
  • Wuuuuut. I didn't get any mails like that! :O

    @Tuism: http://globalgamejam.org/
  • WANT! Did anyone from JHB get a code? Anyone else from CT get one?
  • I got a free copy ^_^ will be playing around with it later tonight methinks. It was because I signed up for the GM8 or GM html5 or something, I can't remember exactly but I remember getting a trial of some GM product because of the GGJ. Now, all of a sudden, I've scored $100...

    GM = GameMaker, not Genetically Modified :p though it was more fun reading it like that
  • edited
    genetically modified studio oh yea :)
    it was for the html 5 gm, 2 month demo/trial thing we got at the event, originally it
    would also give us a 50% discount on studio when it was released, they decided 100% was obviously better :)
  • Hi guys

    A question - something has had me digging my hair out... It should be simple but erm, clearly not.

    I've built a blocks system that has gravity, and checks blocks etc. But I want to now move that entire system along a conveyor belt type thing... Only on one half of the screen.

    Everywhere I've looked they say you just set the x and y coordinates manually, but that seems really impossible as I've got gravity and precise collision detection and etc set up... I've tried to make ALL the elements move 1 pixel to the left on step all the time, but the results... are chaotic at best.

    I don't mind rewriting and redoing references and variables, but I just can't figure out how to implement this.

    Is there a way to group a bunch of objects together like in a sub-object, then manipulate that sub-object which will in turn manipulate that main object? Just the x,y coordinates.

    Thanks in advance, if you can assist that'd be legend :)
  • Karuji said:
    WANT! Did anyone from JHB get a code? Anyone else from CT get one?
    I didnt, I bought it though.

    @tuism: You can use a list (array) for that, you can as you create objects add them to a list on one of your objects (I would suggest the conveyor belt seeing as it needs to move the objects), you can then go through the list and have access to all the objects.
  • @edg3 thanks for the suggestion - so there's not something like in Flash as in nested objects that can be grouped and manipulated altogether with just one object? Was hoping for something like that... :)
  • Not that I know of.
  • edited
    @Tuism: Sure, you can make that work. There are two parts to getting it to not break what you have now. First, you need to do all the moving in one piece of script, not in every object you want to move individually, this will stop your gravity and collision stuff from ever being in a "wrong" state while they're being tested - this is easy, set up a ConveyorController object that's responsible for handling the conveyor belt movement - you could even use that to set conveyor speeds, move backwards, etc because it's all in one place. Second, you need to iterate through every object in turn, there are a couple of ways to do that, so I'll start there.

    The array that @edg3 is talking about is one way of iterating through objects. When each object that you wanted to move was created, you'd store a pointer to it in an array and then use something like a for loop to go through the elements of that array and move them one by one, but still all in the same piece of code. The problem with an array is that you'd have to keep it up to date as objects were created and, crucially, destroyed (which I expect happens quite a bit in your style of game) so that's a whole ton of extra headache...

    There's a much easier way of handling references to all types of a specific object though: Parenting and GM's nifty with statement. Basically, parenting lets you set up types of objects. So you might have a Block object (I assume) that responds to gravity and collides with other Blocks, etc. All you need to do is create a ConveyedObject parent, set Block to use that as its parent and then the code below will work really awesomely.

    //In the Begin Step event of your ConveyorController object:
    with (ConveyedObject) {
        x += 1; //or whatever speed you want them to move at.
        if (x > room_width + sprite_width) {
            instance_destroy(); //Kill the block if it's out of the screen.
        }
    }


    You can't really group objects together to behave as linked units in GM natively. I tend to write that myself when I need it, it's not too hard TBH. I use a similar approach to the above for interface elements, for example: Everything inherits from InterfaceElement, and all InterfaceElements have a variable for parentElement, then in their Begin Step event they all do something like this:

    if (parentElement > -1) {
        x = parentElement.x + xstart; //Position the element
        y = parentElement.y + ystart;
        depth = parentElement.depth - 1; //Make it appear "above" the base element
    }


    The neat thing about using xstart and ystart is that those are the position that object is FIRST created at, so I can basically just position my interface elements as though the origin of their parent element was 0,0 for their little world... Anyway, getting sidetracked. That's not awesome for your problem because each object handles this themselves - meaning that it's easier to have this reach states where one object is interpenetrating another one and it cares about that, etc.
    Thanked by 1Tuism
  • Ace! Thanks for the tip, I'll look into the parenting, and hopefully I can manipulate the parenting as the game runs as I have to get the object to come off the conveyor too. But that's pretty much spot on, I'll go research more on parenting :) thanks! :D
  • edited
    Oops, double post. Site's responding much slower than usual. Wonder what's up.
  • edited
    Question on topic:

    What spec mac do I need to run Game Maker Studio and test games etc decently? I'm aiming primarily at iOS, so iPad and iPhone.

    I'm contemplating getting a mac for the purpose of making games... Not being able to test with touch is cramping my thinking, so sooner or later I'll have to fork out the bucks to get into it properly...

    Macbook Pro starts at 13 inch, 2.4GHz dual core i5, 4GB RAM... Is that enough?
    Air... They look nice but seem to offer half the muscle at the same price, so I think not...

    What're you guys's experience on this?

    Thanks in advance :)
  • No idea. GM for Mac ran fine on our mac mini.

    One thing to note though is that you're going to have to go through a complete schlep just to get your developer license with Apple as an individual (it's worse for companies). AFAIK the setup with GMS on mac is that currently they don't have a version of studio that you put on your mac - you actually have an interface program that lets you load the binary you produced on your windows machine onto your iOS hardware. So that basically means that you're not going to be doing anything with the actual mac itself, other than connect to dev center and move files around.

    The whole Apple certified dev process is the major reason that I'm not messing with iOS dev in GMS right now. What do you need to do in your games that you can't do with mouse-keyboard?
  • edited
    Damn, that's a very important point that wasn't made very clear anywhere I've looked - what you're saying means that getting a mac is actually pretty useless for me for all but testing the game. So for me to be self-sufficient I'll need a PC AND a mac. If I wanted to make builds on the fly while I'm out I'll need a windows laptop AND a macbook.

    No, just no @_@

    Does this mean that if I'm going to be making anything with the view of putting it out in the future, I should just abandon GMS and go for Unity...?? (I know @edg3 will be saying told you so)

    The game I'm making relies quite a bit on moving stuff around quickly... So I want to be able to test the balance of the numbers I'm gonna set up - speed, frequency, etc. And playing with the mouse just doesn't get me nearly that speed. So it's hard to think about balance.

    first screenshot ever of my prototype attached :) it's an inventory management slash match 3 puzzler slash dungeon crawler :)
    klepto.jpg
    599 x 997 - 214K
  • I found something - instructions on how to run Bootcamp and a VM on a mac environment that can run Studio - that sounds pretty feasible - is this something to look into, or simply too much trouble in the long term?

    http://gmc.yoyogames.com/index.php?showtopic=536101
  • edited
    Howzit @Tuism,

    I ran bootcamp on my macbook pro for a while dual booting win 7 natively and using Parallels VM. It's quite a process and I eventually dropped it due to me somehow corrupting my hardrive and it being too much of a schlep to redo. OSX doesn't play nice with windows formatted drives.

    If you have the time and patience to run a dual boot then go for it but be prepared for many hours of tweaking until you feel happy with the setup. Studio may be fine running only in a VM but then performance will take a hit so you need to weigh your options on this one.

    Shout if u have any questions ;)
  • Hey Tachyon

    Thanks for your input! It's super valuable :)

    So as I understand it, Bootcamp makes the computer boot into OSX or Windows. Parallel VM is something that lets you run Windows in an OS window - like an emulator.

    Is the above right?

    Therefore, for Game Maker Studio to export to Mac, it needs the Windows and the OSX machine running at the same time on a network, which means either physically that, or some complicated VM setup. Which is probably a bad idea long term as OSX doesn't like Windows format hdds.

    So the best solution with a mac is:

    1) Do all GM Studio work on a PC.
    2) Connect Mac only for export and test.
    3) If you wanna put Studio on the Mac (for portability) do it on a dual boot windows boot, but don't expect to run and export from it using VM, rather copy the project back to Windows and do the runner from there and connect up the mac.
    4) If cost is not a concern, just have a Windows and a Mac laptop.

    Is that right?
  • @Tuism - I have no experience with GM so you'll have to fill me in on the details. Can the windows version create a mac executable for your game?
  • Well, I was more asking the question to the community at large :) But according to my research - the GM system works by running the game through a mac that's connected on a networked environment - so yes it can create mac executable - but through the assistance of a mac. Neither the mac nor the windows environment can do it alone. Which is quite meh really :P

    And therefore a single mac machine can't do it on its own.
  • That's not a good enough reason to get a mac if you ask me, but then if you can afford it why not? Don't get me wrong, I much prefer working in OSX. For this reason I would skip GM and go straight to Unity. I just like the flexibility that Unity offers in this regard.

    Maybe I'm just bitching but I find it really annoying browsing steam to see really cool games which only run in Windows.
  • Do you mean steam is full of good games by GM that didn't make it to iOS due to constraints?

    How I'm seeing it is that either way, if I wanna make anything on iOS, I'll need a mac - no matter if I make it with Unity, GM or whatever.

    Right now it certainly sounds like a big chore doing this GM to iOS thing, but it seems more an inconvenience than to... learn 3D :P I might upgrade to unity later but not right now.

    So... What spec mac should I be going after for a comfortable game making experience?
  • I've prototyped touch screen stuff with a tablet before. I guess I just worry that dropping all that cash on a mac for the sole reason of being able to get something on iOS when you're not sure the game is going to be awesomesauce is a little premature.

    We haven't gotten that much utility out of the mac we bought for DD nearly 2 years ago. It was a second hand purchase, so not that much cash, but it's been made outdated by stupid OS updates and annoying Apple developer hurdles like constantly needing to download updates to their coding systems. We've stepped away from all that and are just focusing on finishing the game right now. iOS will come, but it's fucking annoying to try and keep it running stable while you're developing.
  • I agree that throwing money at it just to test it - and prematurely too - is a bit of a meh solution, so I'm contemplating getting one as opposed to dead set on getting one :P

    So I'll still work on the prototype so it's more polished to a presentable point, then later see if it's worthy of an investment like a mac. Despite the hurdles it'll make developers jump, I know that's where I want to take it.
  • Mebbe you know someone with a mac that you could borrow for a week once you've got your Apple dev license?
  • I would second the borrowing of a mac, that's what I'm going to most likely do (*cough* @karuji *cough*) when I eventually get there... :P

    There are quite a few people in JHB in the community that have Macs that you could be put in touch with?
  • Thanks guys, that's actually what I was thinking too, I guess that just means I have to plan my time better :) It's no hurry I guess! I have friends with Macs too so I could do that. From the reading I've been doing I don't need to tie a machine to the Dev account, so I won't need to get the Mac beforehand to be able to do something on it right?

    I'm going to look into dev license thing now, I'm getting to a reasonable point, maybe in a week I'll need to start testing mechanics on touch :)
Sign In or Register to comment.