don't click here

Sonic 2 HD

Discussion in 'Fangaming Discussion' started by Canned Karma, Mar 28, 2012.

Thread Status:
Not open for further replies.
  1. Aerosol

    Aerosol

    Not here. Moderator
    11,163
    573
    93
    Not where I want to be.
    Sonic (?): Coming summer of 2055...?
    I feel like that's been said numerous times already. I believe during the time when people first started suspecting that S2HD was going closed source.
     
  2. HeartAttack

    HeartAttack

    is a smug hipster, brah! Member
    567
    0
    0
    Cali
    On another note, the debug mode - I'm pretty sure it becomes available after getting a perfect bonus on one or more of the zone acts. Every time I open up the demo now, debug mode is there.
     
  3. diplomacydog

    diplomacydog

    What did I just read? Member
    121
    0
    0
    South Carolina
    No :(
    If I remember back in the community age of the product (with open suggestions and contributions), everyone was having a lot of trouble with the eggmobile looking like metal without looking out of place with the rest of the art. No one was quite able to fix it.
     
  4. Aerosol

    Aerosol

    Not here. Moderator
    11,163
    573
    93
    Not where I want to be.
    Sonic (?): Coming summer of 2055...?
    This is where some artistic license might help
     
  5. Volpino

    Volpino

    Things are looking up! Member
    1,207
    0
    0
    A secret. >:3
    It does look plastic-y, though. One property of metal is its reflective surface; the drill and lower part of the machine could have a green tint for the grass, for example, a blue tine for the sky on the upper parts, if that's possible.

    The project IS still taking criticisms from the community, right? :specialed:
     
  6. Guess Who

    Guess Who

    It's a miracle! Oldbie
    4,296
    63
    28
    Oregon
    lol
  7. Vinchenz

    Vinchenz

    Yo! Hustle! Hustle! Member
    Not sure if its been posted yet but EVERYONE should read THIS.

    I've known about this problem. More people should. And really, he should be kicked off the team.

    However, I feel that whether he's kicked off or not, this project will never come to fruition. He gets kicked off, the engine will probably be pulled away and nobody will want to re-create it. He doesn't get kicked off the team and the team will suffer more headaches as the programmer holds onto the game as ransom for years before they all give up. Personally, I'd have left so I wouldn't have to deal with this bullshit.

    Edit: AAaaaand Ninja'd.
     
  8. Saidian

    Saidian

    Member
    744
    0
    16
    England
    Blast From The Fast (Fangame)
    I hope I'm not the only one seeing an Iceberg on the way, 'cos I certainly see it coming unless certain people get their shit together
     
  9. Mercury

    Mercury

    His Name Is Sonic Tech Member
    1,740
    21
    18
    Location Location
    AeStHete
    Wait, what? I thought the fact that Sonic looks the way he does was an homage to the real Sonic 2 Alpha, and that the final S2HD will have the right pose.

    If that's not the case, I gave the team too much credit. But I hope that's not right.
     
  10. Tanks

    Tanks

    Member
    1,048
    108
    43
    The excuse given to me by the S2HD staff was because the artist couldn't get it to look right so he settled for the next best thing. This is Sonic 2 Final. You want to throw in the alternate title just for kicks? That's cool. I certainly think the title screen is neat, but utterly inappropriate.
     
  11. Metal Man88

    Metal Man88

    Time Traveller Oldbie
    2,137
    0
    0
    This project appears to be on fire from my perspective.

    The game loads in slow motion (with no loading screen and no idea if it will ever finish loading) and behaves wonkily if your monitor is not 1080P. Its requirements are absurd; and for all those years, there is only one level/two zones to show for it, and some silly DRM too.

    I do not have the art chops to critique the art. However, I can say that I agree with Stealth in that the whole game seems to be like every surface emits light/is made out of ultra-reflective neon plastic. It's just kind of blinding, really.

    It is true. People who don't like the game don't have to play it. Though I guess that's out of the question. I have a better question: Will there be a complete game for us to play in less than 20 years from now? :v:
     
  12. GerbilSoft

    GerbilSoft

    RickRotate'd. Administrator
    2,971
    76
    28
    USA
    rom-properties
    Hay guiz, I found the license agreement, and some other goodies!

    Code (Text):
    1.  
    2. AGREEMENT TO PLAY
    3. IN ORDER TO PLAY THIS GAME ON THIS SYSTEM, ONE MUST AGREE TO THESE STATEMENTS:
    4. THIS IS A NON-PROFIT FAN-BASED GAME AND THAT THIS GAME STATES NO INTENTION OF INFRINGING UPON ANY APPEARING TRADEMARKS.
    5. DO YOU AGREE TO THESE STATEMENTS?
    6.  
    Code (Text):
    1.  
    2. DECLINE OF AGREEMENT
    3. YOU CHOOSED NOT TO AGREE TO THE PREVIOUSLY DISPLAYED STATEMENTS. THE GAME HAS BEEN SAFELY SHUTDOWN, AND YOU CAN NOW CLOSE THE GAME.
    4. IF YOU BY ANY CHANCE REGRET YOUR CHOICE, OR MADE A MISTAKE, YOU CAN REDO IT BY RESTARTING THE GAME!
    5.  
    Code (Text):
    1.  
    2. A RESOURCE READ REQUEST WAS DELAYED WHICH IS NOT ALLOWED. THE GAME HAS BEEN FORCED TO SHUTDOWN TO PREVENT ANY GAME DATA DAMAGE.
    3.  
    Code (Text):
    1.  
    2. HACK DETECTION
    3. ONE OR MORE GAME RESOURCES WERE MANIPULATED BY AN OUTSIDE SOURCE. THIS IS NOT ALLOWED AS SPECIFIED IN THE GAME LICENSE.
    4. YOU MUST REINSTALL THE GAME AND ACCEPT THE GAME LICENSE AGAIN, TO CONTINUE TO PLAY THE GAME.
    5.  
    Code (Text):
    1.  
    2. UPGRADE NEEDED
    3. THE ONLINE SERVER COULDN'T VALIDATE YOU GAMEPLAY. ITS RESULT DIFFERED FROM YOURS.
    4. UPGRADE YOUR SONIC 2 HD GAME TO FIX THE PROBLEM!
    5.  
    Code (Text):
    1.  
    2. DO YOU WANT TO SAVE YOUR PROGRESS TO THE LOCAL GAME PROFILE INSTEAD?
    3.  
    Code (Text):
    1.  
    2. INTERNAL PROTECTION ERROR.
    3. A RESOURCE FILE WAS MISSING WHEN TRYING TO LOAD ONE OF THE GAME DATA RESOURCES. THE GAME NEEDS THE RESOURCE IN ORDER TO CONTINUE NORMAL GAMEPLAY.
    4. PLEASE REINSTALL THE RESOURCE FILES INTO THE GAME DATA FOLDER TO CONTINUE PLAYING THE GAME.
    5. IF YOU CHOOSE TO QUIT THE GAME AT THIS POINT, YOU MIGHT LOSE YOUR GAME PROGRESS!
    6.  
    Code (Text):
    1.  
    2. FAILED TO ACCESS AN EXTERNAL GAME RESOURCE.
    3. IT MIGHT BE OPENED BY ANOTHER PROGRAM.
    4. DO YOU WANT TO TRY AGAIN?
    5.  
    Code (Text):
    1.  
    2. ONE EXTERNAL GAME RESOURCE CONTAINED INVALID DATA.
    3. PLEASE REINSTALL THE RESOURCE FILES INTO THE GAME DATA FOLDER TO CONTINUE PLAYING THE GAME.
    4. IF YOU CHOOSE TO QUIT THE GAME AT THIS POINT, YOU MIGHT LOSE YOUR GAME PROGRESS!
    5.  
    Code (Text):
    1.  
    2. OUT OF MEMORY
    3. WHILE CREATING A GAME RESOURCE, A MEMORY ALLOCATION FAILED.
    4. TRY CHANGING THE SETTINGS TO LOWER QUALITY.
    5.  
    Code (Text):
    1.  
    2. INSUFFICIENT HARDWARE
    3. WHILE CREATING A GAME RESOURCE, A DEVICE RESOURCE COULDN'T TO BE CREATED.
    4. WHILE CREATING A GAME RESOURCE, A DEVICE RESOURCE COULDN'T BE INITIALIZED.
    5.  
    BONUS ROUND

    Code (Text):
    1.  
    2. sampler Texture0;                      // Base texture
    3. sampler Texture1;                      // Perturbed texture A8L8
    4. float unfDistortionAmount;     // Distortion amount set before primitive rendering
    5. float4 main (float4 TexCoord0 : TEXCOORD0,  
    6.                          float4 TexCoord1 : TEXCOORD1,  
    7.                          float4 rgbaDiffuse : COLOR0,  
    8.                          float4 rgbaSpecular : COLOR1) : COLOR0
    9.        float4 vDistortion = tex2D (Texture1, TexCoord1);
    10.        float4 vPerturbed = TexCoord0 + vDistortion.r * unfDistortionAmount;
    11.        return tex2D (Texture0, vPerturbed) * rgbaDiffuse + float4 (rgbaSpecular.r, rgbaSpecular.g, rgbaSpecular.b, 0);
    12.  
    Code (Text):
    1.  
    2. sampler Texture0;                      // Base texture
    3. sampler Texture1;                      // Perturbed texture A8L8
    4. sampler Texture2;                      // Alpha mask A8L8
    5. float unfDistortionAmount;     // Distortion amount set before primitive rendering
    6. float4 main (float4 TexCoord0 : TEXCOORD0,  
    7.                          float4 TexCoord1 : TEXCOORD1,  
    8.                          float4 TexCoord2 : TEXCOORD2,  
    9.                          float4 rgbaDiffuse : COLOR0,  
    10.                          float4 rgbaSpecular : COLOR1) : COLOR0
    11.        float4 rgbaOpacityMask = tex2D (Texture2, TexCoord2);
    12.        float4 vDistortion = tex2D (Texture1, TexCoord1) * rgbaOpacityMask;
    13.        float4 vPerturbed = TexCoord0 + vDistortion.r * unfDistortionAmount;
    14.        return tex2D (Texture0, vPerturbed) * rgbaDiffuse + float4 (rgbaSpecular.r, rgbaSpecular.g, rgbaSpecular.b, 0);
    15.  
    Code (Text):
    1.  
    2. sampler Texture0;                      // Base texture
    3. sampler Texture1;                      // Perturbed texture A8L8
    4. float unfDistortionAmount;     // Distortion amount set before primitive rendering
    5. float4 main (float4 TexCoord0 : TEXCOORD0,  
    6.                          float4 TexCoord1 : TEXCOORD1,  
    7.                          float4 rgbaDiffuse : COLOR0,  
    8.                          float4 rgbaSpecular : COLOR1) : COLOR0
    9.        float4 vDistortion = tex2D (Texture1, TexCoord1);
    10.        float4 vPerturbed = TexCoord0 + vDistortion.r * unfDistortionAmount;
    11.        vPerturbed.y = TexCoord0.y;
    12.        return tex2D (Texture0, vPerturbed) * rgbaDiffuse + float4 (rgbaSpecular.r, rgbaSpecular.g, rgbaSpecular.b, 0);
    13.  
    Code (Text):
    1.  
    2. varying vec2 TexCoord0, TexCoord1, TexCoord2, TexCoord3;
    3. uniform sampler2D Texture0;            // Base texture
    4. uniform sampler2D Texture1;            // Perturbed texture A8L8
    5. uniform float unfDistortionAmount;     // Distortion amount set before primitive rendering
    6. void main (void)
    7.        vec4 vDistortion = texture2D (Texture1, TexCoord1.xy);
    8.        vec2 vPerturbed = TexCoord0.xy + vDistortion.r * unfDistortionAmount;
    9.        gl_FragColor = texture2D (Texture0, vPerturbed) * gl_Color + vec4 (gl_SecondaryColor.r, gl_SecondaryColor.g, gl_SecondaryColor.b, 0.0);
    10.  
    Code (Text):
    1.  
    2. varying vec2 TexCoord0, TexCoord1, TexCoord2, TexCoord3;
    3. uniform sampler2D Texture0;            // Base texture
    4. uniform sampler2D Texture1;            // Perturbed texture A8L8
    5. uniform sampler2D Texture2;            // Alpha mask A8L8
    6. uniform float unfDistortionAmount;     // Distortion amount set before primitive rendering
    7. void main (void)
    8.        vec4 rgbaOpacityMask = texture2D (Texture2, TexCoord2.xy);
    9.        vec4 vDistortion = texture2D (Texture1, TexCoord1.xy) * rgbaOpacityMask;
    10.        vec2 vPerturbed = TexCoord0.xy + vDistortion.r * unfDistortionAmount;
    11.        gl_FragColor = texture2D (Texture0, vPerturbed) * gl_Color + vec4 (gl_SecondaryColor.r, gl_SecondaryColor.g, gl_SecondaryColor.b, 0.0);
    12.  
    Code (Text):
    1.  
    2. varying vec2 TexCoord0, TexCoord1, TexCoord2, TexCoord3;
    3. uniform sampler2D Texture0;            // Base texture
    4. uniform sampler2D Texture1;            // Perturbed texture A8L8
    5. uniform float unfDistortionAmount;     // Distortion amount set before primitive rendering
    6. void main (void)
    7.        vec4 vDistortion = texture2D (Texture1, TexCoord1.xy);
    8.        vec2 vPerturbed = TexCoord0.xy + vDistortion.r * unfDistortionAmount;
    9.        vPerturbed.y = TexCoord0.y;
    10.        gl_FragColor = texture2D (Texture0, vPerturbed) * gl_Color + vec4 (gl_SecondaryColor.r, gl_SecondaryColor.g, gl_SecondaryColor.b, 0.0);
    11.  
    Code (Text):
    1.  
    2. sampler Texture0;                      // Font mask A8L8
    3. float unfShadowDirectionX;     // Horizontal direction of shadow (-1/TexWidth)
    4. float unfShadowDirectionY;     // Vertical direction of shadow (-1/TexHeight)
    5. float unfShadowColorR;         // Red component of shadow color
    6. float unfShadowColorG;         // Green component of shadow color
    7. float unfShadowColorB;         // Blue component of shadow color
    8. float unfSteps;                        // Number of shadow steps in the shadow direction
    9. float4 main (float4 TexCoord0 : TEXCOORD0,  
    10.                          float4 rgbaDiffuse : COLOR0,  
    11.                          float4 rgbaSpecular : COLOR1) : COLOR0
    12.        float4 rgbaFontMask = tex2D (Texture0, TexCoord0);
    13.        rgbaFontMask = saturate (rgbaFontMask * rgbaDiffuse + float4 (rgbaSpecular.r, rgbaSpecular.g, rgbaSpecular.b, 0));
    14.        float4 rgbaShadow = 0;
    15.        float2 vDirectionStep = float2 (unfShadowDirectionX, unfShadowDirectionY);
    16.        float2 vDirection = vDirectionStep;
    17.        if (unfSteps > 3.0)
    18.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    19.                vDirectionStep += vDirection;
    20.        if (unfSteps > 2.0)
    21.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    22.                vDirectionStep += vDirection;
    23.        if (unfSteps > 1.0)
    24.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    25.                vDirectionStep += vDirection;
    26.        if (unfSteps > 0.0)
    27.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    28.                vDirectionStep += vDirection;
    29.        float4 rgbaShadowResult = float4 (unfShadowColorR, unfShadowColorG, unfShadowColorB, 1) * saturate (rgbaShadow.a);
    30.        rgbaFontMask = lerp (rgbaShadowResult, float4 (rgbaFontMask.r, rgbaFontMask.g, rgbaFontMask.b, 1), rgbaFontMask.a);
    31.        return rgbaFontMask;
    32.  
    Code (Text):
    1.  
    2. sampler Texture0;                      // Font mask A8L8
    3. sampler Texture1;                      // Font surface
    4. float unfShadowDirectionX;     // Horizontal direction of shadow (-1/TexWidth)
    5. float unfShadowDirectionY;     // Vertical direction of shadow (-1/TexHeight)
    6. float unfShadowColorR;         // Red component of shadow color
    7. float unfShadowColorG;         // Green component of shadow color
    8. float unfShadowColorB;         // Blue component of shadow color
    9. float unfSteps;                        // Number of shadow steps in the shadow direction
    10. float4 main (float4 TexCoord0 : TEXCOORD0,  
    11.                          float4 TexCoord1 : TEXCOORD1,  
    12.                          float4 rgbaDiffuse : COLOR0,  
    13.                          float4 rgbaSpecular : COLOR1) : COLOR0
    14.        float4 rgbaFontMask = tex2D (Texture0, TexCoord0);
    15.        float4 rgbaFontSurface = tex2D (Texture1, TexCoord1);
    16.        rgbaFontSurface = saturate (rgbaFontSurface * rgbaDiffuse + float4 (rgbaSpecular.r, rgbaSpecular.g, rgbaSpecular.b, 0));
    17.        rgbaFontMask *= rgbaFontSurface;
    18.        float4 rgbaShadow = 0;
    19.        float2 vDirectionStep = float2 (unfShadowDirectionX, unfShadowDirectionY);
    20.        float2 vDirection = vDirectionStep;
    21.        if (unfSteps > 3.0)
    22.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    23.                vDirectionStep += vDirection;
    24.        if (unfSteps > 2.0)
    25.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    26.                vDirectionStep += vDirection;
    27.        if (unfSteps > 1.0)
    28.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    29.                vDirectionStep += vDirection;
    30.        if (unfSteps > 0.0)
    31.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    32.                vDirectionStep += vDirection;
    33.        float4 rgbaShadowResult = float4 (unfShadowColorR, unfShadowColorG, unfShadowColorB, 1) * saturate (rgbaShadow.a);
    34.        rgbaFontMask = lerp (rgbaShadowResult, float4 (rgbaFontMask.r, rgbaFontMask.g, rgbaFontMask.b, 1), rgbaFontMask.a);
    35.        return rgbaFontMask;
    36.  
    Code (Text):
    1.  
    2. sampler Texture0;                      // Sprite map and glow A8L8
    3. float unfInnerColorR;          // Red component of inner color
    4. float unfInnerColorG;          // Green component of inner color
    5. float unfInnerColorB;          // Blue component of inner color
    6. float unfOuterColorR;          // Red component of outer color
    7. float unfOuterColorG;          // Green component of outer color
    8. float unfOuterColorB;          // Blue component of outer color
    9. float4 main (float4 TexCoord0 : TEXCOORD0,  
    10.                          float4 rgbaDiffuse : COLOR0,  
    11.                          float4 rgbaSpecular : COLOR1) : COLOR0
    12.        float4 rgbaDualGlow = tex2D (Texture0, TexCoord0);
    13.        float4 rgbaOuterColor = float4 (unfOuterColorR, unfOuterColorG, unfOuterColorB, 1);
    14.        float4 rgbaInnerColor = float4 (unfInnerColorR, unfInnerColorG, unfInnerColorB, 1) - rgbaOuterColor;
    15.        float4 rgbaMix = saturate (rgbaDualGlow.r * rgbaInnerColor + rgbaOuterColor);
    16.        return float4 (rgbaMix.r, rgbaMix.g, rgbaMix.b, rgbaDualGlow.a) * rgbaDiffuse + float4 (rgbaSpecular.r, rgbaSpecular.g, rgbaSpecular.b, 0);
    17.  
    Code (Text):
    1.  
    2. varying vec2 TexCoord0, TexCoord1, TexCoord2, TexCoord3;
    3. uniform sampler2D Texture0;            // Font mask A8L8
    4. uniform float unfShadowDirectionX;     // Horizontal direction of shadow (-1/TexWidth)
    5. uniform float unfShadowDirectionY;     // Vertical direction of shadow (-1/TexHeight)
    6. uniform float unfShadowColorR;         // Red component of shadow color
    7. uniform float unfShadowColorG;         // Green component of shadow color
    8. uniform float unfShadowColorB;         // Blue component of shadow color
    9. uniform float unfSteps;                        // Number of shadow steps in the shadow direction
    10. void main (void)  
    11.        vec4 rgbaFontMask = texture2D (Texture0, TexCoord0.xy);
    12.        rgbaFontMask = clamp (rgbaFontMask * gl_Color + vec4 (gl_SecondaryColor.r, gl_SecondaryColor.g, gl_SecondaryColor.b, 0.0), 0.0, 1.0);
    13.        vec4 rgbaShadow = vec4 (0.0);
    14.        vec2 vDirectionStep = vec2 (unfShadowDirectionX, unfShadowDirectionY);
    15.        vec2 vDirection = vDirectionStep;
    16.        if (unfSteps > 3.0)
    17.                rgbaShadow += texture2D (Texture0, TexCoord0.xy + vDirectionStep);
    18.                vDirectionStep += vDirection;
    19.        if (unfSteps > 2.0)
    20.                rgbaShadow += texture2D (Texture0, TexCoord0.xy + vDirectionStep);
    21.                vDirectionStep += vDirection;
    22.        if (unfSteps > 1.0)
    23.                rgbaShadow += texture2D (Texture0, TexCoord0.xy + vDirectionStep);
    24.                vDirectionStep += vDirection;
    25.        if (unfSteps > 0.0)
    26.                rgbaShadow += texture2D (Texture0, TexCoord0.xy + vDirectionStep);
    27.                vDirectionStep += vDirection;
    28.        vec4 rgbaShadowResult = vec4 (unfShadowColorR, unfShadowColorG, unfShadowColorB, 1.0) * clamp (rgbaShadow.a, 0.0, 1.0);
    29.        rgbaFontMask = mix (rgbaShadowResult, vec4 (rgbaFontMask.r, rgbaFontMask.g, rgbaFontMask.b, 1.0), rgbaFontMask.a);
    30.        gl_FragColor = rgbaFontMask;
    31.  
    Code (Text):
    1.  
    2. varying vec2 TexCoord0, TexCoord1, TexCoord2, TexCoord3;
    3. uniform sampler2D Texture0;            // Font mask A8L8
    4. uniform sampler2D Texture1;            // Font surface
    5. uniform float unfShadowDirectionX;     // Horizontal direction of shadow (-1/TexWidth)
    6. uniform float unfShadowDirectionY;     // Vertical direction of shadow (-1/TexHeight)
    7. uniform float unfShadowColorR;         // Red component of shadow color
    8. uniform float unfShadowColorG;         // Green component of shadow color
    9. uniform float unfShadowColorB;         // Blue component of shadow color
    10. uniform float unfSteps;                        // Number of shadow steps in the shadow direction
    11. void main (void)  
    12.        vec4 rgbaFontMask = texture2D (Texture0, TexCoord0.xy);
    13.        vec4 rgbaFontSurface = texture2D (Texture1, TexCoord1.xy);
    14.        rgbaFontSurface = clamp (rgbaFontSurface * gl_Color + vec4 (gl_SecondaryColor.r, gl_SecondaryColor.g, gl_SecondaryColor.b, 0.0), 0.0, 1.0);
    15.        rgbaFontMask *= rgbaFontSurface;
    16.        vec4 rgbaShadow = vec4 (0.0);
    17.        vec2 vDirectionStep = vec2 (unfShadowDirectionX, unfShadowDirectionY);
    18.        vec2 vDirection = vDirectionStep;
    19.        if (unfSteps > 3.0)
    20.                rgbaShadow += texture2D (Texture0, TexCoord0.xy + vDirectionStep);
    21.                vDirectionStep += vDirection;
    22.        if (unfSteps > 2.0)
    23.                rgbaShadow += texture2D (Texture0, TexCoord0.xy + vDirectionStep);
    24.                vDirectionStep += vDirection;
    25.        if (unfSteps > 1.0)
    26.                rgbaShadow += texture2D (Texture0, TexCoord0.xy + vDirectionStep);
    27.                vDirectionStep += vDirection;
    28.        if (unfSteps > 0.0)
    29.                rgbaShadow += texture2D (Texture0, TexCoord0.xy + vDirectionStep);
    30.                vDirectionStep += vDirection;
    31.        vec4 rgbaShadowResult = vec4 (unfShadowColorR, unfShadowColorG, unfShadowColorB, 1.0) * clamp (rgbaShadow.a, 0.0, 1.0);
    32.        rgbaFontMask = mix (rgbaShadowResult, vec4 (rgbaFontMask.r, rgbaFontMask.g, rgbaFontMask.b, 1.0), rgbaFontMask.a);
    33.        gl_FragColor = rgbaFontMask;
    34.  
    Code (Text):
    1.  
    2. varying vec2 TexCoord0;
    3. uniform sampler2D Texture0;            // Sprite map and glow A8L8
    4. uniform float unfInnerColorR;          // Red component of inner color
    5. uniform float unfInnerColorG;          // Green component of inner color
    6. uniform float unfInnerColorB;          // Blue component of inner color
    7. uniform float unfOuterColorR;          // Red component of outer color
    8. uniform float unfOuterColorG;          // Green component of outer color
    9. uniform float unfOuterColorB;          // Blue component of outer color
    10. void main (void)
    11.        vec4 rgbaDualGlow = texture2D (Texture0, TexCoord0.xy);
    12.        vec4 rgbaOuterColor = vec4 (unfOuterColorR, unfOuterColorG, unfOuterColorB, 1.0);
    13.        vec4 rgbaInnerColor = vec4 (unfInnerColorR, unfInnerColorG, unfInnerColorB, 1.0) - rgbaOuterColor;
    14.        vec4 rgbaMix = clamp (rgbaDualGlow.r * rgbaInnerColor + rgbaOuterColor, 0.0, 1.0);
    15.        gl_FragColor = vec4 (rgbaMix.r, rgbaMix.g, rgbaMix.b, rgbaDualGlow.a) * gl_Color + vec4 (gl_SecondaryColor.r, gl_SecondaryColor.g, gl_SecondaryColor.b, 0.0);
    16.  
    Code (Text):
    1.  
    2. sampler Texture0;                      // Font mask A8L8
    3. float unfShadowDirectionX;     // Horizontal direction of shadow (-1/TexWidth)
    4. float unfShadowDirectionY;     // Vertical direction of shadow (-1/TexHeight)
    5. float unfShadowColorR;         // Red component of shadow color
    6. float unfShadowColorG;         // Green component of shadow color
    7. float unfShadowColorB;         // Blue component of shadow color
    8. float unfSteps;                        // Number of shadow steps in the shadow direction
    9. float4 main (float4 TexCoord0 : TEXCOORD0,  
    10.                          float4 rgbaDiffuse : COLOR0,  
    11.                          float4 rgbaSpecular : COLOR1) : COLOR0
    12.        float4 rgbaFontMask = tex2D (Texture0, TexCoord0);
    13.        float4 rgbaShadow = 0;
    14.        float2 vDirectionStep = float2 (unfShadowDirectionX, unfShadowDirectionY);
    15.        float2 vDirection = vDirectionStep;
    16.        if (unfSteps > 2.0)
    17.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    18.                vDirectionStep += vDirection;
    19.        if (unfSteps > 1.0)
    20.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    21.                vDirectionStep += vDirection;
    22.        if (unfSteps > 0.0)
    23.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    24.                vDirectionStep += vDirection;
    25.        float4 rgbaShadowResult = float4 (unfShadowColorR, unfShadowColorG, unfShadowColorB, 1) * saturate (rgbaShadow.a);
    26.        rgbaFontMask = lerp (rgbaShadowResult, float4 (rgbaFontMask.r, rgbaFontMask.g, rgbaFontMask.b, 1), rgbaFontMask.a);
    27.  
    Code (Text):
    1.  
    2. sampler Texture0;                      // Font mask A8L8
    3. sampler Texture1;                      // Font surface
    4. float unfShadowDirectionX;     // Horizontal direction of shadow (-1/TexWidth)
    5. float unfShadowDirectionY;     // Vertical direction of shadow (-1/TexHeight)
    6. float unfShadowColorR;         // Red component of shadow color
    7. float unfShadowColorG;         // Green component of shadow color
    8. float unfShadowColorB;         // Blue component of shadow color
    9. float unfSteps;                        // Number of shadow steps in the shadow direction
    10. float4 main (float4 TexCoord0 : TEXCOORD0,  
    11.                          float4 TexCoord1 : TEXCOORD1,  
    12.                          float4 rgbaDiffuse : COLOR0,  
    13.                          float4 rgbaSpecular : COLOR1) : COLOR0
    14.        float4 rgbaFontMask = tex2D (Texture0, TexCoord0);
    15.        float4 rgbaFontSurface = tex2D (Texture1, TexCoord1);
    16.        rgbaFontMask *= rgbaFontSurface;
    17.        float4 rgbaShadow = 0;
    18.        float2 vDirectionStep = float2 (unfShadowDirectionX, unfShadowDirectionY);
    19.        float2 vDirection = vDirectionStep;
    20.        if (unfSteps > 2.0)
    21.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    22.                vDirectionStep += vDirection;
    23.        if (unfSteps > 1.0)
    24.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    25.                vDirectionStep += vDirection;
    26.        if (unfSteps > 0.0)
    27.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    28.                vDirectionStep += vDirection;
    29.        float4 rgbaShadowResult = float4 (unfShadowColorR, unfShadowColorG, unfShadowColorB, 1) * saturate (rgbaShadow.a);
    30.        rgbaFontMask = lerp (rgbaShadowResult, float4 (rgbaFontMask.r, rgbaFontMask.g, rgbaFontMask.b, 1), rgbaFontMask.a);
    31.        return rgbaFontMask * rgbaDiffuse + float4 (rgbaSpecular.r, rgbaSpecular.g, rgbaSpecular.b, 0);
    32.  
    EDIT: So I herd u liek creditz.

    Code (Text):
    1.  
    2. a TO 'RETRY' OR o
    3. b TO 'CANCEL':
    4. a FOR 'YES' OR o
    5. b FOR 'NO':
    6. a FOR 'YES', o
    7. b FOR 'NO', OR o
    8. c TO 'CANCEL':
    9. a TO 'ABORT', o
    10. b TO 'RETRY', OR o
    11. c TO 'IGNORE':
    12. a FOR 'OK' OR o
    13. b TO 'CANCEL':
    14. PRESS ANY BUTTON TO CONTINUE
    15. GAME EXCEPTION
    16. GAME HALTED.
    17. PERFECT BONUS
    18. RING BONUS
    19. TIME BONUS
    20. THROUGH
    21. KNUCKLES
    22. ALEXANDRA JANKY
    23. MIKE HILLARD
    24. CHRISTIAN PETERSON
    25. JARED KASL
    26. DAMIAN GROVE
    27. LOSTTETRISTGM
    28. RYAN HATHAWAY
    29. VINCENZO MASTROROSATO
    30. SONIC RETRO
    31. SCARRED SUN
    32. TEE LOPES
    33. MUSICIAN
    34. SPECIAL THANKS
    35. WEB ARTIST
    36. LEAD ANIMATOR
    37. CHARACTER ARTIST
    38. SNICKERSNACK
    39. PROMOTIONAL ARTIST
    40. CORNETTHEORY
    41. BACKGROUND ARTIST
    42. STAGE ARTIST
    43. CERULEAN NIGHTS
    44. GAME ARTIST
    45. SCANLINE99
    46. VISUALS DIRECTOR
    47. TOOLS PROGRAMMER
    48. LEAD PROGRAMMER
    49. CANNED KARMA
    50. PROJECT MANAGER
    51. PROJECT LEADER
    52. INTERACTION
    53. DEATH  EGG
    54. WING  FORTRESS
    55. SKY  CHASE
    56. METROPOLIS
    57. OIL  OCEAN
    58. HIDDEN  PALACE
    59. MYSTIC  CAVE
    60. HILL  TOP
    61. CASINO  NIGHT
    62. AQUATIC  RUIN
    63. CHEMICAL  PLANT
    64. EMERALD  HILL
    65. EDIT MODE
    66. unfOuterColorR
    67. unfOuterColorG
    68. unfOuterColorB
    69. unfInnerColorR
    70. unfInnerColorG
    71. unfInnerColorB
    72.  
    [​IMG]
    (thx to roxahris for the logo)
     
  13. Harmony Friends

    Harmony Friends

    it's the whole gang Oldbie
    There are other capable programmers and there are other engine projects. ESPECIALLY for a gameplay that, among us, is so well-understood and well-documented, a great engine suited to Sonic 2 HD's needs could be created.

    Especially if it's open sourced. Too many programmers around here work completely alone. If a large handful of talented programmers got together with some sort of version control system in place, the best goddamn 2D Sonic fangame engine ever could get to a mostly-complete beta state in a few months.

    Also, the HD graphics require almost no increase in programming skill from creating a game at a smaller resolution. If you have the high-resolution assets, you can make your game's resolution whatever the hell it wants to be. (It's not hard to create resolution-independence either, something that S2HD sorely lacks.)
     
  14. Gen

    Gen

    This is halloween! This is halloween! Member
    309
    0
    0
    The Mobius Engine
    Oh boy, is that some shader code I see?

    Whelp, looks like I'm going to have a bit of fun picking this one apart.
     
  15. roxahris

    roxahris

    Everyone's a hypocrite. Take my word for it. Member
    1,224
    0
    0
    Doing anything at all
    Rendering at 2048x2048 and downscaling using some kinda shitty box filter? Why, why why? Also, stuff that has been stated before.

    Art is pretty, but Sonic ain't supposed to be green. Rings look horrible. Too thin - they try to look like shiny metal but end up looking invisible and not like rings at all. Onion rings painted with metallic paint, maybe.
    Music is alright, but has too many orchestral hits and lacks or dampens some parts of the original music - and adds or changes others in bad ways. Not my sorta thing. I reckon it'd be better to take advantage from the original versions in the soundtrack CD.
     
  16. Polygon Jim

    Polygon Jim

    Eternal Tech Member
    0
    3
    0
    across town from Hinchy
    All the bitches.
    This reminds me of a cool message I have from LOst back when Sonic 4 got leaked.


     
  17. What the fuck is this shit. Its not like Sonic 2 HD is some online multiplayer game where it'd break the balance to have an out of date version
     
  18. Volpino

    Volpino

    Things are looking up! Member
    1,207
    0
    0
    A secret. >:3
    I laughed so hard.

    I just want to say that I'm the kind of person that likes the idea of copyrighting their shit, I try to respect the property of other people (I won't draw someone's character without permission, for example) so to me, this kind of lockdown over a fangame (Note: Isn't even yours) is ridiculous. I have nothing against fangames, that goes doubly so because SEGA has nothing against fangames, they're clearly comfortable with people taking their property and doing things with it (Free advertising :V) but trying to stake a claim on their property seems really disrespectful.
     
  19. gold lightning

    gold lightning

    Member
    507
    14
    18
    I got curious wanting to see (for shits and giggles) if my old laptop that I keep around for small school projects and as a back-up would run this game. To my surprise not only did it run, but it ran at a constant 30 frames per second. I know that isn't normally anything special but given how shitty the graphics are on my laptop, even for when it was made, I was kind of impressed. For some reason the quality settings don't effect the framerate in a positive or negative manner. Super low quality simply looks like shit while high quality looks nicer while no other changes to performance are noticeable.

    And I don't mean to beat a dead horse here, but if the engine and its programming run just fine on this old thing why is it causing issues for more competent computers? It runs without fail on this thing while other users here have issues getting the game to start sometimes with cpus that make this one look like an ancient child's playtoy. How can the compatibility be that fucked up?

    Here are the specs for the curious:
    Intel Mobile Pentium M 770(2.26 GHz)
    2 gb ram
    128 MB ATI Mobility FIRE GL V3200
     
  20. Gen

    Gen

    This is halloween! This is halloween! Member
    309
    0
    0
    The Mobius Engine
    So, after looking at the shaders, I have to question a few technical decisions here. Let's look at what seems to be some kind of text shadow shader.

    Code (Text):
    1.  
    2. sampler Texture0;                      // Font mask A8L8
    3. float unfShadowDirectionX;     // Horizontal direction of shadow (-1/TexWidth)
    4. float unfShadowDirectionY;     // Vertical direction of shadow (-1/TexHeight)
    5. float unfShadowColorR;         // Red component of shadow color
    6. float unfShadowColorG;         // Green component of shadow color
    7. float unfShadowColorB;         // Blue component of shadow color
    8. float unfSteps;                        // Number of shadow steps in the shadow direction
    9. float4 main (float4 TexCoord0 : TEXCOORD0,  
    10.                          float4 rgbaDiffuse : COLOR0,  
    11.                          float4 rgbaSpecular : COLOR1) : COLOR0
    12. {
    13.        float4 rgbaFontMask = tex2D (Texture0, TexCoord0);
    14.        float4 rgbaShadow = 0;
    15.        float2 vDirectionStep = float2 (unfShadowDirectionX, unfShadowDirectionY);
    16.        float2 vDirection = vDirectionStep;
    17.        if (unfSteps > 2.0)
    18.        {
    19.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    20.                vDirectionStep += vDirection;
    21.        }
    22.        if (unfSteps > 1.0)
    23.        {
    24.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    25.                vDirectionStep += vDirection;
    26.        }
    27.        if (unfSteps > 0.0)
    28.        {
    29.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    30.                vDirectionStep += vDirection;
    31.        }
    32.        float4 rgbaShadowResult = float4 (unfShadowColorR, unfShadowColorG, unfShadowColorB, 1) * saturate (rgbaShadow.a);
    33.        rgbaFontMask = lerp (rgbaShadowResult, float4 (rgbaFontMask.r, rgbaFontMask.g, rgbaFontMask.b, 1), rgbaFontMask.a);
    34. }
    35.  
    First off, let's start with the branching here. Dynamic shader branching is bad, mkay? Especially with how the branches are constructed here. If that weren't bad enough, let's look at how the conditional statements actually work:

    Code (Text):
    1.  
    2.        if (unfSteps > 2.0)
    3.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    4.                vDirectionStep += vDirection;
    5.        if (unfSteps > 1.0)
    6.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    7.                vDirectionStep += vDirection;
    8.        if (unfSteps > 0.0)
    9.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    10.                vDirectionStep += vDirection;
    11.  
    What this does, is if the steps you're using for the shadows is above two, you run through all three iterations. If it's above 1, you're basically running through two iterations. You may step through three. You may step through one. If unfSteps is below zero, you'll even step through none. Static branching is one thing, where you'll generally be able to create a fixed set of permutations of a particular shader and generally won't have to worry about a GPU's ability to branch, but once you get into dynamic branching for a condition that may or may not change at runtime, there's a number of older GPUs that simply don't like this. On top of that, given what's being done here, you could effectively do it with a loop, and have the shader compiler unroll it with much more predictable results:

    Code (Text):
    1.  
    2. for (int I = 0; I < unfSteps; I++)
    3. {
    4.     rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    5.     vDirectionStep += vDirection;
    6. }
    7.  
    Loops can generally be unrolled much, much better by a shader compiler than a GPU can handle branching (or driver in some cases, where they'll attempt to compile every single possible permutation of a branched shader on the fly). Bonus points: make unfSteps a fixed size, so you don't have to worry about relying on the shader compiler to not slip up when unrolling the loop (some GLSL shader compilers can outright crash when given a variable sized loop; MS's HLSL compiler is generally better however).

    Now, let's look at the shadow color:

    Code (Text):
    1.  
    2. float unfShadowColorR;         // Red component of shadow color
    3. float unfShadowColorG;         // Green component of shadow color
    4. float unfShadowColorB;         // Blue component of shadow color
    5. //a few lines later...
    6.        float4 rgbaShadowResult = float4 (unfShadowColorR, unfShadowColorG, unfShadowColorB, 1) * saturate (rgbaShadow.a);
    7.        rgbaFontMask = lerp (rgbaShadowResult, float4 (rgbaFontMask.r, rgbaFontMask.g, rgbaFontMask.b, 1), rgbaFontMask.a);
    8.  
    Why isn't unfShadowColorR, unfShadowColorG, and unfShadowColorB stored as a float4? This:

    float4 rgbaShadowResult = float4 (unfShadowColorR, unfShadowColorG, unfShadowColorB, 1) * saturate (rgbaShadow.a);

    Could have been simplified to this:

    float4 rgbaShadowResult = unfShadowColor * saturate(rgbaShadow.a);

    Therefore resulting in fewer instructions to do what it is you're doing (a MUL and a SAT vs. four MULs and a SAT, since some compilers will treat each float value as an individual value instead of as one). Same applies to this:

    Code (Text):
    1.  
    2. float unfShadowDirectionX;     // Horizontal direction of shadow (-1/TexWidth)
    3. float unfShadowDirectionY;     // Vertical direction of shadow (-1/TexHeight)
    4.  
    These should be one float2. It makes zero sense to have each one be its own float.

    I also don't understand why you have two color attributes being written or read from, but not used in the shader (perhaps the shader was cut off in the memory dump?).
    Now, a generally better shader would look more like this:

    Code (Text):
    1.  
    2. sampler2D Texture0;                      // Font mask A8L8
    3. float2 unfShadowDirection;
    4. float4 unfShadowColor;  // Color stored as RGB, shadow iterations stored as w in the vector
    5. float4 main (float4 TexCoord0 : TEXCOORD0,  
    6.                          float4 rgbaDiffuse : COLOR0) : COLOR0
    7. {
    8.        float4 rgbaFontMask = tex2D (Texture0, TexCoord0);
    9.        float4 rgbaShadow = 0;
    10.        float2 vDirectionStep = unfShadowDirection;
    11.        for (int I = 0; I < unfShadowColor.a; I++)
    12.        {
    13.                rgbaShadow += tex2D (Texture0, TexCoord0 + vDirectionStep);
    14.                vDirectionStep += unfShadowDirection;
    15.        }
    16.        unfShadowColor.a = 1.f;
    17.        float4 rgbaShadowResult = unfShadowColor * saturate (rgbaShadow.a);
    18.        rgbaFontMask = lerp (rgbaShadowResult, float4 (rgbaFontMask.rgb, 1), rgbaFontMask.a);
    19.        return rgbaFontMask;
    20. }
    21.  
    Granted, this is all constructed off of some assumptions I'm gathering from shader code that may well be incomplete, and with somewhat limited context. But all in all, I'd say the original code was generally shit given that that it doesn't even use the most basic concepts of using a vector to store color values for a uniform.

    EDIT: Cleaned up a bit of code in the rewritten shader.
     
Thread Status:
Not open for further replies.