VOID by Invaders
╙ N, ┌▄,╙╜"╙ ▀ █▓ ▄M#╙ #⌐ ╙▌#., █▌ #─ ╓ ╠▓└╓,▓█Ñ ╙╩▀███▓▄▀b ▄╬ ╓╢▒█▀▀ ,,,╙╢██╫█▄ #█▄▄██▀.╓##æ º╙ :▀▓║█████▄▄▓███▄▄ .m╓╢M▒▒▒██████▓█▌. ' #▒▀██████████████▓▒▒▒▒▓▒██████████████▄▄ ▄╗#▒▓██████████████████▒█████████████████████▓▓▒, .#▒▓▓█████▀▀▀▀███████████████████████████▀▀█████████▄ ,≈ ,#║▒██████" , ▀██████████████████ . (╢▒████████▌.# ▀▄╔╫▒▒███████, ▐█▄ ▄ ▐███████████████▀ ╔,(█Γ ⌠████████████Γ ╔┌▄ .▒▒▓██████████▄ ▀"▀Ç▄▄ ▀████▀║▌█████╜ ╙"▀. ▄████████████▌, ╓▄ @██▒▒▓▒▒█████████████▓▓█████████▀.╫Γ└▀███████▓▓▓████████████████▓▒▓▓█ ║█▓█████████████████████████████∩ ╫Γ ████████████████████████████████ ╫███████╜└▀███▓█████████████████▓▓██#█████████████████████▀ ▒███████ ╠╫████▀ └██▓▀█████████████████████████████████████████▀ ╙╢█████ ║▓████▌ ▐██▒║▒▒▀▒█▀▒▒▀█████████████████████████▀╓████⌐ `╢████⌐ ╙█████▌ ╞███▒ ▄╓,│▄,└▄▄▄│▄╓▄▒╓,▄▄,'│▄▄└┌»'▄▄╢ ║███▌ ┌▒████⌐ ║██████∩ ▀███Γ ╙╜█ ╘█∩╙██∩╢█▀└ └╝██"╙█▌ ╙█Γ╙▀└ (████▌ ^╢████▓ ╓████▀ "▀███▄ ╓#.▄▓⌐▄M╙▄M╠▄▓╙▓▄▒ ▓▓,#▄(▄ #╘▓∩▓████` 4█████ ╓████, ╙╫██▄╒▄╬▄█▄,▀\╙╙▄╫▒Ñ ╙Ñ▄#▄▒Ñ╠▒,▐`╬Q,#███▀ ╘▓╫██Γ█ ▀█████m ├▒██████████████▒ ╫▀█████████████╙ ╔▒██Γ ║███▀▌ ║██▀│╠'''╙████▒ ║▓▀▀''''''└███' º▒███⌐ (██▓ └╫▌ ▀█▀ ▒= ║█⌐ ▐▒███⌐ ║██▀ ▒½ ▐█▀ ▌ ╔█ ║██▓ │▒█ # ║∩ ▌ @ ╫█▌╫ #▀██ , ║∩ æ ╫⌐ ┌█Ñ└ ▐▌██ ╡ ║∩ ╙ ║▒ ║Γ│▌ ║, ` ▒┘ .__ ___________ _________ ________ _____________________ _________¨ |__|\ \ \ / / _ \ \______ \ \_ _____/\______ \/ _____/ | |/ | \ Y / /_\ \ | | \ | __)_ | _/\_____ \ | / | \ / | \| ` \| \ | | \/ \ |__\____|__ /\___/\____|__ /_______ /_______ / |____|_ /_______ / \/ \/ \/ \/ \/ \/ :::::::::::::.. D E M O G R O U P ..::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ____ ____ ____ ____ ____ __ _ ____ ____ ( _ \( _ \( __)/ ___)( __)( ( \(_ _)/ ___) ) __/ ) / ) _) \___ \ ) _) / / )( \___ \ (__) (__\_)(____)(____/(____)\_)__) (__) (____/ _______ ______ ____ ____________ ____________ \ | | | ____\_ \__ / \ \ \ | / / /| / / \ |\___/\ \\___/| \ \ |\ \ \ |/ / /\ | \|____\ \___|/ | /\ | \ \ \ | | | | | | | | | | | | \| \| | | | | | __ / / __ | \/ | |\ /| | | / /| / \/ /_/ | / /| | \_______/ | |\ \_____/ | |____________/| /___________/ | \ | | / | \_____\ | / | | / | | / \|_____|/ \ | |___|/ |___________|/ |___________|/ \|____| -------------------------- Nick/Realname: omega / Jan Palenicek (code, gfx, story) : Lamer Pinky / Petr Klusal (musics, gfx) Group: Invaders Full name of work: Void Compo: ZX Spectrum Requirements: ZX Spectrum 128k/+2 Duration (minutes): 7:45 (11:17 with end-titles) Contacts: invaders@outlook.cz P.S.: Demoscene forever! -------------------------- Relase notes: ============= Void package contains following files: 1) void_zx.tap - Sinclair ZX Spectrum 128/+2/+3 version 2) void_ru.tap - Pentagon version 3) void_cluesheet.png - Hint to decode alien font to get HWID 4) void_ost.pt3 - Original movie soundtrack 5) fileid.diz Demo was developed primarily for ZX Spectrum 128k/+2/+3. It is best to be viewed on those machines. We timed multicolor routines also for Pentagon nevertheless it was tested only inside emulators. Hardware test is performed in the beginning of demo. You'll see blue Alien head on white background. - Test PASS - Alien head disappears within 2 seconds. - Test FAIL - Alien head stays with flashing border. Color of the planet reflection in Alien's eye indicates HW configuration. Compatibility table of different computer models and version of the demo: +==============================+============|Compatibility| |Machine Type | Moon color | ZX | RU | +==============================+============+======+======| |Sinclair ZX Spectrum 128k/+2 | Red | Y | Y | |Sinclair ZX Spectrum +2A/B/+3 | Magenta | Y | N | |Pentagon | Green | N | Y | |Unknown slow | Dark blue | Y | Y | |Unknown fast | White | N | N | +==============================+============+======+======| You can contact authors with hardware identification ID in case you encounter issues with this demo. HW ID is displayed on the left side of void logo. Guide how to decode alien font to obtain HW ID can be found in void_cluesheet. Music: ====== Lamer Pinky composed beautiful soundtrack for this demo. Whole PT3 song is almost 11 minutes long utilizing 23kb of memory without sound play routine. One of the technical challenges was to get this soundtrack into available memory (#db00-#ffff). We teamed with mborik who had previous experience with PT3 data optimizations. He was able to optimize song data and slice it into 4 parts that are dynamically loaded and decompressed in realtime. He reduced data size of the original song to 12kb and provided also optimized pt3 player for this demo. Rotoid engine: ============== Credit to whom credit is due - Pete Cooke. He came with rotational object representation idea first and he developed two great games based on that concept - Tau Ceti and Academy. Rotoid engine is inspired by those two games nevertheless it is written completely from scratch with different design goals in mind. Segments, Objects, Multi-Objects, Bitmaps, Scenes, Animations, Screenplay... Main philosophy of the engine is that objects are vertically symmetrical. Each object is then defined by its' right side where the other side is automatically mirrored. E.g. to draw a box we need to define a vertical line, mirror coordinates of the line along it's virtual Y axis and connect points between both sides. Very similar approach we can take to draw a circle. We'd calculate right side arc and then mirror it to the other side. As a result we have a filled circle. Rotoid engine calls those elementary shapes "segments". Each object consists of several segments. For example a diamond shaped object is composed of two lines (segments). /\ line 1 \/ line 2 Data model with segment definitions is interpreted and x-positions of the lines are stored in 256b table (since we need coords for left, middle and right - then 3x256b are needed). Segment data model has additional attributes to enable a bit more flexibility to design objects. For example shading pattern of each segment (lights used on buildings, blinking lights or different shadow patterns of several ships). Another important attribute is to position each segment individually within the object. There are two offsets X and Y that positions current segment relatively to its display position. This helps us to overcome limitation in drawing only symmetrical objects. For example it is possible to draw a box on the left and a circle on the right side within the same segment data model. More practical use is for example Nostradamus ship with different structures, two blinking lights on the Narcissus ship or Alien mothership in the city scene. Engine can also apply shadow to emphasisize 3D effect. Since objects are in fact flat, 3D effect is achieved by splitting the line and using different dither patterns for shadow and light. Assumption is - object are rotational (thus rotoid engine). Shadow position is calculated from radius and light angle. Technically it is just a lookup table to get x-position of the point between left and right side. Rotoid engine enables further abstraction into "objects". Those objects has additional attributes to position "segments", and apply global scale and global light angle. This is used for example in the Calpamos scene with big planet and small moon. In fact this is one segment definition with two instances of different scale and position. Grouping "objects" into "multiobjects" enables us to draw complex objects consisting of several "objects". Multiobject has XYZ location and can be manipulated using animation functions. Bitmaps... engine can use masked, non-masked, monochrome or colour sprites. Sprites can be pre-rotated by the engine at the scene initialization phase. This was used in several places of the demo (landing scenes, moving cursor above pyramids, explorer... etc.) for moving objects. Bitmaps were also used for drawing backgrounds once scene was calculated (e.g. in the first Calpamos scene and in the second Alien world scene). Bitmap objects are sharing the same object definition structure as "multiobjects" thus the same animation routines can be used for bitmaps. There is a lot more that is needed to make "movie like experience". We need to define what will be seen, how it will be seen, how long and how it will be animated. For that purpose we have "Scenes". Scenes are complex structures of executable code and data pointers. Each scene has following sections: - init - erase - draw - anim It is quite self-explanatory. In the init section we define camera position, brightness, contrast, field of view, z-clipping, screen centre offset, y-crop. We also unpack bitmpas and other scene resources and wait for soundtrack. Erase, Draw, Anim are pointers to different routines followed by data. Huh! Still reading? And we just scratched the surface. Perhaps next time... At least you got very rough idea of how it works. VOID story ========== Timeline *** Hundreds of thousand of years ago *** colonization of space, life was spread by unknown developed civilization to thousands of planets in the universe. *** 2107 *** Earth is exhausted. There is no ice since 2090. Weather on the planet is very unstable and temperature is in average three degrees higher than in 2000. Wild life does not exist and most of the human population is living in big cities. Human race is trying to solve over population, global warming and by that lack of food and resources. Several mining corporations are travelling to nearby planets and moons to excavate precious raw material and natural resources needed for production. Chinese-Japanese company has developed first atmospheric generator. Zeelog Mining Industries sent its mining ship Nostradamus to Calpamos planet in Zeta Reticuli 2 solar system. *** 2125 *** Nostradamus arrived to Calpamos. This planet has three moons and Saturn-like ring that are thought to be remains of one disintegrated moon. Calpamos incident: Nostradamus landed on one of the planets' moons. Artefacts built by unknown intelligent species were found on the planet surface. Nostradamus crew explored three pyramid shaped artefacts. Tips of the pyramid had a bright light showing some activity. Connection with one of the pyramids resulted in teleporting the crew to unknown alien planet millions light-years away. Crew was able to see two alien cities with tall tower shaped buildings and flying saucers. Second city unveiled that alien planet is orbiting collapsing star. Deadly magnetic field was creating big corona around the sun. City structures were protecting its' citizens from solar radiation and certain death. Aliens tried to find second homeworld and made hundreds of missions to find a new habitable planet. All attempts failed and they almost exhausted all available resources needed for their transportation. One planet, far away, has ideal conditions for their race. Until now, they were not aware that Earth exists. Alien response: Aliens sent two ships. The first ship was sent to Calpamos to bomb it's moon. Bomb destroyed teleport with the rest of Nostradamus crew on cargo ship. One Nostradamus crew member was able to escape. His rescue ship is heading back to Earth to warn people. Second Alien ship was sent straight to the Earth. It was colonization ship. Earth - Arrival: Once secret intelligence confirmed almost certain arrival of alien mothership people in almost every place on the planet went crazy. There were groups of people discussing, singing songs and also fighting each other. There were "welcomers" to complete "haters". People understood that our planet has issue with over population, global warming and insufficient resources to feed everyone in near future. Aliens were opportunity to help us in solving our issues. They were also obvious threat that our weak planet might get new immigrants or worse. Military forces were activated and people were expecting some sort of communication - it did not happen. The only documented information is that people witnessed an event that could be described as "black hole or endless black funnel". This event took several hours. During this event there was no electric power on the whole planet. People did not hear environment (some scientists said that world was one big anechoic chamber that moment). Finally, bright blinding light was everywhere and from the black funnel flew out several alien spaceships. No more records were retrieved. *** 2173 *** Nostradamus rescue ship is returning back to Earth. 48 years after Calpamos incident. Events were not disclosed yet. To be continued... Invaders, December 26, 2020, Olomouc, Czech Republic #█▌███▄. ▄▓▓████████BQ▄ ▄▄▓███████████████████████████▓▓▓ººª└╙▀╙B½▄ ,▄▓████████████████████████████████▓▓▒╢╗»~-~ ╙Ræ» .▄▓██████████████████████████▌▄▄▄▄███████▓█▒▒▄▄▄▄▄▄, ╙▀╖, ▄▄▓████████████████████████████████████████████▒█▒▒╠░\ └⌠@╖, ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█▀▀▀▀▀▀▀▀▀▀███▀▀▀▀▀███████▀▀███▀▀▀▀█▀█▀╙╙╙╙╙╙╙╙╙╙╙╙╙╙╙╙" ╙▀████████████████████████████████▀. ▀██████████████████████████▀╙ ████████████████████▌ █████████████████▒É7▌ ██████████████▀▀▀▀Γ"Γ ██████████████████▒▄Γ ╓▓█████████████████████▒╬▄▄╬█▄ #██████████████████████▓▒░ ╜▒▄ ┌██████████████████████████▀╝╝êê╝██▓ ┌██████████████████████████▒▒N └╚▓ ████████████████████████████▒▒M7+```╚▓▌ ▐████████████████████████████▓▒▄⌐⌐⌐⌐⌐▄▒█ ▀▀███████████████████████████████▄▄▄╫█▀▀─ └▀█████████████████▀ ████████████████▌ ████████████████▌ █████████████▒║╫▌ ████████████████▌ ████████████▒, .k █████████████⌐:╓] █████████████Ñ╜Ñ▌ └▀██████████▓=╗º ▐██████████Ñ █ ▐█████████▓M ║ ▐█████████▒└ ║ ▐█████████▓M ╫ ▄█████████▓▓▓█, ▄██████████▀▀▀▀▀█▓ ╓█████████▓░ │║██ ███████████▒» .╔▒██b █████████████▓▓▓████▌ ╙███████████████████ ╙█████████████████ ▀█████████████▀ ████▌...└ └██▀ k▀=╫ ┌ ║███▌ ████b █████M ╠ ║███▌ ████b ╓▒ ▄ ▓█▀█Äb ╓███w ▄▄▄▄▄▐███▌ ████Ω ███ ██▓▄ .▄██¬▀█▀██▌, ║██▌¬., ╓▄██▄▐███▌ █████▄███ ████⌐ ╒▓@%▓# ▌▀█▀⌐██▒█▒██ ║██▌Γ██▌ ║██▀▀║███▌ █████▀"██ ████─ ▐▓███▌ ▌▄╫▀⌐██╫█╫██ ║██▌▄█████╠▌█▀█╚▀▀▀▀═ █████º`█▌▓▓▓█b██▒ ▐██▀██▄▓ ╓╓▌██▓─▌██████▄╚█▌███████║█▓█═███▓▓█.█████▓b█▌████b█▌█ ▐███████ ▐███▓██¬██╝██j█▌██▌█▌▓████║███M██████▐█ÉÑ╫██▌█▌████b██▌▒▄█▐█████▓▌`, å▒▓▓▐███Q▐▀⌐████╬j▀▀▒▀▌█▌@▒▒██╫███▌████████╣▒╫██▌█▌████b██████▐██████╬╫█╠▓ █████▐█████▓⌐██▒█åj██▀▀▌█▌███████╫█░██████████╫██▌█▌████b██████▐███████████
[ back to the prod ]