-----------------------------------------------------

                isolated, in sunlight
                         by
               Traction and Brainstorm

                      a pc demo
           for the ill-fated Revision 2020

 -----------------------------------------------------

 programming and visuals by preacher
 soundtrack by romeo knight

 with
 skybox photography by Jockum Skoglund aka hipshot
 textures from http://wdc3d.com/ (CC Attribution 4.0)
 old man photo by George Desipris on Pexels
 fmod by Firelight Technologies Pty Ltd.
 glew
 glfw
 glm
 a mersenne twister implementation from somewhere
 and borrowed bits of shaders from assorted places

 -----------------------------------------------------

 greetings, love and appreciation to:

 alcatraz, altair, asd, adapt, brain control,
 conspiracy, epoch, excess, farbrausch, ivory labs,
 kooma, lnx, logicoma, mercury, mfx, orange, satori,
 still, synesthetics, tbl, ümlaut design, vaahtera

 and all my other friends in the scene. I miss you and
 hope to see you in person soon again.

 -----------------------------------------------------

 Wow, it feels good to release a demo again. Somehow,
 in the middle of a busy life, career a toddler and
 a quarantine, there was a bit of time to work on
 things again. I wasn't supposed to make anything
 for Revision, not really having followed the scene
 for a while, but Revision being moved to an online
 made it possible to participate in a proper way. I
 am quite pleased with the result even if it was done
 quickly and on top of a demo engine upgrade started
 in 2017, which made things quite a bit more difficult
 than they should have been. Sometimes you start going
 to a place and find yourself somewhere completely
 different, and it feels all right. This is one of
 those times.

 Finally, I would like to extend my special love and
 gratitude to Romeo Knight for picking up the
 soundtrack duty on an extremely short notice and
 making a killer job of it. This demo would not exist
 without you.

 Stay safe.

     - Preacher

 -----------------------------------------------------





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;     config                                                                                   ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sound = true/false
; debug = true/false

democonfig
{
       sound = true;
       developermode = false;
       song = ambient.mp3
       endtime = 341000
       jumptime = 299500
}

timeline
{
;       tyhjyys 0 150000 666
;       kasvot 0 150000 666
;       tunne 0 150000 666
;       kalpeus 0 150000 666
;       shadowtest2 0 150000 666
;       shadowtest 0 150000 666
;       dynamiccubetest 0 150000 666
;        0 150000 666
;       tuli 0 250000 666

       sauhu 0 47000 666
       tuli 47000 100000 666
       korona 100000 170000 666
       kasvot 170000 210000 666
       korona2 210000 260000 666
       kauneus 260000 300000 666
       viimeiset 300000 340000 666
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;     effects                                                                                          ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

namespace shadowtest
{

}

namespace dynamiccubetest
{

}

namespace tyhjyys
{
       vec3 cameraposition = 0 30 -50
       vec3 cameratarget = 0 0 0
       vec3 cameraup = 0 1 0

       vec3 lightpos = 0 5 0

       float cameraradius = 10

       int glowiterations = 10
       float glowspread = 0.007
       float glowexponent = 1.0
       float glowalpha = 1.0
}
namespace kalpeus
{
       vec3 cameraposition = 0 30 -50
       vec3 cameratarget = 0 0 0
       vec3 cameraup = 0 1 0

       vec3 lightpos = 0 5 0

       float cameraradius = 10

       range flowerradius = 15 50
       range flowerscale = 6.0 12.0
       range flowerheight = 8 20

       range flowerpentaalpha = 0.2 0.3

       range petalangle = 0.5 0.8
       range petalstartpower = 0.4 0.5
       range petalendpower = 0.4 0.5
       range petalendrotation = 0.1 0.2

       int flowercount = 15

       int glowiterations = 10
       float glowspread = 0.007
       float glowexponent = 1.0
       float glowalpha = 1.0
}

namespace tunne
{
       vec3 cameraposition = 0 0 -10
       vec3 cameratarget = 0 0 0
       vec3 cameraup = 0 1 0

       float cameraradius = 10
       float focusdistance = 5.0

       int glowiterations = 10
       float glowspread = 0.007
       float glowexponent = 1.0
       float glowalpha = 1.0


}

namespace sauhu
{
       vec3 cameraposition = 0 0 -10
       vec3 cameratarget = 0 0 0
       vec3 cameraup = 0 1 0

       vec3 grouppos = 0.15 0.15 0
       vec3 titlepos = 0.15 0.15 0

       float cameraradius = 10
       float focusdistance = 5.0

       int glowiterations = 20
       float glowspreadx = 5.001
       float glowspready = 5.001
       float glowexponent = 1.0
       float glowalpha = 1.0

}
namespace kauneus
{
       vec3 cameraposition = 0 4 -13
       vec3 cameratarget = 1 2 0
       vec3 cameraup = 0 1 0

       float camrotation = 1.0

       vec3 grouppos = 0.15 0.15 0
       vec3 titlepos = 0.15 0.15 0

       float cameraradius = 10
       float focusdistance = 5.0

       float backgroundbrightness = 0.1
       int glowiterations = 40
       float glowspreadx = 7.001
       float glowspready = 7.001
       float glowexponent = 0.4
       float glowalpha = 3.0

}

namespace tuli
{
       vec3 cameraposition = 0 5 -6
       vec3 cameratarget = 0 2 0
       vec3 cameraup = 0 1 0

       float cameraradius = 10
       float focusdistance = 6.0
       float focusdistancespeed = 30.0;
       float focusdistancerange = 4s.0;

       float camerarotationfreq = 12.0;
       float camerarotationamount = 0.3;
       int glowiterations = 20
       float glowspread = 0.001
       float glowexponent = 1.0
       float glowalpha = 0.9
}

namespace maailma
{
       vec3 camerapositionstart = 0 3 -6
       vec3 camerapositionend = 0 3 0
       vec3 cameratargetstart = 0 1 50
       vec3 cameratargetend  = 10 0.5 30
       vec3 cameraup = 0 1 0

       float cameraradius = 10
       float focusdistance = 6.0
       float focusdistancespeed = 104.0;
       float focusdistancerange = 3.0;

       int glowiterations = 20
       float glowspreadx = 5.5
       float glowspready = 1.2
       float glowexponent = -0.1
       float glowalpha = 2.2
}

namespace korona
{
       vec3 mooncamerapositionstart = 0 -2.5 -10
       vec3 mooncamerapositionend = 0 -2.5 -10
       vec3 mooncameratargetstart = -0.9 -2.5 0
       vec3 mooncameratargetend = 0.9 -2.5 0

       vec3 groundcamerapositionstart = 0 20 -100
       vec3 groundcamerapositionend = 0 15 -50
       vec3 groundcameratargetstart = 0 40 200
       vec3 groundcameratargetend  = 0 40 200


       vec3 sunposition = 0 7 20
       vec3 sunposition2 = -4 7 20
       range sunmovement = 0.1 0.4
       range sunspread = 0.1 0.3
       range sunsize = 1.0 2.0
       range sunalpha = 0.01 0.02

       vec3 cameraup = 0 1 0

       vec3 moonpos = 0 3 0
       float moonsizestart = 1.7
       float moonsizeend = 1.4

       float focusdistancestart = 3.0
       float focusdistanceend = 5.0

       float terrainscale = 5.0;
       float terrainheightscale = 5.0;

       float endoftheworld = 1.9;

       int linecount = 7
       range linewidth = 0.3 0.3
       float linelength = 30
       float linedistance = 7.0

       int glowiterations = 40
       float glowspreadx = 5.5
       float glowspready = 0.02
       float glowexponent = 0.6
       float glowalpha = 5.2


}

namespace korona2
{
       vec3 mooncamerapositionstart = 0 -0.3 -5
       vec3 mooncamerapositionend = 0 -0.7 -5
       vec3 mooncameratargetstart = 0 0 0
       vec3 mooncameratargetend = 0 0 0

       vec3 groundcamerapositionstart = 0 20 -100
       vec3 groundcamerapositionend = 0 15 -50
       vec3 groundcameratargetstart = 0 40 200
       vec3 groundcameratargetend  = 0 40 200

       vec3 cameraup = 0 1 0

       vec3 moonpos = 0 3 0
       float moonsizestart = 1.1
       float moonsizeend = 1.4

       float focusdistancestart = 3.0
       float focusdistanceend = 5.0

       float terrainscale = 5.0;
       float terrainheightscale = 5.0;

       int linecount = 7
       range linewidth = 0.3 0.3
       float linelength = 30
       float linedistance = 7.0

       int radialiterations = 12
       float radialspread = 0.001
       float radialexponent = 1.0
       float radialalpha = 0.9

       int glowiterations = 20
       float glowspreadx = 7.5
       float glowspready = 0.2
       float glowexponent = 14.2
       float glowalphastasrt = 2.2
       float glowalphaend = 5.2


}


namespace kasvot
{
       vec3 camerapositionstart = -1 0 -6
       vec3 camerapositionend = 1 0 -9
       vec3 cameratargetstart = -0.5 0 0
       vec3 cameratargetend  = 0.5 0 0


       vec3 particle2position = -3.9 1.5 -2.5
       vec3 particle3position = 5.0 -0.66 -1.0

       vec3 cameraup = 0 1 0

       vec3 lightpos = 0 20 0

       float lightscale = 15.0

       float focusdistance = 6.0
       float focusdistancespeed = 20.0;
       float focusdistancerange = 3.0;

       int glowiterations = 20
       float glowspreadx = 5.1
       float glowspready = 0.4
       float glowexponent = -0.1
       float glowalpha = 2.1
}

namespace viimeiset
{
       vec3 cameraposition = 0 20 -100
       vec3 cameratarget = 0 0 0

       vec3 camerapositionstart = 0 20 -70
       vec3 camerapositionend = 0 15 0
       vec3 cameratargetstart = 0 0 200
       vec3 cameratargetend  = 0 0 200

       vec3 sunposition = 200 150 600
       range sunmovement = 0.1 0.4
       range sunspread = 4.1 10.5
       range sunsize = 45.0 60.0
       range sunalpha = 0.01 0.012

       vec3 cameraup = 0 1 0

       vec3 textpos = 0.50 0.1 0
       float textscalestart = 0.5
       float textscaleend = 0.5

       float cameraradius = 10
       float focusdistance = 0.05

       float terrainscale = 1.5;
       float terrainheightscale = 5.0;

       int glowiterations = 10
       float glowspreadx = 5.001
       float glowspready = 5.001
       float glowexponent = 2.0
       float glowalpha = 4.0

       float constantfade = -0.2
       float noisepower = 500

}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;     beat                                                                                                     ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

bpm pulse
{
       bpm = 126
       offset = 0
}

bpm pulsehalf
{
       bpm = 63
       offset = 0
}

bpm pulsequarter
{
       bpm = 31.5
       offset = 0
}
bpm pulseeighth
{
       bpm = 15.75
       offset = 0
}

event startfadein
{
       time = 2000
       length = 15000
}
event startfadeout
{
       time = 42000
       length = 5000
}

event grouptitle
{
       time = 14000
       length = 6000
}
event grouptitle2
{
       time = 20000
       length = 6000
}

event demotitle
{
       time = 26000
       length = 10000
}
event tulifadein
{
       time = 48000
       length = 4000
}
event tulifadeout
{
       time = 95000
       length = 4000
}
event koronafadein
{
       time = 100000
       length = 4000
}
event koronafadeout
{
       time = 169800
       length = 200
}

event koronareveal
{
       time = 122000
       length = 10000
}
event maailmafadein
{
       time = 167000
       length = 3000
}
event maailmafadeout
{
       time = 196000
       length = 4000
}
event kasvotfadein
{
       time = 170000
       length = 3000
}
event kasvotchange
{
       time = 184800
       length = 6000
}
event kasvotshake
{
       time = 187000
       length = 10000
}
event kasvotfadechange
{
       time = 180000
       length = 15000
}

event kasvotfadeout
{
       time = 209000
       length = 1000
}

event korona2fadein
{
       time = 211000
       length = 4000
}
event korona2fadeout
{
       time = 258000
       length = 2000
}

event kauneusfadein
{
       time = 260000
       length = 15000
}
event kauneusfadeout
{
       time = 290000
       length = 10000
}
event viimeisetfadein
{
       time = 300000
       length = 10000
}

event viimeisetfadeout
{
       time = 333000
       length = 7000
}

event credits
{
       time = 315000
       length = 18000
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;     meshes                                                                                                                                                                   ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

/*
mesh testi.obj
{
       usevbo = true
       autotexture = false
       texture = texture1.jpg
       usefacenormals = false
       calculatenormals = false
       retain = true
}
*/
/*
mesh sphere.obj
{
       usevbo = true
}
mesh test.obj
{
       usevbo = true
}
*/

mesh sphere.obj
{
       usevbo = true
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;     textures                                                                                 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; upload = true/false
; wrap   = repeat/clamp
; retain = true/false
; mipmap = true/false
; filter = nearest / linear
/*
texture test.jpg
{
       mipmap = true
       wrap = repeat
       filter = linear
       retain = true
}
*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;     postprocessing rendertargets                                                             ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

texture main
{
       width = 1024;
       height = 1024;
       format = float16;
}

texture main_downscale1
{
       width = 512;
       height = 512;
       format = float16;
       wrap = clamp;
}
texture main_downscale2
{
       width = 256;
       height = 256;
       format = float16;
       wrap = clamp;
}
texture main_downscale3
{
       width = 256;
       height = 256;
       format = float16;
       wrap = clamp;
}
texture main_downscale3_2
{
       width = 256;
       height = 256;
       format = float16;
       wrap = clamp;
}

texture computetest
{
       width = 1024;
       height = 1024;
       format = float32;
}

texture lens_coc
{
       width = 1024;
       height = 1024;
       format = float16;
       wrap = clamp;
}

texture post1
{
       width = 1024;
       height = 1024;
       format = float16;
       wrap = clamp;
}
texture post2
{
       width = 1024;
       height = 1024;
       format = float16;
       wrap = clamp;
}
texture downscale1
{
       width = 512;
       height = 512;
       format = float16;
       wrap = clamp;
}
texture downscale2
{
       width = 256;
       height = 256;
       format = float16;
       wrap = clamp;
}
texture downscale3
{
       width = 256;
       height = 256;
       format = float16;
       wrap = clamp;
}
texture downscale3_2
{
       width = 256;
       height = 256;
       format = float16;
       wrap = clamp;
}

texture heightmap1
{
       filename = heightmap1.jpg
}
texture heightmap2
{
       filename = heightmap2.jpg
}
texture mustakivi
{
       filename = mustakivi.jpg
}
texture kivitesti
{
       filename = kivitesti.jpg
}
texture whiteparticle
{
       filename = whiteparticle.png
}
texture circle
{
       filename = circle.png
}
texture oldman
{
       filename = oldman.png
}

texture demotitle
{
       filename = demotitle.png
}
texture grouptitle
{
       filename = traction.png
}
texture grouptitle2
{
       filename = brainstorm.png
}
texture credits
{
       filename = credits.png
}

texture dynamictest
{
       type = cubemap;
       format = rgba;
       width = 1024;
       height = 1024;
}
texture fjaraenv
{
       type = cubemap;
       format = rgba;
       width = 1024;
       height = 1024;

       filenameposx = fjara_negx.jpg
       filenamenegx = fjara_posx.jpg
       filenameposy = fjara_posy.jpg
       filenamenegy = fjara_negy.jpg
       filenameposz = fjara_posz.jpg
       filenamenegz = fjara_negz.jpg
}

; some whitespade needed :)