Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SCUMM: [RFC, WIP] Split enhancements into categories #5102

Closed

Conversation

eriktorbjorn
Copy link
Member

Some time ago, there was discussion about splitting the enhancements we offer for SCUMM games into different categories. The reasoning, as I recall it, was that some of our content fixes may be a bit too intrusive for some.

This pull request provides the phase 1 for this: The GUI. The details are very much open to discussion, but the way I envision it, we have three types of enhancements:

  • Bugfixes. This is for things like Bobbin being able to walk through the locked cell door in some versions of Loom.
  • Glitches. This is for things fixing inconsistent subtitle color in some games.
  • Content. This is for things like restoring the cut Lemonhead lines in the CD version of Monkey Island 1.

We could split them even further into graphical and audio glitches, but even with only three types there are still enhancements that will be tricky to categorize!

To do this, the "Enable game-specific enhancements" checkbox has been changed into dropdown. My first idea was to have four choices: One for each type of enhancement, plus one for no enhancements. But then Bosca pointed out on Discord that he might want bugfixes and content additions, but not fixes for glitches. So the current implementation allows for that by making the enhancements a bit mask.

All of the game-specific options widgets have been updated, and a new one has been added for the rest of the SCUMM games. Here's an example of what it may look like:

scummvm-00011

But the way it's implemented, it should be fairly trivial to change both the selections and the widget used, since it's all handled by ScummOptionsContainerWidget.

Torbjörn Andersson added 2 commits June 17, 2023 15:56
There was discussion a while back about how people may want to enable
some of the SCUMM enhancements, but not all since some of them affect
gameplay beyond simple bugfixing. This is an initial attempt at the GUI
part of it. The details are very much still up for discussion.
@eriktorbjorn
Copy link
Member Author

Phase 2 will be categorizing the enhancements, and changing _enableEnhancements from a bool to an integer of some sort, possibly with some helper functions to make it easier to read.

See https://wiki.scummvm.org/index.php?title=SCUMM/Game_Enhancements for the current enhancements. Here's a rough idea of how I might categorize the optional enhancements. Again, this is open to discussion. I did this twice, and made some different decisions the second time! If you're interested, I'd suggest you do it blindly and compare your results to mine.

Maniac Mansion

Type Description
Glitch Fix Wendy's music not being properly stopped. Her music could suddenly resume even though her CD player was turned off.
Bug Fix a sudden and complete freeze of the cutscene where Purple Tentacle is bullying Sandy in the lab (French version only).
Content Make it possible to click on the sentence line to execute a command, like the manual says.
Content Fix a typo ("tring" where it should be "trying") in Syd's biography in the English version. This typo does not appear in later - or earlier - versions.
Glitch Let the "Unlock" verb appear as intended in the Italian version.

Zak McKracken and the Alien Mindbenders

Type Description
Glitch Fix animation glitch that causes the bird in Lima to disappear once you're done using the blue crystal on it.

Indiana Jones and the Last Crusade

Type Description
Glitch Fix Henry Sr. appearing as a giant, in the releases where it's supposedly possible to reach the front of Castle Brunwald again after freeing him from his room.
Content Add missing music in Venice. The original had no CD audio music for this scene, but it had a Euphony track which wasn't properly enabled.
Content All text is drawn using the font's defined character spacing. The original would sometimes add an extra pixel.
Content Palette effects are emulated in black-and-white mode, and not just in color mode. This is visible in several scenes, perhaps most noticeably the lightning around Castle Brunwald.
Glitch Fix some unusual cyan and magenta horizontal lines when Indy meets Elsa in Berlin. (This was already fixed in the FM Towns version, and ScummVM uses a similar fix.)
Content Fix the color of the Nazis' uniforms while exploring the corridors of Castle Brunwald. They're green in the rest of the game, but the FM Towns version still had the EGA grey palette override in this part of the game. (The VGA version fixed this.)
Glitch Fix Indy's subtitle color when he talks to his father before escaping from the zeppelin with the biplane.
Glitch Clear some verb leftovers at the bottom of the screen in the same zeppelin cutscene.
Content Restore the missing first frame of animation when Indy makes a wise or poor choice for the Grail.
Glitch Fix an original small glitch around the tapestry that's inside one of the first rooms of Castle Brunwald. An unusual vertical line was drawn in the middle of the room.

Loom

Type Description
Content Restore a missing line from the shepherds when trying to use the stealth draft on them.
Glitch Fix a script error causing the lens workers' conversation to become very out of sync.
Content Chaos no longer introduces herself as "Choas".
Content Palette effects are emulated in black-and-white mode, and not just in color mode. This is visible in the scene where the dragon finds Rusty asleep.
Bug Don't allow Bobbin to simply walk through the locked cell door when clicking just below it. This was fixed in later versions of the game, though not always in the same way. ScummVM imitates the behavior of the VGA talkie version.
Content If you use the Reflection draft on Rusty before examining him for the first time, show a close-up on him wearing Bobbin's cloak. This bug was fixed in later versions
Glitch Trying to leave the plateau before encountering Rusty's ghost no longer causes the ghost to teleport.
Glitch Fix the timing when Bishop Mandible uses the distaff so that it lights up four times, just like in other versions.
Glitch Correct the subtitle color (from white to green) on one line in the scene where you first overhear Bishop Mandible.
Bug After you exit the caves you can go back by clicking on the cave opening, just like in the other versions. (It was still possible to go back, but you had to click on a thin sliver below the cave opening.)
Glitch The fire animation runs at the same speed throughout. Originally it sped up along with the rest of the game while the messenger nymph was flying. Strangely, this bug does not happen in the EGA demos, and in the VGA talkie the fire isn't animated at all.
Glitch Prevent Bobbin from walking through one of the staircases inside the dragon's cave, when he has entered the room from the other stairs in the ground. This issue was present in the earliest 16-color releases, but appears to have been fixed in the official v1.2 and later versions.

The Secret of Monkey Island

Type Description
Content Render the verb font with the same "3D" effect as the other releases. The original FM Towns interpreter had a bug which disabled that effect and made the font much thinner than intended.
Content Add the animated cigar smoke present in earlier versions to the captain Smirk close-up. In the VGA floppy version (I don't have the EGA version) the smoke was apparently only shown when playing the game from hard disk, not when playing it from the floppies. For whatever reason, the CD version only kept the latter behavior.
Content Only change the description of the Mêlée Island clock tower between visits to the room, like in earlier versions. Not every time the clock is examined.
Content Restore a few lines of Lemonhead dialog to the scene where he examines the small idol. These lines were present in earlier versions. This affects the English, German, Italian, and Spanish versions. The game is also available in French, but no version has been located with the old lines intact.
Glitch Fix incorrect "à" character in the font that's used on the copy protection screen of the French floppy versions.
Content Don't stop the background sound when showing the close-up of captain Smirk. This imitates the behavior of the Special Edition.
Content Don't show the Jolly Roger during the Sea Monkey cutscenes, once Guybrush has picked it up from the crow's nest. (This continuity error was only fixed in some versions of the VGA floppy release.)
Glitch Use the same subtitle color for all the lines said by the ghost priest when Guybrush enters the church in the last part of the game.
Glitch Restore the intended color for the subtitles of the head of the navigator. It's supposed to be brown, as in all other editions, but the palette wasn't adjusted in this release.
Glitch Fix the green, yellow and gray colors at Stan's Previously Owned Vessels. The most obvious example was the "striking yellow color" of the flower from the forest being suddenly greenish in this scene.
Content Use approximately the same colors for the "important notice" about the sleeping dogs as in earlier versions. The new colors were hard to read, and probably not changed intentionally. (The sign is still using the some palette indexes as before, but the palette itself is different.) The SEGA version does not have this problem to begin with, and the FM Towns version solves the readability problem by adding an outline to the font.
Glitch Apply a similar background legibility fix for the Sierra-like "death" screen when Guybrush falls from the cliff on Monkey Island. It appears that the French VGA floppy release is the only version having this issue.
Glitch In Mêlée Island, make sure that the storekeeper closes the door before walking away from it, when Guybrush rings the bell.

Monkey Island 2: LeChuck's Revenge

Type Description
Content Restore part of the Elaine map piece puzzle that was skipped in this version, and this version alone.
Content When there is no Mac-specific music (most notably towards the end of the game), play the Roland MT-32 music instead. The Macintosh instruments are a sufficient subset for this to work well. (2.5.0 is where this behavior was formalized. It worked before that, but only with certain audio drivers.)
Content Guybrush will speak when getting the map from Rapp Scallion. The game always printed the text, but since there is no delay between the messages you would only see the last one. The setting introduces a delay between them.
Glitch Fix Guybrush being drawn with the wrong colors when using the stick on the dog outside the Governor's mansion.
Glitch Fix Captain Dread's head animation when Guybrush tries giving him an object and then immediately talks to him.
Content Restore a missing reaction from Captain Dread when Guybrush has the four map pieces: Dread is actually meant to bring Guybrush back to Scabb Island, but an original script oversight prevented this from happening. This content restoration was already part of the Ultimate Talkie Edition, but ScummVM also fixes a dead-end in Regular Mode if you haven't picked up the model lighthouse lens before this.
Glitch Fix a small glitch with the door in Largo's room, if one closes it just before using the voodoo doll on Largo.

Indiana Jones and the Fate of Atlantis

Type Description
Glitch Fix the wall sprite being drawn over Indy when he stands at a specific place at the center of Atlantis.
Content When Indy finds orichalcum under some bones in Crete and he has already put some beads in the gold box, make sure that his first comment is not quickly interrupted by the second one.
Bug Fix Ubermann strangely counting "pregod8" and "pregod9" beads instead of "18" and "19", in some releases and languages.
Glitch When skipping the intro, the window in Indy's office will be broken and Mr. Smith's coat will be on the desk, as if you had watched the whole thing.
Content When Kerner uses the phone booth in New York, one of his printed lines may be quite different from what he's actually saying, in most of the English talkie releases. The fixed text is taken from the Macintosh 1994 talkie release.
Glitch Fix Sophia speaking with Indy's voice when looking at him.

Day of the Tentacle

Type Description
Glitch Fix occasional bug where Bernard would use Laverne's voice when interacting with the chewing gum on the floor.
Content Fix some small graphical glitches with Bernard's Chron-O-John during the intro. The lid was slightly misaligned, and sometimes drawn mirrored.
Content Restore a missing line from Dr. Fred when he receives a new diamond but Hoagie and/or Laverne haven't powered their units yet.
Content Make George Washington wear his chattering teeth in the cutscene where he comes back after Hoagie picks up the gold-plated quill pen, since he's always wearing them at this point of the game.
Bug Bring some Sam & Max localized menu strings into DOTT CD, when pressing F5 with the original SCUMM interface. The LucasArts Windows interpreter from 2002 used hardcoded English strings for some of the settings, but translations were included in Sam & Max (which uses the same menu) and later titles.
Glitch Make it possible for Hoagie to always interact with the fire once it's been lit by Jefferson. A script would set its state to an invalid value most of the time, meaning that Hoagie couldn't even reach it.

Sam & Max Hit the Road

Type Description
Glitch Adjust the position of the green goop inside the tank in the Hall of Oddities. It was off by one pixel, allowing a few pixels of objects behind to be seen without having their color changed.
Content The "Loading Sounds...Please Wait" screen when starting the game is skipped.
Glitch At Dino Bungee National Memorial, pushing the button while the Wally and Rex dinosaurs were speaking restarted their speech instead of stopping it, and it also prevented Sam's reaction from being triggered.
Glitch Fix an original animation glitch when Max grabs the fishing line at World of Fish, when both subtitles and voice are enabled, and a low subtitle speed value is used.
Glitch Restore the missing animation where Bumpus threatens Sam with his taser near the end of the game, in the German releases.
Glitch Fix some intro animation speed issues in the German and Italian talkie versions, and adjust the timing of some intro subtitles to sync up better with the voices for all known versions.
Glitch When Bruno leaves Bumpusville, make sure he is properly erased from the screen. In the original, his heel gets stuck in the door.
Glitch Fix two lines said by Sam but being misattributed to Max, while both characters wear the bigfoot costume and talk to Evelyn Morrison. (It appears that the English release was the only one not having this bug.)
Glitch Fix Max's comment being cut way too early, if one tries buying the pecan-flavored candies at Snuckey's while having no money.

Full Throttle

Type Description
Glitch Fix the music temporarily stopping when going in and out of the bar a couple of times, at the beginning of the game. The 2017 remaster has a similar fix.
Glitch Remove a placeholder string from the subtitles, when Ben looks at one of the small pictures above the piano in the Kickstand bar. French release only. The 2017 remaster has a similar fix.

The Dig

Type Description
Content Restore some missing subtitles in some conversations between Low and Brink.
Glitch Fix the sound of trickling water in the spider lair not being properly stopped.
Content Restore a missing subtitle when Low finds the purpose of the crypt inside the tomb.

The Curse of Monkey Island

Type Description
Glitch In the Plunder Town theater, fix the music not being changed as it should when moving from backstage to the stage, after greasing the cannonballs.
Glitch Fix the music indefinitely playing if the ESC key is pressed early, when Guybrush gets on the Sea Cucumber for the first time.

@eriktorbjorn
Copy link
Member Author

It occurs to me that this may be worthwhile even if the enhancements widget ends up a single checkbox like it already is today, since it removes some code duplication. Granted it's at the expense of a whole added class, but still...

@AndywinXp
Copy link
Contributor

I haven't forgotten about this, I've been out of town the whole week! :-) I'll have some feedback to share during the next couple of days, but for now, great job!

Copy link
Member

@sev- sev- left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this change and direction it goes to.

Special thanks for taking care of the upgrade path for the previous versions of ScummVM.

@@ -36,6 +36,13 @@ namespace Scumm {
#define GUIO_LOWLATENCYAUDIO GUIO_GAMEOPTIONS5
#define GUIO_NETWORK GUIO_GAMEOPTIONS6

/* Game enhancements */
enum {
kEnhancementsBugs = 0x0001,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not use here our conventional (1 << 0), (1 << 1), etc?

}

void ScummOptionsContainerWidget::createEnhancementsWidget(GuiObject *boss, const Common::String &name) {
GUI::StaticTextWidget *text = new GUI::StaticTextWidget(boss, name + ".EnhancementsLabel", _("Enhancements:"));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add here comment for the translators, on a line above something like

// I18N: Game enhancements pop-up list

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, I've made the suggested changes. (For the bit flags, I blame spending too much time at work with a programming language that doesn't have shift operators. :-)

@AndywinXp
Copy link
Contributor

First of all, great job on the PR. I think we definitely need to have separate classes for the enhancements, so I strongly support the work done here.

Here's my feedback:

As engineers and programmers, it's not always in our blood to be able to produce UX/UI which meets the needs of non-technical users; this is why I think we should think ahead for possible UI changes.

Let me explain myself better: right now we have three classes of enhancements (bugfixes, glitches and content); these ones are exactly the ones you are proposing to be shown up in the UI.
Instead, I strongly propose we separate the enhancement classes in the code from the enhancement groups which will be displayed in the UI: we could have as many internal enhancement classes as we want, as finegrained as we desire, but we can use groups (which serve as umbrella terms) to display something simpler and neater to the end user.

Why am I even thinking about this?

Let's say that we go with the dropdown list that you suggested for the UI. At some point in the future there might be someone very well versed in UX/UI (more than me, that's for sure...), who proposes a change. If we keep the current system, this change might even involve changing the names for the enhancement categories, or even change some of the enhancements themselves to be put in different classes than before. Don't get me started on configuration retrocompatibility 🙂

What am I proposing then?

These are my proposals for the enhancement classes (the code) and the enhancement groups (UI):

Enhancement Class Enhancement Group (Name to be Displayed in the UI)
Gamebreaking Bug Fixes Bug Fixes
Minor Bug Fixes Bug Fixes
Text and Localization Fixes Bug Fixes
Visual Corrections Aesthetic Improvements
Audio Corrections Aesthetic Improvements
Timing Adjustments Aesthetic Improvements
Subtitle Color/Format Corrections Aesthetic Improvements
Restored Cut Content Restored Content
UI/UX Enhancements Modern Comforts

Each of the groups on the right activates the correct classes shown on the left.

What are we saving on the scummvm.ini files? I'm thinking we save bool flags for each of the classes on the left. Starting from an old config file with just the enable_enhancements flag set to true, we should parse that, delete said entry from the config, and produce all the class flags set to true.

Now, what should each enhancement group contain? Here's the description for each one of them:

Enhancement Group Description
Bug Fixes Includes both game-breaking bugs which cause the game to crash/deadlock and minor bug fixes (e.g. text and localization issues). Enhancements in this category should pertain stuff which is very clearly a bug (for example a badly shaped walkbox, a wrong accent in a word from the subtitles, a strip of pixels which is very clearly out of place/with the wrong palette, AND NOT include things like subtitles and boxes color changes, enhancements which make a version similar to another, etc.). Basically when this and only this is active, the game should not have deadlock situations and the immersiveness should not be broken by very evident graphical glitches, charset issues, etc.
Aesthetic Improvements Comprises visual and audio changes as well as timing adjustments. This is the category in which we can basically put everything which I said not to put in the previous category. 🙂 This includes: changing the spacing of the font from the original, changing colors of subtitles for consistency, changes to the subtitles content in order to match the speech or to fix the localization, music changes (like the ones in COMI and FT), graphic changes which are not as essential as the ones from the previous category, etc.
Restored Content Encompasses reintroduction of content cut or unused which was not in the original; this is where the Lemonhead lines should be, of course.
Modern Comforts Pertains to all enhancements to the user interface and user experience: e.g. the artificial loading screen at the beginning of Sam&Max, speeding up the framerate in old original menus to have a decent keyboard polling rate.

As you might have noticed, I changed some names and added some others: I felt that having both "bugs" and "glitches" is too ambiguous: the end user is probably not technically versed, we should not expect them to know the difference and we should avoid confusing them, and therefore it's preferable that we produce very clear names.

Please let me know what you think in detail. I think that creating categories for the enhancement is both a very delicate operation and a very important thing to do for this engine, so I'm hoping we can all discuss this extensively before we commit to any choice.

P.S.: I'm willing to mark every single enhancement in the list with the appropriate class, since I proposed this fine-grained approach 🙂

@eriktorbjorn
Copy link
Member Author

What are we saving on the scummvm.ini files? I'm thinking we save bool flags for each of the classes on the left. Starting from an old config file with just the enable_enhancements flag set to true, we should parse that, delete said entry from the config, and produce all the class flags set to true.

Right now it's a single boolean. With this pull request, it would be a single integer with one flag per bit. The type for that is "int", so its actual size is unclear. I think we already assume it's more than 16 bits in the "output_rate" setting? Hopefully that's more than enough here.

As you might have noticed, I changed some names and added some others: I felt that having both "bugs" and "glitches" is too ambiguous: the end user is probably not technically versed, we should not expect them to know the difference and we should avoid confusing them, and therefore it's preferable that we produce very clear names.

I have no problem with that, since the current wording is just a placeholder as far as I'm concerned. Indeed, the pop-up itself is kind of a placeholder. It should be a fairly straightforward to change to createEnhancementsWidget() / addEnhancementsLayout() to replace it with something different. The function names were kept deliberately vague, and only the ScummOptionsContainerWidget class knows the specifics.

(The details are already starting to blur a bit in my head, but ScummOptionsContainerWidget is a class responsible for creating the enhancements and "original GUI" widgets, to help keep them consistent between the the SCUMM games that use the "standard" settings and the ones that need more elaborate settings, with sliders and whatnot, e.g. Loom.)

P.S.: I'm willing to mark every single enhancement in the list with the appropriate class, since I proposed this fine-grained approach slightly_smiling_face

I look forward to that. I've only given your comments a quick read-through (I have to go to work soon), but it'll definitely make them easier to digest.

When you do, please note that the ScummVM wiki lists some enhancements that I didn't include in the above list, because they're currently always enabled. (It's also possible I missed some when I copied the relevant details, I haven't checked.) See https://wiki.scummvm.org/index.php?title=SCUMM/Game_Enhancements for details.

I believe those unconditional enhancements fall into two categories:

  • Bugs that were deemed either serious enough or annoying enough that no one would ever want them back.
  • Bugs where ScummVM implements things in a different (and arguably better) way than the original game did. The "noir" mode in Sam & Max is the one example I can think of: In the original, actors are sometimes still drawn in color.

I don't know if anyone ever wants to actually make such enhancements conditional, but who knows... GSoC 2029: Implement all remaining original SCUMM bugs. :-)

@dwatteau
Copy link
Contributor

Thanks for your work on this; this is something I'd like to review and give feedback on, but I may need a week to find time for this.

@JenniBee
Copy link
Contributor

JenniBee commented Jul 1, 2023

This is an amazing PR. I can't tell you how many times I've heard people complain about ScummVM not being "faithful" to the original games (menus, bugs, and all), so it will be great to be able to put it all in the hands of the end user.

I do agree with AndyXP about the need to adapt it for the non-technical types because many if not most of the ScummVM userbase aren't especially technically minded.

Speaking from more of an art background than coding, I can see non-technical people having issues with categorizing these. I'd probably be confused about them as well had I used it without seeing the details of this pull request.

I think it's important to stress that keeping bugs is to have the game as close to the original as possible, otherwise, people wouldn't see the point of having bugs and would write it off as cruft.

So I think it would be better to spell it out so that people would see the utility of the option. Something like: Keep the bugs from the original game, Keep the glitches from the original game, Add cut or alternate content to the game.

These should not be compounded on each other either - ie: Keep bugs and glitches. It would be better to have them as individual options for checkboxes so that each user can pick and choose. Having them in a * and * setting would be way too confusing for the non-technical end-users.

@eriktorbjorn
Copy link
Member Author

It would be better to have them as individual options for checkboxes so that each user can pick and choose.

Just to test my assertion that changing the widgets would be easy, I tried (but did not commit) replacing createEnhancementsWidget() and createEnhancementsLayout() like this:

void ScummOptionsContainerWidget::createEnhancementsWidget(GuiObject *boss, const Common::String &name) {
	new GUI::CheckboxWidget(boss, name + ".BellsCheckbox", _("Bells"));
	new GUI::CheckboxWidget(boss, name + ".WhistlesCheckbox", _("Whistles"));
	new GUI::CheckboxWidget(boss, name + ".GongsCheckbox", _("Gongs"));
}

GUI::ThemeEval &ScummOptionsContainerWidget::addEnhancementsLayout(GUI::ThemeEval &layouts) const {
	return layouts
		.addWidget("BellsCheckbox", "Checkbox")
		.addWidget("WhistlesCheckbox", "Checkbox")
		.addWidget("GongsCheckbox", "Checkbox");
}

To implement saving and loading, one would have to add variables that refer to the individual checkboxes, of course, but this is just an example. My main concern is that adding too many widgets will make the dialog hard to use, particularly at lower resolutions. (Side-by-side checkboxes is possible, but probably not a good idea at low resolutions. Also, they are hard to predict when their labels can be translated.) I don't know if we have the infrastructure to add yet another tab, and that too may get cluttered.

I guess it'd be possible to add a button that pops up a new dialog, perhaps with a text label on the side to describe the current settings?

Oh well, here's what the change above looks like when I run it. Perhaps this example will be helpful if anyone wants to make their own mock-up? I'm by no means an expert on what the theme engine is and isn't capable of:

scummvm-00015
scummvm-00016

@AndywinXp
Copy link
Contributor

AndywinXp commented Jul 1, 2023

It indeed seems simple to change and switch elements with the new generic ContainerWidget, so thanks for that!

Personally I'd vote for the checkboxes, as they offer a great degree of personalization for both standard end users and technical users. Like eriktorbjorn, I would also love to see other people (expecially people versed in art and graphics like Jen) proposing mock-ups to see both what the end user expects and how could we adapt that for low res displays.

To implement saving and loading, one would have to add variables that refer to the individual checkboxes, of course, but this is just an example.

Actually I was thinking of directly saving the "extended" classes in the config file, either via bit flags like you proposed, or via booleans.

Let's say I have the Aesthetic Improvements checkbox enabled, and I want to save it to ini file:

  • That enhancement groups corresponds to the following classes:
    • Visual Corrections: kEnhancementsVisualAdj;
    • Audio Corrections: kEnhancementsAudioAdj;
    • Timing Adjustments: kEnhancementsTimingAdj;
    • Subtitle Color/Format Corrections: kEnhancementsSubtitleFmtAdj;
  • Depending on the convention we choose (booleans or bit flags) we register each of the classes to the ini file.

Now, what would happen at the loading stage:

  • We fetch the values (again, either booleans or flags) from the ini file;
  • We check the values for a match with any of the bigger enhancement groups we have (if there is no match we should probably set a default or put something in place indicating that the user has edited the ini file and the flags at their own choice!);
  • In this case we will match the Aesthetic Improvements group, so we mark it as selected in the GUI;

I see that this would complicate a little bit the saving/loading routine (I think we would actually need to subclass the CheckboxWidget to support all this flags mumbojumbo?), but it would retain compatibility for future hypothetical changes to this enhancements GUI component. As usual as with any of these convoluted proposals of mine: once we settle on a final decision for the requirements of this component, I will help code it, you're certainly not alone in this. 😂

EDIT: Of course, any alternative to this saving/loading routine with ensures future compatibility would be more than welcome!

@eriktorbjorn
Copy link
Member Author

Actually I was thinking of directly saving the "extended" classes in the config file, either via bit flags like you proposed, or via booleans.

I meant something like _bellsCheckbox = new GUI::CheckboxWidget(boss, name + ".BellsCheckbox", _("Bells")); so that the save/load functions can test and set the state of the checkbox. But that wasn't needed for the mock-up.

@eriktorbjorn
Copy link
Member Author

I'll be going on vacation soon which, counterintuitively, will probably leave me with less time for this. I'll try to check in on it from time to time, but I won't be able to act on it.

Of course, if by some miracle the details are nailed down in the next few weeks, I have no problems with anyone else putting the finishing touches to it. Yeah, yeah, wishful thinking. :-)

@AndywinXp
Copy link
Contributor

Heyhey! I'm gonna have quite some time in the mid of August to complete/help complete this. Do we have some other feedback (@dwatteau ?) or any other proposals? It'd be great to have everyone to approve a final proposal of requirements for this PR, so that I can begin helping with the actual coding.

@dwatteau
Copy link
Contributor

Heyhey! I'm gonna have quite some time in the mid of August to complete/help complete this. Do we have some other feedback (@dwatteau ?) or any other proposals? It'd be great to have everyone to approve a final proposal of requirements for this PR, so that I can begin helping with the actual coding.

Unfortunately, I don't think I'm going to have much free time until maybe late September :(

I like your idea of having a good granularity in the code, and I agree with JenniBee's suggestion of making sure the associated UI/UX remains accessible for non-technical users (e.g. add very obvious descriptions like "Fix original script bugs", "Fix unintended graphical issues", "Fix important usability problems", "Fix continuity errors", "Fix obvious spelling errors", "Restore original content hidden by script bugs").

@eriktorbjorn eriktorbjorn force-pushed the scumm-categorized-enhancements branch from f528193 to ef55723 Compare July 29, 2023 08:28
@eriktorbjorn
Copy link
Member Author

Sorry for the noise, I was trying to bring the branch up to date, and completely forgot that Git is incomprehensible. Hopefully it's back to where I began. Hopefully there are no conflicts.

@eriktorbjorn
Copy link
Member Author

While on the subject, I noticed this in the ScummVM NEWS.md file:

SCUMM:

  • Added subtitle skipping (via '.' key) in older games which didn't have
    this feature so far (e.g. Zak, MM, Indy3, Loom).

I guess technically that should also be an enhancement? I haven't checked how this is implemented, though.

@AndywinXp
Copy link
Contributor

While on the subject, I noticed this in the ScummVM NEWS.md file:

SCUMM:

  • Added subtitle skipping (via '.' key) in older games which didn't have
    this feature so far (e.g. Zak, MM, Indy3, Loom).

I guess technically that should also be an enhancement? I haven't checked how this is implemented, though.

...well, you do have a point. 🙂 I might need a second opinion on this one though.

AndywinXp added a commit to AndywinXp/scummvm that referenced this pull request Oct 30, 2023
This also removes the enhancement pop-up list which isn't
needed anymore.

For further information about enhancement groupings:
scummvm#5102 (comment)
@bluegr
Copy link
Member

bluegr commented Nov 3, 2023

Great work, once again!
As mentioned, there is a continuation of this work in another PR by @AndywinXp , which is meant as a replacement, and includes all the changes done in this PR. Closing this PR, in favor of PR #5401.

@bluegr bluegr closed this Nov 3, 2023
sev- pushed a commit that referenced this pull request Nov 8, 2023
This also removes the enhancement pop-up list which isn't
needed anymore.

For further information about enhancement groupings:
#5102 (comment)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
6 participants