TUXDB - LINUX GAMING AGGREGATE
made by: NuSuey
NEWSFEED
GAMES
▪️CROWDFUNDING▪️COMMUNITY DEALS▪️STEAM DECK▪️CALENDAR
tuxdb.com logo
Support tuxDB on Patreon
Currently supported by 11 awesome people!

🌟 Special thanks to our amazing supporters:


✨ $10 Tier: [Geeks Love Detail]
🌈 $5 Tier: [Benedikt][David Martínez Martí]

Any feedback for tuxDB? Join us!

Steam ImageSteam ImageSteam ImageSteam ImageSteam ImageSteam Image
The Colorful Creature
Infiland Developer
Infiland Publisher
September 2021 Release
Game News Posts: 148
🎹🖱️Keyboard + Mouse
🕹️ Partial Controller Support
Positive (31 reviews)
Public Linux Depots:
  • TCC Linux [80.38 M]
Bad Apple !! in The Colorful Creature

This has been made by devcey, this is his blog on this project that he did for this game, which is incredible, I had to share it! You can check out the blog on infi.land here. [previewyoutube=R-6Z2PfNzdQ;full][/previewyoutube]

How I made 'Bad Apple !! in The Colorful Creature'


By devcey


Greetings! If you're reading this blog post, you've most likely seen my video on YouTube where I have recreated the entirety of the music video of Alstroemeria Records' 'Bad Apple !!' (feat. nomico) inside the Level editor of Infiland's game 'The Colorful Creature'. If not, then feel welcome to do so right here! With this little blog post I want to explain how I got to the idea of actually doing this and describe all the individual steps of this project. I hope you'll enjoy reading along! [hr][/hr]

How did I get this idea?


Sometime around late January/early February I had the itch to challenge myself with a little coding project that felt doable. I would still consider myself a fairly novice coder/programmer despite already slightly engaging in those fields for a couple of years by now. I stumbled upon the thought of implementing Bad Apple !! anywhere and upon expanding on this thought, I had decided to notify Infiland that I was going to start working on this. By promising him that I clearly wanted to make sure that I would actually get this done as one of my biggest problems with projects like these is that I don't complete them many times (slight foreshadowing of what is going to happen).
[hr][/hr]

Procedure


My rough idea was the following: I would use the Level editor as it can be used to display a level the size of 32x22 blocks. Since the background is black, black pixels can be displayed with no block, white pixels with white blocks. As simple as that. With a python script I would somehow generate a valid level file that can be loaded in the level editor, one for each frame of the video. Then I would load each level after level and speed up a recording of this process. [hr][/hr]

Preparing the frames


I started out with extracting all 6473 frames from an .mp4 file with the music video that I had already downloaded sometime ago. For this I used ffmpeg and ran this simple command: ffmpeg -i .\badapple.mp4 frames\frame-%04d.jpg This essentially extracts each frame and saves it as a .jpg file in a seperate dictionary called 'frames'. Every frame is appended by a 4 digit number of it's index. E.g.: 0001, 0002, ... 0727, 0728, ... 6472, 6473. Next up those frames had to be converted to sharp images that fit on the TCC level editor (32x22px in size), like this:
I had modified each frame using ImageMagick. This process took a lot of trial and error, but these following commands generated what I needed: magick.exe mogrify -resize 32x22 *.jpg //Used to simply downscale each image. magick.exe mogrify -colors 2 -colorspace gray -normalize -format png *.jpg //Used to apply a constrast of 2 grayspace colors, in order to eliminate any gray pixels With this completed, the frames have been prepared. [hr][/hr]

Converting frames into readable TCC levels


Ok slight warning, this may become a little technical. The next step was to create a script that would read those frames and create a file resembling the TCC level format. For this, the algorithm would have to read each pixel and based on its color and position, place a white block or leave it empty. For this we need to understand the TCC level format a little: LevelEditor.sav: {"ROOT":[ {"x":448,"obj":"o_whiteblock","y":192}, {"x":448,"obj":"o_whiteblock","y":224}, {"x":480,"obj":"o_whiteblock","y":192}, {"x":480,"obj":"o_whiteblock","y":224} ]}
Judging by this file (frame-5874) it becomes very clear that the LevelEditor.sav file is just one big .json file listing each block using their x- and y-coordinates and the type of object it resembles. Because of this, we just need to write the basic structure into a .json file using our algorithm. And this is exactly what I did: import os from PIL import Image frameDirectory = "frames" jsonDirectory = "json" for file in os.listdir(frameDirectory): jsonFile = open(f"{jsonDirectory}\{file}.json", "w") #create the json and start writing. jsonFile.write('{"ROOT":[') #append to the file frame = Image.open(f"{frameDirectory}\{file}") #instantiate as image for x in range(29): //max width. even though its at 32x22, this was set to 29 to keep the aspect ratio! for y in range(22): //max height pix = frame.load() if pix[x,y] >= 100: x_coord_int = x*32 y_coord_int = 64+y*32 x_coord = str(x_coord_int) y_coord = str(y_coord_int) #{"x":x-coord,"obj":"o_whiteblock","y":y-coord}, jsonFile.write('{"x":') jsonFile.write(x_coord) jsonFile.write(',"obj":"o_whiteblock","y":') jsonFile.write(y_coord) jsonFile.write('},') #print('{"x":', x_coord, ',"obj":"o_whiteblock","y":', y_coord, '},') jsonFile.seek(jsonFile.tell() - 1, os.SEEK_SET) jsonFile.write('') # Intentionally empty to remove last comma if needed before closing bracket jsonFile.write("]}") jsonFile.close() #finish writing. It's not the cleanest code but what this file essentially does is to loop through every image in my frames folder, create a valid LevelEditor.sav for it until there are no frames left to process. For reading the image, I imported PIL from the Image library. It checks through each pixel using an if-statement which checks for the brightness of the respective pixel. If it is bright enough, an object is added. There is one bug in this script - if one frame is completely dark (as in, there are no white pixels) then it creates an invalid file. This is because an object is always created with a comma in the end, however this comma must be removed for the last object. So I made the script always remove the last symbol before closing the list of objects. This causes a syntax error and requires a manual fix. - Why didn't I add another if-statement regarding the type of symbol the last symbol is? I don't know, I was just lazy, haha. [hr][/hr]

Looping through all level files


What was essentially left was to load all the level files we just created into The Colorful Creature. At first I would have believed I'd have to create a sort of cursor macro which clicks on the load button and selects the correct level, which would have constantly made the screen darken and light up again. Fortunately, Infiland stepped in and updated The Colorful Creature JUST for my sake. By adding the CTRL+L shortcut, you can now reload your currently loaded level instantly. This means that essentially we only need our reload macro to press CTRL+L and we're good. So I created load_levels.py: import pyautogui #used to mouse click import shutil import os import time levelDirectory = "json" tccLevel = r"C:\Users\devcey\AppData\Roaming\The_Colorful_Creature\LevelEditor Files\Badapple\LevelEditor.sav" pyautogui.keyDown("ctrl") for file in os.listdir(levelDirectory): start = time.time() shutil.copy(f"{levelDirectory}\{file}", tccLevel) end = time.time() elapse = end - start time.sleep(0.3 - elapse) # Ensure consistent timing, original value was 0.03, might need adjustment pyautogui.typewrite("l") #pyautogui.click(955,265) pyautogui.keyUp("ctrl") What this does is to essentially loop through every LevelEditor.sav we've created, copy it into the TCC level directory while keeping its name "LevelEditor.sav". While it constantly holds CTRL, it presses L after each paste. In order to keep it constant, a sort of timer is applied which makes sure the same amount of time passes between two levels, as copying and pasting a level that is 110 bytes small needs less time than one that is 15 kilobytes large. So all we need to do is to run this file, focus the TCC window and let it do it's job, all while recording our screen. Then we need to edit the recording by speeding it up to match the original video. Except, the game would constantly crash. I've not been able to figure out the issue so what I did is to just redo the level loading process but with starting at a later frame that I've already loaded before. So by mixing together multiple recordings and speeding them up, we receive the end result. Please do not look at the clock in my recording :) [hr][/hr]

Conclusion


So there we have it. The music video of Bad Apple !! inside the video game The Colorful Creature. It's not like this project is intended to save the world, but hopefully someone had a good chuckle about it. I surely did! Goodbye and I'll see you when we get Bad Apple !! in Asteroids++!


[ 2025-05-07 22:00:42 CET ] [ Original post ]

A difficult platformer with the main mechanic of changing color in order to stand on specific colored blocks to progress. In order to change color, you must pick special items that turn you into a specific color.

Play over 200 levels with unique items with diverse gameplay that have various items, blocks and hazards, one of the items change gravity and player speed, give you an ability to jump higher, teleport from one place to the other and etc!

LEVEL EDITOR:

The Level Editor let's you build levels and it has 102 placeable blocks and items (including backgrounds and liquids). Other main features in the level editor are saving/loading multiple levels, enabling fog, changing music, applying narrator text, and play/build mode. There are litetally millions of different level combinations and hours of fun!

LOCAL MULTIPLAYER:

Local Multiplayer can be played with 2, 3 or 4 players. All of the players can customize their look with unlocked skins and hats, and can change controls with 4 presets. Local Multiplayer currently offers two gamemodes, Survival and Race, but we plan adding more, all gamemodes are compatible with all players.

ENDLESS RUN

If you want to play through the endless queue of hand-crafted levels, try this gamemode! Three gamemodes are available for Endless Run, those gamemodes are Normal, Old School and Custom Endless Run.

CUSTOMIZABLE SKINS & HATS

You can customize your character with skins and hats. Skins are obtained by doing various tasks and most hats are obtained at the hat merchant shop!

AND WAY MORE!

This game has a lot more features than that! We are hoping to add more and you to enjoy our game!

MINIMAL SETUP
  • OS: Ubuntu 11.04
  • Processor: AMD E2-9000e RadeonMemory: 1 GB RAM
  • Memory: 1 GB RAM
  • Graphics: NVIDIA GeForce GTX 560
  • Storage: 100 MB available space
RECOMMENDED SETUP
  • OS: Ubuntu 14
  • Processor: Intel Core i5-6500 ProcessorMemory: 4 GB RAM
  • Memory: 4 GB RAM
  • Graphics: NVIDIA GeForce GTX 560
  • Storage: 100 MB available space

GAMEBILLET

[ 6021 ]

16.57$ (17%)
24.79$ (17%)
5.87$ (16%)
25.19$ (16%)
5.03$ (16%)
4.95$ (17%)
17.75$ (11%)
17.59$ (12%)
4.19$ (16%)
20.72$ (17%)
13.30$ (11%)
20.72$ (17%)
24.87$ (17%)
49.77$ (17%)
24.59$ (18%)
33.14$ (17%)
41.47$ (17%)
12.42$ (17%)
33.17$ (17%)
16.57$ (17%)
13.34$ (11%)
5.27$ (12%)
16.97$ (15%)
17.75$ (11%)
9.33$ (38%)
4.95$ (17%)
28.69$ (18%)
30.74$ (12%)
13.04$ (13%)
10.76$ (17%)
GAMERSGATE

[ 1645 ]

0.85$ (91%)
0.43$ (91%)
1.91$ (87%)
2.13$ (79%)
1.5$ (70%)
0.43$ (91%)
1.28$ (79%)
0.64$ (87%)
0.51$ (91%)
1.91$ (79%)
10.2$ (74%)
1.28$ (91%)
0.59$ (40%)
0.85$ (91%)
4.25$ (83%)
10.2$ (66%)
0.58$ (92%)
1.28$ (91%)
1.28$ (91%)
1.28$ (87%)
7.5$ (75%)
2.55$ (91%)
0.09$ (91%)
0.17$ (83%)
4.25$ (83%)
1.05$ (85%)
1.7$ (91%)
1.02$ (74%)
0.94$ (81%)
10.19$ (49%)
MacGamestore

[ 1922 ]

21.99$ (27%)
1.24$ (75%)
17.49$ (13%)
15.99$ (20%)
29.99$ (40%)
4.24$ (79%)
2.98$ (85%)
1.99$ (80%)
2.49$ (75%)
2.48$ (75%)
6.37$ (79%)
2.99$ (80%)
1.19$ (88%)
42.99$ (14%)
15.89$ (21%)
0.99$ (80%)
1.79$ (91%)
1.19$ (76%)
8.99$ (10%)
1.10$ (84%)
32.99$ (18%)
25.99$ (13%)
1.19$ (76%)
2.99$ (75%)
15.99$ (20%)
1.19$ (92%)
67.19$ (16%)
1.09$ (84%)
3.74$ (75%)
1.49$ (85%)

FANATICAL BUNDLES

Time left:

356342 days, 13 hours, 4 minutes


Time left:

8 days, 20 hours, 4 minutes


Time left:

13 days, 20 hours, 4 minutes


Time left:

19 days, 20 hours, 4 minutes


Time left:

27 days, 20 hours, 4 minutes


Time left:

42 days, 20 hours, 4 minutes


Time left:

20 days, 20 hours, 4 minutes


Time left:

43 days, 20 hours, 4 minutes


Time left:

42 days, 20 hours, 4 minutes


Time left:

43 days, 20 hours, 4 minutes


Time left:

27 days, 20 hours, 4 minutes


Time left:

21 days, 20 hours, 4 minutes


Time left:

49 days, 20 hours, 4 minutes


Time left:

40 days, 20 hours, 4 minutes


HUMBLE BUNDLES

Time left:

0 days, 14 hours, 4 minutes


Time left:

5 days, 14 hours, 4 minutes


Time left:

9 days, 14 hours, 4 minutes


Time left:

14 days, 14 hours, 4 minutes

by buying games/dlcs from affiliate links you are supporting tuxDB
🔴 LIVE