isle-portable icon indicating copy to clipboard operation
isle-portable copied to clipboard

Background / screen outside 2D overlay not cleared in building

Open foxtacles opened this issue 5 months ago • 23 comments

i.e. gas station: (SDL3 GPU)

Not sure if this can be easily fixed (it would probably need awareness of when it is a building vs. vehicle), but it looks odd for sure. I realize this is incidental since the original game didn't have to worry about rendering outside the original resolution, but now that we can do that we should fix this.

Ideally interiors will have everything outside the 2D image boundaries set to sky color or black, and vehicles can stay the way they are.

Image

foxtacles avatar Jul 11 '25 22:07 foxtacles

@AJenbo what would be the cleanest way to solve this in your opinion? I know where in the code base we are in a vehicle vs. building, what would be the best approach to tell the renderer to not draw anything outside the 2D overlay? I'm not sure where the responsible code path is in miniwin

foxtacles avatar Jul 12 '25 17:07 foxtacles

Yeah you will have to make the game aware and render something at a negative position. For DevilutionX what we did was extend the load screens, it's a bit of work but can look pretty decent.

Step one:

Image

AJenbo avatar Jul 12 '25 20:07 AJenbo

A couple of hours later and this is about as well as I can do:

Image

AJenbo avatar Jul 12 '25 23:07 AJenbo

Final-2.zip Image

AJenbo avatar Jul 12 '25 23:07 AJenbo

Usually what we do is cut out the 640x480 part and have it be transparent so that it only adds sides, you might want to bleed it a bit since this isn't always rendered 1:1

AJenbo avatar Jul 12 '25 23:07 AJenbo

This is the place where we can override bitmaps if desired:

https://github.com/isledecomp/isle-portable/blob/master/LEGO1/omni/src/video/mxstillpresenter.cpp#L73

I'm not really sure how best to progress though. Replacing the data like the texture loader does seems easy enough, no idea about the rest going from there.

foxtacles avatar Jul 13 '25 02:07 foxtacles

It is worth exploring how we can enable modding through loading our own, newly created .SI asset packs. This would definitely be the desirable long term solution because it allows us to modify / extend most data in the game, and not have to handcraft solutions for every aspect. Existing tooling (SiEdit) is already out there:

Image

SiEdit still isn't capable of creating completely new .SI files yet, only modifying existing ones. If we can fill that gap I can see a path forward to make this work fairly elegantly. The game might need a little bit of extra logic to allow patching existing assets but that shouldn't be too hard.

The idea for this particular issue would be to have a WIDESCREEN.SI pack that can then substitute all the 2D backgrounds with widescreen ones. Information necessary (such as where to render it etc.) is all part of it (as seen in the screenshot)

foxtacles avatar Jul 19 '25 17:07 foxtacles

I agree that something like that makes a lot of sens. I think where things get complicated is that afaik the game expects specific files to be in specific archives so you would still have to explicitly tell the code about the new files that it should look for overwrites or extensions. Or that all files should first be looked up in the custom .si files, and then I fail to see how it's anymore elegant then files in a folder?

The idea for this particular issue would be to have a WIDESCREEN.SI pack that can then substitute all the 2D backgrounds with widescreen ones. Information necessary (such as where to render it etc.) is all part of it (as seen in the screenshot)

Maybe it would make sens to make a portable.si that bundles all project specific files so code doesn't have to be modified each time a new data type is added (3dscreens.si, hdmusic.si etc.)?

AJenbo avatar Jul 19 '25 18:07 AJenbo

I think where things get complicated is that afaik the game expects specific files to be in specific archives so you would still have to explicitly tell the code about the new files that it should look for overwrites or extensions.

There would definitely be some new logic necessary to replace existing assets, but for new assets (like the widescreen images, which like you mentioned can really be just the widescreen part and the middle part transparent) this should work fine.

Assets can be loaded at any time and then only be activated/ shown by attaching them to specific worlds, with certain conditions. The game already makes use of directives like that embedded in the SI files.

Having files in a folder really isn't a scalable solution if you look at modifying all sorts of assets over time. Unless you define a custom file format you lack all the metadata necessary for various functionality for image, audio, animation etc. Sharing a collection of files is also more cumbersome than just sharing a SI pack.

Maybe it would make sens to make a portable.si that bundles all project specific files so code doesn't have to be modified each time a new data type is added (3dscreens.si, hdmusic.si etc.)?

I'm envisioning that all you do is specify the SI packs you want to load, and it will just work without any code modifications (other than a single mechanism to hot-patch existing assets). I'm fairly sure that will be possible, but first we need to extend SIEdit to allow creation of new SI files, then I'll look into this

If someone wants to work on a stop gap solution using a separate loading mechanism that's fine with me, but long term I definitely see custom SI packs the way to go

foxtacles avatar Jul 19 '25 18:07 foxtacles

Yeah I'm completely ignorant to what the meta data looks like, though having a file representation for it would probably also make it much more feasible to make new .si files. Sharing is a good point, but while working on modifications it can be nice to not have to constantly edit containers, a solution to that would also be a tool that can generate the .si file during build. It could also open the opportunity for using platform specific container formats in cases where they make more sens then .si, but that's a bit out of scope here.

I'm envisioning that all you do is specify the SI packs you want to load, and it will just work without any code modifications (other than a single mechanism to hot-patch existing assets). I'm fairly sure that will be possible

A hot patching system would be ideal.

but first we need to extend SIEdit to allow creation of new SI files, then I'll look into this

On DevilutionX we have the extra data files checked in to repo and on build we then use a cli tool to generate the data archive. This makes it very easy to update and inspect the patched assets. SIEdit sounds like a bit of a heavy weight for that task, maybe a lib and a cli could be spun of from it?

AJenbo avatar Jul 19 '25 19:07 AJenbo

On DevilutionX we have the extra data files checked in to repo and on build we then use a cli tool to generate the data archive. This makes it very easy to update and inspect the patched assets. SIEdit sounds like a bit of a heavy weight for that task, maybe a lib and a cli could be spun of from it?

The lib already exists and SiEdit is just a UI on top based on it: https://github.com/isledecomp/SIEdit/tree/master/lib although that lib would probably need extensions to create a SI from scratch too.

I'm seeing SiEdit as the tool that modders can use to create their own (asset) mods. If we want to distribute an official isle-portable SI pack approaching it like you outlined makes sense.

LEGO Island did have a "source" file format that they used to generate the SI files, here is an example https://www.legoisland.org/wiki/Weaver It would be fun to build a new tool based on that format, since we already have it, but I guess it's not strictly required. Unfortunately the original tool seems to be lost in both source and executable formats.

foxtacles avatar Jul 19 '25 19:07 foxtacles

Lol

Image

Randanaghold avatar Jul 29 '25 21:07 Randanaghold

We an draw a tall version as well, should be pretty easy

AJenbo avatar Jul 29 '25 21:07 AJenbo

@AJenbo do you think it's possible to create the widescreen image using the exact same 256 color palette as the original (same colors with same indices)? That would be required to be able to embed without any major code changes.

The final image would look like this. If we can make it so that it uses the same palette as the cropped out part I can move forward with this. I don't have any image tools that would allow that kind of editing.

Image

Here is the source (cropped out middle part) bitmap

backgrnd.zip

foxtacles avatar Aug 10 '25 02:08 foxtacles

This should work

GaraDoor_Background_Bitmap_Wide.zip

AJenbo avatar Aug 10 '25 02:08 AJenbo

Here is the hospital one:

Image

Hospital-w.zip

AJenbo avatar Aug 25 '25 17:08 AJenbo

Image

SeaView-w.zip

AJenbo avatar Aug 25 '25 19:08 AJenbo

Image

ElevRide-w.zip

AJenbo avatar Aug 25 '25 20:08 AJenbo

Image

Observe-w.zip

AJenbo avatar Aug 26 '25 00:08 AJenbo

Image

ElevDown-w.zip

AJenbo avatar Aug 26 '25 02:08 AJenbo

Last part of the tower:

Image

ElevOpen-w.zip

AJenbo avatar Aug 27 '25 00:08 AJenbo

Last part of the police station

Image

PoliDoor-w.zip

AJenbo avatar Aug 28 '25 02:08 AJenbo

nice

On Wed, Aug 27, 2025 at 8:43 PM Anders Jenbo @.***> wrote:

AJenbo left a comment (isledecomp/isle-portable#583) https://github.com/isledecomp/isle-portable/issues/583#issuecomment-3231487093

Last part of the police station image.png (view on web) https://github.com/user-attachments/assets/76ab51a2-52c5-4ac3-bd32-b0240e63535c

PoliDoor-w.zip https://github.com/user-attachments/files/22016556/PoliDoor-w.zip

— Reply to this email directly, view it on GitHub https://github.com/isledecomp/isle-portable/issues/583#issuecomment-3231487093, or unsubscribe https://github.com/notifications/unsubscribe-auth/BVJTEEXCD3RJEY57IQVYHUL3PZUG5AVCNFSM6AAAAACBK4M2VOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTEMZRGQ4DOMBZGM . You are receiving this because you commented.Message ID: @.***>

Randanaghold avatar Aug 28 '25 19:08 Randanaghold

Closing since this isn't really a bug

foxtacles avatar Dec 25 '25 15:12 foxtacles