MKKJ Posted September 20, 2017 Share Posted September 20, 2017 (edited) Any thoughts?Some people report that textures (or their alpha) suddenly turned white, and in rare cases displayed wrong texture.Been experiencing this many times, so i tried to track this problem. And so far i only got few things: Happens if main.scm tries to draw texture. Aside from casino/arcade i recall GTA: UG's radio logo triggers same problem. Textures from main.scm only got white texture problem while ones from cleo got either white or wrong texture. The wrong texture supposed to be used by main.scm. It seems the bug affect several textures that rendered last. At least that's how it looks from script. Draw box also involved with this bug, not sure with texts Script dependant drawings supposed to fix this, however it kinda obsolete when cleo include that fix. But still, it seems the cleo fix only solves problem that comes from cleo scripts, not main.scm. Posting this problem here since i just feel like i should, and don't know where i should post it. I'm not sure if mod like SP would tackle this problem, and not sure if CLEO is still active, either. Edited September 21, 2017 by MKKJ Link to comment Share on other sites More sharing options...
dkluin Posted September 21, 2017 Share Posted September 21, 2017 (edited) It's because you should only use texture IDs which aren't used anywhere else, so there arent any conflicts with IDs to begin with. And if there are, just check if all of the textures are loaded (here's an example from UG) and reload them if needed. Plus, don't draw anything when cutscene widescreen is enabled (when it comes to radio icons) and factor in the decreased volume for stations to use accordingly. // 0C0C: script_sprite %d loadedOpcodeResult UG_SCM_API ScriptAPI::IsScriptSpriteLoaded(CRunningScript* pRunningScript){pRunningScript->CollectParameters(1);pRunningScript->UpdateCompareFlag(CTheScripts::ScriptSprites[CollectiveArray[0].m_dwParam - 1].texture != nullptr);return OR_CONTINUE;} Edited September 21, 2017 by dkluin Link to comment Share on other sites More sharing options...
MKKJ Posted September 21, 2017 Author Share Posted September 21, 2017 It's because you should only use texture IDs which aren't used anywhere else, so there arent any conflicts with IDs to begin with. Was texture IDs the one assigned at 038F? 038F=2,load_sprite %1d% from %2h% I tried moved the IDs to start 61 onwards so it's out of blackjack range (1-53). But strangely, i got this instead. Link to comment Share on other sites More sharing options...
dkluin Posted September 22, 2017 Share Posted September 22, 2017 Yes, the texture ID passed to opcode 038F is the same as the index in CTheScripts::ScriptSprites. Just subtract 1 from the index, then multiply the index by 4 to then add the address of CTheScripts::ScriptSprites to get the final address of the sprite. To check if it has been loaded, just check if the RwTexture pointer isn't NULL. Link to comment Share on other sites More sharing options...
MKKJ Posted September 22, 2017 Author Share Posted September 22, 2017 I don't have any database for addresses, unfortunately. So i can't try it right away. But so, basically, i simply check all IDs, see if that ID already contains textures from a thread, and if it's empty, then load texture in that slot. [table] Check ID 1 > Loaded Check ID 2 > Loaded . . Check ID 54 > NULL > 038F: load_sprite 54 from "TEST" [/table]Did i get that right? Link to comment Share on other sites More sharing options...