Author Topic: Valathil's Awesome Graphical Advancements  (Read 41490 times)

0 Members and 1 Guest are viewing this topic.

Offline Trivial Psychic

  • 212
  • Snoop Junkie
[EDIT] I don't know if the newest version of the effect is in the nightlies, but when viewing the ship draw effect the wireframe of the model is completely visible before the effect is complete. of course it could also be my graphics card.
I'm getting this too.  Win7-64, ATI HD5770-1GB, CAT. 11.6.
The Trivial Psychic Strikes Again!

 

Offline Kolgena

  • 211
Yep, Catalyst 11.8 preview, mobility 3650 HD.

Probably an ATI thing. Still, I'd appreciate it if FSO didn't join the long line of TWIMTBP titles  :lol:


Turning off forced AF does not fix the issue.

 

Offline Valathil

  • ...And I would have had a custom title if it wasn't for you meddling kids!
  • 29
  • Custom Title? Wizards need no Custom Title!
┏┓╋┏┓╋╋╋╋╋╋╋╋╋┏┓
┃┃╋┃┃╋╋╋╋╋╋╋╋╋┃┃
┃┃┏┫┃┏┳━━┓┏━━┓┃┗━┳━━┳━━┳━━┓
┃┃┣┫┗┛┫┃━┫┃┏┓┃┃┏┓┃┏┓┃━━┫━━┫
┃┗┫┃┏┓┫┃━┫┃┏┓┃┃┗┛┃┗┛┣━━┣━━┃
┗━┻┻┛┗┻━━┛┗┛┗┛┗━━┻━━┻━━┻━━┛

 

Offline Commander Zane

  • 212
  • Spoot Knight of Anvils
Truth.

 

Offline Valathil

  • ...And I would have had a custom title if it wasn't for you meddling kids!
  • 29
  • Custom Title? Wizards need no Custom Title!
Seriously though, id really like to fix it but how can i try changes out and trace the problem without a ati card. this is next to impossible
┏┓╋┏┓╋╋╋╋╋╋╋╋╋┏┓
┃┃╋┃┃╋╋╋╋╋╋╋╋╋┃┃
┃┃┏┫┃┏┳━━┓┏━━┓┃┗━┳━━┳━━┳━━┓
┃┃┣┫┗┛┫┃━┫┃┏┓┃┃┏┓┃┏┓┃━━┫━━┫
┃┗┫┃┏┓┫┃━┫┃┏┓┃┃┗┛┃┗┛┣━━┣━━┃
┗━┻┻┛┗┻━━┛┗┛┗┛┗━━┻━━┻━━┻━━┛

 

Offline Aardwolf

  • 211
  • Posts: 16,384
    • Minecraft
Quote
(As a final tweak, it'd be nice if the animation synched with the sound a bit better. The ship rotates up a bit too slowly at the end)

The cables are too thick.

Oi! Stop that!

 

Offline Spoon

  • 212
  • ヾ(´︶`♡)ノ
Does the cloaking effect require post processing to be enabled?
yes i probably should have mentioned that, maybe ill add fs1 effect as the cloak if post is disabled as a fallback have to look into that.
Hmmm, what happens when you dont have PP enabled? Does the ship not fade out at all?
I'd love to use the effect, but I'm not sure about requiring every player to enable PP in their launcher settings
Urutorahappī!!

[02:42] <@Axem> spoon somethings wrong
[02:42] <@Axem> critically wrong
[02:42] <@Axem> im happy with these missions now
[02:44] <@Axem> well
[02:44] <@Axem> with 2 of them

 

Offline The E

  • He's Ebeneezer Goode
  • Moderator
  • 213
  • Nothing personal, just tech support.
    • Steam
    • Twitter
The problem is, this effect needs the post-processing infrastructure in order to work correctly. Without post-processing, results will be ... interesting.

http://www.youtube.com/watch?v=Y0jD3hwrK3A

To be honest though, most of the real gamers will be able to run with post enabled; The ones who can't are probably on Intel chips.
If I'm just aching this can't go on
I came from chasing dreams to feel alone
There must be changes, miss to feel strong
I really need lifе to touch me
--Evergrey, Where August Mourns

 

Offline Spoon

  • 212
  • ヾ(´︶`♡)ノ
Well, we all know how many gamers we've had in the past running the game on 640x480  :p

But that's good enough for me, as long as the ship fades out without PP enabled.
Urutorahappī!!

[02:42] <@Axem> spoon somethings wrong
[02:42] <@Axem> critically wrong
[02:42] <@Axem> im happy with these missions now
[02:44] <@Axem> well
[02:44] <@Axem> with 2 of them

 

Offline Valathil

  • ...And I would have had a custom title if it wasn't for you meddling kids!
  • 29
  • Custom Title? Wizards need no Custom Title!
Well, we all know how many gamers we've had in the past running the game on 640x480  :p

But that's good enough for me, as long as the ship fades out without PP enabled.

I can do a fade to black with distorted textures and then poof not more cause that would require a parameter in the shader is that good enough?
┏┓╋┏┓╋╋╋╋╋╋╋╋╋┏┓
┃┃╋┃┃╋╋╋╋╋╋╋╋╋┃┃
┃┃┏┫┃┏┳━━┓┏━━┓┃┗━┳━━┳━━┳━━┓
┃┃┣┫┗┛┫┃━┫┃┏┓┃┃┏┓┃┏┓┃━━┫━━┫
┃┗┫┃┏┓┫┃━┫┃┏┓┃┃┗┛┃┗┛┣━━┣━━┃
┗━┻┻┛┗┻━━┛┗┛┗┛┗━━┻━━┻━━┻━━┛

 

Offline Kolgena

  • 211
That's probably good enough. At this point, making sure things work without post-processing is almost like providing legacy support.

As for the wireframe draw bug, there's not much we can do short of mailing Valathil a radeon card, is there? :/

As a stab in the dark, see if there's anything you've scripted that might for some reason be nVidia-only readable. Maybe a typo here or there doesn't compromise nvidia as badly as it does amd? No idea.
« Last Edit: July 31, 2011, 03:40:57 pm by Kolgena »

 

Offline Valathil

  • ...And I would have had a custom title if it wasn't for you meddling kids!
  • 29
  • Custom Title? Wizards need no Custom Title!
So take one of this and call me in the morning
main-f.sdr
Code: [Select]
#ifdef FLAG_LIGHT
uniform int n_lights;
#endif

#ifdef FLAG_DIFFUSE_MAP
uniform sampler2D sBasemap;
#endif

#ifdef FLAG_GLOW_MAP
uniform sampler2D sGlowmap;
#endif

#ifdef FLAG_SPEC_MAP
uniform sampler2D sSpecmap;
#endif

#ifdef FLAG_ENV_MAP
uniform samplerCube sEnvmap;
uniform bool alpha_spec;
varying vec3 envReflect;
#endif

#ifdef FLAG_NORMAL_MAP
uniform sampler2D sNormalmap;
varying mat3 tbnMatrix;
#endif

#ifdef FLAG_FOG
varying float fogDist;
#endif

#ifdef FLAG_ANIMATED
uniform sampler2D sFramebuffer;
uniform int effect_num;
uniform float anim_timer;
uniform float vpwidth;
uniform float vpheight;
#endif

varying vec4 position;
varying vec3 lNormal;

#if SHADER_MODEL == 2
  #define MAX_LIGHTS 2
#else
  #define MAX_LIGHTS 8
#endif

#define SPEC_INTENSITY_POINT 5.3 // Point light
#define SPEC_INTENSITY_DIRECTIONAL 3.0 // Directional light
#define SPECULAR_FACTOR 1.75
#define SPECULAR_ALPHA 0.1
#define SPEC_FACTOR_NO_SPEC_MAP 0.6
#define ENV_ALPHA_FACTOR 0.3
#define GLOW_MAP_INTENSITY 1.5
#define AMBIENT_LIGHT_BOOST 1.0

void main()
{
vec3 eyeDir = vec3(normalize(-position).xyz); // Camera is at (0,0,0) in ModelView space
vec4 lightAmbientDiffuse = vec4(0.0, 0.0, 0.0, 1.0);
vec4 lightDiffuse = vec4(0.0, 0.0, 0.0, 1.0);
vec4 lightAmbient = vec4(0.0, 0.0, 0.0, 1.0);
vec4 lightSpecular = vec4(0.0, 0.0, 0.0, 1.0);
vec2 texCoord = gl_TexCoord[0].xy;
 #ifdef FLAG_ANIMATED
vec2 screenPos;
if(effect_num == 2)
{
screenPos = gl_FragCoord.xy * vec2(vpwidth,vpheight);
texCoord += (1.0-anim_timer)*0.3*vec2(sin(screenPos.y*50.0));
}
 #endif
 #ifdef FLAG_LIGHT
  #ifdef FLAG_NORMAL_MAP
// Normal map - convert from DXT5nm
vec3 normal;

normal.rg = (texture2D(sNormalmap, texCoord).ag * 2.0) - 1.0;
  #ifdef FLAG_ENV_MAP
vec3 envOffset = vec3(0.0);
envOffset.xy = normal.xy;
  #endif
normal.b = sqrt(1.0 - dot(normal.rg, normal.rg));
normal = tbnMatrix * normal;
float norm = length(normal);
if( length(normal) > 0.0)  // fix broken normal maps
normal /= norm ;
else
normal = tbnMatrix * vec3(0.0, 0.0, 1.0);
  #else
vec3 normal = lNormal;
  #endif

vec3 lightDir;
lightAmbient = gl_FrontMaterial.emission + (gl_LightModel.ambient * gl_FrontMaterial.ambient);
float dist;
#pragma optionNV unroll all
for (int i = 0; i < MAX_LIGHTS; ++i) {
  #if SHADER_MODEL > 2
if (i > n_lights)
break;
  #endif
float specularIntensity = 1.0;
float attenuation = 1.0;

// Attenuation and light direction
  #if SHADER_MODEL > 2
if (gl_LightSource[i].position.w == 1.0) {
  #else
if (gl_LightSource[i].position.w == 1.0 && i != 0) {
  #endif
// Positional light source
float dist = distance(gl_LightSource[i].position.xyz, position.xyz);

lightDir = (gl_LightSource[i].position.xyz - position.xyz);

  #if SHADER_MODEL > 2
if (gl_LightSource[i].spotCutoff < 91.0) {  // Tube light
float beamlength = length(gl_LightSource[i].spotDirection);
vec3 beamDir = normalize(gl_LightSource[i].spotDirection);
float neardist = dot(position.xyz - gl_LightSource[i].position.xyz , beamDir); // Get nearest point on line
vec3 nearest = gl_LightSource[i].position.xyz - beamDir * abs(neardist); // Move back from the endpoint of the beam along the beam by the distance we calculated
lightDir = nearest - position.xyz;
dist = length(lightDir);
}
  #endif

lightDir = normalize(lightDir);

attenuation = 1.0 / (gl_LightSource[i].constantAttenuation + (gl_LightSource[i].linearAttenuation * dist) + (gl_LightSource[i].quadraticAttenuation * dist * dist));

specularIntensity = SPEC_INTENSITY_POINT;
} else {
// Directional light source
lightDir = normalize(gl_LightSource[i].position.xyz);
specularIntensity = SPEC_INTENSITY_DIRECTIONAL; // Directional light
}

// Ambient and Diffuse
lightAmbient += (gl_FrontLightProduct[i].ambient * attenuation);
lightDiffuse += (gl_FrontLightProduct[i].diffuse * (max(dot(normal, lightDir), 0.0)) * attenuation);
// Specular
float NdotHV = clamp(dot(normal, normalize(eyeDir + lightDir)), 0.0, 1.0);
lightSpecular += ((gl_FrontLightProduct[i].specular * pow(NdotHV, gl_FrontMaterial.shininess)) * attenuation) * specularIntensity;
}

lightAmbientDiffuse = lightAmbient + lightDiffuse;
 #else
lightAmbientDiffuse = gl_Color;
lightSpecular = gl_SecondaryColor;
 #endif

 #ifdef FLAG_DIFFUSE_MAP
 // Base color
vec4 baseColor = texture2D(sBasemap, texCoord);
 #else
vec4 baseColor = gl_Color;
 #endif
 
vec4 fragmentColor;
fragmentColor.rgb = baseColor.rgb * max(lightAmbientDiffuse.rgb * AMBIENT_LIGHT_BOOST, gl_LightModel.ambient.rgb - 0.425);
fragmentColor.a = baseColor.a;

 #ifdef FLAG_SPEC_MAP
 // Spec color
fragmentColor.rgb += lightSpecular.rgb * (texture2D(sSpecmap, texCoord).rgb * SPECULAR_FACTOR);
fragmentColor.a += (dot(lightSpecular.a, lightSpecular.a) * SPECULAR_ALPHA);
 #else
fragmentColor.rgb += lightSpecular.rgb * (baseColor.rgb * SPEC_FACTOR_NO_SPEC_MAP);
 #endif

 #ifdef FLAG_ENV_MAP
 // Env color
  #ifdef FLAG_NORMAL_MAP
vec3 envReflectNM = envReflect + envOffset;
vec3 envIntensity = (alpha_spec) ? vec3(texture2D(sSpecmap, texCoord).a) : texture2D(sSpecmap, texCoord).rgb;
fragmentColor.a += (dot(textureCube(sEnvmap, envReflectNM).rgb, textureCube(sEnvmap, envReflectNM).rgb) * ENV_ALPHA_FACTOR);
fragmentColor.rgb += textureCube(sEnvmap, envReflectNM).rgb * envIntensity;
  #else
vec3 envIntensity = (alpha_spec) ? vec3(texture2D(sSpecmap, texCoord).a) : texture2D(sSpecmap, texCoord).rgb;
fragmentColor.a += (dot(textureCube(sEnvmap, envReflect).rgb, textureCube(sEnvmap, envReflect).rgb) * ENV_ALPHA_FACTOR);
fragmentColor.rgb += textureCube(sEnvmap, envReflect).rgb * envIntensity;
  #endif
 #endif

 #ifdef FLAG_GLOW_MAP
 // Glow color
fragmentColor.rgb += texture2D(sGlowmap, texCoord).rgb * GLOW_MAP_INTENSITY;
 #endif

 #ifdef FLAG_FOG
fragmentColor.rgb = mix(fragmentColor.rgb, gl_Fog.color.rgb, fogDist);
 #endif

 #ifdef FLAG_ANIMATED
if(effect_num == 0)
{
float shinefactor = 1.0/(1.0 + pow((fract(abs(gl_TexCoord[0].x))-anim_timer) * 1000.0, 2.0)) * 1000.0;
gl_FragColor.rgb = fragmentColor.rgb + vec3(shinefactor);
gl_FragColor.a = fragmentColor.a * shinefactor * (fract(abs(gl_TexCoord[0].x))-anim_timer) * -10000.0;
}
if(effect_num == 1)
{
float shinefactor = 1.0/(1.0 + pow((position.y-anim_timer), 2.0));
gl_FragColor.rgb = fragmentColor.rgb + vec3(shinefactor);
 #ifdef FLAG_LIGHT
gl_FragColor.a = fragmentColor.a;
 #else
gl_FragColor.a = (position.y-anim_timer) * 10000.0; // ATI Wireframe fix *grumble*
 #endif
}
if(effect_num == 2)
{
gl_FragColor.a = 1.0;
gl_FragColor.rgb = texture2D(sFramebuffer, screenPos + anim_timer*0.1*vec2(sin(screenPos.y*50.0))).rgb*(1.0-anim_timer)+anim_timer*fragmentColor.rgb;
}
 #else
gl_FragColor = fragmentColor;
 #endif
}
« Last Edit: July 31, 2011, 04:32:44 pm by Valathil »
┏┓╋┏┓╋╋╋╋╋╋╋╋╋┏┓
┃┃╋┃┃╋╋╋╋╋╋╋╋╋┃┃
┃┃┏┫┃┏┳━━┓┏━━┓┃┗━┳━━┳━━┳━━┓
┃┃┣┫┗┛┫┃━┫┃┏┓┃┃┏┓┃┏┓┃━━┫━━┫
┃┗┫┃┏┓┫┃━┫┃┏┓┃┃┗┛┃┗┛┣━━┣━━┃
┗━┻┻┛┗┻━━┛┗┛┗┛┗━━┻━━┻━━┻━━┛

 

Offline Kolgena

  • 211
These aren't just wide-spectrum antibiotics right? My friend told me that their usage is socially irresponsible.

K, so you are freaking awesome. Fixed it.


(One thing I noticed, just as I loaded ship selection on King's Gambit, is that bigger ships are rendered alongside smaller grids, since the game seems to try to keep the apparent size of the ships the same. As such, the Artemis is like, only half-on its tiny grid. If there's an easy fix for it, great, but otherwise, I'd have to agree with The_E that this one is "pipes2thick")

Audio sync on the newest nightly is awesome.
« Last Edit: July 31, 2011, 04:40:57 pm by Kolgena »

 

Offline Valathil

  • ...And I would have had a custom title if it wasn't for you meddling kids!
  • 29
  • Custom Title? Wizards need no Custom Title!
┏┓╋┏┓╋╋╋╋╋╋╋╋╋┏┓
┃┃╋┃┃╋╋╋╋╋╋╋╋╋┃┃
┃┃┏┫┃┏┳━━┓┏━━┓┃┗━┳━━┳━━┳━━┓
┃┃┣┫┗┛┫┃━┫┃┏┓┃┃┏┓┃┏┓┃━━┫━━┫
┃┗┫┃┏┓┫┃━┫┃┏┓┃┃┗┛┃┗┛┣━━┣━━┃
┗━┻┻┛┗┻━━┛┗┛┗┛┗━━┻━━┻━━┻━━┛

 

Offline Kolgena

  • 211
So I guess the problem is model-side? I noticed that it doesn't actually have to do with size, since the Ursa's relatively unaffected. The bad offenders are the Artemises and the Boanerges, that have grids easily half the size of the one for the myrmidon. (I'M LOOKING AT YOU SAB0O :D)

(Also, you got me so excited with that youtube link. I thought it was going to link me to a preview of the fix in action. lol.)

 

Offline Valathil

  • ...And I would have had a custom title if it wasn't for you meddling kids!
  • 29
  • Custom Title? Wizards need no Custom Title!
(Also, you got me so excited with that youtube link. I thought it was going to link me to a preview of the fix in action. lol.)

That's EXACTLY why I did it  :lol:

If you want the exact description of the problem it depends on the ratio between model size and the zoom_amount. BUT i cant use the zoom_amount for the calculation of the grid size because then the coordinates for the glow shader would be wrong. This is also why the glow is smaller on larger ships like the ursa. Cant be helped at the moment as it would require passing many parameters to the shader to get true screen coordinates in the shader calculation which just isnt feasible right now. I dont know if it will ever be.
┏┓╋┏┓╋╋╋╋╋╋╋╋╋┏┓
┃┃╋┃┃╋╋╋╋╋╋╋╋╋┃┃
┃┃┏┫┃┏┳━━┓┏━━┓┃┗━┳━━┳━━┳━━┓
┃┃┣┫┗┛┫┃━┫┃┏┓┃┃┏┓┃┏┓┃━━┫━━┫
┃┗┫┃┏┓┫┃━┫┃┏┓┃┃┗┛┃┗┛┣━━┣━━┃
┗━┻┻┛┗┻━━┛┗┛┗┛┗━━┻━━┻━━┻━━┛

 

Offline Spoon

  • 212
  • ヾ(´︶`♡)ノ
Am I missing shaders or something for the FS1 effect?
It's not displaying for me at all on 7388

Code: [Select]
==========================================================================
DEBUG SPEW: No debug_filter.cfg found, so only general, error, and warning
categories can be shown and no debug_filter.cfg info will be saved.
==========================================================================
FreeSpace version: 3.6.13
Passed cmdline options:
  -spec_exp 15
  -fov 0.6
  -ogl_spec 20
  -spec_static 1.5
  -spec_point 1.2
  -spec_tube 1.5
  -ambient_factor 65
  -env
  -missile_lighting
  -glow
  -noscalevid
  -spec
  -normal
  -3dshockwave
  -post_process
  -bloom_intensity 40
  -fxaa
  -ballistic_gauge
  -rearm_timer
  -targetinfo
  -3dwarp
  -ship_choice_3d
  -weapon_choice_3d
  -warp_flash
  -mod Wings of Dawn II,mediavps_3612
  -fullscreen_window
Building file index...
Found root pack 'G:\Games\Freespace\mediavps_3612\MV_Advanced.vp' with a checksum of 0x4b8b0f5a
Found root pack 'G:\Games\Freespace\mediavps_3612\MV_AnimGlows.vp' with a checksum of 0x6a554026
Found root pack 'G:\Games\Freespace\mediavps_3612\MV_Assets.3612.vp' with a checksum of 0x59649c21
Found root pack 'G:\Games\Freespace\mediavps_3612\MV_Assets.vp' with a checksum of 0x529cc70f
Found root pack 'G:\Games\Freespace\mediavps_3612\MV_Effects.3612.vp' with a checksum of 0x9c510aa0
Found root pack 'G:\Games\Freespace\mediavps_3612\MV_Effects.vp' with a checksum of 0xb9a9a485
Found root pack 'G:\Games\Freespace\mediavps_3612\MV_Music.vp' with a checksum of 0xb3e21469
Found root pack 'G:\Games\Freespace\mediavps_3612\MV_Root.3612.vp' with a checksum of 0x7c9d7e74
Found root pack 'G:\Games\Freespace\mediavps_3612\MV_Root.vp' with a checksum of 0x6ffd5c78
Found root pack 'G:\Games\Freespace\FS2OGGcutscenepack.vp' with a checksum of 0x84396e99
Found root pack 'G:\Games\Freespace\multi-mission-pack.vp' with a checksum of 0x925272dc
Found root pack 'G:\Games\Freespace\multi-voice-pack.vp' with a checksum of 0xd50e7442
Found root pack 'G:\Games\Freespace\root_fs2.vp' with a checksum of 0xce10d76c
Found root pack 'G:\Games\Freespace\smarty_fs2.vp' with a checksum of 0xddeb3b1e
Found root pack 'G:\Games\Freespace\sparky_fs2.vp' with a checksum of 0x0eae906e
Found root pack 'G:\Games\Freespace\sparky_hi_fs2.vp' with a checksum of 0xa11d56f1
Found root pack 'G:\Games\Freespace\stu_fs2.vp' with a checksum of 0xd77da83a
Found root pack 'G:\Games\Freespace\tango1_fs2.vp' with a checksum of 0x4c25221e
Found root pack 'G:\Games\Freespace\tango2_fs2.vp' with a checksum of 0x86920b82
Found root pack 'G:\Games\Freespace\tango3_fs2.vp' with a checksum of 0x705e8d71
Found root pack 'G:\Games\Freespace\warble_fs2.vp' with a checksum of 0xd85c305d
Searching root 'G:\Games\Freespace\Wings of Dawn II\' ... 5175 files
Searching root 'G:\Games\Freespace\mediavps_3612\' ... 125 files
Searching root pack 'G:\Games\Freespace\mediavps_3612\MV_Advanced.vp' ... 1283 files
Searching root pack 'G:\Games\Freespace\mediavps_3612\MV_AnimGlows.vp' ... 1641 files
Searching root pack 'G:\Games\Freespace\mediavps_3612\MV_Assets.3612.vp' ... 315 files
Searching root pack 'G:\Games\Freespace\mediavps_3612\MV_Assets.vp' ... 1527 files
Searching root pack 'G:\Games\Freespace\mediavps_3612\MV_Effects.3612.vp' ... 10 files
Searching root pack 'G:\Games\Freespace\mediavps_3612\MV_Effects.vp' ... 1876 files
Searching root pack 'G:\Games\Freespace\mediavps_3612\MV_Music.vp' ... 32 files
Searching root pack 'G:\Games\Freespace\mediavps_3612\MV_Root.3612.vp' ... 13 files
Searching root pack 'G:\Games\Freespace\mediavps_3612\MV_Root.vp' ... 94 files
Searching root 'G:\Games\Freespace\' ... 108 files
Searching root pack 'G:\Games\Freespace\FS2OGGcutscenepack.vp' ... 10 files
Searching root pack 'G:\Games\Freespace\multi-mission-pack.vp' ... 108 files
Searching root pack 'G:\Games\Freespace\multi-voice-pack.vp' ... 307 files
Searching root pack 'G:\Games\Freespace\root_fs2.vp' ... 157 files
Searching root pack 'G:\Games\Freespace\smarty_fs2.vp' ... 10 files
Searching root pack 'G:\Games\Freespace\sparky_fs2.vp' ... 3027 files
Searching root pack 'G:\Games\Freespace\sparky_hi_fs2.vp' ... 1337 files
Searching root pack 'G:\Games\Freespace\stu_fs2.vp' ... 2355 files
Searching root pack 'G:\Games\Freespace\tango1_fs2.vp' ... 32 files
Searching root pack 'G:\Games\Freespace\tango2_fs2.vp' ... 15 files
Searching root pack 'G:\Games\Freespace\tango3_fs2.vp' ... 10 files
Searching root pack 'G:\Games\Freespace\warble_fs2.vp' ... 52 files
Searching root 'i:\' ... 0 files
Found 25 roots and 19619 files.
AutoLang: Language auto-detection successful...
Setting language to English
TBM  =>  Starting parse of 'mv_core-lcl.tbm' ...
Initializing OpenAL...
  OpenAL Vendor     : Creative Labs Inc.
  OpenAL Renderer   : Software
  OpenAL Version    : 1.1

  Found extension "ALC_EXT_EFX".

  Sample rate: 44100 (44100)
  EFX enabled: NO
  Playback device: Generic Software on Speakers (Realtek High Definition Audio)
  Capture device: Microphone (C-Media USB Headpho
... OpenAL successfully initialized!
Failed to init speech
Initializing OpenGL graphics device at 1680x1050 with 32-bit color...
  Initializing WGL...
  Requested WGL Video values = R: 8, G: 8, B: 8, depth: 32, double-buffer: 1
  Actual WGL Video values    = R: 8, G: 8, B: 8, depth: 32, double-buffer: 1
  OpenGL Vendor    : NVIDIA Corporation
  OpenGL Renderer  : GeForce GTX 570/PCI/SSE2
  OpenGL Version   : 4.1.0

  Using extension "GL_EXT_fog_coord".
  Using extension "GL_ARB_multitexture".
  Using extension "GL_ARB_texture_env_add".
  Using extension "GL_ARB_texture_compression".
  Using extension "GL_EXT_texture_compression_s3tc".
  Using extension "GL_EXT_texture_filter_anisotropic".
  Using extension "GL_ARB_texture_env_combine".
  Using extension "GL_EXT_compiled_vertex_array".
  Using extension "GL_EXT_draw_range_elements".
  Using extension "GL_ARB_texture_mirrored_repeat".
  Using extension "GL_ARB_texture_non_power_of_two".
  Using extension "GL_ARB_vertex_buffer_object".
  Using extension "GL_ARB_pixel_buffer_object".
  Using extension "GL_SGIS_generate_mipmap".
  Using extension "GL_EXT_framebuffer_object".
  Using extension "GL_ARB_texture_rectangle".
  Using extension "GL_EXT_bgra".
  Using extension "GL_ARB_texture_cube_map".
  Using extension "GL_EXT_texture_lod_bias".
  Using extension "GL_ARB_point_sprite".
  Using extension "GL_ARB_shading_language_100".
  Using extension "GL_ARB_shader_objects".
  Using extension "GL_ARB_vertex_shader".
  Using extension "GL_ARB_fragment_shader".
  Using extension "GL_NV_vertex_program3".
  Found special extension function "wglSwapIntervalEXT".

  Compiling shader: main-v.sdr (null-v.sdr), main-f.sdr (null-f.sdr)
  Compiling shader: main-v.sdr (l-v.sdr), main-f.sdr (lb-f.sdr)
  Compiling shader: main-v.sdr (b-v.sdr), main-f.sdr (b-f.sdr)
  Compiling shader: main-v.sdr (b-v.sdr), main-f.sdr (bg-f.sdr)
  Compiling shader: main-v.sdr (l-v.sdr), main-f.sdr (lbg-f.sdr)
  Compiling shader: main-v.sdr (l-v.sdr), main-f.sdr (lbgs-f.sdr)
  Compiling shader: main-v.sdr (l-v.sdr), main-f.sdr (lbs-f.sdr)
  Compiling shader: main-v.sdr (le-v.sdr), main-f.sdr (lbgse-f.sdr)
  Compiling shader: main-v.sdr (le-v.sdr), main-f.sdr (lbse-f.sdr)
  Compiling shader: main-v.sdr (ln-v.sdr), main-f.sdr (lbgn-f.sdr)
  Compiling shader: main-v.sdr (ln-v.sdr), main-f.sdr (lbgsn-f.sdr)
  Compiling shader: main-v.sdr (ln-v.sdr), main-f.sdr (lbn-f.sdr)
  Compiling shader: main-v.sdr (ln-v.sdr), main-f.sdr (lbsn-f.sdr)
  Compiling shader: main-v.sdr (lne-v.sdr), main-f.sdr (lbgsne-f.sdr)
  Compiling shader: main-v.sdr (lne-v.sdr), main-f.sdr (lbsne-f.sdr)
  Compiling shader: main-v.sdr (lf-v.sdr), main-f.sdr (lfb-f.sdr)
  Compiling shader: main-v.sdr (lf-v.sdr), main-f.sdr (lfbg-f.sdr)
  Compiling shader: main-v.sdr (lf-v.sdr), main-f.sdr (lfbgs-f.sdr)
  Compiling shader: main-v.sdr (lf-v.sdr), main-f.sdr (lfbs-f.sdr)
  Compiling shader: main-v.sdr (lfe-v.sdr), main-f.sdr (lfbgse-f.sdr)
  Compiling shader: main-v.sdr (lfe-v.sdr), main-f.sdr (lfbse-f.sdr)
  Compiling shader: main-v.sdr (lfn-v.sdr), main-f.sdr (lfbgn-f.sdr)
  Compiling shader: main-v.sdr (lfn-v.sdr), main-f.sdr (lfbgsn-f.sdr)
  Compiling shader: main-v.sdr (lfn-v.sdr), main-f.sdr (lfbn-f.sdr)
  Compiling shader: main-v.sdr (lfn-v.sdr), main-f.sdr (lfbsn-f.sdr)
  Compiling shader: main-v.sdr (lfne-v.sdr), main-f.sdr (lfbgsne-f.sdr)
  Compiling shader: main-v.sdr (lfne-v.sdr), main-f.sdr (lfbsne-f.sdr)
  Compiling shader: main-v.sdr (l-v.sdr), main-f.sdr (null-f.sdr)
  Compiling shader: main-v.sdr (l-v.sdr), main-f.sdr (lg-f.sdr)
  Compiling shader: main-v.sdr (l-v.sdr), main-f.sdr (lgs-f.sdr)
  Compiling shader: main-v.sdr (l-v.sdr), main-f.sdr (ls-f.sdr)
  Compiling shader: main-v.sdr (le-v.sdr), main-f.sdr (lgse-f.sdr)
  Compiling shader: main-v.sdr (le-v.sdr), main-f.sdr (lse-f.sdr)
  Compiling shader: main-v.sdr (ln-v.sdr), main-f.sdr (lgn-f.sdr)
  Compiling shader: main-v.sdr (ln-v.sdr), main-f.sdr (lgsn-f.sdr)
  Compiling shader: main-v.sdr (ln-v.sdr), main-f.sdr (ln-f.sdr)
  Compiling shader: main-v.sdr (ln-v.sdr), main-f.sdr (lsn-f.sdr)
  Compiling shader: main-v.sdr (lne-v.sdr), main-f.sdr (lgsne-f.sdr)
  Compiling shader: main-v.sdr (lne-v.sdr), main-f.sdr (lsne-f.sdr)
  Compiling shader: main-v.sdr (la-v.sdr), main-f.sdr (la-f.sdr)
  Compiling shader: main-v.sdr (la-v.sdr), main-f.sdr (lba-f.sdr)
  Compiling shader: main-v.sdr (ba-v.sdr), main-f.sdr (ba-f.sdr)
  Compiling shader: main-v.sdr (ba-v.sdr), main-f.sdr (bga-f.sdr)
  Compiling shader: main-v.sdr (la-v.sdr), main-f.sdr (lbga-f.sdr)
  Compiling shader: main-v.sdr (la-v.sdr), main-f.sdr (lbgsa-f.sdr)
  Compiling shader: main-v.sdr (la-v.sdr), main-f.sdr (lbsa-f.sdr)
  Compiling shader: main-v.sdr (lea-v.sdr), main-f.sdr (lbgsea-f.sdr)
  Compiling shader: main-v.sdr (lea-v.sdr), main-f.sdr (lbsea-f.sdr)
  Compiling shader: main-v.sdr (lna-v.sdr), main-f.sdr (lbgna-f.sdr)
  Compiling shader: main-v.sdr (lna-v.sdr), main-f.sdr (lbgsna-f.sdr)
  Compiling shader: main-v.sdr (lna-v.sdr), main-f.sdr (lbna-f.sdr)
  Compiling shader: main-v.sdr (lna-v.sdr), main-f.sdr (lbsna-f.sdr)
  Compiling shader: main-v.sdr (lnea-v.sdr), main-f.sdr (lbgsnea-f.sdr)
  Compiling shader: main-v.sdr (lnea-v.sdr), main-f.sdr (lbsnea-f.sdr)
  Compiling shader: main-v.sdr (lfa-v.sdr), main-f.sdr (lfba-f.sdr)
  Compiling shader: main-v.sdr (lfa-v.sdr), main-f.sdr (lfbga-f.sdr)
  Compiling shader: main-v.sdr (lfa-v.sdr), main-f.sdr (lfbgsa-f.sdr)
  Compiling shader: main-v.sdr (lfa-v.sdr), main-f.sdr (lfbsa-f.sdr)
  Compiling shader: main-v.sdr (lfea-v.sdr), main-f.sdr (lfbgsea-f.sdr)
  Compiling shader: main-v.sdr (lfea-v.sdr), main-f.sdr (lfbsea-f.sdr)
  Compiling shader: main-v.sdr (lfna-v.sdr), main-f.sdr (lfbgna-f.sdr)
  Compiling shader: main-v.sdr (lfna-v.sdr), main-f.sdr (lfbgsna-f.sdr)
  Compiling shader: main-v.sdr (lfna-v.sdr), main-f.sdr (lfbna-f.sdr)
  Compiling shader: main-v.sdr (lfna-v.sdr), main-f.sdr (lfbsna-f.sdr)
  Compiling shader: main-v.sdr (lfnea-v.sdr), main-f.sdr (lfbgsnea-f.sdr)
  Compiling shader: main-v.sdr (lfnea-v.sdr), main-f.sdr (lfbsnea-f.sdr)

  Compiling post-processing shader 1 ...
  Compiling post-processing shader 2 ...
  Compiling post-processing shader 3 ...
  Compiling post-processing shader 4 ...
  Compiling post-processing shader 5 ...
Loading built-in default shader for: fxaa-v.sdr
Loading built-in default shader for: fxaa-f.sdr
  Compiling post-processing shader 6 ...
Loading built-in default shader for: fxaapre-f.sdr

  Max texture units: 4 (32)
  Max elements vertices: 1048576
  Max elements indices: 1048576
  Max texture size: 16384x16384
  Max render buffer size: 16384x16384
  Can use compressed textures: YES
  Texture compression available: YES
  Post-processing enabled: YES
  Using trilinear texture filter.
  Using GLSL for model rendering.
  OpenGL Shader Version: 4.10 NVIDIA via Cg compiler
... OpenGL init is complete!
Size of bitmap info = 760 KB
Size of bitmap extra info = 52 bytes
ANI cursorweb with size 24x24 (25.0% wasted)
GRAPHICS: Initializing default colors...
SCRIPTING: Beginning initialization sequence...
SCRIPTING: Beginning Lua initialization...
LUA: Opening LUA state...
LUA: Initializing base Lua libraries...
LUA: Beginning ADE initialization
ADE: Initializing enumeration constants...
ADE: Assigning Lua session...
SCRIPTING: Beginning main hook parse sequence....
Wokka!  Error opening file (scripting.tbl)!
TABLES: Unable to parse 'scripting.tbl'!  Error code = 5.
TBM  =>  Starting parse of 'mv_flak-sct.tbm' ...
TBM  =>  Starting parse of 'mv_dbrs-sct.tbm' ...
TBM  =>  Starting parse of 'mv_exp-sct.tbm' ...
TBM  =>  Starting parse of 'misc-sct.tbm' ...
TBM  =>  Starting parse of 'gravity-sct.tbm' ...
TBM  =>  Starting parse of 'escort-sct.tbm' ...
TBM  =>  Starting parse of 'deathPart-sct.tbm' ...
SCRIPTING: Inititialization complete.
SCRIPTING: Splash screen overrides checked
SCRIPTING: Splash hook has been run
SCRIPTING: Splash screen conditional hook has been run
Using high memory settings...
Wokka!  Error opening file (interface.tbl)!
WMCGUI: Unable to parse 'interface.tbl'!  Error code = 5.
TBM  =>  Starting parse of 'mv_effects-sdf.tbm' ...
Windows reported 16 joysticks, we found 0
Current soundtrack set to -1 in event_music_reset_choices
TBM  =>  Starting parse of 'mv_music-mus.tbm' ...
TBM  =>  Starting parse of 'mv_effects-mfl.tbm' ...
TBM  =>  Starting parse of 'mv_effects-amr.tbm' ...
TBM  =>  Starting parse of 'mv_effects-wxp.tbm' ...
TBM  =>  Starting parse of 'Muzzleflashes-wxp.tbm' ...
TBM  =>  Starting parse of 'Explosions-wxp.tbm' ...
TBM  =>  Starting parse of 'beams-wxp.tbm' ...
BMPMAN: Found EFF (exp08.eff) with 141 frames at 25 fps.
BMPMAN: Found EFF (exp20.eff) with 81 frames at 40 fps.
BMPMAN: Found EFF (ExpMissileHit1.eff) with 92 frames at 30 fps.
BMPMAN: Found EFF (exp30.eff) with 131 frames at 30 fps.
BMPMAN: Found EFF (exp40.eff) with 33 frames at 24 fps.
BMPMAN: Found EFF (exp50.eff) with 54 frames at 30 fps.
BMPMAN: Found EFF (ExpW.eff) with 91 frames at 40 fps.
BMPMAN: Found EFF (ExpB.eff) with 74 frames at 30 fps.
BMPMAN: Found EFF (Zy.eff) with 43 frames at 30 fps.
BMPMAN: Found EFF (Tach.eff) with 31 frames at 30 fps.
BMPMAN: Found EFF (bomb_flare.eff) with 69 frames at 20 fps.
BMPMAN: Found EFF (flashexpblue.eff) with 36 frames at 30 fps.
BMPMAN: Found EFF (Dragonslave.eff) with 91 frames at 30 fps.
BMPMAN: Found EFF (Cflak.eff) with 54 frames at 30 fps.
BMPMAN: Found EFF (VX-23.eff) with 71 frames at 30 fps.
BMPMAN: Found EFF (Flashexp.eff) with 36 frames at 30 fps.
BMPMAN: Found EFF (Flashexp2.eff) with 44 frames at 30 fps.
BMPMAN: Found EFF (Zyshipexp.eff) with 51 frames at 30 fps.
BMPMAN: Found EFF (Blackhole.eff) with 63 frames at 30 fps.
BMPMAN: Found EFF (exp04.eff) with 61 frames at 30 fps.
BMPMAN: Found EFF (exp05.eff) with 72 frames at 30 fps.
BMPMAN: Found EFF (exp06.eff) with 58 frames at 30 fps.
BMPMAN: Found EFF (capflash.eff) with 40 frames at 10 fps.
BMPMAN: Found EFF (Maxim_Impact.eff) with 23 frames at 30 fps.
ANI Lamprey_Impact with size 80x80 (37.5% wasted)
BMPMAN: Found EFF (Gmuzzle.eff) with 5 frames at 30 fps.
BMPMAN: Found EFF (PWmuzzle.eff) with 4 frames at 30 fps.
BMPMAN: Found EFF (Rmuzzle.eff) with 4 frames at 30 fps.
BMPMAN: Found EFF (Bmuzzle.eff) with 5 frames at 30 fps.
BMPMAN: Found EFF (Cmuzzle.eff) with 4 frames at 30 fps.
BMPMAN: Found EFF (Fmuzzle.eff) with 4 frames at 30 fps.
BMPMAN: Found EFF (Dmuzzle.eff) with 4 frames at 30 fps.
BMPMAN: Found EFF (Smoke.eff) with 71 frames at 35 fps.
BMPMAN: Found EFF (Vk01NMuzzle.eff) with 15 frames at 30 fps.
BMPMAN: Found EFF (BWmuzzle.eff) with 4 frames at 30 fps.
BMPMAN: Found EFF (exp07.eff) with 61 frames at 30 fps.
BMPMAN: Found EFF (Beamhitglow.eff) with 1 frames at 30 fps.
BMPMAN: Found EFF (HSMHS.eff) with 60 frames at 30 fps.
BMPMAN: Found EFF (HSMHSsmall.eff) with 60 frames at 30 fps.
BMPMAN: Found EFF (VX_02imp.eff) with 11 frames at 30 fps.
BMPMAN: Found EFF (Furaexp1.eff) with 81 frames at 30 fps.
BMPMAN: Found EFF (StarfireExp.eff) with 101 frames at 30 fps.
BMPMAN: Found EFF (SmallredExp.eff) with 46 frames at 30 fps.
BMPMAN: Found EFF (ParticleSmoke01.eff) with 54 frames at 24 fps.
WARNING: "Lifetime min or max specified, but $Lifetime was also specified; min or max will be used." at weapons.cpp:1400
TBM  =>  Starting parse of 'mv_core-wep.tbm' ...
TBM  =>  Starting parse of 'mv_effects-wep.tbm' ...
TBM  =>  Starting parse of 'mv_assets-wep.tbm' ...
TBM  =>  Starting parse of 'Wingmen-wep.tbm' ...
TBM  =>  Starting parse of 'Muzzleflashes-wep.tbm' ...
TBM  =>  Starting parse of 'beams-wep.tbm' ...
WARNING: Unrecognized parameter in ai_profiles: $disarm or disable cause global ai goal effects: YES

TBM  =>  Starting parse of 'mv_effects-obt.tbm' ...
TBM  =>  Starting parse of 'turrets-obt.tbm' ...
TBM  =>  Starting parse of 'Targetpriority-obt.tbm' ...
BMPMAN: Found EFF (ParticleSmoke02.eff) with 39 frames at 24 fps.
Particle effect for impact spew disabled on ship 'Fir'kyr Voidbringer'.
Particle effect for damage spew disabled on ship 'Fir'kyr Voidbringer'.
Particle effect for impact spew disabled on ship 'Fir'kyr VoidBearer'.
Particle effect for damage spew disabled on ship 'Fir'kyr VoidBearer'.
Particle effect for impact spew disabled on ship 'Fir'kyr VoidKeeper'.
Particle effect for damage spew disabled on ship 'Fir'kyr VoidKeeper'.
TBM  =>  Starting parse of 'mv_core-shp.tbm' ...
TBM  =>  Starting parse of 'mv_effects-shp.tbm' ...
TBM  =>  Starting parse of 'mv_assets-shp.tbm' ...
TBM  =>  Starting parse of 'Wingmen-shp.tbm' ...
ANI head1 with size 256x206 (19.5% wasted)
TBM  =>  Starting parse of 'mv_core-hdg.tbm' ...
ANI support1 with size 108x24 (25.0% wasted)
ANI damage1 with size 148x25 (21.9% wasted)
ANI wingman1 with size 71x53 (17.2% wasted)
ANI wingman2 with size 35x53 (17.2% wasted)
ANI wingman3 with size 14x53 (17.2% wasted)
ANI toggle1 with size 57x20 (37.5% wasted)
ANI weapons1 with size 126x20 (37.5% wasted)
ANI weapons1_b with size 150x20 (37.5% wasted)
ANI objective1 with size 149x21 (34.4% wasted)
ANI netlag1 with size 29x30 (6.3% wasted)
ANI targhit1 with size 31x21 (34.4% wasted)
ANI 2_energy2 with size 86x96 (25.0% wasted)
ANI time1 with size 47x23 (28.1% wasted)
ANI energy1 with size 12x41 (35.9% wasted)
ANI targetview3 with size 7x20 (37.5% wasted)
ANI targetview1 with size 137x156 (39.1% wasted)
ANI targetview2 with size 4x96 (25.0% wasted)
ANI 2_reticle1 with size 40x24 (25.0% wasted)
ANI 2_leftarc with size 103x252 (1.6% wasted)
ANI 2_rightarc1 with size 103x252 (1.6% wasted)
ANI 2_toparc2 with size 35x24 (25.0% wasted)
ANI 2_toparc3 with size 41x29 (9.4% wasted)
ANI 2_lead1 with size 26x26 (18.8% wasted)
ANI 2_lock1 with size 56x53 (17.2% wasted)
ANI 2_lockspin with size 100x100 (21.9% wasted)
ANI 2_radar1 with size 209x170 (33.6% wasted)
TBM  =>  Starting parse of 'mv_effects-str.tbm' ...
loading animated cursor "cursor"
ANI cursor with size 24x24 (25.0% wasted)
MediaVPs: Flaming debris script loaded!
MediaVPs: Explosions script loaded!
LibraryManager: Loaded file "class.lua"
LibraryManager: Loaded file "effectManager.lua"
LibraryManager: Loaded file "strings.lua"
LibraryManager: Loaded file "converter.lua"
LibraryManager: Loaded file "parser.lua"
LibraryManager: Loaded file "objectWrapper.lua"
LibraryManager: Loaded file "particles.lua"
LibraryManager: Loaded file "trailInfo.lua"
LibraryManager: Loaded file "particleParser.lua"
Ships.tbl is : INVALID!!!!
Weapons.tbl is : INVALID!!!!
cfile_init() took 857
Got event GS_EVENT_GAME_INIT (49) in state NOT A VALID STATE (0)
ANI cursor.ani with size 24x24 (25.0% wasted)
Got event GS_EVENT_MAIN_MENU (0) in state GS_STATE_INITIAL_PLAYER_SELECT (37)
WARNING!, Could not load door anim 2_Exit in main hall
WARNING!, Could not load door anim 2_Pilot in main hall
WARNING!, Could not load door anim 2_Continue in main hall
WARNING!, Could not load door anim 2_Tech in main hall
WARNING!, Could not load door anim 2_Option in main hall
WARNING!, Could not load door anim 2_Campaign in main hall
Got event GS_EVENT_TECH_MENU (11) in state GS_STATE_MAIN_MENU (1)
Techroom successfully initialized, now changing tab...
Loading model 'Ray.pof'
IBX: Found a good IBX to read for 'Ray.pof'.
IBX-DEBUG => POF checksum: 0xffbd65f5, IBX checksum: 0x521d437a -- "Ray.pof"
Got event GS_EVENT_SIMULATOR_ROOM (58) in state GS_STATE_TECH_MENU (7)
Freeing all existing models...
Frame  0 too long!!: frametime = 0.595 (0.595)
Got event GS_EVENT_START_GAME (1) in state GS_STATE_SIMULATOR_ROOM (20)
Urutorahappī!!

[02:42] <@Axem> spoon somethings wrong
[02:42] <@Axem> critically wrong
[02:42] <@Axem> im happy with these missions now
[02:44] <@Axem> well
[02:44] <@Axem> with 2 of them

 

Offline mjn.mixael

  • Cutscene Master
  • 212
  • Chopped liver
    • Steam
    • Twitter
I was just talking with The_E about that. Weapons that are in retail FS2 wouldn't use FS1 style and none of the ships would either. A few moments later he said it would be fixed in the next builds.
Cutscene Upgrade Project - Mainhall Remakes - Between the Ashes
Youtube Channel - P3D Model Box
Between the Ashes is looking for committed testers, PM me for details.
Freespace Upgrade Project See what's happening.

 

Offline Kolgena

  • 211
(Also, you got me so excited with that youtube link. I thought it was going to link me to a preview of the fix in action. lol.)

That's EXACTLY why I did it  :lol:

If you want the exact description of the problem it depends on the ratio between model size and the zoom_amount. BUT i cant use the zoom_amount for the calculation of the grid size because then the coordinates for the glow shader would be wrong. This is also why the glow is smaller on larger ships like the ursa. Cant be helped at the moment as it would require passing many parameters to the shader to get true screen coordinates in the shader calculation which just isnt feasible right now. I dont know if it will ever be.

Meh, screw it. Looks good as it is. I think if the Artemises and the boa are looked into (their grids are much smaller than even the one for the ursa... bad radius settings? No clue), it'll be fine.

 

Offline Valathil

  • ...And I would have had a custom title if it wasn't for you meddling kids!
  • 29
  • Custom Title? Wizards need no Custom Title!
I've tested the cloaking effect and it's great except from one thing.
Since the animated shader is only applied to ship model, when a craft such as Iz'rail (or any Steve-O's fighter for that matter) cloaks, it's external weapons can be seen conspiciously floating in space.  :)
So, I have a small request to apply the cloaking effect to whatever weapons the cloaking craft happens to be carrying on it's external hardpoints.

this is fixed in rev 7405
« Last Edit: August 01, 2011, 04:47:57 pm by Valathil »
┏┓╋┏┓╋╋╋╋╋╋╋╋╋┏┓
┃┃╋┃┃╋╋╋╋╋╋╋╋╋┃┃
┃┃┏┫┃┏┳━━┓┏━━┓┃┗━┳━━┳━━┳━━┓
┃┃┣┫┗┛┫┃━┫┃┏┓┃┃┏┓┃┏┓┃━━┫━━┫
┃┗┫┃┏┓┫┃━┫┃┏┓┃┃┗┛┃┗┛┣━━┣━━┃
┗━┻┻┛┗┻━━┛┗┛┗┛┗━━┻━━┻━━┻━━┛