Go to bottom
Ultraviolet by HOOY-PROGRAM [web]
screenshot added by gasman on 2017-03-18 18:42:40
platform :
type :
release date : march 2017
release party : Forever 2017
compo : zx demo
ranked : 1st
  • 55
  • 3
  • 0
popularity : 65%
  • 0.95
alltime top: #1635
  • gasman gasman [Code, music, graphics]
added on the 2017-03-18 18:42:40 by gasman gasman

popularity helper

increase the popularity of this prod by spreading this URL:

or via: facebook twitter pinterest tumblr


rulez added on the 2017-03-18 19:04:44 by nyuk nyuk
This is - WONDERFUL!
rulez added on the 2017-03-18 19:29:53 by VBI VBI
Man, I loved it. Got worried at some point that you will steal all of my future effects, but it turned out you left me with one or two. That'll be enough :)

Great work, surely will be one of the best Spectrum releases this year. My only complaint - I thought that the water will wobble. Not forgetting Victoria (tm).
rulez added on the 2017-03-18 19:54:16 by introspec introspec
indeed, one of the best zx releases of this year. dat multicolor! =)

p.s. waiting for pentagonfix ;)
rulez added on the 2017-03-18 20:43:59 by wbcbz7 wbcbz7
Can't seem to get past the gamma stage. 6 and 7 alter gamma but don't know what to do to start. Tried all other keys. USP and Marvin emu both fail in same way. What do i do?
@bootlegger, I believe that the file for measuring gamma is only there to help people choose the correct executable - ultraviolet-gamma1.2.tap or ultraviolet-gamma2.4.tap. You are most likely to need ultraviolet-gamma2.4.tap
added on the 2017-03-18 23:34:34 by introspec introspec
Ta. Before i just loaded zip into emulator and that's all i got. Unpacked 1.2 and 2.4. didn't work in Marvin or USP very well so tried spectacol (android) which is based on fuse and it's almost perfect timings. Very impressive demo! Thx
Great work!
rulez added on the 2017-03-19 13:52:54 by TmK^deMarche TmK^deMarche
Now that is what I call a well deserved win... and kudos for finishing it at the party which is the hardcore demo coder way :)
rulez added on the 2017-03-19 15:29:51 by baze baze
I loved the fx and that new graphics mode a lot, very nice tune too!!
rulez added on the 2017-03-19 15:44:28 by Buckethead Buckethead
Nice stuff, also nice with a new graphics mode worked good in the FUSE emulator as i have no speccy
rulez added on the 2017-03-19 21:07:26 by Queen_Luna Queen_Luna
Ok, I want to see it in trdos / pentagon times / only one loading )
rulez added on the 2017-03-20 13:13:15 by SerzhSoft SerzhSoft
Really enjoyed this, for a one man prod this is an insane amount of effort.
rulez added on the 2017-03-20 22:57:25 by rc55 rc55
rulez added on the 2017-03-20 23:11:57 by Ramon B5 Ramon B5
Shameless youtube link bump!

(Please watch in 720p50 quality where available. It's really quite important, especially for the end part)
added on the 2017-03-20 23:33:08 by gasman gasman
Amazing! All is top notch. And the music is awesome!
rulez added on the 2017-03-21 00:36:27 by mad mad
rulez added on the 2017-03-21 00:47:34 by psenough psenough
F-F-F-F-F-f-f- Wow!
rulez added on the 2017-03-21 01:19:26 by CiH CiH
Cool stuff!
rulez added on the 2017-03-21 08:22:59 by sachy sachy
Simple, sophisticated.
rulez added on the 2017-03-21 10:39:21 by noby noby
very nice gasman!
rulez added on the 2017-03-21 10:46:03 by megmeg megmeg
what positive things everybody said!
rulez added on the 2017-03-21 11:27:07 by 1in10 1in10
rulez added on the 2017-03-21 11:37:23 by kempy kempy
Hotdamn! What a show.
rulez added on the 2017-03-21 15:10:27 by utz utz
@gasman: your new 8x1 mode seem similar to the one present on the TO7 machines (7 colors, 8x1 color clash). I've designed a conversion technique that works well with 8x1 color clashes. It is available as LUA extension to GrafX2 >>here<<

Here is what the algorithm does on the same pictures you used with 7 fixed colors and 8x1 color clash
BB ImageBB Image
BB ImageBB Image
If you wan't I can try to adapt it to the ZX.

By the way big thanks to you for your JS MOD player. It inspired me to make the MOD player presented at Forever-2017 for the TO8 machine.
rulez added on the 2017-03-21 15:41:13 by __sam__ __sam__
Well, actually it was not Gasman who invented this mode.
Here are some examples dated back to 2004:
BB Image
BB Image
BB Image
BB Image
BB Image
BB Image
BB Image
BB Image
BB Image
BB Image

All those pictures were converted by Alone Coder and could be viewed with his MCX viewer
Some of the pictures were also used in his game Hexagonal Filler
added on the 2017-03-21 20:54:44 by lvd lvd
Kudos for coming up with such a nice demo all by yourself. And that new graphic mode sure looks impressive for the humble Speccy!
rulez added on the 2017-03-21 23:55:42 by exocet exocet
@LVD: Very interresting pics. They definitively have other colors than the basic 8+8. My guess is that these contains a palette of 16 colors out of 64 possible ones.

This doesn't look like Gasman's mode, does it? The youtube video seem to use only the 8+8 colors but with color clashes of only 1 pixel tall and 8 pixel wide (eg 8x1 attribute mode).
added on the 2017-03-22 01:07:44 by __sam__ __sam__
Really great work dudes!

Need to be proper digitized for YouTube - current version is heavy corrupted with compression even on 720p
rulez added on the 2017-03-22 02:00:42 by ded^RMDA ded^RMDA
Incredible demo! gasman rulez!
rulez added on the 2017-03-22 04:28:02 by flibblesan flibblesan
@Sam: the pictures use not one, but two frames with each 8x1 blocks using the spectrum palette.
The screenshots here are a mix of the two frames. Of course on real hardware it is a lot more blinking and flashing, but it works ok.
This is similar to what you did in TruC and what was done in Climax on CPC, too.
what PulkoMandy said, yes. I've screenshotted them using 'noflic' option in the emulator. Still havent' seen this demo on a real HW.
added on the 2017-03-22 08:36:01 by lvd lvd
@__sam__: As PulkoMandy says, my images are blending colours from two frames. If you're not seeing that in the youtube video, you're probably not viewing it at 50Hz... here's how the result should look (plus or minus flicker).

@lvd: Are those images full 8x1 attributes everywhere, or less than that (with an algorithm to find the optimal places to do the colour change)? Very impressive work either way! As far as I can remember my demo is the first one to combine 8x1 multicolour with interlace/gigascreen, but that's not such a revolutionary idea so I wouldn't be surprised to find out it's been done before. It's definitely the first time 8x1 attributes have been done in 22 columns on an original Sinclair Spectrum 128, interlaced or not... (Proper writeup to come soon!)
added on the 2017-03-22 08:49:21 by gasman gasman
I'm a total newbie on Spectrum. I wonder how I can view them in 50hz. I've tried speccy 3.9 but it flickers a lot at 50hz. With 60hz it is more stable but does not show that many colors. I presume this is all related to LCD display.

Mixing two images with 8x1 attribute lead to 5 intensities per components (0%=off/off, 25%=off/dimmed, 50%=dimmed/dimmed, 75%=bright/dimmed, 100%=bright/bright), so 125 cols max, but since some color combinations are forbidden on an 8x1 it's actually much less. I wonder what does the full palette looks like... Hum interesting topic :)
added on the 2017-03-22 09:15:08 by __sam__ __sam__
I'm quite averse to flicker regardless of platform, but apart from that it's a great show! I especially like the music.
rulez added on the 2017-03-22 09:27:24 by Kylearan Kylearan
lvd, does Alone Coder's method work on original Spectrum 128k machine?
added on the 2017-03-22 10:12:40 by sq sq
nice demo, i loved the twister and the tunnel!
rulez added on the 2017-03-22 10:13:05 by sq sq
Just watched on my +2.
Nice to see true british zx demoscene keeps up with latest technical innovations.
Also a very impressive and fascinating 'one-man-show'.

@gasman: sure they are not, 224 (or 228) clocks is just not enough to update 32 bytes with random values.

Also, I've watched this demo on my divIDE equipped with fatware and experienced some stalls. Does that mean that from now on, on Forever, IM2 divide loaders (that obviously require ESXDOS) are officially allowed, no 'have basic-only loaders' anymore?

ps: by using our gamma calibrator I've found, that checkerboarded bright color looks exactly the same as solid non-bright one (and thus gamma calculated was 2.4). Again, on +2 and CRT TV connected via SCART. So that means that I was right doing (or at least trying to) the same in our ZX Evolution design. In contrary with popular (mis)belief :)
rulez added on the 2017-03-22 13:25:44 by lvd lvd
s/our/your/ [gamma calibrator]
added on the 2017-03-22 13:26:54 by lvd lvd
Great stuff. I used ZXSpin's 'reduce gigascreen flicker' to watch the end part as I don't have a monitor that can do it. Looked pretty similar to the screenshot.
rulez added on the 2017-03-22 14:34:55 by 4mat 4mat
multicolour twister: rules
22 colum: rules
gigascreen + multicolour: rules
image transitition: rules
losing victoria: rules
losing victoria as a demo: rules *sniff*
zx spectrum: rules
hooy: rules
usr 0: sucks. There must be another way.

I definitely remember when you realized you don't have to update all 8 raster lines but just 7. But I still don't know when did you find a way to jump from 18 to 22?
rulez added on the 2017-03-22 21:16:51 by ref ref
...simply great, especially for a one man prod...
rulez added on the 2017-03-22 22:17:26 by Kuemmel Kuemmel
@lvd: The loading stutter happens on ESXDOS too (and thus happened during the compo). The demo was always planned to be an IM2 loader (I didn't check the compo rules - my bad...) but once I learned that leaving IM2 running during LOAD "" isn't enough, I didn't have time to do anything fancier. Something to fix for the final!

@ref: With the 128K second screen in use, you only need to update 6 of the lines "live". (That optimisation was introspec's idea...) The second screen is also a big help in avoiding 'tight spots' in timing - you can hammer away on a single screen for as long as possible, then switch screens just when you're about to run out of cycles. The final secret weapon to reach 22 was a data visualisation trick to show exactly where the contention delays occur, which meant I could hand-optimise the hell out of the instruction ordering...

BB Image

(btw, the demo works in full 128 mode as well as usr 0... doesn't it?)
added on the 2017-03-23 10:55:22 by gasman gasman
I don't know much about Spectrum architecture, but extra virtual thumb up for the screenshot of your data/instruction visualization spreadsheet. Having done hand-optimizations for my VCS prods in pretty much the same way, I know how much work that is (but also how rewarding it can be). :)
added on the 2017-03-23 13:24:05 by Kylearan Kylearan
Next challenge: play sidvoices/digidrums at the same time!
rulez added on the 2017-03-23 13:40:38 by PulkoMandy PulkoMandy
This is a great colorful demo with an interesting technic, I like it !
rulez added on the 2017-03-23 15:41:48 by Cyg_BLaBla Cyg_BLaBla
Congratulations, Gasman!
rulez added on the 2017-03-24 10:29:36 by aki aki
Decent. :)
added on the 2017-03-25 01:32:05 by AntDude AntDude
rulez added on the 2017-03-25 06:14:37 by fyrex fyrex
Only one question after all. Same question i have back in 2000 when experiment with multicolor. When someone draw a picture for this, handcraft not converted stuff ?
added on the 2017-03-25 10:16:19 by ded^RMDA ded^RMDA
@unbeliever: I totally agree - it would be great to have some hand-drawn graphics in this mode :-) Last summer I made a (very early) start on an editor tool, and even made plans about specific graphicians to recruit... but I soon realised that I was falling into the classic yak-shaving trap, and that if I carried on down that path I'd be here 9 months later with an amazing demotool and no demo. So that was the first time I had to scale back my ambitions for this project, and certainly not the last.
added on the 2017-03-25 12:43:28 by gasman gasman
This prod rulez!!! I am ultraviolet and you?
rulez added on the 2017-03-25 12:48:38 by ast ast
@gasman: looks like something I may add into GrafX2, but I need some precise explanation of the constraints.

Is that correct:
- 8x1 blocks
- 176px wide
- 192px high
- 4 colors per block, made by mixing 2 pages of each 2 colors, with the usual constraints of the ZX that each block may have only light or dark colors, not a mix of both, except for black
@pulko 4 colors per blocks seems strange to me. I think it's more complex than that.

If I understand correctly, the idea is to mix 2 color pairs: (c1,c2) + (c3,c4). There is the traditional constraint on each pair: c1 and c2 must be all bright or all dimmed (same for c3 and c4). without the constraint the theoretical palette is 5 levels per component: off+off=0% off+dim=25% dim+dim=50% dim+bright=75% and bright+bright=100% (no off+dim because it flickers too much), resulting in a 125 color palette. However the dim/bright constraint reduces his to 82. I'm working on experimental lua scripts for GraphX2 to generate the palette. You can get the whole palette I get by loading the pictures below in GraphX2

It is possible to have 3 colors per block. For instance with c1/c2=black/red all dimmed and c3/c4=black/red all bright, and dimmed block is c1 c2 c2 (+ 5 others) and bright block is c3 c3 c4 (+ 5 others) we get c1+c3=black, c2+c3=25% red, c2+c4=75% red. Three colors.

This is fairly complicated indeed. So to convert the pictures I simplified it by assuming that there is only one pair of colors out of the 82 palette. Notice that not all couples are valid. Some of them are to be reject. However I get some very interesting result with this simplification. Have a look at the pictures below (they all have the same 82-color palette, with only 2 colors per 8x1 block).
BB Image
BB Image
added on the 2017-03-25 16:37:10 by __sam__ __sam__
PulkoMandy's description sounds correct to me. __sam__, you're right about the bright constraint - the two colours in the same frame must be the same bright level, but it can differ between the two frames.

My routine didn't include any logic for avoiding flicker. That might well be a sensible addition, but surely it's more subtle than disallowing the off/bright combination? Black/bright blue will flicker less than black/dark white, for example.

You can get four colours per cell, if you consider all RGB components together - for example:

frame 1: red (192, 0, 0) + black (0, 0, 0)
frame 2: yellow (192, 192, 0) + white (192, 192, 192)
(all dim versions, for simplicity)

=> four colours:
red/yellow (192, 96, 0)
red/white (192, 96, 96)
black/yellow (96, 96, 0)
black/white (96, 96, 96)
added on the 2017-03-25 17:20:00 by gasman gasman
woah, what a nice one man show! i love that twister! well done :)
rulez added on the 2017-03-25 17:28:49 by sensenstahl sensenstahl
If I analyze correctly, not all combinations allow displaying 4 cols. And conversely not all colors are available in a 4 color cell. The selection of available colors for a cell is quite complicated. This might be a nightmare for implementing the logic in a graph tool :P

Do you have any idea of the size of the palette. Is my computation (82 different colors max) correct?
added on the 2017-03-25 18:34:34 by __sam__ __sam__
@__sam__: I don't think 82 is correct - I think you're tripping yourself up by trying to consider individual RGB components. If your red channel is bright red plus bright red, your green channel can't be bright green plus dim green - and that's not a consequence of the Spectrum's bright constraint, because we're talking about mixing a frame-1 colour with a frame-2 colour (where the bright levels CAN differ). Rather, it's a consequence of the fact that the standard Spectrum palette doesn't contain colours like #ffcc00 (part bright, part dim).

Experimentally, the following Python script gives me 102 colours, or 83 if we're unlucky with the low-level behaviour of the bright bit (i.e. dim white being equal to bright white mixed with black):

Code: v = 192 BASE_COLOURS = [ (0, 0, 0), (0, 0, v), (v, 0, 0), (v, 0, v), (0, v, 0), (0, v, v), (v, v, 0), (v, v, v), (0, 0, 0), (0, 0, 255), (255, 0, 0), (255, 0, 255), (0, 255, 0), (0, 255, 255), (255, 255, 0), (255, 255, 255), ] colours = set([]) for col1 in BASE_COLOURS: for col2 in BASE_COLOURS: mixed = ((col1[0] + col2[0])/2, (col1[1] + col2[1])/2, (col1[2] + col2[2])/2) colours.add(mixed) print(len(colours))

In any case - the final four colours available in a block are very much inter-related, yep. I think the best way to deal with that in a graphic tool would be to generate all the possible 4-colour palettes (1596 of them, according to my converter script...) and present them all to the user, with some scheme for locating palettes that are similar to the currently-selected one.
added on the 2017-03-25 19:38:46 by gasman gasman
rulez added on the 2017-03-26 20:55:27 by bitl bitl
@gasman, oh I see. I've reworked my dither algorithm (pseudo code)
Code:-- generate all possible 4 coulor tuples tuples = [] for c1=0 to 15 do for c2=c1 to 15 do for c3=c1 to (c1<=7 ? 7 : 15) do for c4=c2 to (c2<=7 ? 7 : 15) do tuples.add([mix(c1,c3), mix(c1,c4), mix(c2,c3), mix(c2,c4)]) end end end end foreach 8x1 cell do -- dither a copy of the cell to find the best tuple best_error = infinity best_tuple = nil foreach tuple in tuples do block = copy of the 8x1 cell dither block with 4 color tuple compute(error) if best_tuple==nil or error<best_error then best_error = error best_tuple=tuple end end -- effectively dither the image dither cell with the 4 colors of the best_tuple end

and it seems to work nicely. I use Otromoukhov's dither which is much better than Floyd-Steinberg.

I might use these flipping attribute on the thomson TO7 :)
added on the 2017-03-26 23:17:53 by __sam__ __sam__
love it!
rulez added on the 2017-03-27 14:28:13 by evilpaul evilpaul
Awesome! Music by the end and in credit part blows my hat off :O
rulez added on the 2017-03-27 15:35:20 by jammer jammer
Oh my. This is a treat. Lovely! All! Code, style and presentation and zix!
rulez added on the 2017-03-27 18:18:41 by spkr spkr
rulez added on the 2017-03-27 18:21:36 by Amilt0n Amilt0n
ManGas si teh bestest!

splendid demo! ♥
rulez added on the 2017-03-27 19:37:30 by ɧ4ɾɗվ. ɧ4ɾɗվ.
rulez added on the 2017-03-27 22:01:17 by Triace Triace
Awesome groovy music and really nice content. It's been a while since I liked a speccy demo this much.
rulez added on the 2017-03-28 17:43:00 by Preacher Preacher
Cracking work Gasman!
rulez added on the 2017-03-29 10:27:44 by djh0ffman djh0ffman
Superb!!! Great work! :)
I'm just sad can't run it on my tape only +2A :(
rulez added on the 2017-03-31 10:49:58 by PauloFalcao PauloFalcao
hello gasman this demo is excellent :) this twister is wonderfull :) thanx a lot and you are a cool guy as met at demojs :) regards to you
rulez added on the 2017-04-09 11:35:40 by yogib33r yogib33r
thumb for mesmerizing twister and tunnel
rulez added on the 2017-04-09 11:58:55 by Revenant Revenant
Great job!!
rulez added on the 2017-04-10 00:50:46 by Sir_Lucas Sir_Lucas
Really cool.
rulez added on the 2017-04-16 15:55:26 by Dma-Sc Dma-Sc
rulez added on the 2017-04-17 09:14:31 by xylo xylo
rulez added on the 2017-09-16 00:13:58 by cxw cxw
Excellent demo, love it <3
rulez added on the 2019-04-14 12:27:23 by lordcoxis lordcoxis
rulez added on the 2021-01-31 16:41:22 by Blast! Blast!

lists containing this prod

submit changes

if this prod is a fake, some info is false or the download link is broken,

do not post about it in the comments, it will get lost.

instead, click here !

[previous edits]

add a comment

Go to top