[Scummvm-tracker] [ScummVM :: Bugs] #16883: BAGEL: HODJNPODJ: Th Gesng Gme checkboxes appear checked but save as unchecked
ScummVM :: Bugs
trac at scummvm.org
Sat Jun 27 03:38:16 UTC 2026
#16883: BAGEL: HODJNPODJ: Th Gesng Gme checkboxes appear checked but save as
unchecked
------------------------+---------------------------
Reporter: BQ31X | Owner: dreammaster
Type: defect | Status: new
Priority: normal | Component: Engine: BAGEL
Version: | Keywords:
Game: Hodj'n'Podj |
------------------------+---------------------------
### ScummVM version: 2026.3.0 on
macOS 26.4.1
Apple Silicon (M4)
In the Th Gesng Gme minigame options, “Show Category” and “Fixed Ordering”
can be visibly checked, but pressing OK saves both options as disabled.
On a fresh configuration, both features initially work because their
default values are enabled. After opening the options dialog and pressing
OK, they stop working and cannot be re-enabled through the dialog.
### Steps to reproduce
1. Start Hodj 'n' Podj.
2. Open the standalone Th Gesng Gme minigame.
3. Open its Options dialog.
4. Check “Show Category” and “Fixed Ordering.”
5. Press OK.
6. Reopen the Options dialog or start another round.
### Actual behavior
Both options behave as disabled and appear unchecked when the dialog is
reopened.
The target settings file contains:
[ThGesngGme]
ShowCategoryNames=No
RandomLetters=Yes
This also disables the spoken category announcement.
Expected behavior
The options should remain checked and be saved as:
ShowCategoryNames=Yes
RandomLetters=No
Possible root cause (hypothesis)
The issue may stem from a mismatch between the custom Hodj ‘n’ Podj
checkbox state and CButton::GetCheck(). If correct, this would explain why
the controls render as checked but are subsequently written to the
configuration file as unchecked. The relevant source locations are listed
below in case they help narrow the investigation.
CCheckButton::OnSetCheck() stores the visible state in m_bCheckState:
https://github.com/scummvm/scummvm/blob/v2026.3.0/engines/bagel/hodjnpodj/hnplibs/button.cpp#L1305-L1318
CCheckButton::DrawItem() also draws the X based on m_bCheckState,
explaining why the controls look checked:
https://github.com/scummvm/scummvm/blob/v2026.3.0/engines/bagel/hodjnpodj/hnplibs/button.cpp#L1236-L1245
However, the options dialog calls the inherited GetCheck():
https://github.com/scummvm/scummvm/blob/v2026.3.0/engines/bagel/hodjnpodj/pdq/usercfg.cpp#L87-L99
The inherited implementation reads _itemState, not m_bCheckState:
https://github.com/scummvm/scummvm/blob/v2026.3.0/graphics/mfc/button.cpp#L44-L50
Consequently, ClearDialogImage() writes the options as unchecked:
https://github.com/scummvm/scummvm/blob/v2026.3.0/engines/bagel/hodjnpodj/pdq/usercfg.cpp#L426-L442
A possible fix would be to have CCheckButton::GetCheck() return
m_bCheckState, or otherwise keep m_bCheckState and _itemState
synchronized. CRadioButton may have the same state split and could be
worth checking.
Workaround (tested)
With ScummVM closed, manually setting the target’s settings file to the
following restores the features:
ShowCategoryNames=Yes
RandomLetters=No
Opening the minigame’s Options dialog and pressing OK overwrites the
values again.
The relevant code paths appear unchanged on the current master branch as
of 2026-06-26.
--
Ticket URL: <https://bugs.scummvm.org/ticket/16883>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM
More information about the Scummvm-tracker
mailing list