diff --git a/shader/texture/antia.frag b/shader/texture/antia.frag index 09293d84f..0cefce4d8 100644 --- a/shader/texture/antia.frag +++ b/shader/texture/antia.frag @@ -24,6 +24,16 @@ int i = int(( floor(vTexPos.x * screensize.x))) % 4; int j = int(( floor(vTexPos.y * screensize.y))) % 4; vec4 edgecase (vec3 e1, vec3 e2) { return vec4((t(e1,e2) && bt(e1,c) ? e1 : c),1); } +vec4 ttlcase (vec3 tt, vec3 tr, vec3 mr, vec3 br, vec3 bb, vec3 bl, vec3 ml, vec3 tl) +{ + if (t(tl,tt) && t(tl,mr)) + {return vec4(tl,1);} + if (t(tl,tt) && t(tl,ml)) + {return vec4(tt,1);} +// if (t(tt,mr) && bt(tt,c)) +// {return vec4(tt,1);} + return vec4(c,1); +} vec4 corncase (vec3 e1, vec3 e2, vec3 corn) { return vec4( (t(e1,e2) && false == (t(corn,c)) ? e1 : c) , 1);} //{ return vec4( (t(e1,e2) ? e1 : c) , 1);} @@ -55,20 +65,28 @@ else { fColor = vec4(0,0,0,1); switch (i * 10 + j) { case 10: + fColor = ttlcase(bb,br,mr,tr,tt,tl,ml,bl); + break; case 01: - fColor = edgecase(ml,bb); + fColor = ttlcase(ml,tl,tt,tr,mr,br,bb,bl); break; case 13: + fColor = ttlcase(tt,tr,mr,br,bb,bl,ml,tl); + break; case 02: - fColor = edgecase(ml,tt); + fColor = ttlcase(ml,bl,bb,br,mr,tr,tt,tl); break; case 23: + fColor = ttlcase(tt,tl,ml,bl,bb,br,mr,tr); + break; case 32: - fColor = edgecase(mr,tt); + fColor = ttlcase(mr,br,bb,bl,ml,tl,tt,tr); break; case 20: + fColor = ttlcase(bb,bl,ml,tl,tt,tr,mr,br); + break; case 31: - fColor = edgecase(mr,bb); + fColor = ttlcase(mr,tr,tt,tl,ml,bl,bb,br); break; case 00: fColor = corncase(ml,bb,bl); @@ -78,7 +96,6 @@ else break; case 33: fColor = corncase(mr,tt,tr); - //fColor = vec4(1,0,0,1); break; case 30: fColor = corncase(mr,bb,br); diff --git a/shader/texture/antia3.frag b/shader/texture/antia3.frag new file mode 100644 index 000000000..0cefce4d8 --- /dev/null +++ b/shader/texture/antia3.frag @@ -0,0 +1,105 @@ +#version 450 core +in vec2 vTexPos; +out vec4 fColor; +layout (location = 0) uniform vec2 screensize; +layout(binding = 0) uniform sampler2D screenTexture; +vec3 f (float x, float y) +//{ return texture(screenTexture, vTexPos + vec2((x+0.5)/screensize.x,(y+0.5)/screensize.y)).xyz; +{ return texture(screenTexture, vTexPos + vec2(x/screensize.x,y/screensize.y)).xyz; +} +bool t (vec3 x, vec3 y) +{ return dot(x-y,x-y) < 0.005; +} +bool t3 (vec3 x, vec3 y, vec3 z) +{ return t(x,y) && t(y,z); +} +vec3 c = f(0,0); +bool bt (vec3 x, vec3 y) +{ return x.x+x.y+x.z > y.x+y.y+y.z;} +bool t4 (vec3 x, vec3 y, vec3 z) +{ return t(x,z) && (t(x,y) || bt(x,c)) ; } +bool incenter (int x) { return x > 0 && x < 3; } +int three = int(( floor(vTexPos.y * screensize.y))) % 3; +int i = int(( floor(vTexPos.x * screensize.x))) % 4; +int j = int(( floor(vTexPos.y * screensize.y))) % 4; +vec4 edgecase (vec3 e1, vec3 e2) +{ return vec4((t(e1,e2) && bt(e1,c) ? e1 : c),1); } +vec4 ttlcase (vec3 tt, vec3 tr, vec3 mr, vec3 br, vec3 bb, vec3 bl, vec3 ml, vec3 tl) +{ + if (t(tl,tt) && t(tl,mr)) + {return vec4(tl,1);} + if (t(tl,tt) && t(tl,ml)) + {return vec4(tt,1);} +// if (t(tt,mr) && bt(tt,c)) +// {return vec4(tt,1);} + return vec4(c,1); +} +vec4 corncase (vec3 e1, vec3 e2, vec3 corn) +{ return vec4( (t(e1,e2) && false == (t(corn,c)) ? e1 : c) , 1);} +//{ return vec4( (t(e1,e2) ? e1 : c) , 1);} +void main() +{ +vec3 tl = f(-4, 4); +vec3 tt = f( 0, 4); +vec3 tr = f( 4, 4); +vec3 mr = f( 4, 0); +vec3 br = f( 4,-4); +vec3 bb = f( 0,-4); +vec3 bl = f(-4,-4); +vec3 ml = f(-4, 0); +vec3 tlc = f(-1, 1); +vec3 trc = f( 1, 1); +vec3 brc = f( 1,-1); +vec3 blc = f(-1,-1); +// if (t4(tl,tr,br)) +// { fColor = vec4(tl,1);} +// else if (t4(tr,br,bl)) +// { fColor = vec4(tr,1);} +// else if (t4(br,bl,tl)) +// { fColor = vec4(br,1);} +// else if (t4(bl,tl,tr)) +// { fColor = vec4(bl,1);} +if (incenter(i) && incenter(j)) + {fColor = vec4(c,1); } +else + { fColor = vec4(0,0,0,1); + switch (i * 10 + j) { + case 10: + fColor = ttlcase(bb,br,mr,tr,tt,tl,ml,bl); + break; + case 01: + fColor = ttlcase(ml,tl,tt,tr,mr,br,bb,bl); + break; + case 13: + fColor = ttlcase(tt,tr,mr,br,bb,bl,ml,tl); + break; + case 02: + fColor = ttlcase(ml,bl,bb,br,mr,tr,tt,tl); + break; + case 23: + fColor = ttlcase(tt,tl,ml,bl,bb,br,mr,tr); + break; + case 32: + fColor = ttlcase(mr,br,bb,bl,ml,tl,tt,tr); + break; + case 20: + fColor = ttlcase(bb,bl,ml,tl,tt,tr,mr,br); + break; + case 31: + fColor = ttlcase(mr,tr,tt,tl,ml,bl,bb,br); + break; + case 00: + fColor = corncase(ml,bb,bl); + break; + case 03: + fColor = corncase(ml,tt,tl); + break; + case 33: + fColor = corncase(mr,tt,tr); + break; + case 30: + fColor = corncase(mr,bb,br); + break; + } + } +} diff --git a/shader/texture/softcorners.frag b/shader/texture/softcorners.frag new file mode 100644 index 000000000..09293d84f --- /dev/null +++ b/shader/texture/softcorners.frag @@ -0,0 +1,88 @@ +#version 450 core +in vec2 vTexPos; +out vec4 fColor; +layout (location = 0) uniform vec2 screensize; +layout(binding = 0) uniform sampler2D screenTexture; +vec3 f (float x, float y) +//{ return texture(screenTexture, vTexPos + vec2((x+0.5)/screensize.x,(y+0.5)/screensize.y)).xyz; +{ return texture(screenTexture, vTexPos + vec2(x/screensize.x,y/screensize.y)).xyz; +} +bool t (vec3 x, vec3 y) +{ return dot(x-y,x-y) < 0.005; +} +bool t3 (vec3 x, vec3 y, vec3 z) +{ return t(x,y) && t(y,z); +} +vec3 c = f(0,0); +bool bt (vec3 x, vec3 y) +{ return x.x+x.y+x.z > y.x+y.y+y.z;} +bool t4 (vec3 x, vec3 y, vec3 z) +{ return t(x,z) && (t(x,y) || bt(x,c)) ; } +bool incenter (int x) { return x > 0 && x < 3; } +int three = int(( floor(vTexPos.y * screensize.y))) % 3; +int i = int(( floor(vTexPos.x * screensize.x))) % 4; +int j = int(( floor(vTexPos.y * screensize.y))) % 4; +vec4 edgecase (vec3 e1, vec3 e2) +{ return vec4((t(e1,e2) && bt(e1,c) ? e1 : c),1); } +vec4 corncase (vec3 e1, vec3 e2, vec3 corn) +{ return vec4( (t(e1,e2) && false == (t(corn,c)) ? e1 : c) , 1);} +//{ return vec4( (t(e1,e2) ? e1 : c) , 1);} +void main() +{ +vec3 tl = f(-4, 4); +vec3 tt = f( 0, 4); +vec3 tr = f( 4, 4); +vec3 mr = f( 4, 0); +vec3 br = f( 4,-4); +vec3 bb = f( 0,-4); +vec3 bl = f(-4,-4); +vec3 ml = f(-4, 0); +vec3 tlc = f(-1, 1); +vec3 trc = f( 1, 1); +vec3 brc = f( 1,-1); +vec3 blc = f(-1,-1); +// if (t4(tl,tr,br)) +// { fColor = vec4(tl,1);} +// else if (t4(tr,br,bl)) +// { fColor = vec4(tr,1);} +// else if (t4(br,bl,tl)) +// { fColor = vec4(br,1);} +// else if (t4(bl,tl,tr)) +// { fColor = vec4(bl,1);} +if (incenter(i) && incenter(j)) + {fColor = vec4(c,1); } +else + { fColor = vec4(0,0,0,1); + switch (i * 10 + j) { + case 10: + case 01: + fColor = edgecase(ml,bb); + break; + case 13: + case 02: + fColor = edgecase(ml,tt); + break; + case 23: + case 32: + fColor = edgecase(mr,tt); + break; + case 20: + case 31: + fColor = edgecase(mr,bb); + break; + case 00: + fColor = corncase(ml,bb,bl); + break; + case 03: + fColor = corncase(ml,tt,tl); + break; + case 33: + fColor = corncase(mr,tt,tr); + //fColor = vec4(1,0,0,1); + break; + case 30: + fColor = corncase(mr,bb,br); + break; + } + } +} diff --git a/shader/texture/texelFetch.frag b/shader/texture/texelFetch.frag new file mode 100644 index 000000000..b525ad9da --- /dev/null +++ b/shader/texture/texelFetch.frag @@ -0,0 +1,111 @@ +#version 450 core +in vec2 vTexPos; +out vec4 fColor; +layout (location = 0) uniform vec2 screensize; +layout(binding = 0) uniform sampler2D screenTexture; +vec3 f (float x, float y) +//{ return texture(screenTexture, vTexPos + vec2((x+0.5)/screensize.x,(y+0.5)/screensize.y)).xyz; +{ return texture(screenTexture, vTexPos + vec2(x/screensize.x,y/screensize.y)).xyz; +} +bool t (vec3 x, vec3 y) +{ return dot(x-y,x-y) < 0.005; +} +bool t3 (vec3 x, vec3 y, vec3 z) +{ return t(x,y) && t(y,z); +} +//vec3 c = f(0,0); +vec3 c = texelFetch(screenTexture + ,ivec2(floor(0.25*vTexPos.x*screensize.x),floor(0.25*vTexPos.y*screensize.y)) + , 0).xyz; +bool bt (vec3 x, vec3 y) +{ return x.x+x.y+x.z > y.x+y.y+y.z;} +bool t4 (vec3 x, vec3 y, vec3 z) +{ return t(x,z) && (t(x,y) || bt(x,c)) ; } +bool incenter (int x) { return x > 0 && x < 3; } +int three = int(( floor(vTexPos.y * screensize.y))) % 3; +int i = int(( floor(vTexPos.x * screensize.x))) % 4; +int j = int(( floor(vTexPos.y * screensize.y))) % 4; +vec4 edgecase (vec3 e1, vec3 e2) +{ return vec4((t(e1,e2) && bt(e1,c) ? e1 : c),1); } +vec4 ttlcase (vec3 tt, vec3 tr, vec3 mr, vec3 br, vec3 bb, vec3 bl, vec3 ml, vec3 tl) +{ + if (t(tl,tt) && t(tl,mr)) + {return vec4(tl,1);} + if (t(tl,tt) && t(tl,ml)) + {return vec4(tt,1);} +// if (t(tt,mr) && bt(tt,c)) +// {return vec4(tt,1);} + return vec4(c,1); +} +vec4 corncase (vec3 e1, vec3 e2, vec3 corn) +{ return vec4( (t(e1,e2) && false == (t(corn,c)) ? e1 : c) , 1);} +//{ return vec4( (t(e1,e2) ? e1 : c) , 1);} +void main() +{ +vec3 tl = f(-4, 4); +vec3 tt = f( 0, 4); +vec3 tr = f( 4, 4); +vec3 mr = f( 4, 0); +vec3 br = f( 4,-4); +vec3 bb = f( 0,-4); +vec3 bl = f(-4,-4); +vec3 ml = f(-4, 0); +vec3 tlc = f(-1, 1); +vec3 trc = f( 1, 1); +vec3 brc = f( 1,-1); +vec3 blc = f(-1,-1); +// if (t4(tl,tr,br)) +// { fColor = vec4(tl,1);} +// else if (t4(tr,br,bl)) +// { fColor = vec4(tr,1);} +// else if (t4(br,bl,tl)) +// { fColor = vec4(br,1);} +// else if (t4(bl,tl,tr)) +// { fColor = vec4(bl,1);} +if (incenter(i) && incenter(j)) + {fColor = vec4(c,1); } + //{fColor = vec4(0,0,0,1); } +//else {fColor = vec4(f(0,0),1);} +else {fColor = vec4(c,1);} +//else +// { fColor = vec4(0,0,0,1); +// switch (i * 10 + j) { +// case 10: +// fColor = ttlcase(bb,br,mr,tr,tt,tl,ml,bl); +// break; +// case 01: +// fColor = ttlcase(ml,tl,tt,tr,mr,br,bb,bl); +// break; +// case 13: +// fColor = ttlcase(tt,tr,mr,br,bb,bl,ml,tl); +// break; +// case 02: +// fColor = ttlcase(ml,bl,bb,br,mr,tr,tt,tl); +// break; +// case 23: +// fColor = ttlcase(tt,tl,ml,bl,bb,br,mr,tr); +// break; +// case 32: +// fColor = ttlcase(mr,br,bb,bl,ml,tl,tt,tr); +// break; +// case 20: +// fColor = ttlcase(bb,bl,ml,tl,tt,tr,mr,br); +// break; +// case 31: +// fColor = ttlcase(mr,tr,tt,tl,ml,bl,bb,br); +// break; +// case 00: +// fColor = corncase(ml,bb,bl); +// break; +// case 03: +// fColor = corncase(ml,tt,tl); +// break; +// case 33: +// fColor = corncase(mr,tt,tr); +// break; +// case 30: +// fColor = corncase(mr,bb,br); +// break; +// } +// } +} diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index 005a7383e..4c83e3583 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -28,6 +28,7 @@ data RenderData = RenderData , _shapeEBO :: UintBO , _silhouetteEBO :: UintBO , _pictureShaders :: MV.MVector (PrimState IO) (GLuint,VBO) + , _fboFullscreen :: (FBO,TO) , _fboHalf1 :: (FBO, TO) , _fboHalf2 :: (FBO, TO) , _fboBase :: (FBO, (TO, TO, TO)) diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 480dd3a38..a97e2beeb 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -44,6 +44,7 @@ doTestDrawing _ _ = do doDrawing' :: SDL.Window -> RenderData -> Universe -> IO () doDrawing' win pdata u = do --sTicks <- SDL.ticks +-- SDL.glSwapWindow win let w = _uvWorld u cfig = _uvConfig u (windowPoints, wallSPics, wallsToPoke) = wallsToDraw w @@ -370,6 +371,7 @@ doDrawing' win pdata u = do glBindFramebuffer GL_FRAMEBUFFER 0 if (cfig ^. gr_upscale_filter) then do glUseProgram (pdata ^. textureAntiaShader) + glGenerateTextureMipmap (pdata ^. fboBase . _2 . _1 . unTO) glUniform2f 0 (windowXFloat cfig) (windowYFloat cfig) else glUseProgram (pdata ^. fullscreenShader) --glDrawArrays GL_TRIANGLES 0 6 diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 5063c49c6..e559e969f 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -48,6 +48,12 @@ tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor + , return $ tToBTree "cor" $ return $ cleatOnward corridor + , tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom + , return $ tToBTree "cor" $ return $ cleatOnward corridor + , return $ tToBTree "cor" $ return $ cleatOnward corridor + , return $ tToBTree "cor" $ return $ cleatOnward corridor + , return $ tToBTree "cor" $ return $ cleatOnward corridor , tutHub , tutLight , tutDrop diff --git a/src/Framebuffer/Update.hs b/src/Framebuffer/Update.hs index 7e028f294..7fd67d926 100644 --- a/src/Framebuffer/Update.hs +++ b/src/Framebuffer/Update.hs @@ -44,6 +44,15 @@ sizeFBOs cfig rdata = GL_RGBA16F GL_RGBA16F ) + >>= fboFullscreen + ( resizeFBOTO' + (getWindowSize (const FullRes) cfig) + 1 + GL_NEAREST + GL_NEAREST + GL_RGBA16F + -- [fboBloom] -- fboPos probably doesn't need the alpha channel + ) >>= foldUpdateFBOTO _gr_world_res GL_NEAREST diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 9ef2f7be9..5ef7b78bd 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -178,6 +178,7 @@ preloadRender = do fboPosName <- setupFramebufferGivenStencil rboBaseBloomName fboLightingName <- setupFramebufferGivenStencil rboBaseBloomName + fbofullscreen <- newTextureFramebuffer fboHalf1Name <- newTextureFramebuffer fboHalf2Name <- newTextureFramebuffer @@ -206,6 +207,7 @@ preloadRender = do , _bloomBlurShader = bloomBlurShad , _barrelShader = (barrelShad,distvbo) -- , _fbo2 = framebuf2 + , _fboFullscreen = fbofullscreen , _fboHalf1 = fboHalf1Name , _fboHalf2 = fboHalf2Name , _fboLighting = fboLightingName diff --git a/tags b/tags index 276410a15..9c6b5b4c4 100644 --- a/tags +++ b/tags @@ -45,7 +45,7 @@ AimStance src/Dodge/Data/AimStance.hs 10;" t Aiming src/Dodge/Data/Creature/Stance.hs 34;" C AirFiltrationSS src/Dodge/Data/Scenario.hs 95;" C AlienContact src/Dodge/Data/Scenario.hs 30;" C -AllRoomClipBoundaries src/Dodge/Data/Config.hs 120;" C +AllRoomClipBoundaries src/Dodge/Data/Config.hs 121;" C AlteRifleSwitch src/Dodge/Data/Item/Params.hs 18;" C Ambush src/Dodge/Data/ActionPlan.hs 130;" C AmmoEffectSF src/Dodge/Data/ComposedItem.hs 33;" C @@ -136,7 +136,7 @@ Blunt src/Dodge/Data/Damage.hs 17;" C Boosting src/Dodge/Data/Creature/Stance.hs 27;" C BottomMenuOption src/Dodge/Data/Universe.hs 77;" C BounceBullet src/Dodge/Data/Bullet.hs 28;" C -Bound_box_screen src/Dodge/Data/Config.hs 93;" C +Bound_box_screen src/Dodge/Data/Config.hs 94;" C BoundaryCursor src/Dodge/Data/SelectionList.hs 20;" C Bounds src/Dodge/Data/Bounds.hs 10;" t BrigSS src/Dodge/Data/Scenario.hs 102;" C @@ -205,16 +205,16 @@ ChasmObstacle src/Dodge/Data/PathGraph.hs 51;" C ChemFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 14;" C ChooseMovementLtAuto src/Dodge/Data/CreatureEffect.hs 29;" C ChooseMovementSpreadGun src/Dodge/Data/CreatureEffect.hs 28;" C -Circ_collision_test src/Dodge/Data/Config.hs 97;" C +Circ_collision_test src/Dodge/Data/Config.hs 98;" C Climate src/Dodge/Data/Scenario.hs 32;" C CloseToMelee src/Dodge/Data/ActionPlan.hs 139;" C -Close_shape_culling src/Dodge/Data/Config.hs 91;" C +Close_shape_culling src/Dodge/Data/Config.hs 92;" C Cloud src/Dodge/Data/Cloud.hs 12;" t CloudType src/Dodge/Data/Cloud.hs 20;" t ClusterLink src/Dodge/Data/RoomCluster.hs 13;" t ClusterStatus src/Dodge/Data/RoomCluster.hs 9;" t Cognizant src/Dodge/Data/Creature/Perception.hs 65;" C -Collision_test src/Dodge/Data/Config.hs 96;" C +Collision_test src/Dodge/Data/Config.hs 97;" C Color src/Color/Data.hs 30;" t Color8 src/Color/Data.hs 32;" t ColorFaction src/Dodge/Data/Creature/State.hs 19;" C @@ -269,8 +269,8 @@ CrWdBFSThenReturn src/Dodge/Data/CreatureEffect.hs 27;" C CrWeaponFailSound src/Dodge/Data/SoundOrigin.hs 20;" C CrWeaponSound src/Dodge/Data/SoundOrigin.hs 18;" C CrWlID src/Dodge/Data/CrWlID.hs 10;" t -Cr_awareness src/Dodge/Data/Config.hs 84;" C -Cr_status src/Dodge/Data/Config.hs 83;" C +Cr_awareness src/Dodge/Data/Config.hs 85;" C +Cr_status src/Dodge/Data/Config.hs 84;" C CraftClust src/Dodge/Combine/Graph.hs 18;" C CraftType src/Dodge/Data/Item/Combine.hs 49;" t CreateFlame src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" C @@ -283,7 +283,7 @@ Crushing src/Dodge/Data/Damage.hs 19;" C CryoReleaseCloud src/Dodge/Data/Cloud.hs 23;" C CryostatisSS src/Dodge/Data/Scenario.hs 91;" C Crystal src/Dodge/Data/Material.hs 16;" C -Cull_more_lights src/Dodge/Data/Config.hs 90;" C +Cull_more_lights src/Dodge/Data/Config.hs 91;" C CursorDisplay src/Dodge/Data/SelectionList.hs 19;" t Cylinder src/Shape/Data.hs 14;" C DETECTOR src/Dodge/Data/Item/Combine.hs 33;" C @@ -307,11 +307,11 @@ DamageType src/Dodge/Data/Damage/Type.hs 3;" t Debris src/Dodge/Data/Prop.hs 25;" t DebrisChunk src/Dodge/Data/Prop.hs 25;" C DebrisType src/Dodge/Data/Prop.hs 21;" t -DebugBool src/Dodge/Data/Config.hs 76;" t +DebugBool src/Dodge/Data/Config.hs 77;" t DebugItem src/Dodge/Data/Universe.hs 59;" t DebugLayer src/Picture/Data.hs 23;" C -Debug_get src/Dodge/Data/Config.hs 79;" C -Debug_put src/Dodge/Data/Config.hs 80;" C +Debug_get src/Dodge/Data/Config.hs 80;" C +Debug_put src/Dodge/Data/Config.hs 81;" C DecorationShape src/Dodge/Data/GenParams.hs 18;" t DefaultCrGroupUpdate src/Dodge/Data/CrGroupParams.hs 20;" C DefaultForceField src/Dodge/Data/Item/Use/Consumption/Ammo.hs 11;" C @@ -324,7 +324,7 @@ Detector src/Dodge/Data/Item/Combine.hs 181;" t Dirt src/Dodge/Data/Material.hs 12;" C DisasterType src/Dodge/Data/Scenario.hs 24;" t DisplayTerminal src/Dodge/Data/HUD.hs 27;" C -Display_debug src/Dodge/Data/Config.hs 78;" C +Display_debug src/Dodge/Data/Config.hs 79;" C Distortion src/Dodge/Data/Distortion.hs 11;" t DivineRetribution src/Dodge/Data/Scenario.hs 35;" C DoActionIf src/Dodge/Data/ActionPlan.hs 87;" C @@ -345,7 +345,7 @@ DoorDoNothing src/Dodge/Data/Door.hs 43;" C DoorLerp src/Dodge/Data/Door.hs 43;" C DoorPart src/Dodge/Data/Wall/Structure.hs 12;" C DoorUpdate src/Dodge/Data/Door.hs 43;" t -DoubleRes src/Dodge/Data/Config.hs 110;" C +DoubleRes src/Dodge/Data/Config.hs 111;" C DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 14;" t DrawForceField src/Dodge/Data/Wall.hs 37;" C DrawnWall src/Dodge/Data/Wall.hs 33;" C @@ -363,7 +363,7 @@ Ears src/Dodge/Data/Creature/Perception.hs 45;" C East src/Dodge/Data/CardinalPoint.hs 8;" C East8 src/Dodge/Data/CardinalPoint.hs 30;" C EdgeObstacle src/Dodge/Data/PathGraph.hs 49;" t -EighthRes src/Dodge/Data/Config.hs 110;" C +EighthRes src/Dodge/Data/Config.hs 111;" C Eldritch src/Dodge/Data/Scenario.hs 34;" C ElectricSensor src/Dodge/Data/Machine/Sensor.hs 14;" C ElectricSpark src/Dodge/Data/Spark.hs 19;" C @@ -452,7 +452,7 @@ ForceField src/Dodge/Data/Material.hs 19;" C ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 11;" t ForegroundShape src/Dodge/Data/ForegroundShape.hs 12;" t FromEdge src/Dodge/Data/Room.hs 49;" C -FullRes src/Dodge/Data/Config.hs 110;" C +FullRes src/Dodge/Data/Config.hs 111;" C FullShadowFidelity src/Shape/Data.hs 19;" C FullSize src/Dodge/Data/Item/Params.hs 26;" C FullyVisible src/Dodge/Data/CamouflageStatus.hs 6;" C @@ -480,7 +480,7 @@ GenFloat src/Dodge/Data/GenFloat.hs 9;" t GenParams src/Dodge/Data/GenParams.hs 13;" t GenWorld src/Dodge/Data/GenWorld.hs 23;" t GenericFaction src/Dodge/Data/Creature/State.hs 13;" C -GeoObjShads src/Dodge/Data/Config.hs 114;" C +GeoObjShads src/Dodge/Data/Config.hs 115;" C GetTo src/Dodge/Data/ActionPlan.hs 141;" C GetToPoint src/Dodge/Data/Scenario.hs 12;" C Gib src/Dodge/Data/Prop.hs 22;" C @@ -510,7 +510,7 @@ HOMINGMODULE src/Dodge/Data/Item/Combine.hs 100;" C HOSE src/Dodge/Data/Item/Combine.hs 54;" C HP src/Dodge/Data/Creature.hs 63;" C HUD src/Dodge/Data/HUD.hs 29;" t -HalfRes src/Dodge/Data/Config.hs 110;" C +HalfRes src/Dodge/Data/Config.hs 111;" C HammerTrigger src/Dodge/Data/TriggerType.hs 10;" C HardQuit src/Dodge/Data/Universe.hs 70;" C HeavySmokeFlare src/Dodge/Data/Muzzle.hs 33;" C @@ -568,12 +568,12 @@ IncendiaryBall src/Dodge/Data/EnergyBall/Type.hs 11;" C InheritFloor src/Data/Tile.hs 12;" C Input src/Dodge/Data/Input.hs 33;" t InputScreen src/Dodge/Data/Universe.hs 92;" C -Inspect_wall src/Dodge/Data/Config.hs 104;" C +Inspect_wall src/Dodge/Data/Config.hs 105;" C Institution src/Dodge/Data/Scenario.hs 42;" t Int2 src/Geometry/Data.hs 21;" t IntID src/Dodge/Data/Universe.hs 110;" t Intention src/Dodge/Data/Creature.hs 68;" t -IntersectingRoomClipBoundaries src/Dodge/Data/Config.hs 120;" C +IntersectingRoomClipBoundaries src/Dodge/Data/Config.hs 121;" C IntroScanSF src/Dodge/Data/ComposedItem.hs 21;" C IntroScanType src/Dodge/Data/Item/Combine.hs 44;" t InvInt src/Dodge/Data/Item/Location.hs 16;" t @@ -762,7 +762,7 @@ MouseGameRotate src/Dodge/Data/Input.hs 29;" C MouseInGame src/Dodge/Data/Input.hs 16;" C MouseMenuClick src/Dodge/Data/Input.hs 17;" C MouseMenuCursor src/Dodge/Data/Input.hs 18;" C -Mouse_position src/Dodge/Data/Config.hs 85;" C +Mouse_position src/Dodge/Data/Config.hs 86;" C Move src/Dodge/Data/ActionPlan.hs 26;" C MoveEquipment src/Dodge/Data/RightButtonOptions.hs 20;" C MoveForward src/Dodge/Data/ActionPlan.hs 27;" C @@ -822,20 +822,20 @@ NoItTargeting src/Dodge/Data/Item.hs 44;" C NoItemScroll src/Dodge/Data/Item.hs 39;" C NoItemZone src/Dodge/Data/Machine/Sensor.hs 32;" C NoLightFlare src/Dodge/Data/Muzzle.hs 31;" C -NoLighting src/Dodge/Data/Config.hs 117;" C +NoLighting src/Dodge/Data/Config.hs 118;" C NoMouseContext src/Dodge/Data/Input.hs 14;" C NoMvType src/Dodge/Data/Creature/Misc.hs 27;" C -NoObjShads src/Dodge/Data/Config.hs 115;" C +NoObjShads src/Dodge/Data/Config.hs 116;" C NoParams src/Dodge/Data/Item/Params.hs 13;" C NoRightButtonState src/Dodge/Data/RightButtonOptions.hs 14;" C -NoRoomClipBoundaries src/Dodge/Data/Config.hs 120;" C +NoRoomClipBoundaries src/Dodge/Data/Config.hs 121;" C NoSF src/Dodge/Data/ComposedItem.hs 29;" C NoShadowFidelity src/Shape/Data.hs 20;" C -NoShadows src/Dodge/Data/Config.hs 116;" C +NoShadows src/Dodge/Data/Config.hs 117;" C NoSubInventory src/Dodge/Data/HUD.hs 15;" C NoTrigger src/Dodge/Data/TriggerType.hs 11;" C NoWorldEffect src/Dodge/Data/WorldEffect.hs 21;" C -Noclip src/Dodge/Data/Config.hs 82;" C +Noclip src/Dodge/Data/Config.hs 83;" C NodeMTree src/Dodge/Data/MetaTree.hs 16;" C NodeTree src/Dodge/Data/MetaTree.hs 15;" C NonDrawnCreature src/Dodge/Data/Creature/Misc.hs 82;" C @@ -963,7 +963,7 @@ PathBetweenLeftRightClick src/Dodge/Data/Universe.hs 55;" C PathFromEdge src/Dodge/Data/Room.hs 77;" t PathShowType src/Dodge/Data/Universe.hs 54;" t PathTo src/Dodge/Data/ActionPlan.hs 70;" C -Pathing src/Dodge/Data/Config.hs 88;" C +Pathing src/Dodge/Data/Config.hs 89;" C Patrol src/Dodge/Data/ActionPlan.hs 132;" C PausedTimeFlow src/Dodge/Data/World.hs 79;" C Payload src/Dodge/Data/Payload.hs 9;" t @@ -1039,7 +1039,7 @@ PutTrigger src/Dodge/Data/GenWorld.hs 47;" C PutWall src/Dodge/Data/GenWorld.hs 54;" C PutWorldUpdate src/Dodge/Data/GenWorld.hs 58;" C QFloat src/Geometry/Data.hs 50;" t -QuarterRes src/Dodge/Data/Config.hs 110;" C +QuarterRes src/Dodge/Data/Config.hs 111;" C QuicksaveSlot src/Dodge/Data/SaveSlot.hs 8;" C RAM src/Dodge/Data/Item/Combine.hs 73;" C RED src/Color/Data.hs 12;" C @@ -1074,13 +1074,13 @@ Reload src/Dodge/Data/ActionPlan.hs 142;" C RemoteDetonatorSF src/Dodge/Data/ComposedItem.hs 27;" C RemoteScreenSF src/Dodge/Data/ComposedItem.hs 25;" C RemoveEquipment src/Dodge/Data/RightButtonOptions.hs 33;" C -Remove_LOS src/Dodge/Data/Config.hs 89;" C +Remove_LOS src/Dodge/Data/Config.hs 90;" C RenderData src/Data/Preload/Render.hs 13;" t ReplaceEquipment src/Dodge/Data/RightButtonOptions.hs 29;" C RequireDeadCreatures src/Dodge/Data/Machine/Sensor.hs 37;" C RequireEquipment src/Dodge/Data/Machine/Sensor.hs 36;" C RequireHealth src/Dodge/Data/Machine/Sensor.hs 35;" C -ResFactor src/Dodge/Data/Config.hs 110;" t +ResFactor src/Dodge/Data/Config.hs 111;" t ResearchFacility src/Dodge/Data/Scenario.hs 62;" C ResourceFailure src/Dodge/Data/Scenario.hs 29;" C RespawnDelay src/Dodge/Data/World.hs 61;" C @@ -1098,7 +1098,7 @@ RocketHoming src/Dodge/Data/Projectile.hs 39;" t RocketSmoke src/Dodge/Data/Projectile.hs 52;" t RocketSmoke src/Dodge/Data/Cloud.hs 22;" C Room src/Dodge/Data/GenWorld.hs 120;" t -RoomClipping src/Dodge/Data/Config.hs 120;" t +RoomClipping src/Dodge/Data/Config.hs 121;" t RoomInt src/Dodge/Tree/Shift.hs 26;" t RoomLink src/Dodge/Data/Room.hs 24;" t RoomLinkType src/Dodge/Data/Room.hs 43;" t @@ -1160,7 +1160,7 @@ ShadNum src/Picture/Data.hs 31;" t Shader src/Shader/Data.hs 51;" t ShaderTexture src/Shader/Data.hs 102;" t ShadowFidelity src/Shape/Data.hs 19;" t -ShadowRendering src/Dodge/Data/Config.hs 113;" t +ShadowRendering src/Dodge/Data/Config.hs 114;" t Shape src/Shape/Data.hs 49;" t ShapeProp src/Dodge/Data/Prop.hs 14;" C ShapeType src/Shape/Data.hs 11;" t @@ -1173,27 +1173,27 @@ ShockwaveDirection src/Dodge/Data/Shockwave.hs 12;" t ShootAt src/Dodge/Data/ActionPlan.hs 133;" C ShortShow src/ShortShow.hs 6;" c ShortString src/ShortShow.hs 16;" t -Show_bound_box src/Dodge/Data/Config.hs 92;" C -Show_dda_test src/Dodge/Data/Config.hs 95;" C -Show_far_wall_detect src/Dodge/Data/Config.hs 98;" C -Show_mouse_click_pos src/Dodge/Data/Config.hs 107;" C -Show_ms_frame src/Dodge/Data/Config.hs 77;" C -Show_path_between src/Dodge/Data/Config.hs 105;" C -Show_sound src/Dodge/Data/Config.hs 81;" C -Show_wall_search_rays src/Dodge/Data/Config.hs 94;" C -Show_walls_near_point_cursor src/Dodge/Data/Config.hs 99;" C -Show_walls_near_point_you src/Dodge/Data/Config.hs 100;" C -Show_walls_near_segment src/Dodge/Data/Config.hs 101;" C -Show_writable_values src/Dodge/Data/Config.hs 106;" C -Show_zone_circ src/Dodge/Data/Config.hs 103;" C -Show_zone_near_point_cursor src/Dodge/Data/Config.hs 102;" C +Show_bound_box src/Dodge/Data/Config.hs 93;" C +Show_dda_test src/Dodge/Data/Config.hs 96;" C +Show_far_wall_detect src/Dodge/Data/Config.hs 99;" C +Show_mouse_click_pos src/Dodge/Data/Config.hs 108;" C +Show_ms_frame src/Dodge/Data/Config.hs 78;" C +Show_path_between src/Dodge/Data/Config.hs 106;" C +Show_sound src/Dodge/Data/Config.hs 82;" C +Show_wall_search_rays src/Dodge/Data/Config.hs 95;" C +Show_walls_near_point_cursor src/Dodge/Data/Config.hs 100;" C +Show_walls_near_point_you src/Dodge/Data/Config.hs 101;" C +Show_walls_near_segment src/Dodge/Data/Config.hs 102;" C +Show_writable_values src/Dodge/Data/Config.hs 107;" C +Show_zone_circ src/Dodge/Data/Config.hs 104;" C +Show_zone_near_point_cursor src/Dodge/Data/Config.hs 103;" C ShrapnelBomb src/Dodge/Data/Payload.hs 10;" C ShrinkGunStatus src/Dodge/Data/Item/Params.hs 26;" t Shrunk src/Dodge/Data/Item/Params.hs 26;" C SideCluster src/Dodge/Data/RoomCluster.hs 13;" C SideEffect src/Dodge/Data/Universe.hs 64;" t SimpleEdge src/Dodge/Data/PathGraph.hs 43;" t -SixteenthRes src/Dodge/Data/Config.hs 110;" C +SixteenthRes src/Dodge/Data/Config.hs 111;" C Size src/Shape/Data.hs 23;" t SkiffBaySS src/Dodge/Data/Scenario.hs 108;" C SleepingQuatersSS src/Dodge/Data/Scenario.hs 90;" C @@ -1405,7 +1405,7 @@ VIOLET src/Color/Data.hs 19;" C VOLLEYGUN src/Dodge/Data/Item/Combine.hs 151;" C VertexAttribute src/Shader/Data.hs 66;" t Verx src/Picture/Data.hs 11;" t -View_boundaries src/Dodge/Data/Config.hs 86;" C +View_boundaries src/Dodge/Data/Config.hs 87;" C ViewingDeckSS src/Dodge/Data/Scenario.hs 106;" C Vigilance src/Dodge/Data/Creature/Perception.hs 50;" t Vigilant src/Dodge/Data/Creature/Perception.hs 54;" C @@ -1434,7 +1434,7 @@ WallP src/Dodge/LevelGen/StaticWalls/Deprecated.hs 11;" t WallSound src/Dodge/Data/SoundOrigin.hs 24;" C WallStructure src/Dodge/Data/Wall/Structure.hs 10;" t WallWire src/Dodge/Data/Room.hs 55;" C -Walls_info src/Dodge/Data/Config.hs 87;" C +Walls_info src/Dodge/Data/Config.hs 88;" C War src/Dodge/Data/Scenario.hs 28;" C WarmTime src/Dodge/Data/Item/Params.hs 19;" C WarmUpCoolDown src/Dodge/Data/TriggerType.hs 14;" C @@ -1693,8 +1693,8 @@ _dbVel src/Dodge/Data/Prop.hs 28;" f _debris src/Dodge/Data/LWorld.hs 100;" f _debugFunction src/Dodge/Data/Universe.hs 61;" f _debugMessage src/Dodge/Data/Universe.hs 60;" f -_debug_booleans src/Dodge/Data/Config.hs 67;" f -_debug_view_clip_bounds src/Dodge/Data/Config.hs 66;" f +_debug_booleans src/Dodge/Data/Config.hs 68;" f +_debug_view_clip_bounds src/Dodge/Data/Config.hs 67;" f _delayedEvents src/Dodge/Data/LWorld.hs 130;" f _diCloseFilter src/Dodge/Data/HUD.hs 34;" f _diInvFilter src/Dodge/Data/HUD.hs 33;" f @@ -1796,7 +1796,7 @@ _fsSPic src/Dodge/Data/ForegroundShape.hs 15;" f _fullscreenShader src/Data/Preload/Render.hs 23;" f _futureWorlds src/Dodge/Data/World.hs 67;" f _futureWorlds src/Dodge/Data/World.hs 73;" f -_gameplay_rotate_to_wall src/Dodge/Data/Config.hs 65;" f +_gameplay_rotate_to_wall src/Dodge/Data/Config.hs 66;" f _genInts src/Dodge/Data/GenWorld.hs 27;" f _genPmnt src/Dodge/Data/GenWorld.hs 26;" f _genRooms src/Dodge/Data/GenWorld.hs 25;" f @@ -1816,15 +1816,16 @@ _grLinkDirs src/Dodge/GameRoom.hs 18;" f _grName src/Dodge/GameRoom.hs 19;" f _grViewpoints src/Dodge/GameRoom.hs 13;" f _grViewpointsEx src/Dodge/GameRoom.hs 14;" f -_gr_bloom src/Dodge/Data/Config.hs 54;" f -_gr_cloud_shadows src/Dodge/Data/Config.hs 52;" f -_gr_distortions src/Dodge/Data/Config.hs 53;" f -_gr_downsize_res src/Dodge/Data/Config.hs 58;" f -_gr_num_shadow_casters src/Dodge/Data/Config.hs 60;" f -_gr_shadow_rendering src/Dodge/Data/Config.hs 55;" f -_gr_shadow_size src/Dodge/Data/Config.hs 57;" f -_gr_shadows_on_clouds src/Dodge/Data/Config.hs 56;" f -_gr_world_res src/Dodge/Data/Config.hs 59;" f +_gr_bloom src/Dodge/Data/Config.hs 55;" f +_gr_cloud_shadows src/Dodge/Data/Config.hs 53;" f +_gr_distortions src/Dodge/Data/Config.hs 54;" f +_gr_downsize_res src/Dodge/Data/Config.hs 59;" f +_gr_num_shadow_casters src/Dodge/Data/Config.hs 61;" f +_gr_shadow_rendering src/Dodge/Data/Config.hs 56;" f +_gr_shadow_size src/Dodge/Data/Config.hs 58;" f +_gr_shadows_on_clouds src/Dodge/Data/Config.hs 57;" f +_gr_upscale_filter src/Dodge/Data/Config.hs 52;" f +_gr_world_res src/Dodge/Data/Config.hs 60;" f _gsZoning src/Dodge/Data/World.hs 54;" f _guID src/Dodge/Data/Gust.hs 12;" f _guPos src/Dodge/Data/Gust.hs 13;" f @@ -2438,11 +2439,11 @@ _wanPos src/Dodge/Data/LWorld.hs 157;" f _warmMax src/Dodge/Data/TriggerType.hs 19;" f _warmStart src/Dodge/Data/TriggerType.hs 15;" f _winVBO src/Data/Preload/Render.hs 47;" f -_windowPosX src/Dodge/Data/Config.hs 63;" f -_windowPosY src/Dodge/Data/Config.hs 64;" f +_windowPosX src/Dodge/Data/Config.hs 64;" f +_windowPosY src/Dodge/Data/Config.hs 65;" f _windowPullShader src/Data/Preload/Render.hs 21;" f -_windowX src/Dodge/Data/Config.hs 61;" f -_windowY src/Dodge/Data/Config.hs 62;" f +_windowX src/Dodge/Data/Config.hs 62;" f +_windowY src/Dodge/Data/Config.hs 63;" f _wlHeight src/Dodge/Data/Wall.hs 25;" f _wlID src/Dodge/Data/Wall.hs 19;" f _wlLine src/Dodge/Data/Wall.hs 18;" f @@ -2551,8 +2552,8 @@ applyMagnetsToBul src/Dodge/Bullet.hs 32;" f applyPastDamages src/Dodge/Creature/State.hs 49;" f applyPosition src/Sound.hs 111;" f applyRecoil src/Dodge/HeldUse.hs 459;" f -applyResFactor src/Dodge/Data/Config.hs 123;" f -applyResFactorF src/Dodge/Data/Config.hs 132;" f +applyResFactor src/Dodge/Data/Config.hs 124;" f +applyResFactorF src/Dodge/Data/Config.hs 133;" f applySetTerminalString src/Dodge/Debug/Terminal.hs 83;" f applySidePush src/Dodge/HeldUse.hs 559;" f applySoundCME src/Dodge/HeldUse.hs 449;" f @@ -2707,7 +2708,7 @@ brightX src/Color.hs 116;" f btSPic src/Dodge/Render/ShapePicture.hs 131;" f btText src/Dodge/Inventory/SelectionList.hs 237;" f bufferEBO src/Shader/Bind.hs 28;" f -bufferPerspectiveMatrixUBO src/Dodge/Render.hs 408;" f +bufferPerspectiveMatrixUBO src/Dodge/Render.hs 410;" f bufferPokedVBO src/Shader/Bind.hs 19;" f bufferShaderLayers src/Shader/Bind.hs 32;" f bulletBeltBracer src/Dodge/Item/Equipment.hs 67;" f @@ -2719,7 +2720,7 @@ bulletWeapons src/Dodge/Combine/Combinations.hs 248;" f burstRifle src/Dodge/Item/Held/Cane.hs 30;" f buttonFlip src/Dodge/Button/Event.hs 17;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 722;" f -cChasm src/Dodge/Room/Tutorial.hs 114;" f +cChasm src/Dodge/Room/Tutorial.hs 120;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2754,7 +2755,7 @@ chaseCritInternal src/Dodge/Humanoid.hs 8;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 121;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 36;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 183;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 189;" f chasmTest src/Dodge/Creature/Update.hs 109;" f chasmWallToSurface src/Dodge/Base/Collide.hs 118;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f @@ -3038,7 +3039,7 @@ debugItem src/Dodge/Debug.hs 40;" f debugMenu src/Dodge/Menu.hs 124;" f debugMenuOptions src/Dodge/Menu.hs 130;" f debugMouseClickPos src/Dodge/Debug.hs 145;" f -debugOn src/Dodge/Data/Config.hs 173;" f +debugOn src/Dodge/Data/Config.hs 175;" f debugPutDraw src/Dodge/Debug.hs 95;" f debugPutItems src/Dodge/Debug.hs 78;" f debugPutN src/Dodge/Debug.hs 84;" f @@ -3072,7 +3073,7 @@ defaultCWGen src/Dodge/Default/World.hs 59;" f defaultCWorld src/Dodge/Default/World.hs 84;" f defaultChaseMvType src/Dodge/Creature/MoveType.hs 25;" f defaultClusterStatus src/Dodge/Default/Room.hs 37;" f -defaultConfig src/Dodge/Data/Config.hs 149;" f +defaultConfig src/Dodge/Data/Config.hs 150;" f defaultCraftItem src/Dodge/Default/Item.hs 25;" f defaultCreature src/Dodge/Default/Creature.hs 12;" f defaultCreatureMemory src/Dodge/Default/Creature.hs 65;" f @@ -3135,8 +3136,8 @@ digitalRect src/Geometry.hs 302;" f dim src/Color.hs 112;" f dirtPoly src/Dodge/Room/RoadBlock.hs 74;" f disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 668;" f -displayConfig src/Dodge/Menu.hs 224;" f -displayControls src/Dodge/Menu.hs 240;" f +displayConfig src/Dodge/Menu.hs 225;" f +displayControls src/Dodge/Menu.hs 241;" f displayFrameTicks src/Dodge/Render/Picture.hs 50;" f displayFreeSlots src/Dodge/DisplayInventory.hs 192;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f @@ -3501,7 +3502,7 @@ floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 570;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 566;" f -foldMTRS src/Dodge/Room/Tutorial.hs 59;" f +foldMTRS src/Dodge/Room/Tutorial.hs 65;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 110;" f followImpulse src/Dodge/Creature/Impulse.hs 24;" f @@ -3533,7 +3534,7 @@ g src/ShortShow.hs 48;" f gLauncher src/Dodge/Item/Held/Launcher.hs 24;" f gRandify src/Dodge/Randify.hs 11;" f gadgetEffect src/Dodge/HeldUse.hs 47;" f -gameOverMenu src/Dodge/Menu.hs 201;" f +gameOverMenu src/Dodge/Menu.hs 202;" f gameRoomFromRoom src/Dodge/Layout.hs 152;" f gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 149;" f @@ -3561,10 +3562,10 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 533;" f getCommand src/Dodge/Terminal.hs 52;" f getCommands src/Dodge/Terminal.hs 49;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 332;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 319;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 338;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 325;" f getDebugMouseOver src/Dodge/Update.hs 374;" f -getDistortions src/Dodge/Render.hs 420;" f +getDistortions src/Dodge/Render.hs 422;" f getEdgesCrossing src/Dodge/Path.hs 37;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f @@ -3579,7 +3580,7 @@ getNodePos src/Dodge/Path.hs 34;" f getPJStabiliser src/Dodge/HeldUse.hs 1251;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 315;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 321;" f getRootItemBounds src/Dodge/Render/HUD.hs 101;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3719,7 +3720,7 @@ initialisePlaying src/Sound.hs 77;" f initializeGLState src/Preload/Render.hs 251;" f initializeOptionMenu src/Dodge/Menu/Option.hs 17;" f initializeOptionMenuBO src/Dodge/Menu/Option.hs 30;" f -initializeTexture2D src/Framebuffer/Update.hs 244;" f +initializeTexture2D src/Framebuffer/Update.hs 225;" f inorderNumberTree src/TreeHelp.hs 190;" f insertAt src/Padding.hs 63;" f insertIMInZone src/Dodge/Base.hs 54;" f @@ -3894,7 +3895,7 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f keyPic src/Dodge/Item/Draw/SPic.hs 438;" f keyholeCorridor src/Dodge/Room/Corridor.hs 39;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 656;" f -lChasm src/Dodge/Room/Tutorial.hs 123;" f +lChasm src/Dodge/Room/Tutorial.hs 129;" f lConnect src/Dodge/Render/Connectors.hs 42;" f lConnectMulti src/Dodge/Render/Connectors.hs 46;" f lShape src/Dodge/Placement/Instance/LightSource.hs 54;" f @@ -3955,8 +3956,8 @@ lineThick src/Picture/Base.hs 234;" f lineUp src/Dodge/Creature/Boid.hs 150;" f linksDAGToPath src/Dodge/Room/Path.hs 13;" f linksOnPath src/Dodge/Room/CheckConsistency.hs 6;" f -listConfig src/Dodge/Menu.hs 233;" f -listControls src/Dodge/Menu.hs 245;" f +listConfig src/Dodge/Menu.hs 234;" f +listControls src/Dodge/Menu.hs 246;" f listCursorChooseBorderScale src/Dodge/Render/List.hs 135;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 196;" f listSelectionColorPicture src/Dodge/DisplayInventory.hs 302;" f @@ -4138,7 +4139,7 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 16;" f midBounds src/Dodge/Room/Foreground.hs 150;" f -midChasm src/Dodge/Room/Tutorial.hs 146;" f +midChasm src/Dodge/Room/Tutorial.hs 152;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4416,8 +4417,8 @@ pokeWall src/Shader/Poke.hs 79;" f pokeWallsWindows src/Shader/Poke.hs 51;" f poly3 src/Picture/Base.hs 84;" f poly3Col src/Picture/Base.hs 88;" f -polyChasm src/Dodge/Room/Tutorial.hs 167;" f -polyChasmC src/Dodge/Room/Tutorial.hs 176;" f +polyChasm src/Dodge/Room/Tutorial.hs 173;" f +polyChasmC src/Dodge/Room/Tutorial.hs 182;" f polyCirc src/Shape.hs 46;" f polyCircx src/Shape.hs 51;" f polyCornerDist src/Geometry/Polygon.hs 61;" f @@ -4565,7 +4566,7 @@ randomTreeStructure src/Dodge/Layout/Generate.hs 18;" f randsOnCirc src/RandomHelp.hs 127;" f randsSpread src/RandomHelp.hs 120;" f ratIntersectLineLine src/Geometry/Intersect.hs 216;" f -rdToVec2s src/Dodge/Render.hs 403;" f +rdToVec2s src/Dodge/Render.hs 405;" f readSaveSlot src/Dodge/Save.hs 45;" f recoilAmount src/Dodge/HeldUse.hs 467;" f rectNSWE src/Geometry/Polygon.hs 15;" f @@ -4599,7 +4600,7 @@ removeAimPosture src/Dodge/Creature/YourControl.hs 159;" f removeAmmoFromMag src/Dodge/HeldUse.hs 907;" f removeDot src/ShortShow.hs 44;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f -removeLights src/Dodge/Room/Tutorial.hs 232;" f +removeLights src/Dodge/Room/Tutorial.hs 238;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 57;" f removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" f renderDataResizeUpdate src/Preload/Update.hs 27;" f @@ -4616,11 +4617,11 @@ resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 47;" f resetPLUse src/Dodge/PlacementSpot.hs 92;" f resetStride src/Dodge/Creature/State/WalkCycle.hs 25;" f resetTerminal src/Dodge/WorldEffect.hs 109;" f -resizeFBOTO src/Framebuffer/Update.hs 209;" f -resizeFBOTO' src/Framebuffer/Update.hs 226;" f -resizeFBOTO2 src/Framebuffer/Update.hs 128;" f -resizeFBOTO3 src/Framebuffer/Update.hs 151;" f -resizeFBOTO3' src/Framebuffer/Update.hs 178;" f +resizeFBOTO src/Framebuffer/Update.hs 190;" f +resizeFBOTO' src/Framebuffer/Update.hs 207;" f +resizeFBOTO2 src/Framebuffer/Update.hs 109;" f +resizeFBOTO3 src/Framebuffer/Update.hs 132;" f +resizeFBOTO3' src/Framebuffer/Update.hs 159;" f resizeRBO src/Framebuffer/Update.hs 91;" f respawn src/Dodge/SpawnAt.hs 12;" f restrictInLinks src/Dodge/RoomLink.hs 44;" f @@ -4781,7 +4782,7 @@ sensorReqToString src/Dodge/Machine/Update.hs 197;" f sensorRoom src/Dodge/Room/SensorDoor.hs 26;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 46;" f sensorSPic src/Dodge/Machine/Draw.hs 81;" f -sensorTut src/Dodge/Room/Tutorial.hs 341;" f +sensorTut src/Dodge/Room/Tutorial.hs 347;" f sensorTypeDamages src/Dodge/Machine/Update.hs 234;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 82;" f @@ -4808,7 +4809,7 @@ setOutLinks src/Dodge/RoomLink.hs 50;" f setOutLinksByType src/Dodge/RoomLink.hs 75;" f setOutLinksPD src/Dodge/RoomLink.hs 95;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f -setRoomInt src/Dodge/Room/Tutorial.hs 66;" f +setRoomInt src/Dodge/Room/Tutorial.hs 72;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 337;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f setShaderSource src/Shader/Compile.hs 121;" f @@ -4817,10 +4818,10 @@ setSoundVolume src/Sound.hs 157;" f setTargetMv src/Dodge/Creature/ReaderUpdate.hs 83;" f setTile src/Dodge/Layout.hs 70;" f setTiles src/Dodge/Layout.hs 67;" f -setTreeInts src/Dodge/Room/Tutorial.hs 73;" f +setTreeInts src/Dodge/Room/Tutorial.hs 79;" f setViewDistance src/Dodge/Update/Camera.hs 241;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f -setViewport src/Dodge/Render.hs 425;" f +setViewport src/Dodge/Render.hs 427;" f setVol src/Dodge/Config.hs 47;" f setWindowColor src/Dodge/Render/Walls.hs 32;" f setWristShieldPos src/Dodge/Equipment.hs 49;" f @@ -4893,9 +4894,9 @@ showEquipItem src/Dodge/Item/Display.hs 107;" f showInt src/Dodge/Item/Info.hs 75;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f showInventoryPathing src/Dodge/Item/Display.hs 86;" f -showManObj src/Dodge/TestString.hs 52;" f +showManObj src/Dodge/TestString.hs 53;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f -showTimeFlow src/Dodge/TestString.hs 75;" f +showTimeFlow src/Dodge/TestString.hs 76;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 175;" f shrinkVert src/Geometry/Polygon.hs 179;" f shuffle src/RandomHelp.hs 49;" f @@ -5167,7 +5168,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 460;" f topInvW src/Dodge/ListDisplayParams.hs 49;" f topPrismEdgeIndices src/Shader/Poke.hs 334;" f topPrismIndices src/Shader/Poke.hs 409;" f -topTestPart src/Dodge/TestString.hs 48;" f +topTestPart src/Dodge/TestString.hs 49;" f torchShape src/Dodge/Item/Draw/SPic.hs 277;" f torqueAmount src/Dodge/HeldUse.hs 581;" f torqueCr src/Dodge/WorldEffect.hs 77;" f @@ -5241,12 +5242,12 @@ turnTo src/Dodge/Movement/Turn.hs 8;" f turret src/Dodge/Placement/Instance/Turret.hs 35;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 21;" f tutAnoTree src/Dodge/Room/Tutorial.hs 46;" f -tutDrop src/Dodge/Room/Tutorial.hs 78;" f -tutHub src/Dodge/Room/Tutorial.hs 239;" f -tutLight src/Dodge/Room/Tutorial.hs 204;" f -tutRezBox src/Dodge/Room/Tutorial.hs 352;" f +tutDrop src/Dodge/Room/Tutorial.hs 84;" f +tutHub src/Dodge/Room/Tutorial.hs 245;" f +tutLight src/Dodge/Room/Tutorial.hs 210;" f +tutRezBox src/Dodge/Room/Tutorial.hs 358;" f tutRoomTree src/Dodge/Floor.hs 21;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 376;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 382;" f tweenAngles src/Geometry/Vector.hs 190;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 79;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 34;" f @@ -5266,7 +5267,7 @@ unfoldrMID src/MonadHelp.hs 33;" f unigate src/Dodge/Item/Scope.hs 102;" f unitVectorAtAngle src/Geometry/Vector.hs 101;" f unlockInv src/Dodge/Inventory/Lock.hs 12;" f -unpause src/Dodge/Menu.hs 206;" f +unpause src/Dodge/Menu.hs 207;" f unsafeBlinkAction src/Dodge/Creature/Action/Blink.hs 58;" f unsafeBlinker src/Dodge/Item/Held/Utility.hs 33;" f unsafeSwapKeys src/IntMapHelp.hs 75;" f @@ -5318,7 +5319,6 @@ updateEnergyBalls src/Dodge/Update.hs 655;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 505;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFBOTO src/Framebuffer/Update.hs 94;" f -updateFBOTO2 src/Framebuffer/Update.hs 111;" f updateFlame src/Dodge/Flame.hs 19;" f updateFlames src/Dodge/Update.hs 652;" f updateFloatingCamera src/Dodge/Update/Camera.hs 36;" f @@ -5508,8 +5508,8 @@ whiteNoiseFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 534;" f wiToFloat src/Dodge/Room/Modify/Girder.hs 168;" f winConfig appDodge/Main.hs 56;" f windowLine src/Dodge/Placement/Instance/Wall.hs 51;" f -windowXFloat src/Dodge/Data/Config.hs 71;" f -windowYFloat src/Dodge/Data/Config.hs 73;" f +windowXFloat src/Dodge/Data/Config.hs 72;" f +windowYFloat src/Dodge/Data/Config.hs 74;" f withAlpha src/Color.hs 10;" f withByteString src/Shader/Compile.hs 157;" f wlIXsNearCirc src/Dodge/Zoning/Wall.hs 32;" f @@ -5560,7 +5560,7 @@ yourInv src/Dodge/Base/You.hs 28;" f yourRootItem src/Dodge/Base/You.hs 22;" f yourSelectedItem src/Dodge/Base/You.hs 16;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 133;" f +zChasm src/Dodge/Room/Tutorial.hs 139;" f zConnect src/Dodge/Render/Connectors.hs 17;" f zConnectCol src/Dodge/Render/Connectors.hs 28;" f zConnectColMidX src/Dodge/Render/Connectors.hs 31;" f