Commit Graph
95 Commits
Author SHA1 Message Date
Colin Snover 741ac22e17 SCI: Fix pointer invalidation caused by array storage moves
When objects are added to a SegmentObjTable, it may cause the
internal storage for the table to expand and move to a new
region of memory. When this happens, all pointers to objects held
by a SegmentObjTable of the same type would be invalidated, due
to an implementation detail that should not be exposed. To prevent
this, objects are now allocated separately on the heap, so even if
the table's storage moves due to insertions, the objects owned by
the table will not, so references remain valid for the lifetime of
the object.
2016-08-13 15:41:31 -05:00
Colin Snover efaf7f20d6 SCI32: Fix crash when multiple nodes are deleted during kListEachElementDo
This happens in e.g. Phant1, when walking from dining, to
reception, to up the stairs.
2016-08-12 10:26:06 -05:00
Eugene Sandulenko 6f87a2b2e8 SCI: Fix warnings 2016-08-01 23:56:32 +03:00
Colin Snover d5d42d5066 SCI32: Implement bitmap save routine 2016-08-01 10:37:14 -05:00
Colin Snover 6d1f8e8c87 SCI32: Fix invalid memory access after BitmapTable is extended
When new bitmaps are added and the underlying Common::Array needs
to move to expand, this invalidates all pointers to bitmaps, which
makes it basically impossible to use the bitmap segment since you
never know if a reference is going to be invalidated due to an
array move.

To solve this, BitmapTable is changed to hold pointers to
SciBitmaps that are allocated separately on the heap instead, so
when those bitmaps are looked up, the resulting pointers are valid
for the lifetime of the bitmap, instead of the lifetime of the
Common::Array used internally by BitmapTable.
2016-08-01 10:37:14 -05:00
Colin Snover 2071196f42 SCI32: Add bitmap segment and remove GC option from hunk segment 2016-08-01 10:37:14 -05:00
Colin Snover 4a637d65c3 SCI32: Enable optional explicit memory management of hunk entries
Bitmaps in ScrollWindow and Robot code are managed by the kernel
and not by game scripts, although they must be able to be
referenced through a reg_t. To prevent incorrect GC of bitmaps
that are in use but not referenced by any game script, explicit
memory management of hunk entries can be enabled.
2016-08-01 10:37:14 -05:00
Johannes Schickel f23dd0f486 SCI: Use aggregation to store objects in SegmentObjTable.
This allows to store pointers and fundamental types in a SegmentObjTable.
2016-03-25 01:15:26 +01:00
Johannes Schickel 1c6112e121 SCI: Introduce accessors for SegmentObjTable entries.
This makes code not use _table directly whenever possible. An exception is the
save game code which is not easy to adapt due to design deficiencies.
2016-03-25 01:15:26 +01:00
Filippos Karapetis cdbd7c8add SCI: Use uint32 instead of unsigned int 2016-03-01 01:12:58 +02:00
Johannes Schickel 8fc7d60feb SCI: Make GPL headers consistent in themselves. 2014-02-18 02:39:37 +01:00
Filippos Karapetis 2b50824133 SCI: Add setter/getter methods to reg_t's
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-18 05:24:06 +03:00
Tarek Soliman edc5249772 JANITORIAL: Fix template definition whitespace 2012-02-10 21:17:27 -06:00
Matthew Hoops 28301e2bd1 ALL: analyse -> analyze 2011-05-25 10:50:47 -04:00
strangerke 69b1485a22 GIT: Clean up: Suppress SVN tags, now useless 2011-05-12 01:16:22 +02:00
D G Turner bcb9179a8b SCI: Close Memory Leak from kAnimate Calls.
This was due to a missing destructor in the HunkTable.
Thanks to wjp for this patch.
2011-03-24 20:59:20 +00:00
md5 12e7d3078b SCI: Cleanup 2011-03-08 20:13:08 +02:00
md5 0642b30933 SCI: Cleanup 2011-03-08 14:46:03 +02:00
md5 0d555c497d SCI: Moved hunk pointer handling to the GC, and removed some related workarounds
SCI scripts can contain stale pointers, which are used later on. We now delete
the contents of hunk entries without invalidating the relevant pointers and let
the GC clear the references. Many thanks to waltervn and wjp for all their work
and help on this.
2011-02-28 15:56:03 +02:00
Filippos Karapetis de2ef2edc0 SCI: Removed the system strings code and replaced it with a much more simplified version, thus greatly simplifying handling of system strings
svn-id: r54805
2010-12-07 00:47:05 +00:00
Filippos Karapetis 3b07056a47 SCI: Moved the Object class in a separate file
svn-id: r54361
2010-11-19 08:18:24 +00:00
Filippos Karapetis 4609f11137 SCI: Added species selector functionality for SCI3
svn-id: r54351
2010-11-18 22:27:56 +00:00
Lars Skovlund 487feb3843 Get rid of a const_cast.
svn-id: r54333
2010-11-18 17:38:56 +00:00
Lars Skovlund 0001a6b74d SCI3: implement setInfoSelector() for SCI3, fixes infinite recursion
svn-id: r54328
2010-11-18 17:13:01 +00:00
Filippos Karapetis b707d6e7dc SCI: More work on SCI3, based on a patch by lskovlun
- Added SCI3 equivalents for access to object selectors
- Added SCI3 implementation of object relocation
- Added SCI3 implementation of Script::initialiseClasses()

svn-id: r54283
2010-11-17 11:15:52 +00:00
Filippos Karapetis 5de2668939 SCI: Some changes regarding the string heap in saved games
- Maintain the state of the string heap space in saved games
- Merged SegManager::reconstructScripts() inside SegManager::saveLoadWithSerializer()
- Disabled a now unnecessary script patch for the cipher puzzle in Castle of Dr. Brain, and performed some cleanup for another disabled patch
- Removed direct access to the _baseObj variable of objects

svn-id: r54133
2010-11-08 00:18:34 +00:00
Filippos Karapetis 3d85d6804b SCI: Added a new debug command, "find_callk"
This command can be used to find the object methods (including their
corresponding objects and owner scripts) that call a specific kernel
call. This shall aid us track all the spots where a particular kernel
function is called from, therefore it'll be a bit easier to find
examples where unimplemented kernel functions are called

svn-id: r53646
2010-10-20 17:31:29 +00:00
Martin Kiewitz 49c8d1a549 SCI: kClone cleanup
and fixing possible crash & typo

svn-id: r52565
2010-09-05 15:34:25 +00:00
Martin Kiewitz d817bec4fd SCI: merging -info- stuff in Clone/DisposeClone
svn-id: r52562
2010-09-05 15:09:50 +00:00
Filippos Karapetis fe2924d50d SCI: initialize members of the Object class when it's constructed
svn-id: r52544
2010-09-05 12:33:27 +00:00
Filippos Karapetis 32807512d9 SCI: Cleanup
svn-id: r51687
2010-08-03 12:41:36 +00:00
Filippos Karapetis 9add81aaf2 SCI: Dropped support for the very old saved game versions 9 - 11. Rationale: a lot has changed since then, we're still not stable, and this helps clean up the code, thus we're still in a position to drop support for old saved games
svn-id: r50738
2010-07-07 20:12:41 +00:00
Max Horn 4f606cc10d SCI: Clarify docs of GC related SegmentObj methods
svn-id: r50440
2010-06-28 12:28:29 +00:00
Max Horn 6c0205b104 SCI: Fix DEBUG_GC mode and permanently enable it
svn-id: r50430
2010-06-28 11:23:00 +00:00
Max Horn 31b2902714 SCI: Revise GC interface: use Common::Array<reg_t> instead of callbacks
This means a little bit more overhead but makes the code much more readable
and understandable.

svn-id: r50429
2010-06-28 11:22:41 +00:00
Filippos Karapetis bb992b0b93 SCI: Moved all the script-related code inside script.cpp/.h, and all script opcode-related code inside vm.cpp/.h
svn-id: r50396
2010-06-27 20:38:43 +00:00
Filippos Karapetis 7a14846bdd Removed the misleading getHeap() function (only valid for SCI0-SCI1), plus removed some unused defines
svn-id: r50358
2010-06-26 23:48:27 +00:00
Filippos Karapetis e2026f4a26 Zero out the memory pointer of a hunk when freeing it
svn-id: r50351
2010-06-26 22:48:47 +00:00
Filippos Karapetis c28fa2cf19 Reverted the code which handles objects without a base object when loading, for now. This possibly indicates an issue related to the garbage collector
svn-id: r50142
2010-06-22 15:03:19 +00:00
Filippos Karapetis db70d66e4a Strict mode: Changed several warnings due to logic bugs into errors. If an error pops up from these ones, please add the game where it occurred and the steps to reproduce the error before turning it into a warning
svn-id: r49973
2010-06-17 23:50:28 +00:00
Filippos Karapetis e64eb71ce8 Properly reconstruct the running stack when restoring (a regression from commits #49376 and #49525), some formatting
svn-id: r49689
2010-06-15 09:11:26 +00:00
Lars Skovlund 9a1db3f770 Add support for SCI32 segment types to seg_table and vr debug commands
svn-id: r49686
2010-06-15 08:21:39 +00:00
Filippos Karapetis 1fde7f1abc Removed the code used for tracking script code block relocations in SCI0-SCI1 games, as we don't actually relocate these blocks, and it was used solely for verification of the exports table. The issue that this warning was created for should no longer occur
svn-id: r49669
2010-06-14 20:45:00 +00:00
Filippos Karapetis 4f3bb60cd5 Really silence the warning with _bufSize
svn-id: r49652
2010-06-14 13:53:15 +00:00
Filippos Karapetis cd77cb96fc Some cleanup of the script locals code
svn-id: r49649
2010-06-14 12:44:57 +00:00
Filippos Karapetis f1af6bad6d Fixed compilation
svn-id: r49407
2010-06-03 10:26:51 +00:00
Filippos Karapetis 86b452d36c Moved several object-related defines inside vm.h into segment.h, where the Object class resides. Also, removed several unused defines
svn-id: r49406
2010-06-03 10:16:21 +00:00
Filippos Karapetis 3f4302214c The save/load object init code is now unified with the regular object init code
svn-id: r49346
2010-05-31 11:25:59 +00:00
Filippos Karapetis 50cd1d1da4 Limited access to the script export table and synonyms block
svn-id: r49338
2010-05-30 23:31:33 +00:00
Filippos Karapetis a0ee93ece5 SCI: Script exports and synonyms are now initialized when a script is loaded. Removed a sanity check inside script_instantiate_sci0 for a bug which no longer exists
svn-id: r49336
2010-05-30 21:49:07 +00:00