1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef ENGINES_ENHANCEMENTS_H
#define ENGINES_ENHANCEMENTS_H
/* Game enhancements */
/* "How should I mark an enhancement?" - A practical guide for the developer:
*
* Hi! If you're here it means that you are probably trying to make up
* your mind about how to correctly mark your brand new game enhancement:
* if that's the case... congratulations, you've come to the right place! :-)
*
* Marking a piece of code as an enhancement is as simple as guarding it with
* a conditional check using the enhancementEnabled(<class>) function.
* For example:
*
* if (enhancementEnabled(<kMyBeautifulEnhancementClass>)) {
* // Piece of code which makes Guybrush hair white
* }
*
* That's it! :-)
*
* You've probably noticed that the function above needs a class in order to work.
* Of course there is no one kind of enhancement: each of them might tackle
* different aspect of the game, from the graphics to the gameplay itself.
* So it all comes to identifying the correct class for your enhancement.
*
* We identify nine different enhancement classes:
*
* --- Gamebreaking Bug Fixes ---
*
* This is a class of enhancements which is ALWAYS active; it encapsulates
* code changes which were not in the original game but which are absolutely
* necessary in order to avoid deadlocks or even crashes! Being able to differentiate
* between original code and these enhancements can be quite useful for future
* developers and their research (e.g. "why is this code different from the disassembly?",
* "why did they change it like that?").
*
* --- Minor Bug Fixes ---
*
* Did the original developers blit a green pixel on a blue tinted background
* and YOU'RE ABSOLUTELY SURE that they didn't do that on purpose? Is one of the
* voice files playing as garbled noise instead of sounding like normal speech?
* Is the game looking like there is something which is clearly wrong with it?
* This is the class you're looking for, then!
*
* --- Text and Localization Fixes ---
*
* If you spot any issues which pertain texts (accents not being rendered properly
* on localizations, placeholder lines forgotten by the developers, obvious typos), and
* which are NOT about the format of the subtitle (color, position) or the content,
* then this is the class you should be using.
* Do not use this class when changing an already grammatically correct line to another
* line for the purpose of matching the text to the speech line!
* Use "Subtitle Format/Content Changes" instead.
*
* --- Visual Changes ---
*
* Any graphical change which is not classifiable as a "fix" but is, as a matter of fact,
* a deliberate change which strays away from the original intentions, should be marked
* with this class. Some examples of this are enhancements which modify palettes and add
* or edit graphical elements in order to better match a particular "reference" version.
*
* --- Audio Changes ---
*
* Like above, but for anything sound related.
*
* --- Timing Adjustments ---
*
* Are you making a scene slower or faster for any reason? Are you changing the framerate
* of an in-game situation? Choose this class!
*
* --- Subtitles Format/Content Changes ---
*
* Any changes to the subtitles format should be classified under this class.
* This also includes changes to the subtitles content when not under the "fix" umbrella,
* for example when you are changing an already grammatically and graphically correct line
* to match it with the corresponding speech file.
*
* --- Restored Cut Content ---
*
* Have you found any line of dialog, a graphical element or even a piece of music which
* is in the game data but is not being used? Go nuts with this enhancement class then! :-)
*
* --- UI/UX Enhancements ---
*
* These old games are beautiful. But sometimes they can be so clunky... :-)
* If you make any changes in order to yield a slightly-less-clunky user experience
* you should classify them under this class. Here's a couple of real use cases:
* - SAMNMAX: the CD version of the game begins with what seems to be a fake loading
* screen for the sounds. We have an enhancement which just skips that :-)
* - Early games: some early titles use a save menu screen which is piloted by SCUMM scripts,
* and therefore run at an in-game framerate. This causes lag and lost keypresses
* from your keyboard when attempting to write the names of your savegames.
* We remove the framerate cap so that writing is not painful anymore... :-P
*
*/
enum {
kEnhGameBreakingBugFixes = 1 << 0, // Gamebreaking Bug Fixes
kEnhMinorBugFixes = 1 << 1, // Minor Bug Fixes
kEnhTextLocFixes = 1 << 2, // Text and Localization Fixes
kEnhVisualChanges = 1 << 3, // Visual Changes
kEnhAudioChanges = 1 << 4, // Audio Changes
kEnhTimingChanges = 1 << 5, // Timing Adjustments
kEnhSubFmtCntChanges = 1 << 6, // Subtitles Format/Content Changes
kEnhRestoredContent = 1 << 7, // Restored Cut Content
kEnhUIUX = 1 << 8, // UI/UX Enhancements
};
/* "How are the enhancements grouped?" - A practical guide to follow if you're lost:
*
* GROUP 1: Fix original bugs
*
* This category 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.
*
* GROUP 2: Audio-visual improvements
*
* This category 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.
*
* GROUP 3: Restored content
*
* This category reintroduces content cut or unused which was not in the original. This
* can include content which was somehow masked by mistake by the scripts.
*
* GROUP 4: Modern UI/UX adjustments
*
* This category 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.
*
*/
enum {
kEnhGrp1 = (kEnhMinorBugFixes | kEnhTextLocFixes),
kEnhGrp2 = (kEnhVisualChanges | kEnhAudioChanges | kEnhTimingChanges | kEnhSubFmtCntChanges),
kEnhGrp3 = (kEnhRestoredContent),
kEnhGrp4 = (kEnhUIUX)
};
#endif
|