╙ 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! -------------------------- Version history: ================ 12.01.2021: V 1.3 - Universal binary, CPU test, Speed up of fade-in/out (Ped7G) - Story additions, in-demo text corrections 10.01.2021: V 1.2 - Recompiled with sjasmplus 1.18, minor fixes - Compatibility improvements, memory and CPU test 26.12.2020: V 1.1 - Party version, initial release Void package contains following files: ====================================== 1) void.tap - tape file image with the demo 2) void_cluesheet.png - Hint to decode alien font to get HWID 3) void_ost.pt3 - Original movie soundtrack 4) fileid.diz - THIS file 5) invaders.stl - 3D step file with invaders table stand :) Demo was developed primarily for ZX Spectrum 128k/+2/+3. It is best viewed on these machines. We timed multicolor routines also for Pentagon nevertheless it was tested only inside emulators. Hardware test is performed at the beginning of demo. You'll see a blue Alien head on a white background. - Test PASS - Alien head disappears within 2 seconds. - Test FAIL - Alien head stays with a flashing border. Color of the planet's reflection in Alien's eye indicates HW configuration. Compatibility table of different computer models and version of the demo: +==============================+============+ |Machine Type | Moon color | +==============================+============+ |Sinclair ZX Spectrum 128k/+2 | Red | |Sinclair ZX Spectrum +2A/B/+3 | Magenta | |Pentagon | Green | |Error: Unknown slow | Dark blue | |Error: Unknown fast | White | +==============================+============+ Pentagon version has different paging and has a bit more frames rendered between the keyframes. In case you have Pentagon 512 make sure to run this version. You can contact authors with the hardware identification ID in case you encounter issues with this demo. HW ID is displayed on the left side of the void logo. Guide how to decode the alien font to obtain HW ID can be found in void_cluesheet. HWID contains CPU type and CPU speed in memory page 1. Recognized CPUs are: - Z80 NMOS - Z80 CMOS - Z80N Music: ====== Lamer Pinky composed the 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 the available memory (#db00-#ffff). We teamed with mborik who had previous experience with PT3 data optimizations. He was able to optimize the song data and slice it into 4 parts that are dynamically loaded and decompressed in real time. He reduced data size of the original song to 12kb and also provided optimized pt3 player for this demo. Rotoid engine: ============== Credit to whom credit is due - Pete Cooke. He came with the rotational object representation idea first and also 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 its virtual Y axis and connect points between both sides. Likewise, if we want 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 the left, middle and right - then 3x256b are needed). Segment data model has additional attributes to enable a bit more flexibility to object designs. 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 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 emphasize 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. The 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 the left and right side. Rotoid engine enables further abstraction into "objects". Those objects have additional attributes to position "segments", and apply global scale and global light angle. This is used for example in the Calpamos scene with a 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 the animation functions. Bitmaps... engine can use masked, non-masked, monochrome or color 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 a "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 the camera position, brightness, contrast, field of view, z-clipping, screen centre offset, and y-crop. We also unpack bitmaps and other scene resources and wait for the 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 *** The colonization of space, life was spread by an unknown developed civilization to thousands of planets in the universe. *** 2107 *** The Earth is exhausted. There has been no ice on the surface since 2090. The weather on the planet is very unstable, and the temperature is on average three degrees higher than in 2000. Wild life does not exist and most of the human population is living in big cities. The human race is trying to solve: over population, global warming and because of that the lack of food and resources. Several mining corporations are travelling to nearby planets and satelites to excavate precious raw material and natural resources needed for production. A Chinese-Japanese company has developed the first atmospheric generator. Zeelog Mining Industries sent its mining ship Nostradamus to the planet Calpamos in the Zeta Reticuli 2 solar system. *** 2125 *** Nostradamus arrived at Calpamos. This planet has three satellites and Saturn-like rings that are thought to be the remnants of a disintegrated satellite. The Calpamos incident: Nostradamus landed on one of the planets' satellites. Structures built by an unknown intelligent species were found on the satellite’s surface. The Nostradamus crew explored three pyramid shaped structures. The tips of the pyramids had a bright light showing some activity. During the exploration of one of the pyramids, the crew were teleported to an unknown alien planet millions of light-years away. The crew were able to see two alien cities with tall tower shaped buildings and flying saucers. While exploring the second city they could see that the alien planet is orbiting a collapsing star. A deadly magnetic field was creating a big corona around the sun. The city's structures were protecting its citizens from solar radiation and certain death. The aliens tried to find a second Homeworld. They undertook a number of missions to find a new habitable planet. All attempts failed and they almost ran out of all available resources needed for transportation. One planet, far far away, has ideal conditions for their species. Until now, they were not aware that Earth existed. Alien response: Aliens sent two ships. The first ship was sent to Calpamos to bomb its satellite. The bomb destroyed the teleporter with the rest of the Nostradamus crew on a cargo ship. One Nostradamus crew member was able to escape before its destruction. His rescue ship is heading back to Earth to warn people. He will soon become the most important human in history. The second Alien ship was sent straight to the Earth. It was a colonization ship. Earth - Arrival: Once space defense and military intelligence confirmed the arrival of a gigantic alien mothership, people went crazy. The streets were full of them waiting for arrival of Aliens, Gods, Saviors... Dancing, singing, praying... We were begging for help to solve our own problems. There were also people full of skepticism and animosity towards the new visitors. For those Aliens were an obvious threat. Our overpopulated planet could not take on another burden, hungry locust. Nobody expected the first contact with intelligent civilization like that. We expected communication, arguing about principles or fighting in the worst case. Nothing like that has happened. There is not much information available about the arrival. We do not know what exactly happened. From some pieces of information, we know that people witnessed an event that could be described as "a black hole or endless black funnel". This event took several hours. During this event there was no electricity on the planet. A full black-out. People could not hear sound coming from the environment. It was like being in the gigantic anechoic chamber. The arrival of the aliens was followed by a deafening high-frequency sound. A lot of people were trying to hide or protect their ears. The final stage of the arrival was a bright white blinding light. Who wasn’t mad before the arrival soon did after that. Alien ships arrived and Aliens took control of everything. Earth and its people were defeated without fight. No more records were retrieved. *** 2173 *** Nostradamus rescue ship is returning back to Earth. 48 years after the Calpamos incident. Events haven’t been 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██████▐███████████