aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/script.cpp
AgeCommit message (Collapse)Author
2017-07-15SCI: Stop double-initialization of SCI0/1 objectsColin Snover
These objects should have been initialized only during the first pass. Double-initialization does not cause any visible problem problem during normal operation (mostly it just causes memory waste by making Object::_baseVars/_baseMethod double up their data), but could have silently allowed games to receive bogus data for an out-of-bounds property or method index, instead of raising an error.
2017-06-10SCI: Tidy Script errors & ensure script number exists in all of themColin Snover
2017-05-20SCI: Stop leaking locals segments during script reuseColin Snover
When a game deletes a script and then loads the same script again before it has been fully deallocated, SegManager::instantiateScript tries to reuse the same script & locals segments, but it was failing to reuse the old locals segment because Script::freeScript would unconditionally clear the old locals SegmentId, which meant the old locals segment would just leak. This patch does not fix old save games which may contain orphaned locals segments, but should prevent the problem from occurring going forward. (It is possible to clean up these old save games, but this is not a big leak so it doesn't seem worth the extra effort to do so.)
2017-05-20SCI: Find and store the original static names of objectsColin Snover
See code comment in Object::init for more details. Fixes Trac#9780.
2017-05-20SCI: Refactor relocation codeColin Snover
This groundwork enables an object to look up its static name separately from the normal process that is used to populate Object::_variables when an object is first constructed. (The static name property needs to be able to be retrieved from objects inside of earlier save games whose name properties may have already been modified at runtime, so the code cannot simply pluck the value out of Object::_variables when they are first initialised and then persisted into the save game, as nice and easy as that would have been.) This commit also helps to clarify the situation with relocation tables in SCI1 games that start with a zero entry. Refs Trac#9780.
2017-05-20SCI: Remove duplicate relocateBlock functionColin Snover
2017-04-30SCI: Hold script data as mutable internallyColin Snover
Script buffer data is modified after a script is loaded by savegame operations, and, in SCI16, by string operations. Casting away const to allow these mutations to happen is not a very good design, so this patch just changes the privately held reference to data to be mutable. (Public accessors still return immutable data.)
2017-04-24SCI: Add var count sanity checking to object initializationColin Snover
2017-04-23SCI: Improve error messages in Script::validateExportFuncColin Snover
2017-04-23SCI32: Exclude SCI3 code from compilation when SCI32 is disabledColin Snover
2017-04-23SCI: Fix SCI3 exportsColin Snover
Export functions may be relocated above 64k in SCI3, but exports that do not have an entry in the relocation table must be handled the same as SCI1.1-2.1.
2017-04-23SCI: Fix support for 32-bit SCI3 script offsetsColin Snover
2017-04-23SCI: Fix whitespace errorsColin Snover
2017-04-23SCI32: Fix bad relocations of SCI3 objectsColin Snover
2017-04-23SCI32: Fix locals offset in SCI3Colin Snover
Locals offset needs to be set even when the script has no exports.
2017-04-23SCI32: Remove TODO from relocateOffsetSci3Colin Snover
The field at +8 is for the MemID associated with a relocation.
2017-04-23SCI: Remove unused commented codeColin Snover
2017-04-18SCI: Fix handling of buggy SCI0 export tablesColin Snover
The previous fix for this bug was incorrect; it only happened to work because of another bug: the number of exports was being read incorrectly (reading the byte size of the export block, not the number of exports), so the validation check for the export number always passed. Then, the "small" offsets that were seen were actually either invalid reads into the header of the next block in the script (KQ4), or reads into the bad first export table which contained an unfilled offset (Camelot). Once the incorrect number of exports was fixed, the previous "fix" broke in KQ4 because the export number validation started to work correctly and the first export table does not have enough entries (needs 2, has 1). This patch fixes the bug by using the last export table in SCI0 scripts instead of the first export table. (This does not affect most scripts, since only the buggy scripts have more than one export table.) Fixes Trac#9731.
2017-03-30SCI: Fix remaining format string warningWillem Jan Palenstijn
2017-03-30SCI: Update formatting strings to match updated Span APIColin Snover
2017-03-27SCI: Simplify calculation of locals size in SCI0/1Colin Snover
2017-03-27SCI: Implement bounds-checked reads of game resourcesColin Snover
2016-11-20SCI: Improve disassembly outputColin Snover
1. pushi opcode now displays decimal value and selector value (if one exists) in-line 2. lofsa, lofss, and super opcodes now display resolved object/class names 3. Opcode arguments are visually aligned
2016-10-20SCI32: Fix zero-offset exportsColin Snover
Exports with a zero offset are supposed to point to the start of the code block in the script hunk, but they were being ignored. This may also apply to SCI1.1 games, but until that can be verified, this fixes the zero-offset in only SCI32 games for now.
2016-10-14SCI: Make -propDict- unique for each classWillem Jan Palenstijn
Previously, this was using the offset of the property dict inside the script. However, this isn't unique. For example, SQ6's DPath and PolyPath classes both have their property dict at offset 8 of their respective scripts. This would break Obj::isMemberOf. Closes #846.
2015-12-29SCI32: split up SCI2.1 into EARLY/MIDDLE/LATEMartin Kiewitz
- Detection works via signatures (couldn't find a better way) - new kString subcalls were introduced SCI2.1 LATE - kString now has signatures and is split via subcall table - kString fix, so that KQ7 doesn't crash, when starting a chapter - Sci2StringFunctionType removed, because no longer needed
2015-07-13SCI: Fix object init in SCI3 scripts which are larger than 64kbFilippos Karapetis
2015-05-17SCI: identifyOffsets() counter variablesMartin Kiewitz
2015-05-15SCI: adjust SCI3 offset identify thx lskovlunMartin Kiewitz
2015-05-14SCI: add SCI3 support for debug cmd scroMartin Kiewitz
2015-05-14SCI: add said-details to script_said debug cmdMartin Kiewitz
2015-05-14SCI: debug commands scro, scrs and script_saidMartin Kiewitz
implement string collecting for SCI3 implement object offset collecting for SCI0-SCI2 implement said-str offset collecting for SCI0-SCI1 add new debug command scro / script_objects add new debug command script_said string without terminating NUL now a warning the latter happens in qfg2 for amiga room 84
2015-05-04SCI: fix bug in new string identifying codeMartin Kiewitz
fixes string identifying in mac SCI1.1 games
2015-05-04SCI: Scripts: identify strings + debug commandMartin Kiewitz
debug command is called "script_strings" / "scrs"
2015-04-16SCI: QFG3 fix priority of chief in hut bug #5173Martin Kiewitz
this is a script issue and also happens in Sierra's SCI. Gets solved by script patch.
2014-02-18SCI: Make GPL headers consistent in themselves.Johannes Schickel
2013-12-04SCI: script patcher is now a separate classMartin Kiewitz
2013-11-03SCI: improved script patcherMartin Kiewitz
Gabriel Knight + King's Quest 6 patches now also work for Mac versions of those games added support for selectors instead of using hardcoded values
2012-10-07SCI: Flip assertWillem Jan Palenstijn
This way the assert is checking that the allocated buffer is large enough for the memcpy that follows it.
2012-06-28SCI: Remove an incorrect error check in validateExportFunc()Filippos Karapetis
2012-06-26SCI: Rename a parameter in validateExportFunc()Filippos Karapetis
This ensures that it won't be confused with a function with the same name
2012-06-23SCI: Change the program counter (PC) to be a 32-bit variableFilippos Karapetis
This is needed for future support of large SCI3 scripts. The program counter is isolated and does not interfere with other parts of the VM, plus it does not get stored in saved games, so it's pretty straightforward to convert
2012-06-23SCI: Clean up validateExportFunc() and related functionsFilippos Karapetis
Also renamed some SCI3 related code to indicate when it's SCI3 specific
2012-06-18SCI: Add setter/getter methods to reg_t'sFilippos Karapetis
No functionality change has been made with this commit. This avoids setting and getting the reg_t members directly, and is the basis of any future work on large SCI3 scripts (larger than 64KB)
2012-06-15SCI: Change getClassAddress() to only require the caller segmentFilippos Karapetis
The caller offset is never actually used inside the function
2012-06-15SCI: Replace RAW_IS_OBJECT with a methodFilippos Karapetis
2012-06-15SCI: Fix warningsFilippos Karapetis
Thanks to DrMcCoy for reporting them
2012-06-15Revert "SCI: Change Script::getObject() to accept a reg_t"Filippos Karapetis
This reverts commit 577d7e41c9ca2c498dc85e41c373fbdca8d2ed41.
2012-06-15SCI: Further cleanup of the script codeFilippos Karapetis
Merge the init() and load() Script methods and reset the script when necessary
2012-06-15SCI: _propertyOffsetsSci3 and classpos should be 32-bit integersFilippos Karapetis
These are needed for future handling of large SCI3 script files