2017-12-10:
Gynvael's Winter GameDev Challenge 2017
Winter is upon us (well, at least where I live) and that seems to be a clear signal to make another gamedev challenge - a game programming competition where the rules are made up (by me) and the constraints put in place are pretty challenging. And there are rewards too!
Without further ado, welcome to the GWGC2017!
Constraints:
Create a game that meets the following requirements:
• Is a turn-based tactical game (like Jagged Alliance, the tactical part of X-COM, etc - see also this list on Wikipedia and this article for inspiration).
• Is made in client-side web technology that runs by default on the newest stable Chrome on Windows 10 (yes, that means HTML/CSS, JavaScript and/or WebAssembly).
• The whole game fits into one .html file that is at most 20 KB (20480 bytes) (everything, including all art, fonts, etc).
• The text in game, if any, must be in English.
• The game cannot be created using any "game maker" software or use a dedicated game engine (like RPG Maker, Unity, Unreal Engine, etc). Basic libraries like jQuery are fine (if, you can squeeze it inside the 20KB limit that is). If in doubt, ask in the comment section.
Contest related rules:
• Submission deadline is 7th of January 2018 at 11:59pm (23:59) CET (i.e. GMT+1).
• Games must be submitted by sending a link to a downloadable package (hosted e.g. on Google Drive or something similar) to the following e-mail address: gynvael+winter2017@coldwind.pl (please also add a comment under this post that you 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 .html file). 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 its 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.
• Gynvael's Livestream crew cannot participate in the "Best Game Award" contest (but can submit games to be showcased and chosen for the "Community Choice Award" part).
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 winner's request for a giftcard at a different internet store, but this will be considered at a per-case basis.
Best Game Award:
Top 1: 150 USD (or equivalent in different currency)
Top 2: 100 USD (or equivalent...)
Top 3: 50 USD (or equivalent...)
Community Choice Award:
Top 1: 100 USD (or equivalent...)
Top 2: 50 USD (or equivalent...)
Top 3: 25 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, etc).
• I will totally ignore source code quality - please focus on the gameplay/etc. If the game crashes, but is mostly playable, 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) they will follow the same guidelines.
Community Choice Award:
• Details are yet to be decided, but there will be some kind of a poll for the community to vote. Some kind of an account on some kind of a popular service might be required to vote too.
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 (be sure to double-check the licenses).
• Browse through the FAQ section below - there are some additional hints / explanations there.
FAQ:
Q: JavaScript? In Chrome? Seriously?!
A: Yes. Think of it as a challenge!
Q: But I don't know JS...
A: Isn't this a great opportunity to learn then?
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 one file will be served (the sole game file).
Q: What will be the name of the file?
A: It's going to be index.html and it will be served with the following Content-Type: text/html; charset=utf-8.
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 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 be a standalone .html file which will be loaded via a web server that only serves this one file.
Q: Are Flash / Java Applets enabled?
A: No.
Q: 20 KB? 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: Late January. 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: 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)
EDIT: Added 2017-12-11 11:19PM CET
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 tested newest 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: If it still works with Content-Type as specified in FAQ, then it should be fine. That said, please contact me first so I can double-check this.
EDIT: Added 2017-12-12 1:35AM CET
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. The web server will only ever allow downloading of the index.html file (i.e. the submitted game).
End of edits.
See also the comment section for possibly more questions and answers. Feel free to also ask there if you have any questions.
Final words
Feel free to let your friends know about this competition - the more, the merrier.
Have fun, good luck!
Comments:
Just to be sure, it's 20kb minified or minified + gzipped?
If gzip is forbidden, is PNG bootstrapping allowed?
Also, why do you say jQuery is fine? jQuery is > 20kb, and it's not allowed to use external data... so where's the truth?
Thanks!
Haha yeah, I guess that's a side effect ;) Though you can always ask a friend to test if for you!
@xem
The final .html is supposed to be 20KB, and it will be send as Content-Type: text/html;charset=utf-8 without any Content-Encoding set (i.e. that header will not be present there).
PNG bootstrapping is allowed if it meets all the mentioned constraints.
As for jQuery - I've changed that part to:
"Basic libraries like jQuery are fine (if, you can squeeze it inside the 20KB limit that is)."
I.e. jQuery counts towards the limit of course.
(źle sprecyzowane poprzednie pytanie, my bad)
I think this FAQ entry addresses your question :)
Q: Can I create a game with my friend(s)/team/etc?
A: Yes!
(Czyli: nie, nie musi to być jedna osoba; można spokojnie tworzyć w kilka osób)
There is no team-size limit.
Q2: Is the .au region of Amazon (amazon.com.au) too much of a stretch?
The 20KB limit is absolutely brutal. Just with an A* library (with stuff I don't need chopped out of it) and a simple physics spring for the UI animations, I'm already up to 12KB minified. No idea how I can fit a game into the remaining 8K.
Q1: Sure! :)
Q2: Works for me - best of luck!
@Francisco
Please look at my answer to xem a few comments above :)
@wlwl2
Good luck!
@drek
Oh, 20KB is only brutal at the first glance (*cough* http://gynvael.coldwind.pl/?id=612 - 512 byte limit, though not JS *cough*) :)
Anyway, I won't take away your pleasure of discovering how to approach this kind of a competition, but feel free to read the other comments in this topic - there might be some ideas here :)
Good luck!
Can it be a turn-by-turn race for example (if the race requires tactics to win) ?
Do I understand correctly that any libraries with an appropriate license we manage to fit into 20 kB index.html would be OK?
It doesn't have to be a war/fight game, but still a 'turn-based tactical game' has to be a fitting description for it.
If you can get a turn-by-turn race to fit into that definition, then it's fine with me ;)
@Luke
Yes, with one note:
- An exception (which is disallowed) are off-the-shelf (or prepared before the competition) game engines.
>> Be sure to remember about the game having some sound effects.
I'm not sure I'm fully understanding this. Is it even possible to embed audio file directly in HTML file (not using audio tag with src/path to some external file)?
You can use data URIs without same-origin restrictions (this limitation is implemented only in Chrome at this moment), so yeah, it's possible.
I'm sure it's hidden point of question:
>Q: Will the Same Origin Policy be disabled?
>A: No, it will be enabled.
Hmm, doesn't type="module" work by default in newest Chrome? I did some testing/researching and it seems it does (at least on Chrome 62).
That said, please keep in mind the 'one .html file' rule.
@Luke
Your description is pretty much spot on.
Chess is pretty close to a turn-based tactical (or TTB) game. In most TTBs you can give orders to all units/characters/pawns/whatever-you-want-to-call-it in a turn, and not only one select one (for the sake of this competition I'm fine with both approaches). Also in most TTBs "attack" doesn't necessarily mean "move" (as in chess), though it might for e.g. melee units.
One idea is to look on some TTB gameplays on youtube/twitch for a few minutes - a video of gameplay is worth a thousand words ;)
@nonick
Yes, it is possible, and I'm pretty sure there are several ways to do it :)
I guess /nie interere bo kici kici/ gave you already one idea.
You can also generate sound using windows.AudioContext.
@adbhafaeh
It doesn't. A readme.txt or sth is fine too - it won't count towards the limit (inb4: no, the web server will not allow a game to download this file ;).
1. wszystkie assety muszą być zaembeddowane w plik html? czyli nie ma opcji, że np. mam plik html z załadowaniem assetów i kodu ze skompresowanej paczki obok pliku html i dekompresją w locie? w sensie, taka paczka musi znaleźć się w pliku html?
2. Mam ja zrobiony przez siebie silnik opensource do prototypowania gier w JSie i myślę, że spokojnie dałbym radę zmieścić go wraz z kodem gry i assetami w 20kb, a nie jest to żaden gamemaker, tylko własnoręcznie wykonany w pełni kod, to oznacza że zalicza się nadal do użycia?
1. Yup, wszystko w jednym pliku.
2. Zależy co Twój silnik umie; jeśli podeślesz linka, ew. listę ficzerów, to mogę rzucić okiem i coś więcej powiedzieć.
2. https://github.com/PsichiX/Oxygen
generalnie jest to ECS dla gier 2D, a wiec ficzery to renderowanie sprajtow i drzewo sceny. a na pewno tyle ograniczonej funkcjonalnosci z niego wytne, by moc pozbyc sie zbednych dodatkow, ktorych nie bede potrzebowal i miec wiecej miejsca na sama gre :D
Ad Oxygen
Trochę za dużo wysokopoziomowych rzeczy tam jest, żeby uznać to za podstawową bibliotekę do I/O / operacji na DOM. Więc plz pomiń użycie tego liba w tym konkursie.
Brzmi akceptowalnie.
Specifically, I'm looking at Svelte. I figured it would be okay because you were allowing JQuery, but just want to make sure before I proceed.
Svelte sounds OK. Please keep in mind that every library you use still needs to be bundled inside the sole .html file (one file rule) and does count towards the 20 KB limit (more libraries == less space for actual game).
@xem
Yes, that's OK.
I'd like to be able to use native emoji such as: http://www.fileformat.info/info/unicode/char/1f52b/index.htm
Thanks!
So I did the test with standard html fonts (serif, sans-serif, monospace), and all displayed a revolver correctly (though not a pistol, a revolver). So it should be fine.
@Luke
If something big changes that effects the game I might check it in an older version too, so don't worry about it.
Yes, you can assume I have the latest build of Windows 10 on a test machine.
That's unfortunate :(
I'm confident there will be other similar competitions (announced either on my blog or my livestreams), though I can't promise JS - I tend to rotate between technologies/constrain ideas (that said, usually I don't restrict the language either, so JS might work too - that was the case for the Summer GameDev Challenge).
But still, I wanted to say thank you for sponsoring this and inspiring me to work so hard at it. I'm still going to finish the game in the next couple weeks -- actually it's a relief to not have that file size constraint! But anyway I learned a lot from this experience and I hope to participate in (and finish) your next contest.
If any of the participants want to feel a smug sense of superiority, they can check out my awful game on Google Drive:
https://drive.google.com/file/d/1zXXWwCIPb-xUle5rTedBY_8Z3x9EE44X/view
You can die laughing at how terrible my code looks by viewing it at GitHub:
https://github.com/drekmonger/Against-the-Endless-Enemy
GG to everyone! (Also, I hope other peoples post links to their stuff. Just think, it can't be worse than mine!)
Happy you've learnt something, even though you didn't manage to squeeze it to the required 20 KB. Best of luck with finishing the game! :)
@Cody
@Codeboy
@Drek
I've confirmed receiving via e-mail.
@Steve
I've replied to you too; please check your e-mail.
Due to real life interfering I only had about a week to work on mine, so my hopes aren't too high. I'll probably submit around 11 and provide a link here as well :)
When real life gets in the way of hobbies...
Unfortunately at this state I can't submit it, if I had another 2-3 sleepless nights...
19.8KB including bugs.
Could have sank many more hours in it, but the last weeks were not the chillest... an attempt was made :)
Thank you for the competition. I'm excited!
If anyone is interested, you can find my submission at https://benn0.be/gwgc2017 - the sourcecode will go to github soon(tm).
I made this in about 8 days, from scratch. The general idea was to make an abstraction of tactical movement without losing the possibility to "corner" the opponent or be cornered yourself.
As for the size limitation, 4 days in I already hit the limit (using uglifyjs, I never heard of jscrush before). My game wasn't even half done.
I happened to have the crazy idea to automatically gzip & base64 my entire codebase, then write the string to a different HTML file. The second HTML file contains a tiny inflation library which I hacked to work with gzip and in the browser instead of only in nodejs (https://github.com/devongovett/tiny-inflate). It also contains a script to inflate and decode the gzipped string again, and write the result to document. This deflated my 36KB codebase to just 19KB, including tiny-inflate and the bootstrap script. The actual codebase is compressed to just 14.9K! I'm pretty proud about that part, but it cost me about a day to figure out :)
For visuals I relied entirely on emoji, some html and some css, not a single image. Unfortunately this limited what kind of monsters/players/animations I could use, but it was generally a very fun exercise to work around the constraints emojis imply. Even the grey, tiled, repeating background is an emoji, drawn to a canvas, exported as data url and used as a repeating background image.
Time constraint caused:
- The AI to be rather dumb
- The level count to be quite low. Though the last is a repeating, random level to make up for it.
- Some extra mechanics to be dropped (objects blocking certain cells, variations of enemies and characters, bosses, reinforcements, larger, multi-battle levels)
- A LOT of technical shortcuts. I'm not willing to expand upon this thing due to the amount of horrible workarounds.
- The game to be not very well balanced.
Size constraints caused:
- Me to be very creative with compression
- No music, very little sound. It surprised me how large very short sound files are. Web Audio API was too time-intensive to learn.
- Some weird visuals due to the lack of specific emoji (for example there's a bow-and-arrow, but no separate arrow, there is a mage, an elf, but nothing knight-like, ...)
All in all I really enjoyed this game dev challenge and am looking forward to the next one. Hopefully I'll be equally lucky next time with my vacations lining up with the event!
Pretty neat game idea, nice scan line effect, generally looks good, and you managed to squeeze in audio files.
The one note I have is that not all of the newer emojis have been implemented in common fonts. Whatever font my browser is displaying your game with is lacking about 50% of your glyphs. (that's actually why I decided early on to work with SVG paths for my glyphs.)
Good work in general though. Thanks for sharing!
@Arrow
Yeah, I feel you :( Another time then!
@pppp29pp
Confirmed via e-mail.
@Arathon
I'm having problems correlating your nickname with the exact e-mail. If I didn't reply to you yet, please let me know.
@monMon
I've replied via e-mail.
@Fanna
Confirmed via e-mail.
I'm doing manual moderation of *most* comments btw, that's why your comment didn't show up immediately. Sorry for the inconvenience.
@kolodziej.michael
Confirmed via e-mail.
@Vassildador
Confirmed via e-mail.
About those Emoji, that's pretty much a known issue" and I expected it to happen, but as the test-machines were confirmed to have this update I just went with it.
Unfortunately Microsoft only recently added a TON of glyphs in their latest fall creator's update. Before said update their emoji implementation was rather lacking.
You can actually just install the newer font and it'll look fine on other OSes too, but I obviously can't distribute it myself... I developed mostly on macOS after installing the font :)
Add a comment: