For each engine:
- Make a new folder detection
- Move detection-related files inside the folder
- Add a new module "enginename/detection"
- Add DETECT_OBJS here
- Adjust the normal engine module to remove detect_objs
- Adjust every file for the new changes.
- Move AGOSGameDescription -> detection.h
- Move obsoleteGameIDsTable -> obsolete.h
- Both the above points are because the detection needs them, as well as the engine.
- By moving to headers in this pattern, we avoid many unnecessary inclusions and keep everything clean.
- Include it in intern.h, so everything functions normally.
- However, now we can include detection-related things from intern.h in other files, without including unnecessary things.
Up until last commit, everything was working fine but the amount of files changed was too large. This commit tries to reduce the changes.
- Add a fake constructor to Keymap, text-to-speech, setDescription (save-state)
- Redirecting functions for PopUpWidget::appendEntry, ButtonWidget::setLabel, GUIErrorMessage
- Use the above functions and constructors to reduce changes in Engines
- Fix warnings being in unicode. Only output english text in - Warnings, Errors, etc.
- Mark some strings as "translation" strings. (Not yet added to POTFILES)
- Remove some CP related things from po/modules.mk
- Previously used some Common::convertToU32 where it was not necessary, replace this with u32constructor
- Use the fake constructor for message dialog less often
- solve errors regarding comparision between string and u32string in midi
- solve errors in testbed/speech related to ttsMan->say
- fix unsigned comparision warning in tab.cpp
- fix issue with static strings and translations in sdl-graphics
- Where necessary as in, where translated messages are used.
- GUIErrorMessage now takes in U32String
- error messages across some engines use U32Strings. they are changed because they show a message dialog.
After the initial changes just to scummvm/gui for u32, this commit includes the whole project
- Widget creations now always have u32 descriptions, labels, or tooltips
- Message dialogs make use of default arguments instead of providing the same argument explicitly
- encode String::format properly before passing on as argument where necessary
- Modify hugo utils (yesNoBox and notify box) to use u32
- Also provide fake constructors for the above which redirect to the u32 constructor
- Convert all keymap descriptions to u32 across all engines
- showConfirmationDialog in mohawk now uses u32
- showScummVMDialog also uses u32
- Scumm engine has dialogs now which use u32
- General fixes and wrapping convertToU32String for setLabels and related functions
- Add a fake constructor to MesssageDialog which redirects to the u32 constructor
Make sure that alignTableMem() always aligns to an 8 byte boundary
on 64-bit architectures where this is the usual size of pointers.
Also make sure that loadTextIntoMem() always calls alignTableMem().
This has been tested on OpenBSD/loongson (a mips64el architecture which requires
strict alignment), with clang++ 8.0.1 and simon2-cd-fr.
Fixes bug #6220.
Recent GCC versions complain if you memset() a class or struct that
contain non-POD data types. Get around that by either initializing
the object when created, or by adding a reset() method.
These were broken by the last PR merge which included a cpp file in a
way which will not build reliably. This splits the Accolade MIDI driver
structure definitions into headers allowing these to be included
instead.
Also, minor cleanup by removal of unused header includes.
Since 'filename' is 'baseName', plus a file extension, make the
'filename' buffer larger than the 'baseName' buffer. Even though
this almost certainly means that the 'filename' buffer is now
quite a bit larger than it needs to be, I don't think there's any
reason to quibble about it.
This flag is removed for a few reasons:
* Engines universally set this flag to true for widths > 320,
which made it redundant everywhere;
* This flag functioned primarily as a "force 1x scaler" flag,
since its behaviour was almost completely undocumented and users
would need to figure out that they'd need an explicit non-default
scaler set to get a scaler to operate at widths > 320;
* (Most importantly) engines should not be in the business of
deciding how the backend may choose to render its virtual screen.
The choice of rendering behaviour belongs to the user, and the
backend, in that order.
A nearby future commit restores the default1x scaler behaviour in
the SDL backend code for the moment, but in the future it is my
hope that there will be a better configuration UI to allow users
to specify how they want scaling to work for high resolutions.
In commit f0581bab4a the index value
for the array was changed from a constant to a variable, but uint8
is too small to contain 293, so this value was ending up as 37.
Added it into hasFeature() of all engines which returned `true` in
simpleSaveNames() before.
As mentioned in #788, SCI is not always using simple names, so it
doesn't have such feature now.
Engines with "simple" savenames would support "Run in background" in
save/load dialog and gradual save slots unlocking. Other engines
save/load feature would be locked until save sync is over.
GCC 6's -Wmisleading-indentation warns about the debugC() statement
being wrongly indented, as if belonging into the else's branch, which
it clearly doesn't.
Engines should only have to call one set of functions and not decide between the two. In fact, the 'emulation' API was documented to just call the 'real CD' API.
Some backends like GCW0 do no support graphics >320x240 due to
the hardware limitation (downscaling is possible but it will ruin
the pixel hunting which is often part of the gameplay).
Instead of manually updating the list of engines, we now introduce
a new dependency.
I marked all relevant engines, but some, like tinsel, require more
work with putting their relevant high-res games under USE_HIGHRES
define.
implements support for extracting MIDPAK.AD from SETUP.SHR
this way the user isn't required to install the game and can just
use the files copied from CD-ROM.
Files inside SETUP.SHR were compressed using PKWARE data compression
library.
PKWARE decompression code based on information released by
Ben Rudiak-Gould in comp.compression on 13.8.2001
Miles Audio support is still disabled atm
and has to be enabled manually
set _nativeMT32, so that the MT32 XMIDI track set is getting used
and not the general MIDI one for MT32 Miles Audio playback.
This should solve the MT32 music issues, although this needs
to get verified in detail.
- renamed _MT32 to _nativeMT32
this name doesn't really make sense, because MUNT isn't a native
MT32, but the name is common to the other engines
- implement MT32 -> General MIDI mapping in case no MT32 is
available
- implement dialog screen, so that user is told about General MIDI
mapping and that it may sound awful
- Kirben told me that Elvira 2 is shipped with MUSIC.DRV and
INSTR.DAT file. Using MUSIC.DRV file makes the music work properly
I couldn't check, b/c I own none of these games.
- also commented out implemented bug of INSTR.DAT/MUSIC.DRV
This bug only affected the adlib drivers, so I guess we should
rather fix it instead of implementing the same buggy behavior
- both known variants are supported (INSTR.DAT + MUSIC.DRV)
- INSTR.DAT/MUSIC.DRV holds channel mapping, instrument mapping, etc.
- fixed bug inside S1D MidiParser, that ruined some instrument changes
0xFC header was seen as 2 byte header, but it's 4 bytes in Elvira 2
and 5 bytes in Waxworks / Simon 1 demo
- dynamic channel allocation for the MUSIC.DRV adlib driver is not
implemented atm, simply because at least the demos of Waxworks and
Simon 1 do not use this feature
- sound effects of Waxworks are not implemented atm
- note: the game "Altered Destiny" uses Accolade INSTR.DAT variant too
This probably affects the full version as well, but I haven't
verified that. Either way, the old code was obviously wrong while
the new makes it look right to me.
This is needed because the MIDI resources have their own loop flag
that overrides the global one. This makes a difference for games
that use MIDI both for music and sound effects, such as (limited
to?) the floppy version of Simon the Sorcerer 1.
This (hopefully) fixes bug #6549: "#6549 AGOS: Simon2 Amiga Datafiles crashes with assertion in Intro".
I don't have any copy of StS 2 Mac/Amiga thus I cannot test this.
This bug was caused by a regression in c82a75df69.
Kirben pointed out that there were more loyalty rating events tied
to this opcode than to off_loadVideo(). I didn't notice this
myself since the video loading was so much easier to spot in the
script dump. It's a pity there doesn't seem to be any one opcode
that covers all of the cases.
This attempts to restore the missing loyalty rating setting to the
4CD version of The Feeble Files. So far only for the English
version, since that's all I have, but it would not surprised me if
the other versions are similar.
This in fact slightly changes the priority order of added archives. Formerly,
all archives in SearchMan were preferred to the customly added ones in
ArchiveMan. All standard paths (i.e. path and extrapath) will be still be
searched before the custom ones (which are all priority 0 right now) but system
specific paths will be searched after (due to their priority being -1). Since
system specific paths shouldn't contain any game data files this should
hopefully be harmless.
This wasn't tested for games with CAB archives.
Each engine now only has to provide a single configure.engine file
adding the engine into the configure script, which then produces the
required other files automatically.
This is the third and final commit enabling fully pluggable engines.
Now providing an engine folder contains a configure.engine, engine.mk
and engine-plugin.h file, it will be picked up automatically by the
configure script.