Point and Click Kit for Gamemaker Studio

Started by doimus, Thu 09/06/2016 14:36:34

Previous topic - Next topic

doimus

Hello everybody!

Few years ago, I was working on this one AGS adventure that sadly never got finished because reasons, most of them being of financial and/or scheduling nature.

One reason I got discouraged about (although the least important to be honest) was AGS's lack of cross platform support and somewhat too complex scripting.

So, instead of idling and not doing anything I decided to try and develop something of my own.
Fast forward a few years of learning how to program in everything from bare-metal C++ to Actionscript, I went for the middle ground and choose Gamemaker Studio for this (ad)venture.

And now I got this little point'n'click framework I would like to show you.
Here's a short demo video:
(Pay attention to the bottom-left, outside of game window, where debug console prints out stuff that shows game logic in action.)

https://youtu.be/9n9pDDjvT-U

The goal was to create a scripting environment for non-programmers that would be mostly similar to movie script-writing.
For script commands, I was mostly driven by the way how stuff works in SCUMM and AGS. Actual syntax is dictated by Gamemaker's GML scripting language which sadly doesn't support dot notation, so everything is done as procedural, C-style function calls.

I kept the one-script-per-room system similar to AGS, as it seems more intuitive for non-programmers. It's like having the movie script page in front of you and everything that happens in the room is on that page.
The Real Programmers(TM) can still use separate scripts if needed, for example to define GUI layouts or cutscenes, or whatever.

The engine uses AGS-style hotspot system, and sends string messages, or events, whenever mouse cursor interacts with something, or player enters a region etc.

You parse those messages in "room scripts" through simple switch statement or by using more Sierra-like if said() function calls. Other game events can also throw messages. For example, "room entered" message is thrown on room entry and you can use it to initialize stuff before the player takes control.  Anything that can be scripted in GM can throw a message to the script parser.
This message style is actually a byproduct of the game initially intended to be fully text parser controlled, AGI style.



And here's the room script that's used in the video:

Code: ags

scr_gui_gameroom(); // Runs GUI script separately to keep this one clutter free, actor scripting only.


switch (msg_line)
{
    
    case "room entered":
        scr_define_room_gui();
        actor_set_state(Sam, state_sam_idle);
        cursor_set(cursor_walk); 
        gui_activate(gui_main_bar);
    break;

    case "look at the city":
        cursor_set(cursor_none);
        actor_set_state(Sam, state_sam_walk);
        actor_path_to(Sam, 166, 178);
        actor_set_state(Sam, state_sam_idle);
        wait(0.3);
        txtbox("The city was following the sun into darkness.");
        cursor_set(cursor_look);
    break;

    case "look at Sam's building":
        cursor_set(cursor_none);
        actor_say(Sam, "Yes...");
        actor_say(Sam, "It's my building. I like my building.#My building is very nice.");
        actor_say(Sam, "And this is a#three line#sentence.");
        cursor_set(cursor_look);
    break;
    
    case "look at large key" :
        cursor_set(cursor_none);
        actor_set_state(Sam, state_sam_walk);
        actor_path_to(Sam, 155,190);
        actor_set_state(Sam, state_sam_idle);
        wait(0.6);
        actor_say(Sam, "It's a key of some sort.");
        cursor_set(cursor_look);
    break;
    
    case "use large key":
        cursor_set(cursor_none);
        actor_set_state(Sam, state_sam_walk);
        actor_path_to(Sam,170,190);
        actor_set_state(Sam, state_sam_idle);
        actor_add_item(Sam, "large key",spr_inv_key, 1);
        prop_deactivate("large key");
        txtbox("You take the large key.");
        cursor_set(cursor_use);        
    break;
    
    case "use door":
        if flag_is("sam's door", "locked") txtbox("The door is locked.");
        else if flag_is("sam's door", "unlockable")
        {
            actor_set_state(Sam, state_sam_walk);
            actor_path_to(Sam, 321, 140);
            actor_set_state(Sam, state_sam_idle);
            txtbox("You unlock the door.");   
            flag_set("sam's door", "unlocked");
            actor_remove_item(Sam, "large key");
        }
        else
        {
            txtbox("The door is already unlocked.");
        }
    break;
    
    case "talk to door":
        flag_set("sam's door", "unlockable");
        txtbox("Open sesame!");
    break;
    
    case "talk to large key":
        actor_path_to(Sam,170,190,true);
        gui_deactivate(gui_main_bar);
        cursor_set(cursor_opt);
        conversation_start(conv_large_key, gui_conversation);
    break;
    
    case "actor entered door-to-agnes-office":
        fade_out();

        scr_actor_to_room(Actor, rm_agnes_office, 32, 180);

        if (Actor == Player) {
            //actor_set_state(Player, Player.idle_state);
            switch_room(rm_agnes_office);
            }        
    break;
    

    //inventory items
    case "item item1 door":
    case "item item2 door":
    case "item item3 door":
        actor_say(Sam, "I can't use that on door.");
    break;
}



Scripting system is based around command-queue which exists on a timeline. Each timeline has it's own command queue and is detached from others unless you instruct it to wait for certain event on another timeline.
So you can for example have characters in the background who go about their own business, until player triggers an event which interrupts them and brings them on the same timeline as the player.
You can have as much of those timelines as you see fit.
Commands themselves can be blocking (timeline waits until the command is finished) or non-blocking (timeline continues as soon as command starts). This is essentially the eBlocking parameter from AGS.

Everything is done in GML standard scripting language and should work on all platforms GMS runs on, including mobile and HTML5. It requires Gamemaker to work obviously, which is free for Windows, paid for other platforms.

Current status of the framework is functional-alpha. Most of the essential stuff is in there, save-game system is in progress and I'm considering adding support for localization where scripts get exported AGS style, ready for translation and then get imported on load.
Apart from that, it needs lots of polish and quite some bug extermination.



Since this thing has kind of outgrown itself and is getting harder and harder to maintain in my spare time, I'm on the edge of declaring it my job and going either for a crowdfunding campaign or selling it on itch.io or something. It would certainly help me with my game issues and in the process I'd be helping others create their own games.
I also have grandiose plans of developing it further into a full standalone product, but that is the topic for another conversation.


Thoughts?
Ideas?
Insults?
Torches and pitchforks!?

Retro Wolf

I've been slowly working on a simple HTML5 adventure project in Game Maker, I literally picked it up again just yesterday.

From the video and the information you've presented, it does look promising. But I probably won't be a customer.

I'd consider changing the way the character walks, it kind of glides at the moment. AGS has an option to link the movement with the changing of the frames, makes it look better.

doimus

Thanks for your comments, and I completely agree on the walking issue. To be honest, I'm more concerned about actor's vertical speed being equal to horizontal, as fixing that requires custom pathfinding solution. But all of that is on the to-do list. It will be done. Eventually.:grin:

But thanks again for your suggestions. It's what I'm looking for - I'm kind of dumping it here first to see if there's any interest left in point 'n' click development and to decide what, if anything, should I do with this.

Danvzare

Quote from: doimus on Thu 09/06/2016 14:36:34
One reason I got discouraged about (although the least important to be honest) was AGS's lack of cross platform support and somewhat too complex scripting.
Lack of platform support, that I understand. But complex scripting? AGS was my first foray into programming, and it took me next to no time at all to learn the basics (although it did take several years to master everything).
And personally, I think the AGS scripting language is much simpler than the scripting yours does (at least from what I can tell by looking at that little coding blurb).

I suppose it's all personal preference though. Nothing short of a drag and drop interface would make coding easier. Unless you can make it like Python. Python is awesome.
And none the less, it's nice to see something on GameMaker that allows you to make adventure games.

As for what you should do. I think the crowdfunding way might be a good idea to go, and if that fails, go commercial.
I won't be a customer, but I'm sure there are plenty of people who would love it. You just need to make sure those people know of its existence.

Yitcomics

I use Game Maker and I think a lot of people would love the idea of a Point & Click kit,don't know if you can pull a crowdfunding success,but if the kit was good enough,i'd buy it.

doimus

Quote from: Danvzare on Fri 10/06/2016 11:26:48

Lack of platform support, that I understand. But complex scripting? AGS was my first foray into programming, and it took me next to no time at all to learn the basics (although it did take several years to master everything).
And personally, I think the AGS scripting language is much simpler than the scripting yours does (at least from what I can tell by looking at that little coding blurb).

I suppose it's all personal preference though. Nothing short of a drag and drop interface would make coding easier. Unless you can make it like Python. Python is awesome.
And none the less, it's nice to see something on GameMaker that allows you to make adventure games.

As for what you should do. I think the crowdfunding way might be a good idea to go, and if that fails, go commercial.
I won't be a customer, but I'm sure there are plenty of people who would love it. You just need to make sure those people know of its existence.

Regarding the complex scripting in AGS, I didn't mean the actual syntax, but the stuff that happens when going outside of the "intended" usage of the system. Think of it as delta time between starting a project and resorting to workarounds, hacks and temporary solutions, because things don't work as you think they should. This delta time is larger in Gamemaker just because it's a general purpose 2D engine.

Regarding the drag and drop, my intention was to go as far as possible from drag and drop system and more towards the "scriptwriting" system. I tried to stay away from more visual systems such as Visionaire, which are rather awesome when used as intended, but again, have tendency to drive users mad when going "out-of-the-box".
I do take advantage of Gamemaker's inherent visual nature - It's Room editor is similar to AGS and Sprite editing and support is eons ahead of AGS, but for all the "game specific" stuff, there's code.

My main influences when going with this were RenPy (visual novels) and Inform7 (interactive fiction). Both of those have very "textual" approach to game creation.

But then again, those systems use almost completely natural language and my scripting is limited by GML synatax which is a weird combination of javascript, python and... 1985-style C, I guess. :sealed:
I had plans of allowing to script in both GML and more descriptive/natural language, but that soon becomes a fight against Gamemaker itself, and requires lots of man-hour wasting.

Current way of doing things with weird procedural syntax is a middle ground between leveraging the good stuff about GM and keeping everything on schedule and on budget. A non existing budget is still a budget, right?!

And nice that you mentioned Python awesomeness. I agree.  A hybrid between AGS and Gamemaker's visual approach and RenPy's Python + custom scripting approach is the stuff the dreams are made of, I believe.


Quote from: Yitcomics on Fri 10/06/2016 20:36:55
I use Game Maker and I think a lot of people would love the idea of a Point & Click kit,don't know if you can pull a crowdfunding success,but if the kit was good enough,i'd buy it.

Thanks for you encouragement, I appreciate it a lot! This thing will definitely be released, I'm just trying to decide whether to polish it up as a kit, or pack it up alongside a finished game. Decisions. :confused::embarrassed:

PS: The reason I actually posted about it here was to see if anyone would be interested to beta test it when it gets to that phase. I consider AGS community as THE community when it comes to adventure development.:) Just drop me a PM and I'll put you up on the list.

Yitcomics

#6
Quote from: doimus on Tue 14/06/2016 17:12:03
Thanks for you encouragement, I appreciate it a lot! This thing will definitely be released, I'm just trying to decide whether to polish it up as a kit, or pack it up alongside a finished game. Decisions. :confused::embarrassed:

PS: The reason I actually posted about it here was to see if anyone would be interested to beta test it when it gets to that phase. I consider AGS community as THE community when it comes to adventure development.:) Just drop me a PM and I'll put you up on the list.

Thanks for the offer,ill think about it.

amateurhour

#7
I'm sure you know it but there's already a GameMaker Marketplace where you can sell your scripts and engines.

I don't think there's a need to crowdfund this. I'd get it to a stable beta and release it as a demo or a base engine and use the sales from that to continue to work on it.

edit: unless you're talking about making a point and click creation studio using gamemaker as the backend, in which case yeah that might be something you'd want to crowdfund. If you're just looking to sell your GML scripts and/or your .gmx file then the marketplace is the way to go.

There's been a lot of good engines that have done well at the $10 price point on there.
Co-Founder of Pink Pineapple Ink Pink Pineapple Ink
Creator of the online comic Trouble Ticket Trouble Ticket

SMF spam blocked by CleanTalk