Game Jam OSG Jam

R

rui.rosario

Guest
Hey there GMC!

It is with approval from the forum staff that I bring to you....

(banner is a courtesy of @TDSrock)

OSG stands for "One Script Games" and the rules are pretty simple:

Jam Rules:
  • You must make a game in a single script (no tabbed scripts);
  • The whole script must be created during the Jam time frame (1 week, starting Saturday - September 10 at 00:00 GMT until Friday - September 16 at 23:59 GMT);
  • Submission must be made by PM to me (preferably with the title "OSG Jam Submission") and must contain only the script .gml file;
  • The scripts will be made available as soon as the Jam ends (so make sure you're comfortable with sharing your code) for future reference by everyone;
  • During the weekend of September 17 and 18 it will be the validation period, where all the scripts will be manually checked for conformance with all of the rules (multiple participants may help in this effort for cross validation);
  • If the script is found to not follow the rules, a notice will be made to the developer and the developer will have until the end of the validation period to make the script conform to the rules (no new features, just adherence to the rules, remember your code will be checked)
  • If a script is found to not follow the rules for a second time (after the developer has supposedly fixed it), the script will be disqualified.
  • After the validation period ends, an executable will be made available per script with just one room with one instance in it and the script in the instance's Draw Event (no kind of configuration will be performed, e.g. changing room size. This means Room Setting will be the complete GM defaults);
  • Participants and fellow GMCers will have until Sunday - September 25 to vote for the entry they liked the most (or rank all entries);
  • This is a solo Jam, so no teams (although it would be funny to see a team work on the same script). However, each participant may submit multiple scripts if (and only if) all of them are OSGs that conform to the rules.
Script Rules:
  • You may not instanciate any object;
  • You may not use instance variables;
  • You may not use global variables;
  • You may not use extensions;
  • You may not retrieve assets in any way (e.g. download them) except if the assets were previously created by the script itself (you may save state across each step in a file, for example)
  • You must state explicitly which portions of the code were auto-generated/copied from other sources. Auto-generation / copy-pasting is only allowed if the tool or source is made available to all participants NOTE: If you make your generators / or copy your code from sourve you made during the Jam then you don't need to signal it as it was technically made within the Jam timeframe.
  • .... (rules are subject to change and adapt according to suggestions, corrections, etc)
NOTE: I will be compiling the game with GM:S version 1.4.1757, so make sure your script works in this version!

You can check out an example OSG I made called Pushy!

Help spread the Jam by placing the following badge (courtesy of @TDSrock) in your signature with a link to this thread!

Code:
[url=https://forum.yoyogames.com/index.php?threads/osg-jam.6018/][img]http://i1250.photobucket.com/albums/hh534/TDSrock/OSG-promo-badge_zpsm2jtomvx.png[/img][/url]
REWARDS:

@Jobo has decided to sponsor this Jam with rewards!! So (for a minimum of 10 participants), the top three winners may choose a game from the following list (1st chooses 1st, ...):
Winners can contact @Jobo to claim the prize.

@Bingdom is offering 2000 free coins on his currently released free game called Pixel Kingdom Builder for the top 5. These coins can be used to help progress throughout the game. (Android only).

He will PM the winners a download link of a modified version of the game.
The winners will only have to run the modified version ONCE, then you can update the game on google play if there is any.
Currently, there are 3 save slots in the game BUT, the reward can only be redeemed once per save slot. If you delete a save slot, you can redeem it again.
If you ever delete the game (APK), you can always get the gift back by installing the modified version and running it at least ONCE

@Surgeon_ is giving away free copies of his Mercury Engine to the 1st and 2nd places, and free copies of his Turbo Print Parser to the top 5 entries. Prizes will be claimed via PM.

@Alice will contribute with customized banners for all participants!

Have fun!!!!

PARTICIPANTS LIST:

@Alice
@chance
@Coded Games
@Galladhan
@JimmyBG
@Matthew Brown
@Mike
@Nallebeorn
@Nocturne
@PsychoDelph
@shadowspear1
@Surgeon_
@Threef
@YellowAfterlife

You can access the shared folder with the sources and executables on Dropbox or download it directly as a ZIP Archive.

RANKING:

In case you're wondering what system I used: I used the system in place for the GMC Jam. If you don't believe me, check out the Excel file I used to calculate the rankings (or the equivalent Google Sheet). You also have all the votes there, so that you can double check if any of the votes mismatch (in case I made a mistake in copying them over).

And if you haven't opened the excel file, the rankings are........
  1. @Mike
  2. @Alice
  3. @Surgeon_
  4. @YellowAfterlife
  5. @Nocturne
  6. @JimmyBG
  7. @chance
  8. @Threef
  9. @Matthew Brown
  10. @Galladhan
  11. @Coded Games
  12. @PsychoDelph
  13. @Nallebeorn
  14. @shadowspear1
Congratulations to @Mike, @Alice and @Surgeon_ for the top 3!! But in fact, everyone here deserves a round of applause for the amazing games that you pulled of with just one script. Some participants even learnt new things, so that's even better! :)
 
Last edited by a moderator:

Jobo

Member
GMC Elder
This sounds like a fun challenge! I'll definitely enter, and hopefully there'll be a decent turnout from the community.
 

Tthecreator

Your Creator!
Maybe a rule could be not to use dlls/extensions?(kind of falls under the no assets rule already)
Another rule could be one script, no tabbed scripts allowed.(would count as another script)
Would constants/macros be allowed? They make things easier but aren't really assets.

What I like is that you'll need abstract drawing functions to make what you want. You cannot really import sprites. (unless you sneakily make something with draw_point and a constant string)
 
R

rui.rosario

Guest
Maybe a rule could be not to use dlls/extensions?(kind of falls under the no assets rule already)
I believe that falls under the rule, but I'll make it explicit :)

Another rule could be one script, no tabbed scripts allowed.(would count as another script)
Thanks for reminding me of tabbed scripts! Although they would be exported as different scripts, so it would fail the validation, but I'll make it explicit.

Would constants/macros be allowed? They make things easier but aren't really assets.
Technically the only thing that will be made will be adding the script to the object in the draw event, no other setup will be performed (that includes macros). You can, however, use enums (not exactly the same, but for most cases it is enough).

What I like is that you'll need abstract drawing functions to make what you want. You cannot really import sprites. (unless you sneakily make something with draw_point and a constant string)
Yes, part of the challenge is coming up with several ways to bypass those features :p
 

Nocturne

Friendly Tyrant
Forum Staff
Admin
I shall be trying to create something for this... I've been away from GMS this last couple of weeks, and this seems a great way to get me warmed up and back into using it again. :)
 

Yal

🐧 *penguin noises*
GMC Elder
*rubs chin* I don't quite like how this approach forces you to draw stuff in a loop, basically, since you can't initialize stuff the first step and then do other stuff the following ones. It makes the game stop responding, more or less.


Actually, I realized an approach. score, lives and health all are initialized to default values on game start (I think they start at 0, 3 and 100 respectively, but I'm only sure about score), so you could check either of them has the default value, and if so initialize your game, otherwise run your actual game code. (You could also check whether the instance running the code is on its start position, or anything using its local variables, I guess)
 
R

rui.rosario

Guest
*rubs chin* I don't quite like how this approach forces you to draw stuff in a loop, basically, since you can't initialize stuff the first step and then do other stuff the following ones. It makes the game stop responding, more or less.


Actually, I realized an approach. score, lives and health all are initialized to default values on game start (I think they start at 0, 3 and 100 respectively, but I'm only sure about score), so you could check either of them has the default value, and if so initialize your game, otherwise run your actual game code. (You could also check whether the instance running the code is on its start position, or anything using its local variables, I guess)
Hey @Yal, if you see my example you can see I used a file to check if the game was initialized or not (with the added bonus of it acting as a save file as well :p).

About the drawing stuff, you could create all your sprites manually on a surface on game start and save it to a buffer and to a file, and then load the surface back up. It would have some associated cost, but it could make the game more responsive than drawing everything on a loop
 

Surgeon_

Symbian Curator
*rubs chin* I don't quite like how this approach forces you to draw stuff in a loop, basically, since you can't initialize stuff the first step and then do other stuff the following ones. It makes the game stop responding, more or less.


Actually, I realized an approach. score, lives and health all are initialized to default values on game start (I think they start at 0, 3 and 100 respectively, but I'm only sure about score), so you could check either of them has the default value, and if so initialize your game, otherwise run your actual game code. (You could also check whether the instance running the code is on its start position, or anything using its local variables, I guess)
According the the rules, you may not use global variables.

By the way, I'll be joining the Jam :)

EDIT: I already kind of know what kind of a game I'll be making - and then... You'll know the true meaning of complicated...
 
Last edited:
R

rui.rosario

Guest
Happy to see this is on!
I've already been working on code to generate sprites and all :)
It's nice to practice (I've been developing another OSG myself, more complex than the Pushy example), but don't forget the whole script must be made during the Jam time!
 

GMWolf

aka fel666
It's nice to practice (I've been developing another OSG myself, more complex than the Pushy example), but don't forget the whole script must be made during the Jam time!
oh? so i cant copy paste some bits of code i made?
What about if i make a tool to generate some code?
I was working on a system to create full texture pages and vertex buffers from strings...
 
R

rui.rosario

Guest
Well.... it would be fair only if you did it and shared it with the rest of the participants (so you don't have an advantage over them). If you do that, then I'll post it in the first post as well so everyone can use it for themselves.

EDIT: I'll also add a rule in which you have to state which portions were auto-generated/copied (you can copy on the same grounds: the code is available to be copied by everyone).
 
B

Big_Macca_101

Guest
If we aren't able to use instance variables, are we able to make use of saving files?
Similar to how you have your example using buffers but i mean just to store data, can't wait!
 

GMWolf

aka fel666
Well.... it would be fair only if you did it and shared it with the rest of the participants (so you don't have an advantage over them). If you do that, then I'll post it in the first post as well so everyone can use it for themselves.

EDIT: I'll also add a rule in which you have to state which portions were auto-generated/copied (you can copy on the same grounds: the code is available to be copied by everyone).
So what you are saying is, i can make my OSG engine, and as long as i share it, i can use it for the jam?
 
R

rui.rosario

Guest
If we aren't able to use instance variables, are we able to make use of saving files?
Similar to how you have your example using buffers but i mean just to store data, can't wait!
Yes, you can't use instance variables because they would transition state from step to step without you needing to do anything. You can however use files and data structures to do everything else (you can theoretically even hard-code a reference to a data structure, in order not to recreate it each step.... but I advice against it)
 
R

rui.rosario

Guest
So what you are saying is, i can make my OSG engine, and as long as i share it, i can use it for the jam?
If no one here opposes that thought, then yes. As long as all participants have access to the same tools / sources then it becomes a matter of which ones the developer chooses to use. I added the rule to make the generated / copied code explicit so that voters can also choose to judge on whether or not the code was generated or copied.
 

Surgeon_

Symbian Curator
If no one here opposes that thought, then yes. As long as all participants have access to the same tools / sources then it becomes a matter of which ones the developer chooses to use. I added the rule to make the generated / copied code explicit so that voters can also choose to judge on whether or not the code was generated or copied.
You know, the whole point of this is how people manage to organize themselves in such a strange and constrained environment, and if there are "engines" to circumvent all of those obstacles then what's the point? So I'm against this sharing thing. If @Fel666 made his code generator, then good for him. But let others either make their own generators, engines and so on... Or just let them suffer in confusion. We'll at least see more diversity like that.
 
R

rui.rosario

Guest
You know, the whole point of this is how people manage to organize themselves in such a strange and constrained environment, and if there are "engines" to circumvent all of those obstacles then what's the point? So I'm against this sharing thing. If @Fel666 made his code generator, then good for him. But let others either make their own generators, engines and so on... Or just let them suffer in confusion. We'll at least see more diversity like that.
True, in that case I'm keeping the generated / copied code annotation as mandatory, but you use your own resources at your discretion.
 

TehPilot

Member
This is a challenge that tickles my programming fancy. I'm already working out how to do some interesting things with the code in my mind.

Just to clarify: no other resources such as sound, music, etc. - it all has to be generated from within the one script?
 

GMWolf

aka fel666
This is a challenge that tickles my programming fancy. I'm already working out how to do some interesting things with the code in my mind.

Just to clarify: no other resources such as sound, music, etc. - it all has to be generated from within the one script?
yeah, thats the idea.
I was trying to mess around, generating textures from strings though, and that got messy really fast. (especially since buffer_get/set_surface seems bugged).
 
R

rui.rosario

Guest
This is a challenge that tickles my programming fancy. I'm already working out how to do some interesting things with the code in my mind.

Just to clarify: no other resources such as sound, music, etc. - it all has to be generated from within the one script?
Yes, you may end up using sound and music, but only if you can generate it within the script.
 

Nallebeorn

Member
This sounds very interesting! I think I'll join this. So, with no global or instance variables, pretty much the only way to store data persistently across steps is by writing to a file, eh? Which is kind of slow (at least for HDD users like me), but I guess you can get quite a long way by just feeding get_timer() into functions and algorithms.
And this will give me a good excuse to try out procedurally generating audio.
 
R

rui.rosario

Guest
This sounds very interesting! I think I'll join this. So, with no global or instance variables, pretty much the only way to store data persistently across steps is by writing to a file, eh? Which is kind of slow (at least for HDD users like me), but I guess you can get quite a long way by just feeding get_timer() into functions and algorithms.
And this will give me a good excuse to try out procedurally generating audio.
You can actually get a long way just with files, but of course that it will have a toll on the game, so other inventive ways can arise from the Jam!
 

GMWolf

aka fel666
This sounds very interesting! I think I'll join this. So, with no global or instance variables, pretty much the only way to store data persistently across steps is by writing to a file, eh? Which is kind of slow (at least for HDD users like me), but I guess you can get quite a long way by just feeding get_timer() into functions and algorithms.
And this will give me a good excuse to try out procedurally generating audio.
Another way to do it is to refference a map at index 0.
 
R

rui.rosario

Guest
Another way to do it is to refference a map at index 0.
I wouldn't go very far with that approach, one wrong move and you may be pointing to a completely different map (that may even not exist). Although with care it can be achieved.
 

GMWolf

aka fel666
I wouldn't go very far with that approach, one wrong move and you may be pointing to a completely different map (that may even not exist). Although with care it can be achieved.
Its what i have been working with. It has the advantage of being faster than a file. But yes, it is possible to mess it up if you delete the map. So long as you dont (and GMS doesnt get updated to use types and pointers), it should all work fine.
 

Nallebeorn

Member
@rui.rosario, you should probably specify the GM version we're supposed to use, to make sure there are no incompatibilities between the version you build with and the version we use to test.
Or mention that we should specify what version we used when sending our scripts, if you can stand having to switch when compiling all the games. GameMaker isn't always backward-compatible, after all.
 
R

rui.rosario

Guest
@rui.rosario, you should probably specify the GM version we're supposed to use, to make sure there are no incompatibilities between the version you build with and the version we use to test.
Or mention that we should specify what version we used when sending our scripts, if you can stand having to switch when compiling all the games. GameMaker isn't always backward-compatible, after all.
True, I'll update the main post with that information (and to keep it free-users friendly, I'll use the version of the latest downloadable executable). Time to download GM to see in what version it is!
 

Alice

Darts addict
Forum Staff
Moderator
Maybe there should be distinction between generators made before the Jam time and during it? Generally, I think someone who writes their generator in the Jam time doesn't have that much advantage compared to someone who made it during the Jam.

On a side note, I really wouldn't mind if the "template" came with a font, and a "draw_set_font(...)" call before calling the script. I dunno, I'm just not quite fond of the default font used by GM, and I don't even know if it's consistent across different users or what...?

(come to think of it, maybe if there were variations of OSG Jam in the future, they would come with different templates, different ranges of variables etc., and the template proper would be released at the beginning of the Jam?)

Also, there might be some symbolic trophies for this Jam, maybe...? :rolleyes:
 

GMWolf

aka fel666
Well, turns out writing an OSG engine is a lot of work. and working with the engine isnt that easy anyways (it being a big large script and all).
I think ill just stick to writing all of my code during the jam :)
 
R

rui.rosario

Guest
Maybe there should be distinction between generators made before the Jam time and during it? Generally, I think someone who writes their generator in the Jam time doesn't have that much advantage compared to someone who made it during the Jam.

On a side note, I really wouldn't mind if the "template" came with a font, and a "draw_set_font(...)" call before calling the script. I dunno, I'm just not quite fond of the default font used by GM, and I don't even know if it's consistent across different users or what...?

(come to think of it, maybe if there were variations of OSG Jam in the future, they would come with different templates, different ranges of variables etc., and the template proper would be released at the beginning of the Jam?)

Also, there might be some symbolic trophies for this Jam, maybe...? :rolleyes:
Good ideas @Alice!!

Yeah, symbolic trophies are always nice :rolleyes:
 

GMWolf

aka fel666
Maybe there should be distinction between generators made before the Jam time and during it? Generally, I think someone who writes their generator in the Jam time doesn't have that much advantage compared to someone who made it during the Jam.

On a side note, I really wouldn't mind if the "template" came with a font, and a "draw_set_font(...)" call before calling the script. I dunno, I'm just not quite fond of the default font used by GM, and I don't even know if it's consistent across different users or what...?

(come to think of it, maybe if there were variations of OSG Jam in the future, they would come with different templates, different ranges of variables etc., and the template proper would be released at the beginning of the Jam?)

Also, there might be some symbolic trophies for this Jam, maybe...? :rolleyes:
not to mention some targets need a default font.
That does give me an idea: ascii based game!
 

Nallebeorn

Member
On a side note, I really wouldn't mind if the "template" came with a font, and a "draw_set_font(...)" call before calling the script. I dunno, I'm just not quite fond of the default font used by GM, and I don't even know if it's consistent across different users or what...?
Pretty sure it's consistent, the manual even specifies it's 12pt Arial.
I don't really think there should be an alternate font bundled – it doesn't really make much sense to make an exception just to replace the default font with another default font, what's the point? And after all, if you can draw graphics through the script, you could draw text with custom fonts as well. =)
 

GMWolf

aka fel666
Pretty sure it's consistent, the manual even specifies it's 12pt Arial.
I don't really think there should be an alternate font bundled – it doesn't really make much sense to make an exception just to replace the default font with another default font, what's the point? And after all, if you can draw graphics through the script, you could draw text with custom fonts as well. =)
Not defining a font works on windows, but try it on HTML5. it doenst work...
 
R

rui.rosario

Guest
Pretty sure it's consistent, the manual even specifies it's 12pt Arial.
I don't really think there should be an alternate font bundled – it doesn't really make much sense to make an exception just to replace the default font with another default font, what's the point? And after all, if you can draw graphics through the script, you could draw text with custom fonts as well. =)
I agree, so for this version no template will be made, but if people like the idea then there can be further OSG Jams with multiple templates, like @Alice said, besides the "pure" no-template jam.

Not defining a font works on windows, but try it on HTML5. it doenst work...
All executables will be Windows executables, so that problem only occurs if you intend to release your OSG as an HTML5 game, in which case you'd have to build it so you could set the default font.
 
T

TDSrock

Guest
I'll see if I can get someone with graphical skills to do it (or else I'll do it.... but it won't be good xD)
I might be able to help out on that end. It's just been a while since I did anything in PS.
 
R

rui.rosario

Guest
I might be able to help out on that end. It's just been a while since I did anything in PS.
Anyone who wants to add banners / badges is welcome! The maximum that can happen is having multiple badges/banners per person :p



That's strange. What are the alternatives then?
Yes, you can't use instance variables because they would transition state from step to step without you needing to do anything. You can however use files and data structures to do everything else (you can theoretically even hard-code a reference to a data structure, in order not to recreate it each step.... but I advice against it)
Or as @Nocturne said, that's part of the challenge .P


You should change this to 1.4.1760 as that is (as of 30th Aug) the most recent beta.
I think it's best to keep it on the stable versions.
 
Top