Intermission Script values for screensize above default 320 not working correctly for map spots.

Is there something that doesn't work right in the latest GZDoom? Post about it here.

Moderator: GZDoom Developers

Forum rules
Please construct and post a simple demo whenever possible for all bug reports. Please provide links to everything.

If you can include a wad demonstrating the problem, please do so. Bug reports that include fully-constructed demos have a much better chance of being investigated in a timely manner than those that don't.

Please make a new topic for every bug. Don't combine multiple bugs into a single topic. Thanks!
User avatar
camaxide
Posts: 382
Joined: Thu Jun 11, 2015 8:38 am

Intermission Script values for screensize above default 320 not working correctly for map spots.

Post by camaxide »

Hi, I made a megawad consisting of two episodes between 2014 and 2017. It used intermission screens between maps (like old Doom 1) and had HD background with animations on them, and standard doom map spots showing which maps you had finished and where you currently were. this worked well in GzDoom for 6 years.
Suddenly sometime in 2020 a change were made to GzDoom that made the intermission screen no longer render as it was supposed to. I have reported this once previously, but didn't have time back then to do extensive testing, and the issue thus never got resolved. I recently reactivated my forum user and has started to fresh up my project and plan to finally release it - so I hope to solve the issue with the intermission so it can be played on new versions of GzDoom.

I tested a lot of versions to see when the problem started, and the intermission works fine between version 1.2.0 and 4.4.0, but it got broken since version 4.5.0

The intermission in GzDoom 1.2.0: working


The intermission in GzDoom 4.4.0: working

So versions released between 2009 and 2020 all show the intermissions correctly.

The intermission in GzDoom 4.5.0: not working

Versions since 4.5.0 until now are unable to draw the intermission correctly with HD background+animations and map spots combined.

Version history from GzDoom 4.5.0 states that intermission screen now scales to the original Doom.exe's layout by default. this seem to be the change that broke the intermission script when using images and animations at resolutions above 320x200
https://zdoom.org/wiki/GZDoom_version_history
* Menu and intermission screen now scale to the original Doom.exe's layout by default.
Since this update the original Doom1 gzdoom intermission has added the line:
Screensize 320 200
to the intermission script - so I tried playing around with this setting to fix the intermission in the new version 4.10.0
The wiki also explains this setting as if it should allow changing the space on which the animated graphics and splats are drawn on.
https://zdoom.org/wiki/Intermission_script
* SCREENSIZE width height
Sets a virtual screen size to draw the animated graphics and splats on.
I tried making various changes to the intermission script, setting screensize to either 320 200 or 1920 1080 and change map spots and animations coordinates and scale to match - I've saved a wad for each test, where 01 - intermission original.wad is always loaded, with one of the wads 02.. to 03.. wad's loaded after it to change the intermission script settings.

The intermission in GzDoom 4.10.0 with '01 - intermission original.wad'

This is the original settings and the original wad that worked between GzDoom 1.2.0 and 4.4.0 - in 4.10.0 it scales down the map spots (tiny) and places them up in the upper left corner (top 320x200 pixels). - this is expected with the new code - but breaks backward compability with older projects. I'm trying to correct this in the following wad's.

The intermission in GzDoom 4.10.0 with '02 - intermission screensize HD - original coordinates.wad'

This wad adds the line 'screensize 1920 1080' to the intermission script. This changes nothing, so this seem to be the default behaviour in gzdoom 4.5.0+ that it will automatically set screensize equal to the background image if no setting is pre-defined.

The intermission in GzDoom 4.10.0 with '03 - intermission screensize HD - HD coordinates.wad'

In order to try and fix the problem with all the map spots located in the upper left corner his wad changes the map spots coordinates from a 320 200 grid into a 1920 1080 grid - the result is that none of the map spots are drawn since they all fall outside the 320 200 grid. So even with screensize set to 1920 1080 gzdoom is unable to draw map spots outside the original 320 200 grid - all it does is scale them down to become tiny when they are still within the 320 200 grid.

The intermission in GzDoom 4.10.0 with '04 - intermission screensize HD - HD coordinates - upscaled spots.wad'

this wad scales the map spots to a larger graphics to correct the change from 320x200 to 1920x1080. The new map spot is however not visible since it still falls outside the 320x200 grid - this is fixed in the next wad.

The intermission in GzDoom 4.10.0 with '05 - intermission screensize HD - HD coordinates - upscaled spots - moved spot to witin 320 area.wad'

this wad moves the blood splat coordinate to the upper left corner just to test the scaling, and that works. the map spot now looks correct, but unfortunately it can only be placed in the top 320x200 pixels of the 1920x1080 background image.

The intermission in GzDoom 4.10.0 with '06 - intermission screensize 320 - original coordinates.wad'

this wad reverts all the changes made in the above wads and instead we now adds the line 'screensize 320 200' to the original intermission script. The result is that now the default doom map spots is both scaled and placed corectly on the screen with the original 320 200 coordinates defined. Plug and play. However, the animation is now outside the view since it has coordinates based on the background image (1920x1080). We will change this in the next wad.

The intermission in GzDoom 4.10.0 with '07 - intermission screensize 320 - animation 320 coordinates.wad'

this wad converts the coordinates for the map spot from the default 1920x1080 grid into 320x200. The result is that the graphics are now drawn on screen, but unfortunately the animation graphics are now scaled up and no longer match the background image. The only solution would be to scale down the animation graphics from its base HD graphics into the default doom resolution, but this would make it very pixelated and it would no longer match the background image at all - so it's not really a viable option.


Findings:
* It seem between GzDoom 1.2.0 and 4.4.0 gzdoom always read map spots as if they were on a 320x200 scale and thus the original graphics would always work no matter the resolution you play in, and no matter what resolution the background image was. These versions also automatically scaled the animations and their coordinates based on the resolution of the background image provided, which made sense since the animations are likely always a "part" of the background image and should thus match it's resolution. This worked perfect in the old versions regardless of resolution you played in. So it was all plug and play.
* Since version 4.5.0 the code was changed, so without screensize set, both map spots and animations would default to the resolution of the background image - in this case 1920x1080. This resulted in the animations to work like before, but would scale down the graphics of the doom spots to also be 1 to 1 in pixel size - and worse: would place all spots within the upper left 320x200 pixels since the coordinates set was in this region. The logic way to fix this would be to change the coordinates of the map spots to a 1920x1080 grid, so a spot in the center of the screen would be moved from 160 100 to 960 540. the issue is that gzdoom does not read map spot coordinates outside the standard 320 200 area, so the moment you place a map spot at say 400 300 it will simply not render as it's "out of bounds". - setting 'screensize 1920 1080' in intermission script should according to the wiki allow for splats to be able to use the virtual screen that size, but that does not work - which seem to be the real issue. (and the real bug).


Possible fixes:
1: make gzdoom check intermission script for screensize value, and if screensize is not defined - fall back to the original behaviour where map spots would be drawn on a standard 320 200 grid while animations would be drawn on a grid matching the background image. This would allow backward compability with projects made before gzdoom 4.5.0.
2: Make gzdoom able to draw map spots outside the default 320x200 area so that defining 'screensize 1920 1080' in intermission script would work as intended not only for animations, but also for map spots.
(both these first fixes could be applied at the same time, both keeping backward compability and plug and play for anyone not needing high res map spots - and at the same time allowing to define screensize for those who want to add high res map spots on the full screen).
3: Allow definition of seperate 'screensize' values for map spots and animations, this would allow the user to replicate the pre 4.5.0 behaviour by defining 320 200 for map spots while defining 1920 1080 (or whatever matches their background graphics). this fix could also be combined with the first fix for plug and play+backward compability, combined with user controll when needed.

* The current behaviour is on paper an improvement to the old since it allows to define high res map spots like the blood splats if one like - but currently that is not viable since gzdoom anyway are not currently able to place map spots when screensize is set higher than default.

* If the issue of map spots only able to be on the 320x200 coordinates is a hard limit to pass and hardcoded into Doom itself, then fix 1 or 3 are the likely best options as it would still allow for the old behaviour where HD animations and full screen map spots could co-exist.

I'm sorry for the very long post - a lot of work has gone into testing and trying to find a way around the issue, It seem however that HD background with animations currently can't be combined with map spots for intermissions unless one use a version of gzdoom between 1.2.0 and 4.4.0 - anything newer wont be able to do it.
Hopefully my findings will be useful, and I hope it will be possible to add a fix that allows intermissions with HD backgrounds+animations in combination with map spots, both because it would make my project playable with intermissions in new versions of GzDoom, and also because I imagine more modders would be interested in this if aware that it is possible. I would not know it was unless I already did it back 10 years ago. :)

Here is a link to a zip file containing the wad files used above for testing:
https://1drv.ms/u/s!As3qJKlkRN-shGJBB5C ... O?e=omedRA

File 01 is always loaded, while only a single file between 02 and 07 is loaded in addition to 01 (01 is loaded first). - 01 contains all the default images, while 02-07 contains the changes to the intermission script and to map spot graphics.

Roger aka Camaxide
User avatar
camaxide
Posts: 382
Joined: Thu Jun 11, 2015 8:38 am

Re: Intermission Script values for screensize above default 320 not working correctly for map spots.

Post by camaxide »

Update:
I found a workaround to the issue. I do not even define splat or pointers, and remove Spots command entierly - since it is the Spots list that is unable to handle coordinates outside the 320x200 (or is it 320x240??) range.
I replaced:
Splat wisplat
Pointer wiurh0 wiurh1

Spots
{
Map01 720 800
}
with:
IfVisited Map01 Pic 720 800 wisplat
IfEntering Map02 pic 750 570 wiurh0
and now it technically does the same thing as before even if it's done without the standard doom spot list.
I can do the very same thing with animations, and so it all works in the original screensize. It becomes a little more code, but the final result is exactly the same to the end user - which is the important part.
User avatar
Graf Zahl
Lead GZDoom+Raze Developer
Lead GZDoom+Raze Developer
Posts: 49096
Joined: Sat Jul 19, 2003 10:19 am
Location: Germany

Re: Intermission Script values for screensize above default 320 not working correctly for map spots.

Post by Graf Zahl »

The change here was needed to allow widescreen backgrounds, it also was supposed to fix an oversight in earlier implementations that the default virtual screen size did not correspond to the actual image.

The problem with this report is that it's a wall of text that's not easy to process. Please boil this down to something simple that should work but doesn't.

Return to “Bugs [GZDoom]”