PS3 [IDEA] Enabling Individual Gameboots for each emulator/system/homebrew

Ok you are right @LuanTeles It seems that only the sound remaps are working on Rebug 4.84.2 REX.

@aldostools My guess is that the memory is laid out a little differently on REX/DREX and maybe the area that wMM searches for this string needs to be a little larger to account for this. I'm not exactly sure how you implemented it on your end but that is my guess.

Here is where it showed up for me in a full ram dump, this is a good bit further down than on CEX CFW.

That screen is not enough for me. I would need to know what is the address where VSH is loaded in DREX.

In 4.86.1 Rebug REX is is loaded a 0x910000. In the build that I posted in the thread about enabling the PS2 Demos, the search starts 7MB after that address (0x1010000). The patcher searches for the strings in RAM the next 0x1800000 bytes (25MB). So it searches until the address 0x2810000 (the string is usually found near 0x1183480).

Or maybe if you PM me the full dump of DREX, I could check the addresses myself.
(You can mask your IDPS if you feel that it's more secure).
 
Last edited:
@LuanTeles it seems that this is an issue with Cobra 8.1 and not related to webMAN MOD or the gameboot mod files. Simply updating Cobra to 8.2 while on 4.84.2 REX/DREX is enough to solve this issue.

For anyone on 4.84.2 Rebug who wants to use these custom gameboot animations, you can use the latest SEN Enabler to spoof to 4.87, this will also update the Cobra payload in the process, then this will work fully.
 
I'm going to post basic explanations of the animation scripts for some of the gameboots I have done so far, this might make it easier for others to get involved if they see how simple they are once you understand them a little.


So there are basically 2 parts to each gameboot animation sequence in the custom_render_plugin RCO, the Page that includes all objects used, and then the animation script that controls those objects.


SNES Gameboot Page with 3 Objects:
Code:
<Page name="sns__gameboot" pageMode="0x1101" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing">
<Plane name="black_background" positionX="0" positionY="0" positionZ="0" colorScaleR="0" colorScaleG="0" colorScaleB="0" colorScaleA="1" sizeX="1920" sizeY="1080" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x100" planeImage="nothing" planeResizeMode="0x0"></Plane>
<Plane name="snslogo" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="375" sizeY="375" sizeZ="375" sizeScaleX="1.5" sizeScaleY="1.5" sizeScaleZ="1.5" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x100" planeImage="image:tex_snslogo" planeResizeMode="0x0"></Plane>
<Plane name="black_mask" positionX="0" positionY="0" positionZ="0" colorScaleR="0" colorScaleG="0" colorScaleB="0" colorScaleA="1" sizeX="375" sizeY="375" sizeZ="375" sizeScaleX="1.5" sizeScaleY="1.5" sizeScaleZ="1.5" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="nothing" planeResizeMode="0x0"></Plane>
</Page>

For this gameboot there are 3 objects used. A black background, and the SNES logo image and then a black mask. Remember we are only able to use one image file per gameboot page. The black_background and the black_mask are not images, they are just planes created by the variables in their plane entries. See below.

Note: The default is for all objects show in the center of the screen unless you change its position.

First object: Black background - layer 1
Code:
<Plane name="black_background" positionX="0" positionY="0" positionZ="0" colorScaleR="0" colorScaleG="0" colorScaleB="0" colorScaleA="1" sizeX="1920" sizeY="1080" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x100" planeImage="nothing" planeResizeMode="0x0"></Plane>

The above plane can be added to any gameboot just by copy pasting that into the rco. Note that it is first in the list of planes under this gameboots page entry. This means it will be shown behind everything else. A plane like this can also be used last on the list, for example if you wanted to use it as a mask to fade everything out to black when the gameboot is finishing.

See how it has colorScaleR="0" colorScaleG="0" colorScaleB="0" colorScaleA="1", this makes it fully black as RGB colors are all set to 0, and fully opaque as the alpha is set to 1. The size is set sizeX="1920" sizeY="1080" so it covers the whole screen when set to full HD.

Second Object: SNES logo image - layer 2:
Code:
<Plane name="snslogo" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="375" sizeY="375" sizeZ="375" sizeScaleX="1.5" sizeScaleY="1.5" sizeScaleZ="1.5" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x100" planeImage="image:tex_snslogo" planeResizeMode="0x0"></Plane>

This plane has an image entry which references one of the gims included in the rcos images folder. planeImage="image:tex_snslogo". You can see how its size is referenced here.

Third Object Black Mask - layer 3:
Code:
<Plane name="black_mask" positionX="0" positionY="0" positionZ="0" colorScaleR="0" colorScaleG="0" colorScaleB="0" colorScaleA="1" sizeX="375" sizeY="375" sizeZ="375" sizeScaleX="1.5" sizeScaleY="1.5" sizeScaleZ="1.5" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="nothing" planeResizeMode="0x0"></Plane>

This mask is used to hide the text at the bottom of the SNES logo image as the logo is falling down and bouncing. and also then it is used for the sweeping unvieling effect when it moves to the right hand side to create the illusion that there are 2 images used here. As you can see this one is smaller than the first object at 375x375, but its color values are the same. It is basically just a small version of the black background.

Then the SNES Animation script:
Code:
<Anim name="sns__gameboot">
<Lock unknownInt0="0xffffffff" />
<Fade object="object:black_background" time="0" accelMode="0x0" colorScaleA="0" />
<MoveTo object="object:snslogo" time="0" accelMode="0x0" positionX="0" positionY="700" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="0" accelMode="0x0" positionX="0" positionY="300" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Fade object="object:black_background" time="500" accelMode="0x4" colorScaleA="1" />
<Delay time="500" />
<MoveTo object="object:snslogo" time="900" accelMode="0x1" positionX="0" positionY="0" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="900" accelMode="0x1" positionX="0" positionY="-400" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="900" />
<MoveTo object="object:snslogo" time="500" accelMode="0x4" positionX="0" positionY="400" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="500" accelMode="0x4" positionX="0" positionY="0" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="560" />
<MoveTo object="object:snslogo" time="500" accelMode="0x1" positionX="0" positionY="0" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="500" accelMode="0x1" positionX="0" positionY="-400" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="500" />
<MoveTo object="object:snslogo" time="250" accelMode="0x4" positionX="0" positionY="300" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="250" accelMode="0x4" positionX="0" positionY="-100" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="280" />
<MoveTo object="object:snslogo" time="250" accelMode="0x1" positionX="0" positionY="0" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="250" accelMode="0x1" positionX="0" positionY="-400" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="250" />
<MoveTo object="object:snslogo" time="150" accelMode="0x4" positionX="0" positionY="200" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="150" accelMode="0x4" positionX="0" positionY="-200" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="170" />
<MoveTo object="object:snslogo" time="150" accelMode="0x1" positionX="0" positionY="0" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="150" accelMode="0x1" positionX="0" positionY="-400" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="150" />
<MoveTo object="object:snslogo" time="75" accelMode="0x4" positionX="0" positionY="100" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="75" accelMode="0x4" positionX="0" positionY="-300" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="90" />
<MoveTo object="object:snslogo" time="75" accelMode="0x1" positionX="0" positionY="0" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<MoveTo object="object:black_mask" time="75" accelMode="0x1" positionX="0" positionY="-400" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="800" />
<MoveTo object="object:black_mask" time="400" accelMode="0x0" positionX="1000" positionY="-400" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="1500" />
<FireEvent event="event:native:/anim_gameboot_Finished" />
</Anim>

The first 5 lines all happen with no delay, these are setting up what the first frame will look like before anything is shown on screen
  • First line is blocking controller input. All gameboot animations should have this first line: <Lock unknownInt0="0xffffffff" />
  • Second line is making the black background transparent so it can be faded in later, rather than just appear instantly.
  • Third and forth lines are moving the logo and mask into position off the top of the screen. I have set the mask 400 pixels lower than the logo so it only covers the text.
  • Fifth line is the black background fading in over 500ms, and the sixth line is the delay to leave that time to complete
  • Seventh and eighth lines moves the snes logo and the mask down together simulataneously over 900ms
  • The next few lines are for the bounce effect, just moving both the image and the mask up and down together at faster and faster timings. 900ms, 500ms, 250ms, 150ms, 75ms. All Y axis movements (up/down)
  • Then a small delay.
  • Then the second last line moves the black mask 1000 pixels to the right over 400ms revealing the bottom of the SNES image that has been hidden up til now "positionX="1000"
  • Final line starts the game <FireEvent event="event:native:/anim_gameboot_Finished" /> , this must always be included.
I will post some more when I get time.

More info here on rco animations: https://www.psdevwiki.com/ps3/RCOXML_Animations
 
Last edited:
Very nice @DeViL303 it could be the part 1 of a serie of tutorials :encouragement:

Some comments... in this sentence: " The black background is not an image, its just a plane created by the variables in the plane entry" you should mention that the plane_mask is not an image either... or the otherway around, you could say that the only image is plane snslogo

The sizeZ="375" of plane snslogo is made on purpose ?, i think you dont need it, i think it can be replaced by 0
The other sizeZ of the other planes with a value 1, i think can be replaced by 0 too, the Z axis is oriented to the camera, by using values different to 0 in positionZ you are changing his distance to the camera, and in sizeZ is like "streching" them in 3D

The sizeOverrideZ="0x100" is on purpose ?, i think this is another thing you dont need, you are not using any override in the attributes of any other objects

At the end of the animation is missing a line with the: <Unlock unknownInt0="0xffffffff" />
 
Hmmm, im thinking in something a bit more advanced (just a bit) if you want to play a bit, that im not completly sure how to do it, but i understand it well
The point is in this specific animation it could be very convenient to move the black_mask plane together with the snslogo image by creating a parent-children herarchy in between them under the <ObjectTree> area

This way, in the animation when you are doing the bouncings you only need to use the <MoveTo> only with the parent (snslogo), and the children (black_mask) will move with it together
And at the end line of the animation you move the children to a side

For this to work you need to move one level down the <plane> black_mask in the xml hierarchy
And you need to create a connection in between the parent and the children using the attribute anchorMode="0x0" (0 is the center of it, other values allows to select his borders, etc...)
 
Some comments... in this sentence: " The black background is not an image, its just a plane created by the variables in the plane entry" you should mention that the plane_mask is not an image either... or the otherway around, you could say that the only image is plane snslogo
I should mention that alright. I will edit it. I did say only 1 image is allowed but I can make it clearer.
The sizeZ="375" of plane snslogo is made on purpose ?, i think you dont need it, i think it can be replaced by 0
The other sizeZ of the other planes with a value 1, i think can be replaced by 0 too, the Z axis is oriented to the camera, by using values different to 0 in positionZ you are changing his distance to the camera, and in sizeZ is like "streching" them in 3D
Yeah I think you are right there about that sizeZ not really making a difference. It just worked so I didn't change it more. after like 100 failed tests you just leave something when it works. :)
The sizeOverrideZ="0x100" is on purpose ?, i think this is another thing you dont need, you are not using any override in the attributes of any other objects
Same here, it worked so I left it. I don't think the Z axis is important here.
At the end of the animation is missing a line with the: <Unlock unknownInt0="0xffffffff" />
That seems to only be used in the coldboot animations where control needs to be given back to the user, when the game boots these plugins are unloaded so its not required. That line is not in the official gameboot either iirc.

You can give more control to the user here by not including the line <Lock unknownInt0="0xffffffff" /> at all. And it is possible this will lead to some black screen freezes to be recoverable by holding the PS button, BUT it also seems more likely you can freeze the console by pressing the PS button at the wrong time as the game is about to load. More testing needed.


I have tried including the line <Unlock unknownInt0="0xffffffff" /> immediately in the coldboot animation, and this does mean you can bring up the impose screen sooner in the boot process by holding the PS button, but also leads to more chance of a freeze if you press it at the wrong timing. I think they just decided to lock out user input at these times for convenience really.
 
Last edited:
Hmmm, im thinking in something a bit more advanced (just a bit) if you want to play a bit, that im not completly sure how to do it, but i understand it well
The point is in this specific animation it could be very convenient to move the black_mask plane together with the snslogo image by creating a parent-children herarchy in between them under the <ObjectTree> area

This way, in the animation when you are doing the bouncings you only need to use the <MoveTo> only with the parent (snslogo), and the children (black_mask) will move with it together
And at the end line of the animation you move the children to a side

For this to work you need to move one level down the <plane> black_mask in the xml hierarchy
And you need to create a connection in between the parent and the children using the attribute anchorMode="0x0" (0 is the center of it, other values allows to select his borders, etc...)
Yeah, there are probably other/better ways to achieve the same effects. anchor mode is not a variable I am familiar with so I just went with separate lines for each object/plane.

It would be handy to have specific objects positions tied to other objects alright, I'll have to look into that some time.
 
BTW, I think the wiki is wrong where it says

accelMode. Used to accelerate or decelerate an animation, used by most of the animations, posible values are:
  • 0x0 - no accelaration
  • 0x1 - starts fast, ends slow
  • 0x2 -
  • 0x3 -
  • 0x4 - starts slow, ends fast
From what i learned when doing this bounce effect its the other way around.
  • 0x1 - starts slow, ends fast
  • 0x4 - starts fasts, ends slow
See the SNES video above and look at the bounce speeds and then compare that to the animation script, I have it starting fast and ending slow on the way up, and starting slow ending fast on the way down. took me ages to figure that out tbh to make it look half realistic.

A simple bounce is actually way more complicated than I thought when I started that animation, I thought just up down up down at first.. but no.. :)
 
That seems to only be used in the coldboot animations where control needs to be given back to the user, when the game boots these plugins are unloaded so its not required. That line is not in the official gameboot either iirc.

You can give more control to the user here by not including the line <Lock unknownInt0="0xffffffff" /> at all. And it is possible this will lead to some black screen freezes to be recoverable by holding the PS button, BUT it also seems more likely you can freeze the console by pressing the PS button at the wrong time as the game is about to load. More testing needed.


I have tried including the line <Unlock unknownInt0="0xffffffff" /> immediately in the coldboot animation, and this does mean you can bring up the impose screen sooner in the boot process by holding the PS button, but also leads to more chance of a freeze if you press it at the wrong timing. I think they just decided to lock out user input at these times for convenience really.
Hmm, you are right, the official anims for gameboot and otherboot are not doing the unlock, not sure if i realized about it before and i forgot but i was thinking that is mandatory to do the <Unlock> incase you did a <Lock> before
But the reason why is not happening is what you mentioned, at the end of the anim the game takes control of the controller inputs

Btw, im not sure if i wrote it in wiki as a theory or i mentioned it here in the forum before, but i was thinking they was locking the controller input (but also more things), and your tests are very interesting, are a confirmation that the controller inputs is one of the things locked

The reason why im saying that it could be doing a lot more stuff (and very important stuff, maybe something related with VSH, screen buffers, whatever) is because the data type used for the value, you know, is not just like a switch where are only needed two values 0 or 1
His lenght indicates that probably are "bit flags"
You know... we should convert the value FFFFFFFF to binary (a lot of 1's) and every 1 indicates something
And the FFFFFFF looks like the default value represents either... everything enabled.... or nothing enabled
Yeah, there are probably other/better ways to achieve the same effects. anchor mode is not a variable I am familiar with so I just went with separate lines for each object/plane.

It would be handy to have specific objects positions tied to other objects alright, I'll have to look into that some time.
At this point is going to be an annoyance to rebuild it with this change because there are some positions that are going to change (the ones of the children should be relative to the anchorpoint of the parent)
Also, to do it well... in my oppinion the best way to "connect" them is aligning snslogo and black_mask by a point located at the center of his bottom borders
This way the black_mask should be like a horizontal ribbon located always at the bottom of the logo image

As said... now is a bit pita to recalculate everything, this is why i mentioned it "incase you want to play a bit with it"
But it would take you less time to do it this way, after all that connections in between parent-childrens are very handy to reduce the number of calculations and to achieve nice alignments
 
Last edited:


Credits to TSENEDA from the forum Endless paradigm for the original rcoxml animation script this is based on. I had to do some work to port it from a very old version of rcomage.

Code:
<Page name="test_gameboot" pageMode="0x1101" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing">
<Plane name="cube" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="nothing" planeResizeMode="0x0">
<Plane name="cubeface01" positionX="0" positionY="-80" positionZ="0" colorScaleR="1" colorScaleG="0" colorScaleB="0" colorScaleA="0.4" sizeX="400" sizeY="400" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="image:tex_ps3logo" planeResizeMode="0x0"></Plane>
<Plane name="cubeface02" positionX="0" positionY="80" positionZ="0" colorScaleR="0" colorScaleG="0" colorScaleB="1" colorScaleA="0.4" sizeX="400" sizeY="400" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="image:tex_ps3logo" planeResizeMode="0x0"></Plane>
<Plane name="cubeface03" positionX="-80" positionY="0" positionZ="0" colorScaleR="0" colorScaleG="1" colorScaleB="0" colorScaleA="0.4" sizeX="400" sizeY="400" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="image:tex_ps3logo" planeResizeMode="0x0"></Plane>
<Plane name="cubeface04" positionX="80" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="0.4" sizeX="400" sizeY="400" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="image:tex_ps3logo" planeResizeMode="0x0"></Plane>
<Plane name="cubeface05" positionX="0" positionY="0" positionZ="-80" colorScaleR="0" colorScaleG="0" colorScaleB="0" colorScaleA="0.4" sizeX="400" sizeY="400" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="image:tex_ps3logo" planeResizeMode="0x0"></Plane>
<Plane name="cubeface06" positionX="0" positionY="0" positionZ="80" colorScaleR="1" colorScaleG="0" colorScaleB="1" colorScaleA="0.4" sizeX="400" sizeY="400" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="image:tex_ps3logo" planeResizeMode="0x0"></Plane>
</Plane>
</Page>
Code:
<Rotate object="object:cubeface01" time="0" accelMode="0x0" radiansX="1.57" radiansY="0" radiansZ="0" />
<Rotate object="object:cubeface02" time="0" accelMode="0x0" radiansX="1.57" radiansY="0" radiansZ="0" />
<Rotate object="object:cubeface03" time="0" accelMode="0x0" radiansX="0" radiansY="1.57" radiansZ="0" />
<Rotate object="object:cubeface04" time="0" accelMode="0x0" radiansX="0" radiansY="1.57" radiansZ="0" />
<Delay time="0" />
<Rotate object="object:cube" time="16000" accelMode="0x0" radiansX="6.28" radiansY="6.28" radiansZ="6.28" />
<Delay time="8000" />
<Resize object="object:cube" time="4000" accelMode="0x0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" />
<Delay time="4000" />
<MoveTo object="object:cube" time="4000" accelMode="0x0" positionX="100" positionY="-100" positionZ="100" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="4000" />
<MoveTo object="object:cube" time="4000" accelMode="0x0" positionX="0" positionY="0" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="4000" />
<Rotate object="object:cube" time="16000" accelMode="0x0" radiansX="6.28" radiansY="6.28" radiansZ="6.28" />
<Delay time="8000" />
<Resize object="object:cube" time="4000" accelMode="0x0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" />
<Delay time="4000" />
<MoveTo object="object:cube" time="4000" accelMode="0x0" positionX="100" positionY="-100" positionZ="100" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="4000" />
<MoveTo object="object:cube" time="4000" accelMode="0x0" positionX="0" positionY="0" positionZ="0" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" />
<Delay time="4000" />
 
Few new things. I can confirm that we can use imagefont.bin "characters" in the gameboot animations. This opens up a load of different types of animations we can do. It means we can use multiple images per gameboot, and also animate each image with multiple frames.

So far I have got images 250 x 170 to work, larger images show all scrambled, the limit is somewhere around there for each imagefont.bin "character". Could be worse. Also we can load pixel art here too without line spacing so it looks really good.

Quick and dirty example, here are Mario and Luigi are loaded from the imagefont.bin as U+F430 and U+F431. Just single frame images for now. The PS logo is loaded as a gim like normal.

 
Another thing worth noting, its just each character in imagefont.bin that is limited to 260x170, but we can divide images into parts and have sprites made up out of more than one character.

So it would not be hard to add mario in 4 parts and have him @ 520x340 for example. To do that we would just need to add the 4 tofus into the rco language xmls with 2 on one line, and then a line break and the other 2, this way they will always be tied together and treated as one item in animation scripts etc.
 
@DeViL303

Does webman supports other emulators? or just the ones already on the rco?

I was thinking about Neogeo since it's quite popular because of king of fighters, fatal fury, metal slug

the logo is very simple, i think animting it by rotating and zooming in or something like this.

Neo_Geo_logo.png
 
It only supports the ones in the RCO for now. The rest show the default ROM animation.

But see here at 1m 54 sec, I already have that logo included and it rotates and zooms. I think it should show this animation for NEO, NGP and NEOCD. I have only tested NGP here though.

 
Last edited:
@DeViL303

Does webman supports other emulators? or just the ones already on the rco?

I was thinking about Neogeo since it's quite popular because of king of fighters, fatal fury, metal slug

the logo is very simple, i think animting it by rotating and zooming in or something like this.

Neo_Geo_logo.png

All the emulators in webMAN MOD's documentation are supported.
51 ROMS folders use one of the 12 gameboot animations for emulators.

The following 23 folders will use the generic animation:
2048, BMSX, BOMBER, CAP32, DOSBOX, FMSX, FUSE, GW, INTV, JAVAME, LUA, NXENGINE, O2EM, PALM, POKEMINI, SCUMMVM, SGX, TGBDUAL, THEODORE, UZEM, VECX, WSWAM, ZX81

The animation that you're are suggesting is already included. See it in minute 2:00
 
@LuanTeles if you wanted to add some new animations to the rco for the other 23 ROM types, you can test by using one of the supported formats for now, I do all my testing/creating by modifying the ps1 gameboot and then launching a ps1 game. If we can get a bunch of decent new ones together I'd say aldo would add support for them.

We need to avoid having too many different versions of the rco that support different amounts of animations, so it's best if we can add a good few at a time like 10+. The issue is that if the rco does not include an animations page and script and it then gets called upon by wMM, then we get a hard freeze. wMM has no real way to know what animations are available inside the rco.

So remember we can't just keep adding one animation at a time as then there will be too many opportunities for people to use the wrong rco for their wmm version and also it's extra hassle for aldo adding them one at a time. Ideally we would add the last 23 systems in one go so there are just 2 main versions of the rco, the one with 20 and the one with 43 or whatever. This way the detection can be done easily based on the size of the rco.

Really some of the existing ones need better animations too. They were just added as place holders really to avoid the issue I mentioned above.

I guess I could make an rco that has place holders added for all system types, by just copying the default ROM animation but with different names, this way anyone can add/change the animations when they get time. I will see if I can get that together but it will be a few days at least.
 
It only supports the ones in the RCO for now. The rest show the default ROM animation.

But see here at 1m 54 sec, I already have that logo included and it rotates and zooms. I think it should show this animation for NEO, NGP and NEOCD. I have only tested NPG here though.


Oh nice, i didn't realize

I thought of that because i booted one NEOGEO rom and it showed the retro default one, but i just booted again and realized that it is Neo Geo Pocket.


All the emulators in webMAN MOD's documentation are supported.
51 ROMS folders use one of the 12 gameboot animations for emulators.

The following 23 folders will use the generic animation:
2048, BMSX, BOMBER, CAP32, DOSBOX, FMSX, FUSE, GW, INTV, JAVAME, LUA, NXENGINE, O2EM, PALM, POKEMINI, SCUMMVM, SGX, TGBDUAL, THEODORE, UZEM, VECX, WSWAM, ZX81

The animation that you're are suggesting is already included. See it in minute 2:00

Thanks for the info.

I realized that i don't have any NEOGEO rom besides the PSN ones, so i booted a NEOGEO POCKET and thought that it was NEOGEO, so i though of an animation. :facepalm

I guess I could make an rco that has place holders added for all system types, by just copying the default ROM animation but with different names, this way anyone can add/change the animations when they get time. I will see if I can get that together but it will be a few days at least.

That's nice, i was thinking about the same.

I will try to add some new ones as well when I have time, so this way, webman will be ready for the new ones when needed.
 
Last edited:
I realized that i don't have any NEOGEO rom besides the PSN ones, so i booted a NEOGEO POCKET and thought that it was NEOGEO
BTW, for testing I didn't have ROMS for all system types I was working with, so I just put a random zip file in the folders for those. wMM detects this like a ROM of that folders type, So then I could select it to test the animation was working properly. Retroarch just black screens but its ok.
 
@LuanTeles if you wanted to add some new animations to the rco for the other 23 ROM types, you can test by using one of the supported formats for now, I do all my testing/creating by modifying the ps1 gameboot and then launching a ps1 game. If we can get a bunch of decent new ones together I'd say aldo would add support for them.

We need to avoid having too many different versions of the rco that support different amounts of animations, so it's best if we can add a good few at a time like 10+. The issue is that if the rco does not include an animations page and script and it then gets called upon by wMM, then we get a hard freeze. wMM has no real way to know what animations are available inside the rco.

So remember we can't just keep adding one animation at a time as then there will be too many opportunities for people to use the wrong rco for their wmm version and also it's extra hassle for aldo adding them one at a time. Ideally we would add the last 23 systems in one go so there are just 2 main versions of the rco, the one with 20 and the one with 43 or whatever. This way the detection can be done easily based on the size of the rco.

Really some of the existing ones need better animations too. They were just added as place holders really to avoid the issue I mentioned above.

I guess I could make an rco that has place holders added for all system types, by just copying the default ROM animation but with different names, this way anyone can add/change the animations when they get time. I will see if I can get that together but it will be a few days at least.

Honestly I don't think we need 23 additional gameboots.

Maybe 2 or 3 specific if you think necessary, and 2 or 3 generic ROM animations could be selected randomly for the other emulators.

It would be a good idea to have 2 or 3 alternative animations also for PS1, PS2, PS3, PSP, BD and DVD.

Initially could be only placeholders with the current animations repeated.

EDIT:
LOL I just realized that having the alternative animations mentioned above it would be like 17 additional gameboots.
 
Last edited:
OK, yeah you are right, and it's a lot of work making them too and I have enough time sunk into this mod already tbh. If I do put much more time into this it will probably be to try and tweak the PS1, PS2 and PSP ones to be closer to the originals, If I can that is.

The idea of adding a few different ones to randomly choose from is cool too. Hopefully we wil see some others get involved, I'd say someone with a background in animation could do some cool stuff here.

I do want to experiment with rotating cubes with images on each side, I did try this before but I was not using imagefont.bin so had no luck that time. A rotating cube with the PS logo might be cool as an alternate default gameboot or something, or a rotating cube with the ROM logo.

It's actually a shame we can only make squares using rco planes, it would be nice if we could make triangles too, then way more stuff would be possible, like rotating balls and octahedrons etc. Maybe there is a way to make triangles but I don't know it.
 
Back
Top