pouët.net

Go to bottom

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██████▐███████████
Go to top