Nerdy creations with numbers, words, sounds, and pixels

Art, Games

EmoToon

Everybody who is not a complete psychopath ๐Ÿ”ช or corpse ๐ŸงŸโ€โ™€๏ธ likes emojis or at least uses them to some extent ๐Ÿฅฐ. Emojis are pretty to look at ๐Ÿฆ‹, yet invisible ๐Ÿซฅ. I actually enjoy modern communication ๐Ÿ“ก; we use emoji reactions to show that we read a message ๐Ÿ‘, without the necessity of firing up ๐Ÿ”ฅ our internal word processor ๐Ÿง  to formulate an actual response ๐Ÿค”. There are several problems, though ๐Ÿšจ, such as how emojis are displayed differently on every device ๐Ÿ“ฒ and interpreted differently from person to person ๐Ÿคฆ๐Ÿปโ€โ™‚๏ธ. Or that many emojis are still missing ๐Ÿšซ, either completely (seahorse, microchip, water bottle) or just on specific systems ๐Ÿ“ต.

However โ˜๏ธ, these problems pale ๐Ÿ™€ in comparison โš–๏ธ with my biggest problem ๐Ÿ˜ : how randomly ๐ŸŽฒ they are assigned to their respective groups ๐Ÿ‘ฅ. For example, why are the cat faces (๐Ÿ˜บ๐Ÿ˜ธ๐Ÿ˜น๐Ÿ˜ป๐Ÿ˜ผ๐Ÿ˜ฝ๐Ÿ™€๐Ÿ˜ฟ๐Ÿ˜พ) under โ€œSmileys & Emotionโ€ but the monkey (๐Ÿต๐Ÿ™ˆ๐Ÿ™‰๐Ÿ™Š) and sun/moon faces (๐ŸŒž๐ŸŒ๐ŸŒ›๐ŸŒœ๐ŸŒš) under โ€œAnimals & Natureโ€? Why is there a combined super group that includes emotions (๐Ÿคฃ๐Ÿ˜๐Ÿ˜ค), gestures (๐Ÿค˜๐Ÿ™Œ๐Ÿ‘Œ), body parts (๐Ÿซ€๐Ÿ‘‚๐Ÿฆฟ), professions (๐Ÿ‘ฎ๐Ÿ’‚๐Ÿ•ต๏ธโ€โ™‚๏ธ), minorities (๐Ÿ‘ฌ๐Ÿป๐Ÿ‘จโ€๐Ÿฆผ๐Ÿงœโ€โ™€๏ธ), as well as clothes (๐Ÿงฅ๐Ÿ‘”๐ŸŽฉ), while another group is dedicated to just flags (๐Ÿ‡น๐Ÿ‡ฉ ๐Ÿ‡ง๐Ÿ‡ณ ๐Ÿ‡ช๐Ÿ‡ช)? Unfortunately โ˜น๏ธ, the search function ๐Ÿ” is usually worthless ๐Ÿ“‰ due to how I interpret certain emojis ๐Ÿ™‡ differently than the developers ๐Ÿ‘จโ€๐Ÿ’ป and designers ๐Ÿ‘ฉโ€๐Ÿ’ป.

  • Smileys & Emotion: ๐Ÿ˜€๐Ÿ˜‚๐Ÿ˜ญ๐Ÿ˜๐Ÿ˜ก
  • People & Body: ๐Ÿ‘๐Ÿ™๐Ÿ‘๐Ÿ™Œ๐Ÿค
  • Animals & Nature: ๐Ÿถ๐Ÿฑ๐ŸŒณ๐ŸŒธ๐Ÿฆ‹
  • Food & Drink: ๐ŸŽ๐Ÿž๐Ÿ•๐Ÿบ๐Ÿฐ
  • Activities: ๐ŸŽฎโšฝ๐ŸŽจ๐ŸŽต๐Ÿ†
  • Travel & Places: โœˆ๏ธ๐Ÿš—๐Ÿ ๐Ÿ—ฝ๐Ÿ”๏ธ
  • Objects: ๐Ÿ“ฑ๐Ÿ’ก๐Ÿ”‘โœ๏ธ๐Ÿ“ฆ
  • Symbols: โค๏ธโœจโ™ป๏ธโ˜ฎ๏ธโ™พ๏ธ
  • Flags: ๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡ฏ๐Ÿ‡ต ๐Ÿ‡ซ๐Ÿ‡ท ๐Ÿ‡ฉ๐Ÿ‡ช

Since I always wanted to create a game โšฝ with emojis, I decided to make one that lets you train ๐Ÿš… the emoji groups at least subconsciously ๐Ÿ˜ตโ€๐Ÿ’ซ. EmoToon is a tile-based arcade game ๐ŸŽฐ similar to Tetris ๐Ÿชจ, Connect Four ๐Ÿ–‡๏ธ, and Candy Crush ๐Ÿฌ (broad assumption since I never actually played the latter ๐Ÿ). It is coded entirely in PyGame ๐Ÿ so you will not become addicted ๐Ÿ’‰ as it only runs on Windows computers ๐Ÿ’ป (for now โฐ). Despite its casualness ๐Ÿ‘•, EmoToon does have some addictive elements ๐Ÿ’Š to it, such as starting a new grid ๐Ÿฃ and being greeted by all the lovely emoji tiles ๐Ÿ˜ป.

In a bombshell ๐ŸŒฐ, the game features a grid of 9-by-9 emoji tiles. You connect neighboring tiles of the same emoji group, and the longer the chain is ๐Ÿงถ, the higher the score you get ๐Ÿ“ˆ. The order within a chain does not matter, allowing you to backtrack ๐Ÿ”™ and even pass through dead cells receiving just a tiny score malus โž–. I even allowed diagonal โ†—๏ธ selection, which started as an accident ๐Ÿฆบ but became a core feature ๐Ÿ’Ž. No idea how other developers solve โš—๏ธ the problem, but I did it by using octagonal ๐Ÿ›‘ instead of square colliders ๐ŸŸฅ, essentially allowing for dead spaces around the tile corners ๐ŸŒฝ. The controls ๐ŸŽ›๏ธ are so simple I do not have to explain them: click the mouse ๐Ÿ–ฑ๏ธ, drag across all tiles you want to add to the chain ๐Ÿงฒ, and release ๐Ÿคฏ.

I quickly ๐Ÿƒ gathered that learning the nine different emoji groups by only looking ๐Ÿ”Ž at the emojis was too difficult ๐Ÿงฉ. Therefore, I deviated ๐Ÿ”€ from my original goal ๐Ÿฅ… to make it a learning game ๐Ÿ“š and instead color-coded the tile background ๐Ÿงฎ. That way, the game is played much faster ๐Ÿš€, but the emojis themselves become less relevant ๐ŸฆŸ. My sister Marlene ๐Ÿ’ƒ (aka NannoCloud ๐ŸŒฆ๏ธ) kindly helped with finding a harmonic ๐Ÿช— color palette and also contributed another great idea ๐Ÿ’ก for improvement, but more on that in a second โฑ๏ธ.

The color palette my sister suggested; come to think of it, I changed it a lot ๐Ÿคก

As an active iOS user, I am familiar with the Apple emojis to a degree ๐ŸŒก๏ธ where I find most other emojis kind of ugly ๐Ÿฆข (looking at you ๐Ÿ‘“, Facebook ๐Ÿ“˜). While the font Apple Color Emoji cannot be used on non-Apple devices, I quickly found a workaround by importing ๐Ÿ“ฆ the emojis as PNG images instead of a font file ๐Ÿ“. As the emoji tiles are small, the overhead ๐Ÿ‘‘ in terms of file size and loading times โŒš remains bearable. I quickly found a repository ๐Ÿ—„๏ธ of some 750 Apple emojis ๐ŸŽ as image files, which was incomplete ๐Ÿ˜ถ and a bit outdated ๐Ÿ“ผ but enough to keep me motivated throughout development ๐Ÿšตโ€โ™€๏ธ. Only after I realized that Apple does not permit free use ๐Ÿ’ฐ of their emojis for artistic projects ๐ŸŽธ, I started looking for alternatives โ†ฉ๏ธ. Trying to switch to an emoji font instead of image files once more ๐Ÿ“‚, I tested Noto Emoji by Google and Segoe UI Emoji by Microsoft โŒจ๏ธ. However, I was immediately hit by more technical, licensing, and aesthetic issues ๐Ÿชฒ.

Early version of EmoToon using copyrighted emojis by Apple ๐Ÿ

Hence, I stuck with the image-based approach ๐Ÿฉป and eventually stumbled upon OpenMoji ๐Ÿ“–, which features open-source versions of all modern ๐Ÿ™๏ธ emojis in different sizes, in color as well as black and white, and as vectorized or rasterized graphics ๐Ÿงบ. The first results looked awful ๐Ÿคฎ, but my sister suggested re-colorizing the emojis using the palette of nine colors ๐ŸŽจ we already developed. The rest is history ๐Ÿ›๏ธ: I quickly wrote a script ๐Ÿ“ that replaced all individual colors ๐Ÿ’ต with the nearest one ๐Ÿ’ถ of the proven nine, giving EmoToon a look both pleasant ๐Ÿ˜Š and original ๐Ÿ˜ฎ. Since emojis are identified by unique hex codes ๐Ÿง™โ€โ™€๏ธ, e.g. โ€œ1F6ACโ€ for โ€œsmoking symbolโ€ (๐Ÿšฌ) or, to showcase joined emojis, โ€œ1F64D-200D-2640-FE0Fโ€ for โ€œwoman frowningโ€ (๐Ÿ™โ€โ™€๏ธ), I could use this document to automatically ๐Ÿค– look up the respective emoji groups for each emoji image ๐Ÿ–ผ๏ธ. The resulting dataset ๐Ÿ“Š contains 3,830 emojis in total and can easily be expanded ๐Ÿก as new emojis are being developed ๐Ÿ‘จโ€๐Ÿ”ฌ.

Another decision I had to face early on was whether I wanted the emoji tiles to be affected by gravity ๐ŸŒ, similar to Tetris, or not. While non-gravity ๐Ÿ›ฐ๏ธ leads to empty tiles, which allows for some interesting chaining strategies, gravity ๐Ÿช‚ feels more exciting, also enabling you to quickly remove useless tiles ๐Ÿšฎ and cluster the remaining tiles to create extremely long chains ๐Ÿฆฉ. Consequently, I implemented ๐Ÿ‘จโ€๐ŸŒพ both modes and let the game switch back and forth ๐Ÿ”„. Initially, one phase is 40 seconds long ๐ŸŒ, but becomes one second shorter each round, down to a minimum of 5 seconds ๐Ÿ†, which should install a sense of urgency ๐Ÿ‡ in the player. As a sort of non-numeric timer โณ, a thin line moves around the grid, flashing to indicate imminent phase toggle ๐Ÿ“ธ. The feeling of urgency is further exacerbated by the fact that the bottom row falls ๐Ÿ‚ through the floor at the end of each gravity phase, possibly removing tiles that are valuable ๐Ÿ† to the player.

Gravity phase: emoji tiles fall down and the bottom row disappears at the end; good for grouping emojis ๐Ÿ—‚๏ธ

To distinguish the two phases at a glance ๐Ÿ‘€, I made the empty (or dead) tiles dark ๐Ÿ”ณ during gravity phase and bright ๐Ÿ”ฒ while gravity is disabled. Purely for aesthetic reasons and to instill a sense of mysticism ๐Ÿชฌ in the player, dead cells are also filled with letters ๐Ÿ“ง from my own cipher font Caidoz ๐Ÿ•ต๏ธ, which I somehow manage to sneak ๐Ÿฅท into all of my game projects ๐ŸŽณ.

Non-gravity phase: emoji tiles stay in place; bridging dead cells enables longer chains ๐ŸŒ‰

To spawn new ๐Ÿ†• cells, I used a simple yet highly effective method ๐ŸŽ“: whenever a chain is released and cells are destroyed ๐Ÿงจ, all of the 9 columns are checked โ˜‘๏ธ individually. With K being the number of alive cells in a column, the chance for a new cell to spawn is random(0,1) > K/9, meaning 0% if the column is full (K=9) ๐Ÿ”‹ and 100% when entirely empty (K=0) ๐Ÿชซ. This keeps the total number of live cells balanced around a half-filled grid ๐ŸŒ—, which the player can change by destroying ๐Ÿ’ฃ either few or many cells during each chain release. In case you wondered, individual emojis can never appear twice ๐Ÿ‘ฏ on the same grid.

After I had the core loop โžฐ up and running, I wanted to spice ๐ŸŒถ๏ธ things up by enabling the player to save ๐Ÿ’พ points for special events ๐Ÿ“…. These are accessible by a button ๐Ÿ•น๏ธ but limited to one use per round. While the individual events are determined uniform-randomly ๐Ÿฅผ, they have different costs ๐Ÿ’ธ to account for their respective usefulness ๐Ÿ“ถ:

  • ๐Ÿ“— New (1 ๐Ÿช™): start a fresh board with a new selection of 81 emojis
  • ๐ŸŽฒ Shuffle (2 ๐Ÿช™): randomly rearrange all alive and dead cells across the grid
  • ๐ŸŒŠ Swap (4 ๐Ÿช™): randomly rearrange only alive cells
  • ๐Ÿ“ฅ Add (8 ๐Ÿช™): insert up to 9 new tiles into random dead cells
  • โณ Fill (16 ๐Ÿช™): fill all dead cells with new alive tiles
  • โ™ป๏ธ Revive (32 ๐Ÿช™): flip all previously dead cells back to alive
  • ๐ŸŒ‹ Panem (64 ๐Ÿช™): keep 2 random groups and destroy the rest
  • ๐ŸŽ‡ Eliminate (128 ๐Ÿช™): destroy tiles from the 4 least-populated groups
  • ๐ŸŒ„ Stock (256 ๐Ÿช™): convert tiles of the 4 least-populated groups into the 4 most-populated groups
  • ๐ŸŒŒ Sort (512 ๐Ÿช™): reorder cells by their group

Furthermore, what would a video game be without a compelling soundtrack ๐Ÿ”Š? As usual, my talented friend Lars-Ole Kremer provided one that fits the sci-fi theme well ๐Ÿ‘ฝ. Some of the beta testers already complained that the core loop gets repetitive soon, calling for longer audio tracks ๐Ÿฆ’. Personally, I am leaning toward a more dynamic soundtrack that lets the player further distinguish gravity from non-gravity phase. Nonetheless, Ole did this one for free ๐Ÿ†“, and I do not want to abuse his kindness ๐Ÿ™๐Ÿผ. He even made eight different release sounds ๐ŸŽถ, each one more satisfying ๐Ÿคค than the next to account for different chain lengths. The release sounds are divided into two groups 2๏ธโƒฃ: unobtrusive sounds ๐Ÿ”‡ for chains of up to five tiles ๐Ÿ and exhilarating sounds ๐ŸŽบ for longer chains ๐Ÿ˜. Upon releasing a chain ๐Ÿ“ค, a sound is then picked randomly ๐Ÿ’ from the respective group, allowing for some variety ๐Ÿณ๏ธโ€โšง๏ธ (as opposed to associating one sound with one specific chain length, which becomes repetitive fast ๐Ÿ”‚).

While the game is quite playable in its current โšก form, it still lacks a sophisticated high score system that forces players to combat ๐Ÿช– each other, aiming ๐ŸŽฏ for higher and higher scores. As of right now, the game features a session score as well as an overall level that is saved for future sessions ๐Ÿ”ฎ. Not a scientifically proven model ๐Ÿ”ฌ, but the score is calculated ๐Ÿ’ป as 2 to the power of N, with N being the length of a chain of selected tiles that share the same emoji group. In other words, the score is doubled with every additional tile โž•, thereby growing exponentially ๐Ÿงซ. Selecting tiles of different groups interrupts the chain, whereas adding dead cells ๐Ÿ’€ to the chain only decreases the score slightly (-1 for one dead cell, -2 for a second dead cell, etc. โ™พ๏ธ). Since exponential growth is much stronger ๐Ÿฆพ, selecting dead cells to form the longest chains possible ๐Ÿฆ• is always advisable โ›“๏ธ.

On a side note ๐Ÿ“: while I did not implement a global scoreboard yet, I managed to hash and save the score using SHA-256 ๐Ÿค“. This makes it a bit more difficult to temper with the local files keeping track of your score ๐Ÿงฑ. Cheating is still far from impossible, so do what you must โ›“๏ธโ€๐Ÿ’ฅ. My games shall not punish cheaters but encourage them ๐Ÿ‘น.

Eventually, I developed my own strategy to quickly raise the score to display-breaking widths ๐Ÿ–ฅ๏ธ. But who knows, maybe you will come up with an even better playing style because EmoToon permits many different ones ๐Ÿ’. Of course, the game contains many details and tiny animations I could not mention in this post ๐Ÿฅฑ. You can find out about all of them by playing โฏ๏ธ the game prototype, which I published on itch.io ๐Ÿฆ .

Admittedly, a gameplay video ๐ŸŽฅ would help to bring the game across โ˜ฆ๏ธ. But as of 2025 ๐Ÿ—“๏ธ, I do not know how (or am too lazy ๐Ÿฆฅ / uncommitted ๐ŸŽˆ) to make one ๐Ÿ”•. Can you imagine that I originally intended to write this post ๐Ÿ“ฅ without emojis ๐Ÿ˜‚? Cheers ๐Ÿป.

โ† Return to โ€œGraphicalโ€

โ† Return to โ€œGamesโ€

1 Comment

  1. Nanno

    i ๐Ÿง๐Ÿผโ€โ™€๏ธliked โค๏ธ this ๐Ÿ‘‰๐Ÿผ piece ๐Ÿง€ of ๐Ÿ“ต writing ๐Ÿ“ very โ—๏ธmuch ๐Ÿฅ‡

Leave a Reply