#1133 The Wild West (U) - Corrupted layer/sprites/title effect

None
closed-fixed
nobody
None
5
2013-10-03
2011-08-13
DottorLeo
No

Tested on SVN4077, both Softrasterizer/Opengl, with and without Firmware and Bios, with Advanced bus timing on and off. This game has a lot of corruption on many screens, also the sprite of the character is truncated at 3/4 and part of his body is stretched filling all the bottom screen. Also the "Ready" sign is only half correctly rendered. See the pictures for more details.

Discussion

  • DottorLeo

    DottorLeo - 2011-08-13

    various corruption

     
  • zeromus

    zeromus - 2011-08-14

    3d sprites are mssed up. either a fixed point precision issue or a gxfifo issue.

     
  • CrazyMax

    CrazyMax - 2011-08-15

    bug in gxstat register (matrix stack busy flags)

    I'm debug this game:
    push matrix
    pop matrix
    3d operations
    * but should be:
    push matrix
    3d operations
    pop matrix

    P.S. this game was break when was rewrited main loop, dma

     
  • zeromus

    zeromus - 2011-08-15

    thanks for researching it. don't be shy, check it in if you figure out how to fix it. that's probably the best way for you to communicate what you find. if somethign is weird we can adapt or revert it. but since i broke it, if you want, ill take it from here

     
  • zeromus

    zeromus - 2011-10-03

    fixed in r4111.
    the instruction at arm9:0201C190 reads gxstat to poll for the matrix busy flag, to see if it is safe to read the matrix stack cursor. if this flag is not set at the right time, the game reads a cursor of 0 sometimes and thinks it is valid. it subtracts 1 from this (what it normally does with a valid cursor) and then attempts a MTX_RESTORE command with a -1 parameter. The behaviour of this is not understood but seems unpredictable. Anyway, the game should not have done that, and correctly emulating the stack busy flag as follows will fix it:

    it seems that the fifo keeps track of whether any of its contents are matrix cursor changing operations. if they are, then the matrix stack is considered busy. check it out--all the matrix commands are 0x1? so it is easy for the geometry engine to tell which commands are matrix commands.

    this was tested by jamming the fifo sitting when geometry engine is in a flush-busy state by sending a begin command and then sending a push command.

    i am not sure if loadmatrix and storematrix commands dont count... i checked those. maybe it is only push and pop (only they affect the cursor)

     
  • zeromus

    zeromus - 2011-10-03
    • status: open --> open-fixed
     
  • DottorLeo

    DottorLeo - 2011-10-03

    Confirmed and closing. Magnificent work, zeromus!

     
  • DottorLeo

    DottorLeo - 2011-10-03
    • status: open-fixed --> closed-fixed
     


Anonymous

Cancel  Add attachments





Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks