2018-07-24:

Gynvael's Summer GameDev Challenge 2018

gsgc:compo:competition

Submission deadline reached. You can see/play the games at http://gsgc2018.gynvael.tv/ (I'll add source codes in a few days).
Expect winners to be announced next weekend (I need to play through all the qualifying games first! 22 submissions btw, you're amazing!)


For some reason it's summer in the northern hemisphere. This means it's time for another gamedev challenge - a game programming competition where the rules are made up (by me) and the limitations/constraints put in place are pretty challenging. And, as previously, there are rewards as well!

Without further ado, welcome to the GSGC2018!

P.S. If you like this challenge, please help me spread the word around - there were 13 submissions last time, let's aim at beating that record :)

Constraints:
Create a game that meets the following requirements:
• The game is a single-player real-time shooter.
• The game is made in client-side web technology that runs by default on the newest stable Chrome on Windows 10 (1803) - yes, that means HTML/CSS, JavaScript and/or WebAssembly (C/C++/etc).
• The size of the whole game (i.e. sum of sizes of all the files) is at most 31337 bytes (everything, including all art, fonts, etc).
• All the game files and directories must use the 8.3 filename format (i.e. 8 letters for the filename and 3 letters for the extension or less). There cannot be more than 20 files + directories in total. EDIT (2018-08-04): Minor exception for the 8.3 naming - feel free to use .html and .wasm extensions as well (but only these two; the 8-character file name limit still applies in these cases).
• The game renders all displayed graphics into one canvas element that has exactly 360x400 pixels in resolution (i.e. 360 pixels wide, 400 pixels high). The canvas must be stretched to fill the whole window (100% width, 100% height). Please note that this means individual pixels will be rectangular (like bricks), almost 2 times more width than height. EDIT (2018-07-24): Please add 'image-rendering: pixelated;' to your canvas element's CSS style - this is how I will test each game, with canvas being pixelated. EDIT (2018-08-05): Example HTML file with proper canvas settings: gsgc2018.html (ctrl+u for source), screenshot on fullscreen.
EDIT (2018-08-16): Feel free to use default CSS mouse cursors/pointers (auto, default, crosshair, pointer, move, e-resize, ne-resize, nw-resize, n-resize, se-resize, sw-resize, s-resize, w-resize, text, wait, help, progress) or none (in this case your game might have to render the mouse cursor on the canvas if you need it). The default CSS cursor colors do not count towards the color limit (though using none and rendering your own cursor on the canvas does). Please note that using cursor: url() is not allowed.
• The canvas cannot display more than 32 distinct colors at the same time.
• The text in game, if any, must be in English.

Contest related rules:
• Submission deadline is 2nd of September 2018 at 11:59pm (23:59) CEST (i.e. GMT+2) - please mind the timezone!
• Games must be submitted by sending a link to a downloadable package (hosted e.g. on Google Drive or something similar) and SHA256 of the package (see FAQ on how to get SHA256 of a file, it's at the bottom), to the following e-mail address: gynvael+summer2018@coldwind.pl (please also add a comment under this post to confirm that you've sent an e-mail - otherwise I won't know that I didn't get an e-mail and can't debug it).
• Source code and all the scripts used to build the game MUST be included in the submitted package (alongside the ready-to-test directory with the game). By submitting the game its author(s) agree to the game being re-hosted by me for anyone to download and test once the competition is over. I won't be doing anything weird with the game after the competition, but I want participants to learn from each other after the compo is over.
• If you are using assets/sfx/music/etc created by someone else, please make sure their license allows you to use them for commercial purposes and redistribution. Please note that some licenses require proper attribution - be sure to meet these requirements.
• Games not following the rules/constraints will not be able participate in the competition.
• When in doubt, ask in the comment section below.

Prizes:
All prizes will come in a form of a giftcard for either amazon.com / .co.uk / .jp or .de, or steam (author's choice).
In some cases I might agree to the winners request for a giftcard at a different internet store, but this will be considered at a per-case basis.

Best Game Award:
Top 1: 200 USD (or equivalent in different currency)
Top 2: 150 USD (or equivalent...)
Top 3: 100 USD (or equivalent...)
Honorary awards (if any): 50 USD (or equivalent...)

How will the games be judged:
Best Game Award:
• There are no written-in-stone rules about that, but...
• I'll focus on the overall game quality (gameplay/is it fun to play, aesthetics, graphics, sound, etc).
• I will totally ignore source code quality - please focus on the gameplay/etc. If the game crashes, but is in general playable (i.e. crashes are rare), I'll ignore the crashes too.
• One of my PCs must be able to run the game smoothly (I will test the game on one/both of the following specs: i7 8-core/16-thread 128GB RAM with GTX 980 Ti and/or i7 4-core/8-thread 32GB RAM with GTX 1080 Ti).
• I will generally try my best (including consulting the game author if needed) to make sure that the game is running as intended by the creator, as long as eventual patches / resubmissions are within the deadline mentioned in above sections.
• If I will invite more judges to participate (e.g. if I feel the need for a second opinion or it turns out half of my family is taking part in the competition) they will follow the same guidelines.

Hints, protips, random thoughts:
• Be sure to remember about the game having some sound effects. Music is a nice-to-have, but I don't mind if it's not there.
• Browse through OpenGameArt.org and similar sites - you can find good quality art there.
• Browse through the FAQ section below - there are some additional hints / explanations there.
• Look at older / indie games for inspiration.
• You might also want to take a look at an archived video of this livestream - #46: How to approach competitions.
EDIT (2018-07-24): You might want to add 'image-rendering: pixelated;' to your canvas element's CSS style - this is how I will test each game, with canvas being pixelated.

FAQ:
Q: JavaScript? In Chrome? Seriously?!
A: Yes. Think of it as a challenge! Also, with a little bit more tinkering you can use e.g. C++ or Rust and compile it to WebAssembly (there are tutorials out there on how to do connect WebAssembly with canvas, or how to minimize the size of a WebAssembly binary output file).

Q: But I don't know JS...
A: Isn't this a great opportunity to learn then? Also, see the above note on WebAssembly.

Q: People who know JS have a HUGE!!1 advantage.
A: Please note that I won't be looking at the source code of the game, but at the game itself (the gameplay, the overall feel, the aesthetics). And somewhat (un)surprisingly, you can win a gamedev competition without being an expert in a given programming language.

Q: Can my game download something from the Internet?
A: No. The test machine(s) will not have any network connection.

Q: Can I grab resources which are by default on the disk?
A: This won't work. The game will be hosted on a local HTTP server before testing, and the server will be set in such a way that only the files from the game directory will be served (i.e. the ready-to-test package mentioned above).

Q: So if I create a symlink that resides in the game directory but points to a resource in a different part of the filesystem...
A: No. Assume that symlinks won't work. Don't use them.

Q: What will be MIME types of the served files?
A: Whatever you need them to be - feel free to write down special requirements in a readme file. By default I'll rely on simple extension to MIME mapping, maybe with some help from libmagic.

Q: Can you add this specific HTTP header to be sent with some files?
A: No. No additional headers I'm afraid.

Q: Will your HTTP server send any Content-Encoding headers (gzip/br/deflate/etc)? I.e. can we benefit from HTTP transport encoding (compression) possibilities with regards to the file size limit?
A: The server will not send any Content-Encoding header at all. As far as I have previously tested Chrome DOES NOT attempt any decompression algorithms in such case. So no, this will not work.

Q: What if let's say... I have a trick that actually makes newest Chrome decompress such compressed data stream?
A: Should be fine, but please contact me first so I can double-check this.

Q: Why the file number / file name length limit?
A: The file name (especially of the main .html file) can be used in a clever way to bypass the size limit. Let's not go there this time.

Q: Does "20 files + directories" mean 20 files and 20 directories?
A: No, that would be 40. The number 20 stands for the total number of both files and directories (so e.g. '10 files and 10 directories', but not '11 files and 10 directories').

Q: What fonts do you have installed on the test machines?
A: Assume the default (i.e. fonts present after the operating system is newly installed). If you need to use any more fonts be sure to embed them in the submission (keep in mind the size limit though).

Q: Can I use any minifier / this custom compression trick I know?
A: Sure. As long as it works on the newest stable Chrome on Windows 10 that's fine with me.

Q: Will this one specific feature be enabled in the browser during judging?
A: Please ask in the comments - I'll check. A safe rule of thumb is to assume only the features which are enabled by default in the newest Chrome version (at the moment of judging) are actually enabled, and no other features are.

Q: Will WebGL / Webassembly be enabled in the browser during judging?
A: Yes (these are enabled by default).

Q: Will the Same Origin Policy be disabled?
A: No, it will be enabled.

Q: Can my game be a Chrome Extension / Plugin?
A: No. The game must basically be a standalone website.

Q: Are Flash / Java Applets enabled?
A: No.

Q: Can I use this one specific library/engine/etc in the competition?
A: If the given library's/engine's/etc's license allows using it for commercial purposes and redistribution (without others having to pay any fees), then it's OK to use it. Please remember that its size still counts towards the 31337 byte limit and that the file names / directory names must adhere the rules.

Q: 31337 bytes? That's not a lot...
A: It's enough :) Size optimization is quite fun and there is a multitude of ways to approach this.

Q: When will the results be announced?
A: September or early October. I'll try to be as fast as possible, but it does usually take some time (it also depends on submission count).

Q: I never took part in any gamedev compo like this. Can I still participate?
A: Sure! It's a great learning experience!

Q: Can I blog / tweet / livestream the making of my game?
A: Sure. Keep in mind that you will be revealing your ideas to other participants this way (it's within the rules to do it though).

Q: Can I create a game with my friend(s)/team/etc?
A: Yes!

Q: My friends are graphic/music/etc artists, can they help me?
A: By all means!

Q: Does the game have to explain the basics ingame, or can a simple guide/manual be part of the submission?
A: It doesn't have to be in-game - a readme.txt or a similar guide attached to the submission is fine. This manual won't count towards the limit.

Q: So, can the game load the readme.txt file and use resources/code hidden in it?
A: No, the readme.txt is not part of the submission per se and so the web server will not allow the game to download it.

Q: 32 colors only?
A: 32 colors at once. I.e. on one frame there can be a total of 32 different colors (distinguished by their 24-bit RGB values) at most. However you can change which colors you display between frames.

Q: So... I can have e.g. 32 greens on one frame, and then switch to 32 reds for the next frame?
A: Correct. As long as on a single frame there are no more than 32 distinct colors, we're good.

Q: What about text anti-aliasing? That might add additional colors...
A: Be sure this is properly handled in your code. There must never be more than 32 distinct colors on a frame.

Q: What size will the browser window be when testing?
A: I will test on full screen (F11) on either a 1920x1080 LCD, or a 4K one.

Q: That's a pretty weird resolution btw. 360x400? What's up with that?
A: Surprisingly, there were games in the past that used similar resolutions.

Q: I would like to become a sponsor to make the awards more awesome!
A: Sure, get in touch :) (you can find my e-mail in the About section)

Added 2018-07-25:
Q: Can I add a CSS background-image/background-color/etc to the canvas?
A: No. As the rules say, all the graphics must be displayed on the canvas (therefore it must be fully opaque, i.e. cannot be transparent in any place).

Q: What's SHA256? How to get SHA256 of a package?
A: It's a short SHA256 is a (256-bit) number calculated out of a data set (e.g. file). Basically you give whatever-tool-calculates-it a file as input, and it gives you the number as output. The number is semi-unique for each content of the file, and it's pretty hard to fake the number or have another file (with different content) generate the same number by accident (i.e. it's proof that your package didn't change after submission and I can use it to verify if the file was downloaded correctly).
An example SHA256 looks like this: 559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd (that's SHA256 of a file containing single letter A).
To calculate SHA256:
- on Linux/OSX run (in a terminal): sha256sum game_package.zip
- on Windows run (in a terminal): certutil -hashfile game_package.zip sha256
(assuming that the game_package.zip file is the game package you want to upload and submit for the competition)
If none of the above work for you, it's quite easy to google out another tool to calculate the SHA256 of a file :)
NOTE: If you're re-submitting a newer version of the game, you need to send me the new SHA256 as well.

Added 2018-08-16:
Q: What's with the mouse cursor rule addition so late in the competition?
A: I've got a question about it now and therefore had to decide on it. Since it's pretty late in the competition (~2 weeks left) I didn't want to straight out ban default cursors (this would be in the spirit of resolution/color rules btw), since I expect a lot of games will have it enabled even if it's not used and it would be a silly reason to ban otherwise great games from a competition (please note some games were already submitted). Given this I decided to allow the default cursors (i.e. the ones enumerated on this W3 wiki page), as well as allow turning the cursor off completely (if one wants to render the cursor in game). That being said, please note that custom cursors (using url() value) are off limits and must not be used.

Q: So why doesn't the default cursor's colors count towards the color limits?
A: There are a couple of reasons, but in the end it's because the cursor just doesn't matter that much, especially that if it was left default (and therefore doesn't bring anything to the game). And again, some games were already submitted, so I didn't want to introduce any rules that would make these otherwise correct submissions suddenly breaking a new rule with authors potentially not having the chance to make changes - that just doesn't sound fair. So I decided that ignoring the colors on default mouse pointers is the best option.

See also the comment section for possibly more questions and answers. Feel free to also ask there if you have any questions.

Final words
Have Fun, Good Luck!

Comments:

2018-07-24 02:33:17 = Luke
{
What do you mean by a single-player real-time shooter? Do games like Portal and bubble shooters count?
}
2018-07-24 08:31:16 = Gynvael Coldwind
{
@Luke
As long as the gameplay includes shooting a projectile/laser/whatever by the player, I'm happy to say it's a shooter.
}
2018-07-24 10:43:43 = Kogai
{
Is the upper limitation of game size (31337 bytes) includes a size of source code?
For example, the game running as WASM, could we exclude file size of C source code?
}
2018-07-24 11:03:25 = Gynvael Coldwind
{
@Kogai
The upper limit includes all the files necessary to run the game. If, e.g. in case of WASM, the source is not needed to run the game (only the binary output files are), then the source does not count towards the limit.
Same in case of e.g. JS and minifying the source code - the input files don't count towards the limit (since they are not needed to run the game), but the output files (minified files) do.

Answering this from a different perspective - only file that need to be served by the web server count towards the limit.
In the game package please have a ready-to-test directory with these files (and the sum of their sizes cannot be more than 31337 bytes).
}
2018-07-24 18:38:34 = LuoXiahong
{
360 x 400 into 1920 x 1080 (or 4 times bigger) that means we can treat every 0.1875 (or div 2) of original pixel like 1 pixel horizontally and 0.(370) (or div 2) of original pixel like 1 pixel vertically ?
}
2018-07-24 18:49:16 = Gynvael Coldwind
{
@LuoXiahong
Uhm, 360x400 pixels means exactly 360x400 pixels. This is the size of the canvas a game submission must have. And that canvas must be stretched into full window size using standard HTML/CSS methods (ideally with image-rendering: pixelated;, but I'll make sure that the browser does that).
}
2018-07-25 11:58:03 = Newbie
{
What is SHA256? Just asking.
}
2018-07-25 12:19:15 = Gynvael Coldwind
{
@Newbie
It's a short (256-bit) number calculated out of a data set. Basically you give whatever-calculates-it a file, and it gives you the number. The number is semi-unique for each content of the file, and it's pretty hard to fake the number or have another file (with different content) generate the same number nu accident.
On Linux you can just do sha256sum filename.zip. On Windows you usually need some tool to calculate it for you. I'm pretty sure there are websites that calculate sha256 of an uploaded file too (though be careful not to upload anything sensitive to it).

Example:
File containing letter 'A' has SHA256: 559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd (the number is commonly expressed in hexadecimal form and commonly called a 'hash', though that's not fully correct, but whatever)
File containing letter 'B' has SHA256: df7e70e5021544f4834bbee64a9e3789febc4be81470df629cad6ddb03320a5c

Trying to come up with a file with different content than 'A' or 'B' that produces one of the above hashes is mathematically hard (i.e. no one has proven to be able to do it for SHA256 yet).

See also: https://www.youtube.com/watch?v=5Vjc4H15ef0 or https://en.wikipedia.org/wiki/SHA-2
}
2018-07-25 13:46:13 = Pa
{
Won't index.html break 8.3 file format rule? Or should one use index.htm extension instead?
}
2018-07-25 13:59:05 = Gynvael Coldwind
{
@Pa
index.htm should work, but I don't mind a single file named index.html in case someone misses this; the naming rule is to prevent using file names as data carriers (as per FAQ), not ban folks who forgot to change 'index.html' to 'index.htm' :)
}
2018-07-25 21:30:42 = Vassildador
{
Hey Gynvael :)

Happy to join your dev challenge again! Unfortunately it overlaps quite a bit with my vacations, but I'll attempt to achieve something nevertheless :D

The "The game renders all displayed graphics into one canvas element" rule confuses me. Does this mean we can't have any CSS other than the image-rendering mode and height/width stretching? I'm thinking a background color, image or something similar "behind" what my canvas renders in its context :)
}
2018-07-25 22:05:51 = Gynvael Coldwind
{
@Vassildador
Welcome back! I guess you're defending the title this time :)

Ad question:
The key word there is "all", i.e. all the graphics must be displayed on the canvas.
So I'm afraid no background colors/images/etc behind the canvas. The canvas should not be partly transparent either (it must be fully opaque).
I'm treating "canvas" and "frame" as the same thing for the sake of this competition.
(I like the way you're thinking though!)
}
2018-07-25 22:09:05 = JayC
{
Hi!

I almost finished my game, but im still wondering:

"and SHA256 of the package"

What is this.. SHA256? some kind of scan or what.

}
2018-07-25 22:10:56 = Gynvael Coldwind
{
@JayC
See my comment about SHA256 above :)
Just type "how to calculate sha256 of a file on <YOUR SYSTEM>" in google / youtube / whatever :)
}
2018-07-25 22:18:41 = Gynvael Coldwind
{
I've added a note on how to calculate SHA256 to the FAQ section at the very bottom.
}
2018-07-26 01:11:14 = JayC
{
One last question - if i want to say something about the game whenever i send it to You @Gynvael, should i write all the stuff in the email or add some text file (readme or smth)?

Thanks!
}
2018-07-26 11:38:07 = gjm
{
Hello, there is a question: @Gynvael, can we write game in libgdx in Java and export this game that it will work at HTML5's canvas? Because there are so many frameworks that are multiplatform for example libgdx: Android, iOS, PC, HTML5 (Web canvas) etc...

Thanks, gjm!
}
2018-07-26 12:48:22 = Gynvael Coldwind
{
@JayC
If it's related to the game and how to play it, please put it in a readme.txt file (this file doesn't count towards the limit as per FAQ).

"""
Q: Does the game have to explain the basics ingame, or can a simple guide/manual be part of the submission?
A: It doesn't have to be in-game - a readme.txt or a similar guide attached to the submission is fine. This manual won't count towards the limit.

Q: So, can the game load the readme.txt file and use resources/code hidden in it?
A: No, the readme.txt is not part of the submission per se and so the web server will not allow the game to download it.
"""

If it's just a message for me, then put it in the e-mail ;)

@gjm
You can use anything to create the game, as long as the output game package meets the constrains mentioned in the blogpost.
E.g. you can write your game in Turbo Pascal, then have a set of Magical Scripts™ that compile it and covert it into HTML+JS/WASM, and as long as the whole output package (i.e. the things that are required to run - not build/compile/etc, just *run* - the game) is below or equal to 31337 bytes, at most 20 files+directories with name formatting 8.3, uses the 360x400 canvas with 32 colors at most at one frame, etc etc, then it's all fine.
The catch here is that some frameworks/engines/etc have huge *runtime* libraries that will not make it easy to fit within the 31337 bytes limit.

Best of luck :)
}
2018-07-26 16:52:08 = Luke
{
Can there be used multiple canvas elements if only one would be visible?
The rules don't state other canvas elements cannot be used, but I just want to be sure.
}
2018-07-26 17:14:22 = Gynvael Coldwind
{
@Luke
Yup, that's fine.
}
2018-07-26 20:48:17 = Deseteral
{
Can we set `body { margin: 0; }` in CSS, so that canvas fills the whole page?
}
2018-07-26 21:13:02 = 42
{
Questions about "real-time shooter" part.

1) Does it require shooting at *enemies* (NPCs/AI in general)? For example, would shooting bullets/rockets/lasers/portals to proceed in some kind of (adventure || arcade || logical) platformer would be okay? (Instead of shooting to kill enemies).

2) How much of the game-play should be _the shooting_ part ;)?
}
2018-07-26 21:43:12 = JayC
{
Sorry but i got confused.. we're limited to smth about 31KB right.

So how in hell are we gonna use.. sound effects? Even a slight sound effect is like 25KB.
}
2018-07-26 22:29:43 = Vassildador
{
@JayC Yeah, I struggled with this in the previous small size challenge myself.

You'll get the most content for the smallest size by utilising the web audio api (https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API). It takes quite some effort and time to learn how to make anything close to decent with this :)

In case anyone wants to save some more bytes on code, this is a tool I wish I knew about before the last game dev challenge started (where I rolled my own custom compression tools, which turned out fine).
http://www.iteral.com/jscrush/

If you embed your sound fragments as base64 it can slightly compress them further too.
}
2018-07-26 22:53:03 = Gynvael Coldwind
{
@Deseteral
Yes, by all means.

@42
1) It doesn't require shooting at enemies. Your proposal would be OK.
2) Shooting must interact with some other stuff in the game and be part of the game play. It shouldn't be limited to being only e.g. graphical candy.

@JayC
Well it is a *challenge* ;)
Look at e.g. https://www.youtube.com/watch?v=PiBfI7wltM8&t=1211s or games from previous challenge http://gwgc2017.gynvael.tv/ - you might get some ideas.
+what Vassildador said :)
}
2018-07-27 15:30:14 = Bobzy
{
Yo!

Gotta question: as we render text in cavas, it gets a lil bit bloored on the edges so the letters look.. like letters.

So does it count as one color?

thanks!
}
2018-07-27 15:34:02 = Gynvael Coldwind
{
@Bobzy
I guess this entry in the FAQ answers your question :)

Q: What about text anti-aliasing? That might add additional colors...
A: Be sure this is properly handled in your code. There must never be more than 32 distinct colors on a frame.
}
2018-07-27 21:28:30 = Bobzy
{
@Gynvael
W8.. 'handled in my code'?

https://stackoverflow.com/questions/4261090/html5-canvas-and-anti-aliasing/4261139

From what i know i can only assign false to 'imageSmoothing' and it's only affecting fillRect and fillImage. The anti-aliasing should be (and from what i see - it is) fully connected to the browser. And so my 'not-straight' lines are bloored & also my text is.

Any hint on this one?
}
2018-07-27 21:52:39 = Bobzy
{
@Gynvael

Still not sure about this anti-aliasing. It fully depends on a browser, when it comes to rendering circles or text..

Any hint mb?
}
2018-07-27 22:14:19 = Luke
{
How will you test if there are only 32 colors at once? Do you have any software or plan to write one? I'm just curious.
}
2018-07-28 00:38:58 = Deseteral
{
If we use some offscreen canvas as second buffer to render - does it have to be exactly 360x400 or could it be any other size as long as the canvas that's visible to the user is 360x400 and has width and height set to 100%?
}
2018-07-28 00:41:42 = Gynvael Coldwind
{
@Bobzy
There are a couple of ways to solve this. One is to just use bitmap fonts. Another is to render the fonts to another canvas, and then flatten the colors to N values (e.g. N=2). And then blit (copy) this to the main canvas.
There may be other ways to do it too.

@Luke
I'll probably write some software for this.
}
2018-07-28 00:45:30 = Gynvael Coldwind
{
@Deseteral
Only the main canvas' settings matter. Any hidden / not shown on the screen canvas can have any settings you like.
}
2018-07-28 02:42:36 = Bobzy
{
Oh well, gonna try to deal with it.

Got a last question tho: if i display 2 screens (entry one, smth like 'press spacebar to start', and ending one 'game over') do i have to 32 colors there? Couse technicly, its not a frame of a game. These are static 'go-in' & 'go-out' infos.

So will it count?

Thanks!
}
2018-07-28 09:43:30 = Gynvael Coldwind
{
@Bobzy
That's still part of the game from where I stand, therefore screens like that fall under the same rules as the rest of the game. Sorry ;)
}
2018-07-31 18:54:27 = lanz
{
@Gynvael
Is it safe to assume you (and other potential judges) aren't colorblind? =P

About the 32 colors, you specifically referenced the 24bit RGB values. Does this mean that if 2 pixels have the same RGB, but a different Alpha (ie transparency), they are still considered the same color?
}
2018-07-31 19:02:48 = Gynvael Coldwind
{
@lanz
For the sake of this competition please assume that the judges are not colorblind.

Not a bad idea with alpha channel, but sadly it cannot be used this time. To quote the FAQ from the post:

"""
Q: Can I add a CSS background-image/background-color/etc to the canvas?
A: No. As the rules say, all the graphics must be displayed on the canvas (therefore it must be fully opaque, i.e. cannot be transparent in any place).
"""

Please assume that my rule checker grabs the on-screen frame while the browser is in full screen mode (F11) and checks if there are at most 32 colors. Given that the alpha channel would have to already be applied at this stage (i.e. canvas would be merged with the background), my checker would complain about there being more colors on screen than 32 if the final frame has more than 32 colors.

So yes, I specifically look at 24bit RGB values *in the final on screen frame*.
}
2018-08-03 22:51:00 = Ehmeth
{
Judging question: is bad music better than no music?
}
2018-08-03 23:16:29 = Gynvael Coldwind
{
@Ehmeth
No music is better than music than really bad music.
Though what "bad music" means is another thing. I don't mind chiptunes / "8-bit music" / etc. I would mind music that totally doesn't match the spirit of the game - e.g. you're making a cyberpunk themed game and use Vivaldi's Four Seasons in classical piano midi samples or sth (though I guess there are ways to get it right...) ;)
}
2018-08-04 16:29:01 = oddwhocanfly
{
Hello,

Can the 8+3 naming scheme be relaxed a bit? In particular, it would be nice if *.html and *.wasm files could stay as such, just for the convinience sake (configuring local nginx, etc).
}
2018-08-04 23:10:20 = Gynvael Coldwind
{
@oddwhocanfly
I don't mind .html and .wasm being two exceptions for the naming scheme. I'll add it to the rules.
}
2018-08-05 05:01:57 = Another Newb
{
I don't fully understand what you mean by "the canvas must be stretched into full window size." Does the following template meet the specifications if the whole game was to fit inside the rectangular box shown below? https://codepen.io/anon/pen/OwwVaZ
}
2018-08-05 11:41:34 = Gynvael Coldwind
{
@Another Newb
It doesn't - the canvas there doesn't stretch into full window size.

I modified your example a little to comply with the rules:
https://gynvael.coldwind.pl/img/gsgc2018.html (ctrl+u to view source)

Here's a screenshot of how it should look like in full screen (F11), or how it will look like when I'm testing the game:
https://gynvael.coldwind.pl/img/gsgc2018_fullscreen.png

All graphics MUST be rendered on that canvas btw. There must be no other HTML element/etc that renders something on the screen. Everything must be drawn on the sole canvas.
}
2018-08-07 14:02:24 = ElectryZEDpl
{
I want to know if the game has to be fully shooter, I want to make game about trading/stealing/mining resources with battle sections where in the gathering phase you plan the actions you make during execution phase and in that phase you fight as ship in real time and try to shoot down enemy's transporter. So mainly it would be a turn-based game but with real time top view shooting battle scenes, Is this considered as Shooting game even if the shooting is not main genre?
}
2018-08-08 21:50:51 = Gynvael Coldwind
{
@ElectryZEDpl
That's fine. As long as there is some sensible real-time shooting in the game it's fine with me.
}
2018-08-08 22:54:49 = Luke
{
I've just sent my submission.
}
2018-08-09 00:19:31 = Gynvael Coldwind
{
@Luke
Yup, got it :)
}
2018-08-11 15:43:16 = PezeT
{
My game should be on your email.
GL to everyone! :)
}
2018-08-26 17:48:38 = Nathan
{
Can the player itself be the projectile in question rather than needing to be shot by the player?
}
2018-08-26 18:10:18 = Gynvael Coldwind
{
@Nathan
Sure.
}
2018-08-29 17:40:33 = Deseteral
{
The 8.3 filename format and 20 files + directories constraint only matters for the ready-to-test directory with the game, right?
Things like source code before minification, build scripts and node dependencies don't apply to these rules?
}
2018-08-29 20:19:54 = Deuterion
{
Sent my submission!
}
2018-08-29 20:53:04 = Gynvael Coldwind
{
@Deseteral
Yes, exactly.

@Deuterion
And I have received it :)
I'll follow up over e-mail.
}
2018-08-30 16:21:38 = Deseteral
{
My submission should be on your email! Thanks!
}
2018-08-30 19:51:27 = Skaipi
{
Just sent my submission
}
2018-08-31 21:43:34 = Tul
{
Sent you the submission, cheers.
}
2018-08-31 22:50:30 = MarcinzNS
{
I sent my submission! ;)
}
2018-08-31 22:50:37 = MarcinzNS
{
I sent my submission! ;)
}
2018-09-01 01:06:54 = JL
{
Submission sended :)
}
2018-09-01 01:51:32 = Gynvael Coldwind
{
@Deseteral, @Skaipi, @Tul, @MarcinzNS, @JL
I've received all your submissions. By now you should received an e-mail either confirming that all was OK during testing, or (in some cases) I've encountered some problems and you might want to submit a fix.
}
2018-09-01 12:49:00 = Tul
{
Sent you the updated package, cheers.
}
2018-09-01 13:35:04 = Gynvael Coldwind
{
@Tul
Received it and replied via e-mail :)
}
2018-09-01 16:49:48 = emis
{
I sent my submission!
}
2018-09-01 17:49:04 = Ekohachi
{
Finally sent my game.
}
2018-09-02 12:42:45 = Ekohachi
{
And i've resent it:)
}
2018-09-02 14:38:00 = Antonio Noack
{
I sent my entry :)
}
2018-09-02 16:43:51 = Vassildador
{
Don't worry Gynvael, I will deliver :)

I just hope I didn't miss any anti-alias edgecases, but I didn't encounter any anymore with my own color-counting functions (and verifying certain scenes in photoshop).
}
2018-09-02 16:57:46 = Another Newb
{
We can't use transparencies in png's?
}
2018-09-02 17:13:30 = Vassildador
{
@Another Newb

As far as I understand you can. The final canvas output should not contain any transparency, but as long as at render-time your transparent PNG pixels are drawn on top of already-colored pixels you should be fine. Just don't use a CSS background but fill the canvas with a color before drawing anything else.

Keep in mind that semi-transparent pixels drawn on top of a solid color result in an entirely new color.
}
2018-09-02 17:32:10 = Gynvael Coldwind
{
@emis
Yup, got it!

@Ekohachi
Hmm, what's the title of the game?

@Antonio Noack
Yup, got it, but please check your e-mail.

@Vassildador
If unsure, send it early - I'm trying to test the incoming games asap to let folks know if all is well. You can always send in the final version just before the deadline :)

@Another Newb
To basically echo what Vassildador said - you can use PNGs with transparency in general, just be sure that there are no transparent areas on the final canvas (or, to be more exact, that these areas don't spawn any unforeseen colors that would make it exceed the on-screen limit of 32 colors).

}
2018-09-02 17:52:27 = Vassildador
{
Ok, I just sent you the version without a proper victory screen :)
}
2018-09-02 19:21:57 = Ehmeth
{
Just sent my submission. Good luck everyone!
}
2018-09-02 20:34:24 = Gynvael Coldwind
{
@Vassildador
Looks good.

@Ehmeth
Looks good too :)
}
2018-09-02 20:50:57 = Innominatam
{
Sent my submission!
}
2018-09-02 21:11:02 = Peru
{
I've sent my submission
}
2018-09-02 22:28:31 = Lancewellspring
{
Sent in my submission!
}
2018-09-02 22:38:49 = MrDamus
{
Sent my subbmision.
Title is Space Shooter
}
2018-09-02 23:15:35 = Gynvael Coldwind
{
@Innominatam
@MrDamus
Please check your e-mail.

@Lancewellspring
Got it!

@Peru
Hmmm, what's the name of your game? I can't match the name to the game.
}
2018-09-02 23:18:36 = knicked
{
Finally sent my submission! Good luck everybody :)
}
2018-09-02 23:23:10 = Jacob Shin
{
I've sent my submission.
}
2018-09-02 23:45:16 = Voltinus
{
Submission sent
}
2018-09-02 23:51:09 = Vassildador
{
Final submission sent!

Good luck everyone :)
}
2018-09-03 00:01:09 = Timus
{
Package sent, just in time :)
}
2018-09-03 00:26:31 = Gynvael Coldwind
{
All the submissions seem to be accounted for (I've double checked in my e-mail forwarder logs to make sure of that). I'll publish the games asap. There were 22 submissions btw, some of them unfortunately had problems with anti-aliasing and were not fixed in time :(

@Vassildador
Check your e-mail plz.

}
2018-09-03 02:29:17 = Gynvael Coldwind
{
Games are now available for viewing/playing:
http://gsgc2018.gynvael.tv/index.html
}
2018-09-03 13:19:06 = blamedrop
{
What a compo! I've played through all games (spent way more time that I should!) and these are my favourites (I've played them most).

From least played to most:

3. Maze Craze by Lance Wellspring
Such a simple game but it got me. Got up to level ~17 which unfortunately seemed to me glitched - so I was unable to proceed.

2. Shutter Asylum by Mateusz Tomczyk
Probably most polished game out there with great graphics and mechanics. Fun to play.

1. Pyramummy by Vassildador
Oh man! This game totally got me. I'm afraid that I've spent almost an hour 'mastering' it. But it was totally satisfying! The visuals are cute and slick. Music and sounds are cool too.
But this game is hard. It's annoyingly hardcorish like old games used to be :D At first I got annoyed by controls - 'coarse' collisions detection... and timer! But that made me want to finish it. And after many tries I've managed to finish it (also "mastering it" - visiting all rooms with plenty of time left)!
Found some exploit and bugs as well ;) Some images/details, probably with "spoilers": https://imgur.com/a/mQ93Vnu
Overall great and fun game. Another plus is that it gives player freedom of choosing the way he wants to complete it thanks to unique mechanics. Chapeau bas!

Cheers!
}
2018-09-03 14:15:30 = Vassildador
{
@blamedrop

Thanks for the kind words :) I made all of the art myself, except for the victory screen, which my girlfriend drew (and we completely had to butcher to fit into the size limit). This was kind of a challenge I put upon myself to improve my art skills, as it's the first game I've really drew anything significant for.

The sound was done with asfxr and jsfxr for playback. Music was created in SoundBox by one of my friends. This is also something I challenged myself to include as it was completely missing in my submission for Gynvael's previous challenge last winter.

I agree it turned out to be a bit too hardcore for a game jam game, but honestly this project turned out a bit too ambitious for my own good. I barely had time to playtest it or show it to others before submitting. This obviously caused a couple of glitches to slip through along with some issues with collisions. I'm generally not good at developing anything related to physics and collisions and rely on engines to do the heavy lifting for me.

Dungemoji, my previous entry, was far more accessible and polished, gameplay-wise. This time around I spent more time on creating assets, creating a consistent and interesting "world" and.... Anti-aliasing issues. Really, working around anti-aliasing without butchering performance cost me a good 5-6 hours.

Thanks again! It's great to hear people are actually playing and enjoying my game. After work I'll also check out some other entries and post my personal top 3.
}
2018-09-03 14:41:12 = Ehmeth
{
After a few short plays my top three would be:
3. Shelter Rampage / Maze Craze.
Both have a nostalgic feel to me and quite nice polish.
2. POWER CORE.
Just for the sheer amount of stuff packed into the game. A full 3D shooter! OMG!
1. Shutter Asylum
Hands down the most polished feel, look and mechanics implementation. Plus I love when lighting is a part of the mechanics in games. Gotta work on that in the future.

In general, awesome compo! Gyn, I don't envy judging this one! ;-)
}
2018-09-03 15:04:57 = Gynvael Coldwind
{
@Ehmeth
Yeah, this is going to be a hard one...
}
2018-09-04 16:57:47 = Lance Wellspring
{
@blamedrop

I'm glad you liked it! The levels are all randomly generated, and theoretically there are infinite levels. I had tested well into the 30's of levels myself, but apparently last minute changes to get under the file size caused a small change to level 17 to make it unbeatable :(

If you happen to want to continue through the levels, I changed one line of code to basically make it skip level 17. I didn't change any of the logic for generating the levels. Feel free to try it on my personally hosted version:
https://lancewellspring.solutions/mazeCraze/
}
2018-09-04 23:10:36 = Vassildador
{
My personal top 3:


3. Shutter Asylum:
I made this third as it's very impressive on a technical level. I do think the game looks rather bland (greys on greys), but I suppose that was the price to be paid for implement lighting with a 32 colour limit. The blood splatters really impressed me though!
The general gameplay could've used a twist, it's a bit too by-the-numbers, which in combination with the lack of colours makes it a bit boring in my opinion.


2. POWER CORE:
Elegant design, smart usage of colours, and I really liked the nostalgic voice fragments. I'm curious how you did those (hoping it's speechSynthesis) so I'm eagerly awaiting the source code. Very fit for a game jam!


1. Maze Craze:
This hit me with nostalgia! Very stylish irregardless of the limited colour palette, I also really like how the textures move and how you implemented "text" :)

Nicely procedurally generated levels, it's always a great fit for a game jam. The only remark I have is the enemies occasionally getting the drop on me before I could even see them, but due to this game being way less hardcore than mine it's not too bad to restart a level :D

Good luck everyone, and good luck with deciding Gynvael. I'm really impressed by both the amount and the quality of the submissions. I'd definitely call it a great success :)
}
2018-09-05 05:35:44 = Lance Wellspring
{
@Gynvael

Could you please add "David Farrow (@undefx)" under makers of Maze Craze?
}
2018-09-07 00:14:48 = Vassildador
{
Here's a video walkthrough of my game in case anyone gets too stuck:

https://www.youtube.com/watch?v=vVi2z0XIXwQ

Obviously it's not the only way to beat it. Many rooms can be skipped! :D
}
2018-09-08 16:02:31 = Lance
{
@Vassildador

Nice! The combination of linking and moving blocks gives a ton of possibilities. Was there a block that couldn’t be linked or pushed? Or would that have made the game too hard? Lol
}
2018-09-08 16:14:27 = Vassildador
{
@Lance everything can be linked except for spikes, and those "filter" blocks that are destroyed by pushing any block into it (also destroying the pushed block).

Originally everything was pushable/linkable but it made it very hard to design any kind of puzzle that wasn't easily circumvented :D I then came up with "solid" blocks which turned out to be a very good fit for the linking mechanic.

Fun fact: the whole theme of pyramids/mummies came from staring at my kid's new IKEA mummy plush while I was attempting to come up with something :) it quickly turned into the protagonist, and using a pyramid nicely limited the scope of the game and gave a clear beginning and end point.
}

Add a comment:

Nick:
URL (optional):
Math captcha: 2 ∗ 6 + 9 =